diff --git a/.gitignore b/.gitignore index 8ad9002bb..c72ecbc81 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,6 @@ foundry-0.8.3.js /packs/*.json /packs/.gitignore /packs/README.md -app/ \ No newline at end of file +app/ +client +common \ No newline at end of file diff --git a/jsconfig.json b/jsconfig.json index 5dfe3a5cc..372752d9b 100644 --- a/jsconfig.json +++ b/jsconfig.json @@ -1,8 +1,8 @@ { "include": [ "src/**/*.js", - "app/**/*.js", - "app/**/*.mjs", - "static/js/tagify" + "static/js/tagify", + "client/**/*", + "common/**/*", ] } \ No newline at end of file diff --git a/packs/abilities/000545.ldb b/packs/abilities/000545.ldb new file mode 100644 index 000000000..12de92c0a Binary files /dev/null and b/packs/abilities/000545.ldb differ diff --git a/packs/abilities/000563.ldb b/packs/abilities/000563.ldb deleted file mode 100644 index fb8051889..000000000 Binary files a/packs/abilities/000563.ldb and /dev/null differ diff --git a/packs/abilities/000561.log b/packs/abilities/000585.log similarity index 100% rename from packs/abilities/000561.log rename to packs/abilities/000585.log diff --git a/packs/abilities/CURRENT b/packs/abilities/CURRENT index 209352780..e29f5f562 100644 --- a/packs/abilities/CURRENT +++ b/packs/abilities/CURRENT @@ -1 +1 @@ -MANIFEST-000559 +MANIFEST-000583 diff --git a/packs/abilities/LOG b/packs/abilities/LOG index 4eeae6542..cbea5f3b8 100644 --- a/packs/abilities/LOG +++ b/packs/abilities/LOG @@ -1,14 +1,7 @@ -2023/10/19-17:29:07.487 5b0 Recovering log #557 -2023/10/19-17:29:07.491 5b0 Delete type=0 #557 -2023/10/19-17:29:07.491 5b0 Delete type=3 #555 -2023/10/19-17:34:30.319 9300 Level-0 table #562: started -2023/10/19-17:34:30.322 9300 Level-0 table #562: 3127 bytes OK -2023/10/19-17:34:30.323 9300 Delete type=0 #560 -2023/10/19-17:34:30.325 9300 Manual compaction at level-0 from '!folders!rAhydZslb0d4Cvio' @ 72057594037927935 : 1 .. '!items!ztjoTjB46kPDTEfV' @ 0 : 0; will stop at '!items!mfD1Ga7xMCBqOk5H' @ 3860 : 1 -2023/10/19-17:34:30.325 9300 Compacting 1@0 + 1@1 files -2023/10/19-17:34:30.329 9300 Generated table #563@0: 581 keys, 187448 bytes -2023/10/19-17:34:30.329 9300 Compacted 1@0 + 1@1 files => 187448 bytes -2023/10/19-17:34:30.331 9300 compacted to: files[ 0 1 0 0 0 0 0 ] -2023/10/19-17:34:30.331 9300 Delete type=2 #506 -2023/10/19-17:34:30.331 9300 Delete type=2 #562 -2023/10/19-17:34:30.333 9300 Manual compaction at level-0 from '!items!mfD1Ga7xMCBqOk5H' @ 3860 : 1 .. '!items!ztjoTjB46kPDTEfV' @ 0 : 0; will stop at (end) +2023/11/05-16:47:28.020 707c Recovering log #581 +2023/11/05-16:47:28.024 707c Delete type=0 #581 +2023/11/05-16:47:28.024 707c Delete type=3 #579 +2023/11/05-16:52:28.675 1208 Level-0 table #586: started +2023/11/05-16:52:28.675 1208 Level-0 table #586: 0 bytes OK +2023/11/05-16:52:28.676 1208 Delete type=0 #584 +2023/11/05-16:52:28.676 1208 Manual compaction at level-0 from '!folders!rAhydZslb0d4Cvio' @ 72057594037927935 : 1 .. '!items!ztjoTjB46kPDTEfV' @ 0 : 0; will stop at (end) diff --git a/packs/abilities/LOG.old b/packs/abilities/LOG.old index 331e79f10..85f45faca 100644 --- a/packs/abilities/LOG.old +++ b/packs/abilities/LOG.old @@ -1,7 +1,7 @@ -2023/10/18-17:43:33.738 32bc Recovering log #553 -2023/10/18-17:43:33.743 32bc Delete type=0 #553 -2023/10/18-17:43:33.743 32bc Delete type=3 #551 -2023/10/19-17:28:46.514 2714 Level-0 table #558: started -2023/10/19-17:28:46.514 2714 Level-0 table #558: 0 bytes OK -2023/10/19-17:28:46.517 2714 Delete type=0 #556 -2023/10/19-17:28:46.521 2714 Manual compaction at level-0 from '!folders!rAhydZslb0d4Cvio' @ 72057594037927935 : 1 .. '!items!ztjoTjB46kPDTEfV' @ 0 : 0; will stop at (end) +2023/11/05-16:40:21.604 7080 Recovering log #578 +2023/11/05-16:40:21.608 7080 Delete type=0 #578 +2023/11/05-16:40:21.609 7080 Delete type=3 #577 +2023/11/05-16:45:37.095 1208 Level-0 table #582: started +2023/11/05-16:45:37.095 1208 Level-0 table #582: 0 bytes OK +2023/11/05-16:45:37.097 1208 Delete type=0 #580 +2023/11/05-16:45:37.099 1208 Manual compaction at level-0 from '!folders!rAhydZslb0d4Cvio' @ 72057594037927935 : 1 .. '!items!ztjoTjB46kPDTEfV' @ 0 : 0; will stop at (end) diff --git a/packs/abilities/MANIFEST-000559 b/packs/abilities/MANIFEST-000559 deleted file mode 100644 index 318edbd4e..000000000 Binary files a/packs/abilities/MANIFEST-000559 and /dev/null differ diff --git a/packs/abilities/MANIFEST-000583 b/packs/abilities/MANIFEST-000583 new file mode 100644 index 000000000..0e4d00773 Binary files /dev/null and b/packs/abilities/MANIFEST-000583 differ diff --git a/packs/capabilities/000400.ldb b/packs/capabilities/000400.ldb deleted file mode 100644 index d75ad5b72..000000000 Binary files a/packs/capabilities/000400.ldb and /dev/null differ diff --git a/packs/capabilities/000540.ldb b/packs/capabilities/000540.ldb new file mode 100644 index 000000000..fbd0b6aae Binary files /dev/null and b/packs/capabilities/000540.ldb differ diff --git a/packs/feats/000579.log b/packs/capabilities/000579.log similarity index 100% rename from packs/feats/000579.log rename to packs/capabilities/000579.log diff --git a/packs/capabilities/CURRENT b/packs/capabilities/CURRENT index 2177b36d8..d767468ff 100644 --- a/packs/capabilities/CURRENT +++ b/packs/capabilities/CURRENT @@ -1 +1 @@ -MANIFEST-000554 +MANIFEST-000577 diff --git a/packs/capabilities/LOG b/packs/capabilities/LOG index 902ff79dd..00e2ff63d 100644 --- a/packs/capabilities/LOG +++ b/packs/capabilities/LOG @@ -1,7 +1,7 @@ -2023/10/19-17:29:07.533 5b0 Recovering log #552 -2023/10/19-17:29:07.537 5b0 Delete type=0 #552 -2023/10/19-17:29:07.537 5b0 Delete type=3 #550 -2023/10/19-17:34:30.338 9300 Level-0 table #557: started -2023/10/19-17:34:30.338 9300 Level-0 table #557: 0 bytes OK -2023/10/19-17:34:30.339 9300 Delete type=0 #555 -2023/10/19-17:34:30.341 9300 Manual compaction at level-0 from '!folders!4yLFZsM42OJ7FDLn' @ 72057594037927935 : 1 .. '!items!zzJWpOj40dLelBm5' @ 0 : 0; will stop at (end) +2023/11/05-16:47:28.071 707c Recovering log #575 +2023/11/05-16:47:28.076 707c Delete type=0 #575 +2023/11/05-16:47:28.076 707c Delete type=3 #573 +2023/11/05-16:52:28.695 1208 Level-0 table #580: started +2023/11/05-16:52:28.695 1208 Level-0 table #580: 0 bytes OK +2023/11/05-16:52:28.696 1208 Delete type=0 #578 +2023/11/05-16:52:28.705 1208 Manual compaction at level-0 from '!folders!4yLFZsM42OJ7FDLn' @ 72057594037927935 : 1 .. '!items!zzJWpOj40dLelBm5' @ 0 : 0; will stop at (end) diff --git a/packs/capabilities/LOG.old b/packs/capabilities/LOG.old index 43ae73bab..d82a1a4f0 100644 --- a/packs/capabilities/LOG.old +++ b/packs/capabilities/LOG.old @@ -1,7 +1,7 @@ -2023/10/18-17:43:33.803 32bc Recovering log #548 -2023/10/18-17:43:33.808 32bc Delete type=0 #548 -2023/10/18-17:43:33.808 32bc Delete type=3 #546 -2023/10/19-17:28:46.589 2714 Level-0 table #553: started -2023/10/19-17:28:46.590 2714 Level-0 table #553: 0 bytes OK -2023/10/19-17:28:46.592 2714 Delete type=0 #551 -2023/10/19-17:28:46.596 2714 Manual compaction at level-0 from '!folders!4yLFZsM42OJ7FDLn' @ 72057594037927935 : 1 .. '!items!zzJWpOj40dLelBm5' @ 0 : 0; will stop at (end) +2023/11/05-16:40:21.656 7080 Recovering log #572 +2023/11/05-16:40:21.660 7080 Delete type=0 #572 +2023/11/05-16:40:21.660 7080 Delete type=3 #571 +2023/11/05-16:45:37.111 1208 Level-0 table #576: started +2023/11/05-16:45:37.111 1208 Level-0 table #576: 0 bytes OK +2023/11/05-16:45:37.113 1208 Delete type=0 #574 +2023/11/05-16:45:37.120 1208 Manual compaction at level-0 from '!folders!4yLFZsM42OJ7FDLn' @ 72057594037927935 : 1 .. '!items!zzJWpOj40dLelBm5' @ 0 : 0; will stop at (end) diff --git a/packs/capabilities/MANIFEST-000554 b/packs/capabilities/MANIFEST-000554 deleted file mode 100644 index 5ababf716..000000000 Binary files a/packs/capabilities/MANIFEST-000554 and /dev/null differ diff --git a/packs/capabilities/MANIFEST-000577 b/packs/capabilities/MANIFEST-000577 new file mode 100644 index 000000000..7400f3869 Binary files /dev/null and b/packs/capabilities/MANIFEST-000577 differ diff --git a/packs/capabilities/000556.log b/packs/dex-entries/000499.log similarity index 100% rename from packs/capabilities/000556.log rename to packs/dex-entries/000499.log diff --git a/packs/dex-entries/CURRENT b/packs/dex-entries/CURRENT index 53152475e..4dc67d5c3 100644 --- a/packs/dex-entries/CURRENT +++ b/packs/dex-entries/CURRENT @@ -1 +1 @@ -MANIFEST-000479 +MANIFEST-000497 diff --git a/packs/dex-entries/LOG b/packs/dex-entries/LOG index cf0f6699f..420b2ab0d 100644 --- a/packs/dex-entries/LOG +++ b/packs/dex-entries/LOG @@ -1,7 +1,7 @@ -2023/10/19-17:29:07.511 f724 Recovering log #477 -2023/10/19-17:29:07.514 f724 Delete type=0 #477 -2023/10/19-17:29:07.514 f724 Delete type=3 #475 -2023/10/19-17:34:30.336 9300 Level-0 table #482: started -2023/10/19-17:34:30.336 9300 Level-0 table #482: 0 bytes OK -2023/10/19-17:34:30.338 9300 Delete type=0 #480 -2023/10/19-17:34:30.341 9300 Manual compaction at level-0 from '!items!00NxeCghePCTFezd' @ 72057594037927935 : 1 .. '!items!zskGVWQJ7ih85MQp' @ 0 : 0; will stop at (end) +2023/11/05-16:47:28.046 4250 Recovering log #495 +2023/11/05-16:47:28.050 4250 Delete type=0 #495 +2023/11/05-16:47:28.050 4250 Delete type=3 #493 +2023/11/05-16:52:28.683 1208 Level-0 table #500: started +2023/11/05-16:52:28.683 1208 Level-0 table #500: 0 bytes OK +2023/11/05-16:52:28.685 1208 Delete type=0 #498 +2023/11/05-16:52:28.686 1208 Manual compaction at level-0 from '!items!00NxeCghePCTFezd' @ 72057594037927935 : 1 .. '!items!zskGVWQJ7ih85MQp' @ 0 : 0; will stop at (end) diff --git a/packs/dex-entries/LOG.old b/packs/dex-entries/LOG.old index 3de2af691..c74732ba3 100644 --- a/packs/dex-entries/LOG.old +++ b/packs/dex-entries/LOG.old @@ -1,7 +1,8 @@ -2023/10/18-17:43:33.777 828 Recovering log #473 -2023/10/18-17:43:33.782 828 Delete type=0 #473 -2023/10/18-17:43:33.782 828 Delete type=3 #471 -2023/10/19-17:28:46.572 2714 Level-0 table #478: started -2023/10/19-17:28:46.572 2714 Level-0 table #478: 0 bytes OK -2023/10/19-17:28:46.573 2714 Delete type=0 #476 -2023/10/19-17:28:46.586 2714 Manual compaction at level-0 from '!items!00NxeCghePCTFezd' @ 72057594037927935 : 1 .. '!items!zskGVWQJ7ih85MQp' @ 0 : 0; will stop at (end) +2023/11/05-16:40:21.631 707c Recovering log #491 +2023/11/05-16:40:21.634 707c Delete type=0 #491 +2023/11/05-16:40:21.634 707c Delete type=3 #465 +2023/11/05-16:40:21.635 707c Delete type=3 #487 +2023/11/05-16:45:37.103 1208 Level-0 table #496: started +2023/11/05-16:45:37.103 1208 Level-0 table #496: 0 bytes OK +2023/11/05-16:45:37.105 1208 Delete type=0 #494 +2023/11/05-16:45:37.110 1208 Manual compaction at level-0 from '!items!00NxeCghePCTFezd' @ 72057594037927935 : 1 .. '!items!zskGVWQJ7ih85MQp' @ 0 : 0; will stop at (end) diff --git a/packs/dex-entries/MANIFEST-000479 b/packs/dex-entries/MANIFEST-000497 similarity index 73% rename from packs/dex-entries/MANIFEST-000479 rename to packs/dex-entries/MANIFEST-000497 index dff6d8480..a76a659e5 100644 Binary files a/packs/dex-entries/MANIFEST-000479 and b/packs/dex-entries/MANIFEST-000497 differ diff --git a/packs/dex-entries/000481.log b/packs/edges/000588.log similarity index 100% rename from packs/dex-entries/000481.log rename to packs/edges/000588.log diff --git a/packs/edges/CURRENT b/packs/edges/CURRENT index 38571d7b5..3523911c3 100644 --- a/packs/edges/CURRENT +++ b/packs/edges/CURRENT @@ -1 +1 @@ -MANIFEST-000563 +MANIFEST-000586 diff --git a/packs/edges/LOG b/packs/edges/LOG index 1f437badc..bbe316c98 100644 --- a/packs/edges/LOG +++ b/packs/edges/LOG @@ -1,7 +1,7 @@ -2023/10/19-17:29:07.520 f724 Recovering log #561 -2023/10/19-17:29:07.524 f724 Delete type=0 #561 -2023/10/19-17:29:07.524 f724 Delete type=3 #559 -2023/10/19-17:34:30.334 9300 Level-0 table #566: started -2023/10/19-17:34:30.334 9300 Level-0 table #566: 0 bytes OK -2023/10/19-17:34:30.336 9300 Delete type=0 #564 -2023/10/19-17:34:30.341 9300 Manual compaction at level-0 from '!folders!KvpdGqvbgL2nQUcL' @ 72057594037927935 : 1 .. '!items!zixXV4XTysXtm8vK' @ 0 : 0; will stop at (end) +2023/11/05-16:47:28.057 4250 Recovering log #584 +2023/11/05-16:47:28.060 4250 Delete type=0 #584 +2023/11/05-16:47:28.061 4250 Delete type=3 #582 +2023/11/05-16:52:28.685 1208 Level-0 table #589: started +2023/11/05-16:52:28.685 1208 Level-0 table #589: 0 bytes OK +2023/11/05-16:52:28.686 1208 Delete type=0 #587 +2023/11/05-16:52:28.686 1208 Manual compaction at level-0 from '!folders!KvpdGqvbgL2nQUcL' @ 72057594037927935 : 1 .. '!items!zixXV4XTysXtm8vK' @ 0 : 0; will stop at (end) diff --git a/packs/edges/LOG.old b/packs/edges/LOG.old index 308b35379..a1aa83394 100644 --- a/packs/edges/LOG.old +++ b/packs/edges/LOG.old @@ -1,7 +1,7 @@ -2023/10/18-17:43:33.788 828 Recovering log #557 -2023/10/18-17:43:33.793 828 Delete type=0 #557 -2023/10/18-17:43:33.793 828 Delete type=3 #555 -2023/10/19-17:28:46.615 2714 Level-0 table #562: started -2023/10/19-17:28:46.615 2714 Level-0 table #562: 0 bytes OK -2023/10/19-17:28:46.618 2714 Delete type=0 #560 -2023/10/19-17:28:46.618 2714 Manual compaction at level-0 from '!folders!KvpdGqvbgL2nQUcL' @ 72057594037927935 : 1 .. '!items!zixXV4XTysXtm8vK' @ 0 : 0; will stop at (end) +2023/11/05-16:40:21.641 707c Recovering log #581 +2023/11/05-16:40:21.645 707c Delete type=0 #581 +2023/11/05-16:40:21.645 707c Delete type=3 #580 +2023/11/05-16:45:37.108 1208 Level-0 table #585: started +2023/11/05-16:45:37.108 1208 Level-0 table #585: 0 bytes OK +2023/11/05-16:45:37.109 1208 Delete type=0 #583 +2023/11/05-16:45:37.110 1208 Manual compaction at level-0 from '!folders!KvpdGqvbgL2nQUcL' @ 72057594037927935 : 1 .. '!items!zixXV4XTysXtm8vK' @ 0 : 0; will stop at (end) diff --git a/packs/edges/MANIFEST-000563 b/packs/edges/MANIFEST-000586 similarity index 71% rename from packs/edges/MANIFEST-000563 rename to packs/edges/MANIFEST-000586 index ae32e29d4..d503e4e11 100644 Binary files a/packs/edges/MANIFEST-000563 and b/packs/edges/MANIFEST-000586 differ diff --git a/packs/edges/000565.log b/packs/effects/000583.log similarity index 100% rename from packs/edges/000565.log rename to packs/effects/000583.log diff --git a/packs/effects/000561.ldb b/packs/effects/000585.ldb similarity index 68% rename from packs/effects/000561.ldb rename to packs/effects/000585.ldb index 196269896..558b7fda3 100644 Binary files a/packs/effects/000561.ldb and b/packs/effects/000585.ldb differ diff --git a/packs/effects/CURRENT b/packs/effects/CURRENT index 7e963d66d..69894e34d 100644 --- a/packs/effects/CURRENT +++ b/packs/effects/CURRENT @@ -1 +1 @@ -MANIFEST-000557 +MANIFEST-000581 diff --git a/packs/effects/LOG b/packs/effects/LOG index b69c6b090..2b498c4c5 100644 --- a/packs/effects/LOG +++ b/packs/effects/LOG @@ -1,15 +1,15 @@ -2023/10/19-17:29:07.554 5b0 Recovering log #555 -2023/10/19-17:29:07.559 5b0 Delete type=0 #555 -2023/10/19-17:29:07.559 5b0 Delete type=3 #553 -2023/10/19-17:34:30.347 9300 Level-0 table #560: started -2023/10/19-17:34:30.349 9300 Level-0 table #560: 1402 bytes OK -2023/10/19-17:34:30.350 9300 Delete type=0 #558 -2023/10/19-17:34:30.358 9300 Manual compaction at level-0 from '!folders!845I85D1jrVh7RBM' @ 72057594037927935 : 1 .. '!items!znvgEviVbL2WnCGJ' @ 0 : 0; will stop at (end) -2023/10/19-17:34:30.358 9300 Manual compaction at level-1 from '!folders!845I85D1jrVh7RBM' @ 72057594037927935 : 1 .. '!items!znvgEviVbL2WnCGJ' @ 0 : 0; will stop at '!items!sEA93hrLBFFZzztK' @ 643 : 1 -2023/10/19-17:34:30.358 9300 Compacting 1@1 + 1@2 files -2023/10/19-17:34:30.362 9300 Generated table #561@1: 138 keys, 74193 bytes -2023/10/19-17:34:30.362 9300 Compacted 1@1 + 1@2 files => 74193 bytes -2023/10/19-17:34:30.364 9300 compacted to: files[ 0 0 1 0 0 0 0 ] -2023/10/19-17:34:30.364 9300 Delete type=2 #532 -2023/10/19-17:34:30.364 9300 Delete type=2 #560 -2023/10/19-17:34:30.370 9300 Manual compaction at level-1 from '!items!sEA93hrLBFFZzztK' @ 643 : 1 .. '!items!znvgEviVbL2WnCGJ' @ 0 : 0; will stop at (end) +2023/11/05-16:47:28.095 707c Recovering log #579 +2023/11/05-16:47:28.099 707c Delete type=0 #579 +2023/11/05-16:47:28.099 707c Delete type=3 #577 +2023/11/05-16:52:28.709 1208 Level-0 table #584: started +2023/11/05-16:52:28.710 1208 Level-0 table #584: 3036 bytes OK +2023/11/05-16:52:28.712 1208 Delete type=0 #582 +2023/11/05-16:52:28.715 1208 Manual compaction at level-0 from '!folders!845I85D1jrVh7RBM' @ 72057594037927935 : 1 .. '!items!znvgEviVbL2WnCGJ' @ 0 : 0; will stop at (end) +2023/11/05-16:52:28.716 1208 Manual compaction at level-1 from '!folders!845I85D1jrVh7RBM' @ 72057594037927935 : 1 .. '!items!znvgEviVbL2WnCGJ' @ 0 : 0; will stop at '!items!8S5ANEmz5pXLdcNy' @ 696 : 1 +2023/11/05-16:52:28.716 1208 Compacting 1@1 + 1@2 files +2023/11/05-16:52:28.721 1208 Generated table #585@1: 142 keys, 76704 bytes +2023/11/05-16:52:28.721 1208 Compacted 1@1 + 1@2 files => 76704 bytes +2023/11/05-16:52:28.723 1208 compacted to: files[ 0 0 1 0 0 0 0 ] +2023/11/05-16:52:28.723 1208 Delete type=2 #543 +2023/11/05-16:52:28.725 1208 Delete type=2 #584 +2023/11/05-16:52:28.728 1208 Manual compaction at level-1 from '!items!8S5ANEmz5pXLdcNy' @ 696 : 1 .. '!items!znvgEviVbL2WnCGJ' @ 0 : 0; will stop at (end) diff --git a/packs/effects/LOG.old b/packs/effects/LOG.old index 577f722e8..0839a22fa 100644 --- a/packs/effects/LOG.old +++ b/packs/effects/LOG.old @@ -1,8 +1,8 @@ -2023/10/18-17:43:33.830 32bc Recovering log #551 -2023/10/18-17:43:33.834 32bc Delete type=0 #551 -2023/10/18-17:43:33.834 32bc Delete type=3 #549 -2023/10/19-17:28:46.594 2714 Level-0 table #556: started -2023/10/19-17:28:46.594 2714 Level-0 table #556: 0 bytes OK -2023/10/19-17:28:46.596 2714 Delete type=0 #554 -2023/10/19-17:28:46.599 2714 Manual compaction at level-0 from '!folders!845I85D1jrVh7RBM' @ 72057594037927935 : 1 .. '!items!znvgEviVbL2WnCGJ' @ 0 : 0; will stop at (end) -2023/10/19-17:28:46.602 2714 Manual compaction at level-1 from '!folders!845I85D1jrVh7RBM' @ 72057594037927935 : 1 .. '!items!znvgEviVbL2WnCGJ' @ 0 : 0; will stop at (end) +2023/11/05-16:40:21.679 7080 Recovering log #576 +2023/11/05-16:40:21.683 7080 Delete type=0 #576 +2023/11/05-16:40:21.683 7080 Delete type=3 #575 +2023/11/05-16:45:37.118 1208 Level-0 table #580: started +2023/11/05-16:45:37.118 1208 Level-0 table #580: 0 bytes OK +2023/11/05-16:45:37.120 1208 Delete type=0 #578 +2023/11/05-16:45:37.124 1208 Manual compaction at level-0 from '!folders!845I85D1jrVh7RBM' @ 72057594037927935 : 1 .. '!items!znvgEviVbL2WnCGJ' @ 0 : 0; will stop at (end) +2023/11/05-16:45:37.126 1208 Manual compaction at level-1 from '!folders!845I85D1jrVh7RBM' @ 72057594037927935 : 1 .. '!items!znvgEviVbL2WnCGJ' @ 0 : 0; will stop at (end) diff --git a/packs/effects/MANIFEST-000557 b/packs/effects/MANIFEST-000557 deleted file mode 100644 index 2c598f705..000000000 Binary files a/packs/effects/MANIFEST-000557 and /dev/null differ diff --git a/packs/effects/MANIFEST-000581 b/packs/effects/MANIFEST-000581 new file mode 100644 index 000000000..e635a412b Binary files /dev/null and b/packs/effects/MANIFEST-000581 differ diff --git a/packs/feats/000552.ldb b/packs/feats/000563.ldb similarity index 79% rename from packs/feats/000552.ldb rename to packs/feats/000563.ldb index 73d12bae2..4ab76071f 100644 Binary files a/packs/feats/000552.ldb and b/packs/feats/000563.ldb differ diff --git a/packs/effects/000559.log b/packs/feats/000602.log similarity index 100% rename from packs/effects/000559.log rename to packs/feats/000602.log diff --git a/packs/feats/CURRENT b/packs/feats/CURRENT index d767468ff..0b446e566 100644 --- a/packs/feats/CURRENT +++ b/packs/feats/CURRENT @@ -1 +1 @@ -MANIFEST-000577 +MANIFEST-000600 diff --git a/packs/feats/LOG b/packs/feats/LOG index 5ca0abc0e..5251ce67c 100644 --- a/packs/feats/LOG +++ b/packs/feats/LOG @@ -1,7 +1,7 @@ -2023/10/19-17:29:07.502 f724 Recovering log #575 -2023/10/19-17:29:07.507 f724 Delete type=0 #575 -2023/10/19-17:29:07.507 f724 Delete type=3 #573 -2023/10/19-17:34:30.331 9300 Level-0 table #580: started -2023/10/19-17:34:30.331 9300 Level-0 table #580: 0 bytes OK -2023/10/19-17:34:30.333 9300 Delete type=0 #578 -2023/10/19-17:34:30.333 9300 Manual compaction at level-0 from '!folders!NlEB7XJnDWyGbZnQ' @ 72057594037927935 : 1 .. '!items!zy3F5IZmiosjU2HJ' @ 0 : 0; will stop at (end) +2023/11/05-16:47:28.037 4250 Recovering log #598 +2023/11/05-16:47:28.041 4250 Delete type=0 #598 +2023/11/05-16:47:28.041 4250 Delete type=3 #596 +2023/11/05-16:52:28.681 1208 Level-0 table #603: started +2023/11/05-16:52:28.681 1208 Level-0 table #603: 0 bytes OK +2023/11/05-16:52:28.683 1208 Delete type=0 #601 +2023/11/05-16:52:28.686 1208 Manual compaction at level-0 from '!folders!NlEB7XJnDWyGbZnQ' @ 72057594037927935 : 1 .. '!items!zy3F5IZmiosjU2HJ' @ 0 : 0; will stop at (end) diff --git a/packs/feats/LOG.old b/packs/feats/LOG.old index d01dd17e3..bf42eca34 100644 --- a/packs/feats/LOG.old +++ b/packs/feats/LOG.old @@ -1,7 +1,7 @@ -2023/10/18-17:43:33.759 828 Recovering log #571 -2023/10/18-17:43:33.770 828 Delete type=0 #571 -2023/10/18-17:43:33.770 828 Delete type=3 #569 -2023/10/19-17:28:46.596 2714 Level-0 table #576: started -2023/10/19-17:28:46.596 2714 Level-0 table #576: 0 bytes OK -2023/10/19-17:28:46.599 2714 Delete type=0 #574 -2023/10/19-17:28:46.602 2714 Manual compaction at level-0 from '!folders!NlEB7XJnDWyGbZnQ' @ 72057594037927935 : 1 .. '!items!zy3F5IZmiosjU2HJ' @ 0 : 0; will stop at (end) +2023/11/05-16:40:21.622 707c Recovering log #595 +2023/11/05-16:40:21.626 707c Delete type=0 #595 +2023/11/05-16:40:21.626 707c Delete type=3 #594 +2023/11/05-16:45:37.100 1208 Level-0 table #599: started +2023/11/05-16:45:37.100 1208 Level-0 table #599: 0 bytes OK +2023/11/05-16:45:37.103 1208 Delete type=0 #597 +2023/11/05-16:45:37.110 1208 Manual compaction at level-0 from '!folders!NlEB7XJnDWyGbZnQ' @ 72057594037927935 : 1 .. '!items!zy3F5IZmiosjU2HJ' @ 0 : 0; will stop at (end) diff --git a/packs/feats/MANIFEST-000577 b/packs/feats/MANIFEST-000577 deleted file mode 100644 index 05e843b5e..000000000 Binary files a/packs/feats/MANIFEST-000577 and /dev/null differ diff --git a/packs/feats/MANIFEST-000600 b/packs/feats/MANIFEST-000600 new file mode 100644 index 000000000..827769baf Binary files /dev/null and b/packs/feats/MANIFEST-000600 differ diff --git a/packs/habitats/000545.log b/packs/habitats/000568.log similarity index 100% rename from packs/habitats/000545.log rename to packs/habitats/000568.log diff --git a/packs/habitats/CURRENT b/packs/habitats/CURRENT index 19d4421c3..39e3a38f1 100644 --- a/packs/habitats/CURRENT +++ b/packs/habitats/CURRENT @@ -1 +1 @@ -MANIFEST-000543 +MANIFEST-000566 diff --git a/packs/habitats/LOG b/packs/habitats/LOG index 1bf5393ea..6d8c47555 100644 --- a/packs/habitats/LOG +++ b/packs/habitats/LOG @@ -1,7 +1,7 @@ -2023/10/19-17:29:07.545 5b0 Recovering log #541 -2023/10/19-17:29:07.549 5b0 Delete type=0 #541 -2023/10/19-17:29:07.549 5b0 Delete type=3 #539 -2023/10/19-17:34:30.350 9300 Level-0 table #546: started -2023/10/19-17:34:30.350 9300 Level-0 table #546: 0 bytes OK -2023/10/19-17:34:30.352 9300 Delete type=0 #544 -2023/10/19-17:34:30.358 9300 Manual compaction at level-0 from '!tables!0DJQye8xDvA2tYYY' @ 72057594037927935 : 1 .. '!tables.results!yedzrd0JurrPv9Me.zKvMuUG3hHYIyZQp' @ 0 : 0; will stop at (end) +2023/11/05-16:47:28.085 707c Recovering log #564 +2023/11/05-16:47:28.089 707c Delete type=0 #564 +2023/11/05-16:47:28.089 707c Delete type=3 #562 +2023/11/05-16:52:28.696 1208 Level-0 table #569: started +2023/11/05-16:52:28.696 1208 Level-0 table #569: 0 bytes OK +2023/11/05-16:52:28.698 1208 Delete type=0 #567 +2023/11/05-16:52:28.705 1208 Manual compaction at level-0 from '!tables!0DJQye8xDvA2tYYY' @ 72057594037927935 : 1 .. '!tables.results!yedzrd0JurrPv9Me.zKvMuUG3hHYIyZQp' @ 0 : 0; will stop at (end) diff --git a/packs/habitats/LOG.old b/packs/habitats/LOG.old index a61e2cd6e..220f834ad 100644 --- a/packs/habitats/LOG.old +++ b/packs/habitats/LOG.old @@ -1,7 +1,7 @@ -2023/10/18-17:43:33.820 32bc Recovering log #537 -2023/10/18-17:43:33.825 32bc Delete type=0 #537 -2023/10/18-17:43:33.825 32bc Delete type=3 #535 -2023/10/19-17:28:46.586 2714 Level-0 table #542: started -2023/10/19-17:28:46.586 2714 Level-0 table #542: 0 bytes OK -2023/10/19-17:28:46.589 2714 Delete type=0 #540 -2023/10/19-17:28:46.592 2714 Manual compaction at level-0 from '!tables!0DJQye8xDvA2tYYY' @ 72057594037927935 : 1 .. '!tables.results!yedzrd0JurrPv9Me.zKvMuUG3hHYIyZQp' @ 0 : 0; will stop at (end) +2023/11/05-16:40:21.668 7080 Recovering log #561 +2023/11/05-16:40:21.672 7080 Delete type=0 #561 +2023/11/05-16:40:21.673 7080 Delete type=3 #560 +2023/11/05-16:45:37.117 1208 Level-0 table #565: started +2023/11/05-16:45:37.117 1208 Level-0 table #565: 0 bytes OK +2023/11/05-16:45:37.118 1208 Delete type=0 #563 +2023/11/05-16:45:37.124 1208 Manual compaction at level-0 from '!tables!0DJQye8xDvA2tYYY' @ 72057594037927935 : 1 .. '!tables.results!yedzrd0JurrPv9Me.zKvMuUG3hHYIyZQp' @ 0 : 0; will stop at (end) diff --git a/packs/habitats/MANIFEST-000543 b/packs/habitats/MANIFEST-000566 similarity index 83% rename from packs/habitats/MANIFEST-000543 rename to packs/habitats/MANIFEST-000566 index 363c3c4c5..1194e88ef 100644 Binary files a/packs/habitats/MANIFEST-000543 and b/packs/habitats/MANIFEST-000566 differ diff --git a/packs/items/000498.ldb b/packs/items/000498.ldb deleted file mode 100644 index 8cdd0dfe1..000000000 Binary files a/packs/items/000498.ldb and /dev/null differ diff --git a/packs/items/000553.log b/packs/items/000576.log similarity index 100% rename from packs/items/000553.log rename to packs/items/000576.log diff --git a/packs/items/000578.ldb b/packs/items/000578.ldb new file mode 100644 index 000000000..ff15da4b2 Binary files /dev/null and b/packs/items/000578.ldb differ diff --git a/packs/items/CURRENT b/packs/items/CURRENT index 536f6fcc5..992dea4df 100644 --- a/packs/items/CURRENT +++ b/packs/items/CURRENT @@ -1 +1 @@ -MANIFEST-000551 +MANIFEST-000574 diff --git a/packs/items/LOG b/packs/items/LOG index 1ac3fdc43..ff73f502d 100644 --- a/packs/items/LOG +++ b/packs/items/LOG @@ -1,7 +1,14 @@ -2023/10/19-17:29:07.526 5b0 Recovering log #549 -2023/10/19-17:29:07.530 5b0 Delete type=0 #549 -2023/10/19-17:29:07.530 5b0 Delete type=3 #547 -2023/10/19-17:34:30.340 9300 Level-0 table #554: started -2023/10/19-17:34:30.340 9300 Level-0 table #554: 0 bytes OK -2023/10/19-17:34:30.341 9300 Delete type=0 #552 -2023/10/19-17:34:30.341 9300 Manual compaction at level-0 from '!folders!IT5MlkeTVPcxSRHe' @ 72057594037927935 : 1 .. '!items!zyrvCDXykruLOC8Y' @ 0 : 0; will stop at (end) +2023/11/05-16:47:28.062 707c Recovering log #572 +2023/11/05-16:47:28.067 707c Delete type=0 #572 +2023/11/05-16:47:28.067 707c Delete type=3 #570 +2023/11/05-16:52:28.688 1208 Level-0 table #577: started +2023/11/05-16:52:28.691 1208 Level-0 table #577: 1323 bytes OK +2023/11/05-16:52:28.693 1208 Delete type=0 #575 +2023/11/05-16:52:28.698 1208 Manual compaction at level-0 from '!folders!IT5MlkeTVPcxSRHe' @ 72057594037927935 : 1 .. '!items!zyrvCDXykruLOC8Y' @ 0 : 0; will stop at '!items!jw8mH3AFRX9PXDnT' @ 5605 : 1 +2023/11/05-16:52:28.698 1208 Compacting 1@0 + 1@1 files +2023/11/05-16:52:28.703 1208 Generated table #578@0: 757 keys, 272853 bytes +2023/11/05-16:52:28.703 1208 Compacted 1@0 + 1@1 files => 272853 bytes +2023/11/05-16:52:28.705 1208 compacted to: files[ 0 1 0 0 0 0 0 ] +2023/11/05-16:52:28.705 1208 Delete type=2 #537 +2023/11/05-16:52:28.705 1208 Delete type=2 #577 +2023/11/05-16:52:28.705 1208 Manual compaction at level-0 from '!items!jw8mH3AFRX9PXDnT' @ 5605 : 1 .. '!items!zyrvCDXykruLOC8Y' @ 0 : 0; will stop at (end) diff --git a/packs/items/LOG.old b/packs/items/LOG.old index a75038edc..c6e790acd 100644 --- a/packs/items/LOG.old +++ b/packs/items/LOG.old @@ -1,7 +1,7 @@ -2023/10/18-17:43:33.795 32bc Recovering log #545 -2023/10/18-17:43:33.799 32bc Delete type=0 #545 -2023/10/18-17:43:33.800 32bc Delete type=3 #543 -2023/10/19-17:28:46.592 2714 Level-0 table #550: started -2023/10/19-17:28:46.592 2714 Level-0 table #550: 0 bytes OK -2023/10/19-17:28:46.594 2714 Delete type=0 #548 -2023/10/19-17:28:46.599 2714 Manual compaction at level-0 from '!folders!IT5MlkeTVPcxSRHe' @ 72057594037927935 : 1 .. '!items!zyrvCDXykruLOC8Y' @ 0 : 0; will stop at (end) +2023/11/05-16:40:21.648 7080 Recovering log #569 +2023/11/05-16:40:21.652 7080 Delete type=0 #569 +2023/11/05-16:40:21.652 7080 Delete type=3 #568 +2023/11/05-16:45:37.105 1208 Level-0 table #573: started +2023/11/05-16:45:37.105 1208 Level-0 table #573: 0 bytes OK +2023/11/05-16:45:37.108 1208 Delete type=0 #571 +2023/11/05-16:45:37.110 1208 Manual compaction at level-0 from '!folders!IT5MlkeTVPcxSRHe' @ 72057594037927935 : 1 .. '!items!zyrvCDXykruLOC8Y' @ 0 : 0; will stop at (end) diff --git a/packs/items/MANIFEST-000551 b/packs/items/MANIFEST-000551 deleted file mode 100644 index 2b6279ef7..000000000 Binary files a/packs/items/MANIFEST-000551 and /dev/null differ diff --git a/packs/items/MANIFEST-000574 b/packs/items/MANIFEST-000574 new file mode 100644 index 000000000..c32e95967 Binary files /dev/null and b/packs/items/MANIFEST-000574 differ diff --git a/packs/macros/000352.ldb b/packs/macros/000352.ldb new file mode 100644 index 000000000..ea45aac32 Binary files /dev/null and b/packs/macros/000352.ldb differ diff --git a/packs/macros/000332.log b/packs/macros/000355.log similarity index 100% rename from packs/macros/000332.log rename to packs/macros/000355.log diff --git a/packs/macros/CURRENT b/packs/macros/CURRENT index d83dd7a3d..70d0528e7 100644 --- a/packs/macros/CURRENT +++ b/packs/macros/CURRENT @@ -1 +1 @@ -MANIFEST-000330 +MANIFEST-000353 diff --git a/packs/macros/LOG b/packs/macros/LOG index bb876a6dd..42c1a5a25 100644 --- a/packs/macros/LOG +++ b/packs/macros/LOG @@ -1,8 +1,8 @@ -2023/10/19-17:29:07.590 5b0 Recovering log #328 -2023/10/19-17:29:07.594 5b0 Delete type=0 #328 -2023/10/19-17:29:07.594 5b0 Delete type=3 #326 -2023/10/19-17:34:30.366 9300 Level-0 table #333: started -2023/10/19-17:34:30.366 9300 Level-0 table #333: 0 bytes OK -2023/10/19-17:34:30.368 9300 Delete type=0 #331 -2023/10/19-17:34:30.370 9300 Manual compaction at level-0 from '!macros!1RNSAw20k8gBHhUd' @ 72057594037927935 : 1 .. '!macros!HAtYcPnHQzB8JzY8' @ 0 : 0; will stop at (end) -2023/10/19-17:34:30.370 9300 Manual compaction at level-1 from '!macros!1RNSAw20k8gBHhUd' @ 72057594037927935 : 1 .. '!macros!HAtYcPnHQzB8JzY8' @ 0 : 0; will stop at (end) +2023/11/05-16:47:28.143 707c Recovering log #351 +2023/11/05-16:47:28.147 707c Delete type=0 #351 +2023/11/05-16:47:28.147 707c Delete type=3 #349 +2023/11/05-16:52:28.706 1208 Level-0 table #356: started +2023/11/05-16:52:28.706 1208 Level-0 table #356: 0 bytes OK +2023/11/05-16:52:28.709 1208 Delete type=0 #354 +2023/11/05-16:52:28.715 1208 Manual compaction at level-0 from '!macros!1RNSAw20k8gBHhUd' @ 72057594037927935 : 1 .. '!macros!XGxaPZzFSyRg8ykw' @ 0 : 0; will stop at (end) +2023/11/05-16:52:28.715 1208 Manual compaction at level-1 from '!macros!1RNSAw20k8gBHhUd' @ 72057594037927935 : 1 .. '!macros!XGxaPZzFSyRg8ykw' @ 0 : 0; will stop at (end) diff --git a/packs/macros/LOG.old b/packs/macros/LOG.old index 2c1634e01..ac754c8ba 100644 --- a/packs/macros/LOG.old +++ b/packs/macros/LOG.old @@ -1,8 +1,8 @@ -2023/10/18-17:43:33.879 32bc Recovering log #324 -2023/10/18-17:43:33.885 32bc Delete type=0 #324 -2023/10/18-17:43:33.885 32bc Delete type=3 #322 -2023/10/19-17:28:46.602 2714 Level-0 table #329: started -2023/10/19-17:28:46.602 2714 Level-0 table #329: 0 bytes OK -2023/10/19-17:28:46.606 2714 Delete type=0 #327 -2023/10/19-17:28:46.611 2714 Manual compaction at level-0 from '!macros!1RNSAw20k8gBHhUd' @ 72057594037927935 : 1 .. '!macros!HAtYcPnHQzB8JzY8' @ 0 : 0; will stop at (end) -2023/10/19-17:28:46.612 2714 Manual compaction at level-1 from '!macros!1RNSAw20k8gBHhUd' @ 72057594037927935 : 1 .. '!macros!HAtYcPnHQzB8JzY8' @ 0 : 0; will stop at (end) +2023/11/05-16:40:21.714 7080 Recovering log #348 +2023/11/05-16:40:21.718 7080 Delete type=0 #348 +2023/11/05-16:40:21.718 7080 Delete type=3 #347 +2023/11/05-16:45:37.126 1208 Level-0 table #352: started +2023/11/05-16:45:37.129 1208 Level-0 table #352: 682 bytes OK +2023/11/05-16:45:37.131 1208 Delete type=0 #350 +2023/11/05-16:45:37.138 1208 Manual compaction at level-0 from '!macros!1RNSAw20k8gBHhUd' @ 72057594037927935 : 1 .. '!macros!XGxaPZzFSyRg8ykw' @ 0 : 0; will stop at (end) +2023/11/05-16:45:37.138 1208 Manual compaction at level-1 from '!macros!1RNSAw20k8gBHhUd' @ 72057594037927935 : 1 .. '!macros!XGxaPZzFSyRg8ykw' @ 0 : 0; will stop at (end) diff --git a/packs/macros/MANIFEST-000330 b/packs/macros/MANIFEST-000353 similarity index 51% rename from packs/macros/MANIFEST-000330 rename to packs/macros/MANIFEST-000353 index 4dec30bec..f7fdc278a 100644 Binary files a/packs/macros/MANIFEST-000330 and b/packs/macros/MANIFEST-000353 differ diff --git a/packs/moves/000543.ldb b/packs/moves/000543.ldb new file mode 100644 index 000000000..27445eadf Binary files /dev/null and b/packs/moves/000543.ldb differ diff --git a/packs/moves/000557.ldb b/packs/moves/000557.ldb deleted file mode 100644 index d7d615e51..000000000 Binary files a/packs/moves/000557.ldb and /dev/null differ diff --git a/packs/moves/000560.log b/packs/moves/000583.log similarity index 100% rename from packs/moves/000560.log rename to packs/moves/000583.log diff --git a/packs/moves/CURRENT b/packs/moves/CURRENT index 69b6cf27d..69894e34d 100644 --- a/packs/moves/CURRENT +++ b/packs/moves/CURRENT @@ -1 +1 @@ -MANIFEST-000558 +MANIFEST-000581 diff --git a/packs/moves/LOG b/packs/moves/LOG index 478f9732d..ac16dbf60 100644 --- a/packs/moves/LOG +++ b/packs/moves/LOG @@ -1,7 +1,7 @@ -2023/10/19-17:29:07.494 f724 Recovering log #555 -2023/10/19-17:29:07.498 f724 Delete type=0 #555 -2023/10/19-17:29:07.498 f724 Delete type=3 #553 -2023/10/19-17:34:30.323 9300 Level-0 table #561: started -2023/10/19-17:34:30.323 9300 Level-0 table #561: 0 bytes OK -2023/10/19-17:34:30.325 9300 Delete type=0 #559 -2023/10/19-17:34:30.333 9300 Manual compaction at level-0 from '!folders!CKiVqPT3ASdUeaM0' @ 72057594037927935 : 1 .. '!items!zxUzqjCE0wNYL1er' @ 0 : 0; will stop at (end) +2023/11/05-16:47:28.028 4250 Recovering log #579 +2023/11/05-16:47:28.032 4250 Delete type=0 #579 +2023/11/05-16:47:28.032 4250 Delete type=3 #577 +2023/11/05-16:52:28.677 1208 Level-0 table #584: started +2023/11/05-16:52:28.677 1208 Level-0 table #584: 0 bytes OK +2023/11/05-16:52:28.681 1208 Delete type=0 #582 +2023/11/05-16:52:28.686 1208 Manual compaction at level-0 from '!folders!3AhTAywjx4AYtRjv' @ 72057594037927935 : 1 .. '!items!zxUzqjCE0wNYL1er' @ 0 : 0; will stop at (end) diff --git a/packs/moves/LOG.old b/packs/moves/LOG.old index 6e50f34fc..62f131691 100644 --- a/packs/moves/LOG.old +++ b/packs/moves/LOG.old @@ -1,14 +1,7 @@ -2023/10/18-17:43:33.747 828 Recovering log #551 -2023/10/18-17:43:33.751 828 Delete type=0 #551 -2023/10/18-17:43:33.751 828 Delete type=3 #549 -2023/10/19-17:28:46.568 2714 Level-0 table #556: started -2023/10/19-17:28:46.570 2714 Level-0 table #556: 1174 bytes OK -2023/10/19-17:28:46.571 2714 Delete type=0 #554 -2023/10/19-17:28:46.575 2714 Manual compaction at level-0 from '!folders!CKiVqPT3ASdUeaM0' @ 72057594037927935 : 1 .. '!items!zxUzqjCE0wNYL1er' @ 0 : 0; will stop at '!items!kkib04B5KkMnRQ2I' @ 6047 : 1 -2023/10/19-17:28:46.575 2714 Compacting 1@0 + 1@1 files -2023/10/19-17:28:46.584 2714 Generated table #557@0: 1083 keys, 431393 bytes -2023/10/19-17:28:46.584 2714 Compacted 1@0 + 1@1 files => 431393 bytes -2023/10/19-17:28:46.586 2714 compacted to: files[ 0 1 0 0 0 0 0 ] -2023/10/19-17:28:46.586 2714 Delete type=2 #504 -2023/10/19-17:28:46.586 2714 Delete type=2 #556 -2023/10/19-17:28:46.589 2714 Manual compaction at level-0 from '!items!kkib04B5KkMnRQ2I' @ 6047 : 1 .. '!items!zxUzqjCE0wNYL1er' @ 0 : 0; will stop at (end) +2023/11/05-16:40:21.612 707c Recovering log #576 +2023/11/05-16:40:21.615 707c Delete type=0 #576 +2023/11/05-16:40:21.615 707c Delete type=3 #575 +2023/11/05-16:45:37.097 1208 Level-0 table #580: started +2023/11/05-16:45:37.097 1208 Level-0 table #580: 0 bytes OK +2023/11/05-16:45:37.099 1208 Delete type=0 #578 +2023/11/05-16:45:37.099 1208 Manual compaction at level-0 from '!folders!3AhTAywjx4AYtRjv' @ 72057594037927935 : 1 .. '!items!zxUzqjCE0wNYL1er' @ 0 : 0; will stop at (end) diff --git a/packs/moves/MANIFEST-000558 b/packs/moves/MANIFEST-000558 deleted file mode 100644 index e3b4018fc..000000000 Binary files a/packs/moves/MANIFEST-000558 and /dev/null differ diff --git a/packs/moves/MANIFEST-000581 b/packs/moves/MANIFEST-000581 new file mode 100644 index 000000000..0da76046c Binary files /dev/null and b/packs/moves/MANIFEST-000581 differ diff --git a/packs/poke-edges/000560.ldb b/packs/poke-edges/000560.ldb deleted file mode 100644 index 4b47a8cef..000000000 Binary files a/packs/poke-edges/000560.ldb and /dev/null differ diff --git a/packs/poke-edges/000580.ldb b/packs/poke-edges/000580.ldb new file mode 100644 index 000000000..d06d27c98 Binary files /dev/null and b/packs/poke-edges/000580.ldb differ diff --git a/packs/poke-edges/000558.log b/packs/poke-edges/000583.log similarity index 100% rename from packs/poke-edges/000558.log rename to packs/poke-edges/000583.log diff --git a/packs/poke-edges/CURRENT b/packs/poke-edges/CURRENT index 12af886b0..69894e34d 100644 --- a/packs/poke-edges/CURRENT +++ b/packs/poke-edges/CURRENT @@ -1 +1 @@ -MANIFEST-000556 +MANIFEST-000581 diff --git a/packs/poke-edges/LOG b/packs/poke-edges/LOG index 1602adfbc..9a3bf15f8 100644 --- a/packs/poke-edges/LOG +++ b/packs/poke-edges/LOG @@ -1,14 +1,7 @@ -2023/10/19-17:29:07.540 f724 Recovering log #554 -2023/10/19-17:29:07.543 f724 Delete type=0 #554 -2023/10/19-17:29:07.543 f724 Delete type=3 #552 -2023/10/19-17:34:30.342 9300 Level-0 table #559: started -2023/10/19-17:34:30.345 9300 Level-0 table #559: 1028 bytes OK -2023/10/19-17:34:30.347 9300 Delete type=0 #557 -2023/10/19-17:34:30.354 9300 Manual compaction at level-0 from '!items!04UCY4s8EF3iZnCN' @ 72057594037927935 : 1 .. '!items!ybZJ0nAa5nVWBokc' @ 0 : 0; will stop at '!items!fu1z34ijyTF9dMdD' @ 372 : 1 -2023/10/19-17:34:30.354 9300 Compacting 1@0 + 1@1 files -2023/10/19-17:34:30.356 9300 Generated table #560@0: 42 keys, 14679 bytes -2023/10/19-17:34:30.356 9300 Compacted 1@0 + 1@1 files => 14679 bytes -2023/10/19-17:34:30.357 9300 compacted to: files[ 0 1 0 0 0 0 0 ] -2023/10/19-17:34:30.358 9300 Delete type=2 #503 -2023/10/19-17:34:30.358 9300 Delete type=2 #559 -2023/10/19-17:34:30.358 9300 Manual compaction at level-0 from '!items!fu1z34ijyTF9dMdD' @ 372 : 1 .. '!items!ybZJ0nAa5nVWBokc' @ 0 : 0; will stop at (end) +2023/11/05-16:47:28.078 4250 Recovering log #578 +2023/11/05-16:47:28.082 4250 Delete type=0 #578 +2023/11/05-16:47:28.082 4250 Delete type=3 #576 +2023/11/05-16:52:28.693 1208 Level-0 table #584: started +2023/11/05-16:52:28.693 1208 Level-0 table #584: 0 bytes OK +2023/11/05-16:52:28.694 1208 Delete type=0 #582 +2023/11/05-16:52:28.705 1208 Manual compaction at level-0 from '!items!04UCY4s8EF3iZnCN' @ 72057594037927935 : 1 .. '!items!ybZJ0nAa5nVWBokc' @ 0 : 0; will stop at (end) diff --git a/packs/poke-edges/LOG.old b/packs/poke-edges/LOG.old index 9e07187a2..d58864f21 100644 --- a/packs/poke-edges/LOG.old +++ b/packs/poke-edges/LOG.old @@ -1,7 +1,14 @@ -2023/10/18-17:43:33.810 828 Recovering log #550 -2023/10/18-17:43:33.816 828 Delete type=0 #550 -2023/10/18-17:43:33.816 828 Delete type=3 #548 -2023/10/19-17:28:46.599 2714 Level-0 table #555: started -2023/10/19-17:28:46.600 2714 Level-0 table #555: 0 bytes OK -2023/10/19-17:28:46.602 2714 Delete type=0 #553 -2023/10/19-17:28:46.606 2714 Manual compaction at level-0 from '!items!04UCY4s8EF3iZnCN' @ 72057594037927935 : 1 .. '!items!ybZJ0nAa5nVWBokc' @ 0 : 0; will stop at (end) +2023/11/05-16:40:21.662 707c Recovering log #575 +2023/11/05-16:40:21.666 707c Delete type=0 #575 +2023/11/05-16:40:21.666 707c Delete type=3 #574 +2023/11/05-16:45:37.114 1208 Level-0 table #579: started +2023/11/05-16:45:37.115 1208 Level-0 table #579: 3010 bytes OK +2023/11/05-16:45:37.117 1208 Delete type=0 #577 +2023/11/05-16:45:37.120 1208 Manual compaction at level-0 from '!items!04UCY4s8EF3iZnCN' @ 72057594037927935 : 1 .. '!items!ybZJ0nAa5nVWBokc' @ 0 : 0; will stop at '!items!WkzCUjTOCTI60Uwg' @ 372 : 1 +2023/11/05-16:45:37.120 1208 Compacting 1@0 + 1@1 files +2023/11/05-16:45:37.122 1208 Generated table #580@0: 40 keys, 14461 bytes +2023/11/05-16:45:37.122 1208 Compacted 1@0 + 1@1 files => 14461 bytes +2023/11/05-16:45:37.124 1208 compacted to: files[ 0 1 0 0 0 0 0 ] +2023/11/05-16:45:37.124 1208 Delete type=2 #503 +2023/11/05-16:45:37.124 1208 Delete type=2 #579 +2023/11/05-16:45:37.126 1208 Manual compaction at level-0 from '!items!WkzCUjTOCTI60Uwg' @ 372 : 1 .. '!items!ybZJ0nAa5nVWBokc' @ 0 : 0; will stop at (end) diff --git a/packs/poke-edges/MANIFEST-000556 b/packs/poke-edges/MANIFEST-000556 deleted file mode 100644 index 26796febf..000000000 Binary files a/packs/poke-edges/MANIFEST-000556 and /dev/null differ diff --git a/packs/poke-edges/MANIFEST-000581 b/packs/poke-edges/MANIFEST-000581 new file mode 100644 index 000000000..c452464c2 Binary files /dev/null and b/packs/poke-edges/MANIFEST-000581 differ diff --git a/packs/references/000286.log b/packs/references/000309.log similarity index 100% rename from packs/references/000286.log rename to packs/references/000309.log diff --git a/packs/references/CURRENT b/packs/references/CURRENT index 0041f5d4e..b0ac6fc07 100644 --- a/packs/references/CURRENT +++ b/packs/references/CURRENT @@ -1 +1 @@ -MANIFEST-000284 +MANIFEST-000307 diff --git a/packs/references/LOG b/packs/references/LOG index 99ae9d936..bf9ea920e 100644 --- a/packs/references/LOG +++ b/packs/references/LOG @@ -1,8 +1,8 @@ -2023/10/19-17:29:07.596 f724 Recovering log #282 -2023/10/19-17:29:07.600 f724 Delete type=0 #282 -2023/10/19-17:29:07.600 f724 Delete type=3 #280 -2023/10/19-17:34:30.364 9300 Level-0 table #287: started -2023/10/19-17:34:30.364 9300 Level-0 table #287: 0 bytes OK -2023/10/19-17:34:30.365 9300 Delete type=0 #285 -2023/10/19-17:34:30.370 9300 Manual compaction at level-0 from '!items!0EVKSbyPCs2XLT8d' @ 72057594037927935 : 1 .. '!items!zFN2psnsbSBIeGrm' @ 0 : 0; will stop at (end) -2023/10/19-17:34:30.370 9300 Manual compaction at level-1 from '!items!0EVKSbyPCs2XLT8d' @ 72057594037927935 : 1 .. '!items!zFN2psnsbSBIeGrm' @ 0 : 0; will stop at (end) +2023/11/05-16:47:28.150 4250 Recovering log #305 +2023/11/05-16:47:28.156 4250 Delete type=0 #305 +2023/11/05-16:47:28.157 4250 Delete type=3 #303 +2023/11/05-16:52:28.712 1208 Level-0 table #310: started +2023/11/05-16:52:28.712 1208 Level-0 table #310: 0 bytes OK +2023/11/05-16:52:28.713 1208 Delete type=0 #308 +2023/11/05-16:52:28.715 1208 Manual compaction at level-0 from '!items!0EVKSbyPCs2XLT8d' @ 72057594037927935 : 1 .. '!items!zFN2psnsbSBIeGrm' @ 0 : 0; will stop at (end) +2023/11/05-16:52:28.725 1208 Manual compaction at level-1 from '!items!0EVKSbyPCs2XLT8d' @ 72057594037927935 : 1 .. '!items!zFN2psnsbSBIeGrm' @ 0 : 0; will stop at (end) diff --git a/packs/references/LOG.old b/packs/references/LOG.old index a877ef154..a0a026e0c 100644 --- a/packs/references/LOG.old +++ b/packs/references/LOG.old @@ -1,8 +1,8 @@ -2023/10/18-17:43:33.888 828 Recovering log #278 -2023/10/18-17:43:33.893 828 Delete type=0 #278 -2023/10/18-17:43:33.893 828 Delete type=3 #276 -2023/10/19-17:28:46.606 2714 Level-0 table #283: started -2023/10/19-17:28:46.606 2714 Level-0 table #283: 0 bytes OK -2023/10/19-17:28:46.608 2714 Delete type=0 #281 -2023/10/19-17:28:46.612 2714 Manual compaction at level-0 from '!items!0EVKSbyPCs2XLT8d' @ 72057594037927935 : 1 .. '!items!zFN2psnsbSBIeGrm' @ 0 : 0; will stop at (end) -2023/10/19-17:28:46.612 2714 Manual compaction at level-1 from '!items!0EVKSbyPCs2XLT8d' @ 72057594037927935 : 1 .. '!items!zFN2psnsbSBIeGrm' @ 0 : 0; will stop at (end) +2023/11/05-16:40:21.720 707c Recovering log #302 +2023/11/05-16:40:21.723 707c Delete type=0 #302 +2023/11/05-16:40:21.723 707c Delete type=3 #301 +2023/11/05-16:45:37.131 1208 Level-0 table #306: started +2023/11/05-16:45:37.131 1208 Level-0 table #306: 0 bytes OK +2023/11/05-16:45:37.135 1208 Delete type=0 #304 +2023/11/05-16:45:37.138 1208 Manual compaction at level-0 from '!items!0EVKSbyPCs2XLT8d' @ 72057594037927935 : 1 .. '!items!zFN2psnsbSBIeGrm' @ 0 : 0; will stop at (end) +2023/11/05-16:45:37.138 1208 Manual compaction at level-1 from '!items!0EVKSbyPCs2XLT8d' @ 72057594037927935 : 1 .. '!items!zFN2psnsbSBIeGrm' @ 0 : 0; will stop at (end) diff --git a/packs/references/MANIFEST-000284 b/packs/references/MANIFEST-000307 similarity index 74% rename from packs/references/MANIFEST-000284 rename to packs/references/MANIFEST-000307 index 186b9333c..dce61833f 100644 Binary files a/packs/references/MANIFEST-000284 and b/packs/references/MANIFEST-000307 differ diff --git a/packs/species/000645.ldb b/packs/species/000663.ldb similarity index 96% rename from packs/species/000645.ldb rename to packs/species/000663.ldb index ce3dbcf59..6539fcb41 100644 Binary files a/packs/species/000645.ldb and b/packs/species/000663.ldb differ diff --git a/packs/species/000646.ldb b/packs/species/000664.ldb similarity index 95% rename from packs/species/000646.ldb rename to packs/species/000664.ldb index 7db50b364..e2ea1b46c 100644 Binary files a/packs/species/000646.ldb and b/packs/species/000664.ldb differ diff --git a/packs/species/000647.ldb b/packs/species/000665.ldb similarity index 95% rename from packs/species/000647.ldb rename to packs/species/000665.ldb index 08866abce..c31730457 100644 Binary files a/packs/species/000647.ldb and b/packs/species/000665.ldb differ diff --git a/packs/species/000648.ldb b/packs/species/000666.ldb similarity index 93% rename from packs/species/000648.ldb rename to packs/species/000666.ldb index bc22c7dec..6df794158 100644 Binary files a/packs/species/000648.ldb and b/packs/species/000666.ldb differ diff --git a/packs/species/000679.log b/packs/species/000702.log similarity index 100% rename from packs/species/000679.log rename to packs/species/000702.log diff --git a/packs/species/CURRENT b/packs/species/CURRENT index a3cd4bcc9..ccc3af6a3 100644 --- a/packs/species/CURRENT +++ b/packs/species/CURRENT @@ -1 +1 @@ -MANIFEST-000677 +MANIFEST-000700 diff --git a/packs/species/LOG b/packs/species/LOG index 26e911a11..4753c7098 100644 --- a/packs/species/LOG +++ b/packs/species/LOG @@ -1,7 +1,7 @@ -2023/10/19-17:29:07.561 f724 Recovering log #675 -2023/10/19-17:29:07.566 f724 Delete type=0 #675 -2023/10/19-17:29:07.566 f724 Delete type=3 #673 -2023/10/19-17:34:30.352 9300 Level-0 table #680: started -2023/10/19-17:34:30.352 9300 Level-0 table #680: 0 bytes OK -2023/10/19-17:34:30.354 9300 Delete type=0 #678 -2023/10/19-17:34:30.358 9300 Manual compaction at level-0 from '!folders!CMymFngAhNsaPlS5' @ 72057594037927935 : 1 .. '!items!zyXhWVwTmu553jFn' @ 0 : 0; will stop at (end) +2023/11/05-16:47:28.101 4250 Recovering log #698 +2023/11/05-16:47:28.106 4250 Delete type=0 #698 +2023/11/05-16:47:28.106 4250 Delete type=3 #696 +2023/11/05-16:52:28.713 1208 Level-0 table #703: started +2023/11/05-16:52:28.713 1208 Level-0 table #703: 0 bytes OK +2023/11/05-16:52:28.715 1208 Delete type=0 #701 +2023/11/05-16:52:28.715 1208 Manual compaction at level-0 from '!folders!CMymFngAhNsaPlS5' @ 72057594037927935 : 1 .. '!items!zyXhWVwTmu553jFn' @ 0 : 0; will stop at (end) diff --git a/packs/species/LOG.old b/packs/species/LOG.old index 632afb065..43ec89333 100644 --- a/packs/species/LOG.old +++ b/packs/species/LOG.old @@ -1,7 +1,7 @@ -2023/10/18-17:43:33.836 828 Recovering log #671 -2023/10/18-17:43:33.843 828 Delete type=0 #671 -2023/10/18-17:43:33.843 828 Delete type=3 #669 -2023/10/19-17:28:46.608 2714 Level-0 table #676: started -2023/10/19-17:28:46.609 2714 Level-0 table #676: 0 bytes OK -2023/10/19-17:28:46.610 2714 Delete type=0 #674 -2023/10/19-17:28:46.612 2714 Manual compaction at level-0 from '!folders!CMymFngAhNsaPlS5' @ 72057594037927935 : 1 .. '!items!zyXhWVwTmu553jFn' @ 0 : 0; will stop at (end) +2023/11/05-16:40:21.685 707c Recovering log #695 +2023/11/05-16:40:21.689 707c Delete type=0 #695 +2023/11/05-16:40:21.689 707c Delete type=3 #694 +2023/11/05-16:45:37.124 1208 Level-0 table #699: started +2023/11/05-16:45:37.124 1208 Level-0 table #699: 0 bytes OK +2023/11/05-16:45:37.125 1208 Delete type=0 #697 +2023/11/05-16:45:37.131 1208 Manual compaction at level-0 from '!folders!CMymFngAhNsaPlS5' @ 72057594037927935 : 1 .. '!items!zyXhWVwTmu553jFn' @ 0 : 0; will stop at (end) diff --git a/packs/species/MANIFEST-000677 b/packs/species/MANIFEST-000677 deleted file mode 100644 index 056faf18d..000000000 Binary files a/packs/species/MANIFEST-000677 and /dev/null differ diff --git a/packs/species/MANIFEST-000700 b/packs/species/MANIFEST-000700 new file mode 100644 index 000000000..296245108 Binary files /dev/null and b/packs/species/MANIFEST-000700 differ diff --git a/packs/spirit-actions/000216.log b/packs/spirit-actions/000239.log similarity index 100% rename from packs/spirit-actions/000216.log rename to packs/spirit-actions/000239.log diff --git a/packs/spirit-actions/CURRENT b/packs/spirit-actions/CURRENT index f0a2cf159..57069b4e7 100644 --- a/packs/spirit-actions/CURRENT +++ b/packs/spirit-actions/CURRENT @@ -1 +1 @@ -MANIFEST-000214 +MANIFEST-000237 diff --git a/packs/spirit-actions/LOG b/packs/spirit-actions/LOG index 8d2168d63..1ffd36f35 100644 --- a/packs/spirit-actions/LOG +++ b/packs/spirit-actions/LOG @@ -1,8 +1,8 @@ -2023/10/19-17:29:07.602 5b0 Recovering log #212 -2023/10/19-17:29:07.607 5b0 Delete type=0 #212 -2023/10/19-17:29:07.607 5b0 Delete type=3 #210 -2023/10/19-17:34:30.368 9300 Level-0 table #217: started -2023/10/19-17:34:30.368 9300 Level-0 table #217: 0 bytes OK -2023/10/19-17:34:30.369 9300 Delete type=0 #215 -2023/10/19-17:34:30.370 9300 Manual compaction at level-0 from '!folders!DIBPjL86EbMDaAMi' @ 72057594037927935 : 1 .. '!items!zW8DWXGrCPQAtxWZ' @ 0 : 0; will stop at (end) -2023/10/19-17:34:30.370 9300 Manual compaction at level-1 from '!folders!DIBPjL86EbMDaAMi' @ 72057594037927935 : 1 .. '!items!zW8DWXGrCPQAtxWZ' @ 0 : 0; will stop at (end) +2023/11/05-16:47:28.159 707c Recovering log #235 +2023/11/05-16:47:28.163 707c Delete type=0 #235 +2023/11/05-16:47:28.163 707c Delete type=3 #233 +2023/11/05-16:52:28.725 1208 Level-0 table #240: started +2023/11/05-16:52:28.725 1208 Level-0 table #240: 0 bytes OK +2023/11/05-16:52:28.727 1208 Delete type=0 #238 +2023/11/05-16:52:28.728 1208 Manual compaction at level-0 from '!folders!DIBPjL86EbMDaAMi' @ 72057594037927935 : 1 .. '!items!zW8DWXGrCPQAtxWZ' @ 0 : 0; will stop at (end) +2023/11/05-16:52:28.728 1208 Manual compaction at level-1 from '!folders!DIBPjL86EbMDaAMi' @ 72057594037927935 : 1 .. '!items!zW8DWXGrCPQAtxWZ' @ 0 : 0; will stop at (end) diff --git a/packs/spirit-actions/LOG.old b/packs/spirit-actions/LOG.old index 1f629a205..03eae7945 100644 --- a/packs/spirit-actions/LOG.old +++ b/packs/spirit-actions/LOG.old @@ -1,8 +1,8 @@ -2023/10/18-17:43:33.895 32bc Recovering log #208 -2023/10/18-17:43:33.900 32bc Delete type=0 #208 -2023/10/18-17:43:33.900 32bc Delete type=3 #206 -2023/10/19-17:28:46.611 2714 Level-0 table #213: started -2023/10/19-17:28:46.611 2714 Level-0 table #213: 0 bytes OK -2023/10/19-17:28:46.612 2714 Delete type=0 #211 -2023/10/19-17:28:46.612 2714 Manual compaction at level-0 from '!folders!DIBPjL86EbMDaAMi' @ 72057594037927935 : 1 .. '!items!zW8DWXGrCPQAtxWZ' @ 0 : 0; will stop at (end) -2023/10/19-17:28:46.612 2714 Manual compaction at level-1 from '!folders!DIBPjL86EbMDaAMi' @ 72057594037927935 : 1 .. '!items!zW8DWXGrCPQAtxWZ' @ 0 : 0; will stop at (end) +2023/11/05-16:40:21.727 7080 Recovering log #232 +2023/11/05-16:40:21.731 7080 Delete type=0 #232 +2023/11/05-16:40:21.731 7080 Delete type=3 #231 +2023/11/05-16:45:37.135 1208 Level-0 table #236: started +2023/11/05-16:45:37.135 1208 Level-0 table #236: 0 bytes OK +2023/11/05-16:45:37.138 1208 Delete type=0 #234 +2023/11/05-16:45:37.138 1208 Manual compaction at level-0 from '!folders!DIBPjL86EbMDaAMi' @ 72057594037927935 : 1 .. '!items!zW8DWXGrCPQAtxWZ' @ 0 : 0; will stop at (end) +2023/11/05-16:45:37.138 1208 Manual compaction at level-1 from '!folders!DIBPjL86EbMDaAMi' @ 72057594037927935 : 1 .. '!items!zW8DWXGrCPQAtxWZ' @ 0 : 0; will stop at (end) diff --git a/packs/spirit-actions/MANIFEST-000214 b/packs/spirit-actions/MANIFEST-000237 similarity index 71% rename from packs/spirit-actions/MANIFEST-000214 rename to packs/spirit-actions/MANIFEST-000237 index 48cd9ef0d..f10f7662f 100644 Binary files a/packs/spirit-actions/MANIFEST-000214 and b/packs/spirit-actions/MANIFEST-000237 differ diff --git a/src/module/actor/base.js b/src/module/actor/base.js index 93790d1ed..238a4a114 100644 --- a/src/module/actor/base.js +++ b/src/module/actor/base.js @@ -27,7 +27,7 @@ class PTUActor extends Actor { } get rollOptions() { - return this.flags.ptu?.rollOptions; + return this.flags.ptu?.rollOptions; } get combatant() { @@ -230,7 +230,8 @@ class PTUActor extends Actor { tokenOverrides: {}, speciesOverride: {}, typeOverride: {}, - effectiveness: [] + effectiveness: [], + apAdjustments: {drained: [], bound: []} } super._initialize(); @@ -285,8 +286,8 @@ class PTUActor extends Actor { this.system.alliance = ["party", "opposition", null].includes(this.system.alliance) ? this.system.alliance : this.hasPlayerOwner - ? "party" - : "opposition"; + ? "party" + : "opposition"; } prepareDerivedData() { @@ -586,7 +587,10 @@ class PTUActor extends Actor { if (bars > 0) { const newBars = Math.max(bars - 1, 0); hpUpdate.updates["system.boss.bars"] = newBars; - hpUpdate.updates["system.health.value"] = this.system.health.max; + hpUpdate.updates["system.health.value"] = + (injuries > this.system.health.injuries) + ? Math.trunc(this.system.health.total * (1 - ((this.system.modifiers.hardened ? Math.min(this.system.health.injuries, 5) : this.system.health.injuries) / 10))) + : this.system.health.max; //TODO: Apply Injuries await this.update(hpUpdate.updates); bossStatement = game.i18n.format("PTU.ApplyDamage.BossBarBroken", { actor: this.link, bars: newBars }); @@ -795,9 +799,9 @@ class PTUActor extends Actor { const adjustment = applications.filter(a => a.adjustment).reduce((sum, a) => sum + a.adjustment, 0); const finalDamage = (() => { - if(applications.length === 1 && applications[0].category === "immunity" && applications[0].adjustment === -reduced) return 0; + if (applications.length === 1 && applications[0].category === "immunity" && applications[0].adjustment === -reduced) return 0; return Math.max(reduced + adjustment, 1); - })(); + })(); return { finalDamage, additionalApplications: applications }; } @@ -842,14 +846,14 @@ class PTUActor extends Actor { _onUpdate(data, options, userId) { super._onUpdate(data, options, userId); - if(data.system?.health?.value !== undefined) { - if(data.system.health.value <= 0 && game.settings.get("ptu", "automation.autoFaint")) { + if (data.system?.health?.value !== undefined) { + if (data.system.health.value <= 0 && game.settings.get("ptu", "automation.autoFaint")) { const fainted = this.conditions.bySlug("fainted"); - if(fainted.length === 0) PTUCondition.FromEffects([{id: "fainted"}]).then(items => this.createEmbeddedDocuments("Item", items)); + if (fainted.length === 0) PTUCondition.FromEffects([{ id: "fainted" }]).then(items => this.createEmbeddedDocuments("Item", items)); } else if (data.system.health.value > 0 && game.settings.get("ptu", "automation.autoFaintRecovery")) { const fainted = this.conditions.bySlug("fainted"); - if(fainted.length > 0) fainted.forEach(f => f.delete()); + if (fainted.length > 0) fainted.forEach(f => f.delete()); } } @@ -938,87 +942,69 @@ class PTUActor extends Actor { const struggles = includeStruggles ? (() => { const types = Object.keys(CONFIG.PTU.data.typeEffectiveness) - const strugglePlusRollOption = this.rollOptions.struggle ? Object.keys(this.rollOptions.struggle).find(o => o.startsWith("skill:")) : false; + // Get the data common between all Struggles out of the way first + const strugglePlusRollOptions = this.rollOptions.struggle ? Object.keys(this.rollOptions.struggle).filter(o => o.startsWith("skill:")) : []; + const isStrugglePlus = (() => { + for(const skill of strugglePlusRollOptions) { + if (this.system.skills?.[skill.replace("skill:", "")]?.value?.total > 4) return true; + } + return this.system.skills?.combat?.value?.total > 4; + })(); - const struggles = types.reduce((arr, type) => { - if (this.rollOptions.struggle?.[`${type.toLocaleLowerCase(game.i18n.lang)}`]) { - const rule = this.rules.find(r => !r.ignored && r.key == "RollOption" && r.domain == "struggle" && r.option == type.toLocaleLowerCase(game.i18n.lang)); - const strugglePlus = (() => { - if (strugglePlusRollOption) return this.system.skills?.[strugglePlusRollOption.replace("skill:", "")]?.value?.total > 4; - return this.system.skills?.combat?.value?.total > 4; - })(); - const moveData = { + const constructStruggleItem = (type, category, range, ptuFlags, isRangedStruggle = false) => { + return new Item.implementation({ name: `Struggle (${type})`, type: "move", img: CONFIG.PTU.data.typeEffectiveness[type].images.icon, system: { - ac: strugglePlus ? 3 : 4, - damageBase: strugglePlus ? 5 : 4, + ac: isStrugglePlus ? 3 : 4, + damageBase: isStrugglePlus ? 5 : 4, stab: false, - type: type, frequency: "At-Will", - isStruggle: true + isStruggle: true, + isRangedStruggle: isRangedStruggle, + category: category, + range: range, + type: type }, flags: { - ptu: {} + ptu: ptuFlags || {} } + }, + { + parent: this, + temporary: true } - if (rule) moveData.flags.ptu.grantedBy = { - id: rule.item.id, - onDelete: 'detach' + ) + } + + const struggles = types.reduce((arr, type) => { + const localType = type.toLocaleLowerCase(game.i18n.lang); + + if (this.rollOptions.struggle?.[localType]) { + // If has :ranged option + if (this.rollOptions.struggle?.[`${localType}:ranged`]) { + const typeRule = this.rules.find(r => !r.ignored && r.key == "RollOption" && r.domain == "struggle" && r.option == `${localType}:ranged`); + const ptuFlags = typeRule ? { grantedBy: { id: typeRule.item.id, onDelete: 'detach' } } : {}; + arr.push(constructStruggleItem(type, "Physical", `6, 1 Target`, ptuFlags, true)) + arr.push(constructStruggleItem(type, "Special", `6, 1 Target`, ptuFlags, true)) + return arr; } - arr.push( - new Item.implementation(mergeObject(moveData, { - system: { - category: "Physical", - range: type == "Normal" ? `${this.system.skills?.focus?.value?.total ?? 1}, 1 Target` : "Melee, 1 Target" - }, - }), - { - parent: this, - temporary: true - }) - ) - arr.push( - new Item.implementation(mergeObject(moveData, { - system: { - category: "Special", - range: type == "Normal" ? `${this.system.skills?.focus?.value?.total ?? 1}, 1 Target` : "Melee, 1 Target" - }, - }), - { - parent: this, - temporary: true - }) - ) + + const typeRule = this.rules.find(r => !r.ignored && r.key == "RollOption" && r.domain == "struggle" && r.option == localType); + const ptuFlags = typeRule ? { grantedBy: { id: typeRule.item.id, onDelete: 'detach' } } : {}; + + // Cover for telekinetic + const range = localType === "normal" ? `${this.system.skills?.focus?.value?.total ?? 1}` : "Melee" + arr.push(constructStruggleItem(type, "Physical", `${range}, 1 Target`, ptuFlags)) + arr.push(constructStruggleItem(type, "Special", `${range}, 1 Target`, ptuFlags)) + return arr; } - else if (type == "Normal") { - const strugglePlus = (() => { - if (strugglePlusRollOption) return this.system.skills?.[strugglePlusRollOption.replace("skill:", "")]?.value?.total > 4; - return this.system.skills?.combat?.value?.total > 4; - })(); - arr.push( - new Item.implementation({ - name: `Struggle (Normal)`, - type: "move", - img: CONFIG.PTU.data.typeEffectiveness.Normal.images.icon, - system: { - ac: strugglePlus ? 3 : 4, - damageBase: strugglePlus ? 5 : 4, - stab: false, - type: "Normal", - frequency: "At-Will", - category: "Physical", - range: "Melee, 1 Target", - isStruggle: true - }, - }, - { - parent: this, - temporary: true - }) - ) + + if (localType === "normal") { + arr.push(constructStruggleItem(type, "Physical", "Melee, 1 Target")) } + return arr; }, []); @@ -1030,8 +1016,6 @@ class PTUActor extends Actor { for (const move of this.itemTypes.move) { if (move.system.isStruggle) continue; - let clone; - this.flags.ptu.disabledOptions.push({ "label": move.name, "value": move.slug, @@ -1041,12 +1025,7 @@ class PTUActor extends Actor { }] }); - // if (move.system.category !== "Status" && this.types.includes(move.system.type)) { - // const db = isNaN(Number(move.system.damageBase)) ? 0 : Number(move.system.damageBase); - // clone = move.clone({ "system.damageBase": db + 2 }, { keepId: true }); - // } - // else - clone = move.clone({}, { keepId: true }); + const clone = move.clone({}, { keepId: true }); for (const rule of clone.prepareRuleElements()) { if (rule instanceof CONFIG.PTU.rule.elements.builtin.RollOption && !rule.ignored) { @@ -1066,7 +1045,7 @@ class PTUActor extends Actor { } prepareAttack(move) { - const attackRollOptions = move.getRollOptions("item"); + const attackRollOptions = move.getRollOptions("attack"); const modifiers = []; const selectors = [ @@ -1482,8 +1461,8 @@ class PTUActor extends Actor { const targetOptions = new Set(targetActor ? getTargetRollOptions(targetActor) : targetRollOptions); - if(targetOptions.has("target:immune:flanked")) targetOptions.delete("target:flanked"); - else if(isFlanked) targetOptions.add("target:flanked"); + if (targetOptions.has("target:immune:flanked")) targetOptions.delete("target:flanked"); + else if (isFlanked) targetOptions.add("target:flanked"); const rollOptions = new Set([ ...selfOptions, diff --git a/src/module/actor/character/capabilities.js b/src/module/actor/character/capabilities.js index 4da08114c..33833596c 100644 --- a/src/module/actor/character/capabilities.js +++ b/src/module/actor/character/capabilities.js @@ -110,7 +110,7 @@ function calculateTrainerCapabilities(trainerSkills, items, speedCombatStages, m capabilities["swim"] = (mods["Deep Diver"] ? capabilities["overland"] : Math.trunc(capabilities["overland"] / 2)) + mods["Swim"] for(const key of Object.keys(capabilities)) { - const allBonus = (key == "highJump" || key == "longJump" || key == "power" || key == "throwingRange") ? 0 : Number(modifiers["all"] ?? 0) + const allBonus = (CONFIG.PTU.Capabilities.numericNonMovement.includes(key)) ? 0 : Number(modifiers["all"]) || 0 capabilities[key] = Math.max(1, capabilities[key] + (modifiers[key] ?? 0) + allBonus); } for(const key of Object.keys(modifiers)) { diff --git a/src/module/actor/character/document.js b/src/module/actor/character/document.js index d7517a30d..3093e6b61 100644 --- a/src/module/actor/character/document.js +++ b/src/module/actor/character/document.js @@ -30,12 +30,17 @@ class PTUTrainerActor extends PTUActor { system.skills[novice].value.mod += 1; } - system.level.dexexp = game.settings.get("ptu", "variant.useDexExp") == true ? (this.system.dex?.owned?.length || 0) : 0; + system.level.dexexp = game.settings.get("ptu", "variant.useDexExp") == true + ? (this.system.dex?.owned?.length || 0) + : game.settings.get("ptu", "variant.advancementRework") && game.settings.get("ptu", "variant.trainerRevamp") + ? (this.system.dex?.owned?.length || 0) + : 0; + const levelUpRequirement = game.settings.get("ptu", "variant.advancementRework") && game.settings.get("ptu", "variant.trainerRevamp") ? 20 : 10; system.level.current = Math.clamped( 1 + Number(system.level.milestones) - + Math.trunc((Number(system.level.miscexp) / 10) + (Number(system.level.dexexp) / 10)), + + Math.trunc((Number(system.level.miscexp) / levelUpRequirement) + (Number(system.level.dexexp) / levelUpRequirement)), 1, (game.settings.get("ptu", "variant.trainerRevamp") ? 25 : 50) ); @@ -148,7 +153,9 @@ class PTUTrainerActor extends PTUActor { + (game.settings.get("ptu", "variant.trainerRevamp") ? (system.level.current >= 25 ? 1 : 0) : 0) } - system.ap.max = 5 + Math.floor(system.level.current / 5); + system.ap.bound = Number(this.synthetics.apAdjustments.bound.map(b => b.value).reduce((a,b)=> a+b, 0)) || 0 + system.ap.drained = Number(this.synthetics.apAdjustments.drained.map(d => d.value).reduce((a,b)=> a+b, 0)) || 0 + system.ap.max = this.baseMaxAp - system.ap.bound - system.ap.drained system.initiative = { value: system.stats.spd.total + system.modifiers.initiative.total }; @@ -184,6 +191,10 @@ class PTUTrainerActor extends PTUActor { this.attributes.health.max = system.health.max; } + get baseMaxAp() { + return 5 + Math.floor(this.system.level.current / 5); + } + _calcBaseStats() { const stats = duplicate(this.system.stats); @@ -225,6 +236,28 @@ class PTUTrainerActor extends PTUActor { if (!changes["system"]["skills"][novice]['value']['mod']) changes["system"]["skills"][novice]['value']['mod'] = {} changes["system"]["skills"][novice]['value']['mod'][randomID()] = { mode: 'add', value: 1, source: "Novice Background Skill" }; } + changes.system.maxAp = { + 1: { + source: "Level", + mode: "add", + value: this.baseMaxAp, + } + } + let maxApIndex = 2 + this.synthetics.apAdjustments.bound.filter(b => Number(b.value)).forEach(b => { + changes.system.maxAp[maxApIndex++] = { + source: `${fromUuidSync(b.sourceUuid).name} (Bound)`, + mode: "add", + value: - b.value + } + }) + this.synthetics.apAdjustments.drained.filter(b => Number(b.value)).forEach(b => { + changes.system.maxAp[maxApIndex++] = { + source: `${fromUuidSync(b.sourceUuid).name} (Drained)`, + mode: "add", + value: - b.value + } + }) this.system.changes = mergeObject( this.system.changes, changes diff --git a/src/module/actor/pokemon/document.js b/src/module/actor/pokemon/document.js index 69892c72e..2cb1183d6 100644 --- a/src/module/actor/pokemon/document.js +++ b/src/module/actor/pokemon/document.js @@ -15,7 +15,7 @@ class PTUPokemonActor extends PTUActor { get species() { if (this.itemTypes.species.length > 1) console.warn(`Found more than one species for ${this.name}`); - if(this.synthetics.speciesOverride.species) { + if (this.synthetics.speciesOverride.species) { return this.synthetics.speciesOverride.species; } return this.itemTypes.species[0]; @@ -73,8 +73,8 @@ class PTUPokemonActor extends PTUActor { system.skills[skill]["value"]["mod"] -= 1; } - if(game.settings.get("ptu", "variant.spiritPlaytest")) { - switch(system.spirit.value) { + if (game.settings.get("ptu", "variant.spiritPlaytest")) { + switch (system.spirit.value) { case 5: case 4: case 3: { @@ -119,19 +119,19 @@ class PTUPokemonActor extends PTUActor { } system.level.current = calculateLevel(system.level.exp); - + system.level.expTillNextLevel = CONFIG.PTU.data.levelProgression[Math.min(system.level.current + 1, 100)]; system.level.percent = Math.round( ( - (system.level.exp - CONFIG.PTU.data.levelProgression[system.level.current]) - / + (system.level.exp - CONFIG.PTU.data.levelProgression[system.level.current]) + / (system.level.expTillNextLevel - CONFIG.PTU.data.levelProgression[system.level.current]) ) * 100); - + // Set attributes which are underrived data this.attributes = { - level: {current: system.level.current, tillNext: system.level.expTillNextLevel, percent: system.level.percent}, + level: { current: system.level.current, tillNext: system.level.expTillNextLevel, percent: system.level.percent }, health: { current: system.health.value, temp: system.tempHp, injuries: system.health.injuries }, skills: {}, } @@ -148,8 +148,8 @@ class PTUPokemonActor extends PTUActor { } const speciesSystem = this.species.system; - if(!speciesSystem) { - if(this.species.uuid) this.reloadOnReady = true; + if (!speciesSystem) { + if (this.species.uuid) this.reloadOnReady = true; return console.warn(`Unable to prepare derived data for ${this.name} as its species has no system data, this is most likely caused due to having a temporary species set on reload. If so you may ignore this message.`); } @@ -216,13 +216,13 @@ class PTUPokemonActor extends PTUActor { } system.typing = speciesSystem?.types ?? ['Untyped']; - if(types.length > 0) system.typing = types; - if(this.synthetics.typeOverride.typing) system.typing = this.synthetics.typeOverride.typing; + if (types.length > 0) system.typing = types; + if (this.synthetics.typeOverride.typing) system.typing = this.synthetics.typeOverride.typing; // for (const type of system.typing) { // this.flags.ptu.rollOptions.all["self:types:" + type.toLowerCase()] = true; // } - if(system.shiny) this.flags.ptu.rollOptions.all["self:pokemon:shiny"] = true; + if (system.shiny) this.flags.ptu.rollOptions.all["self:pokemon:shiny"] = true; system.health.total = 10 + system.level.current + (system.stats.hp.total * 3); system.health.max = system.health.injuries > 0 ? Math.trunc(system.health.total * (1 - ((system.modifiers.hardened ? Math.min(system.health.injuries, 5) : system.health.injuries) / 10))) : system.health.total; @@ -270,9 +270,9 @@ class PTUPokemonActor extends PTUActor { cute: system.contests.stats.cute } system.contests.voltage.value = this.trainer?.system?.contests?.voltage?.value ?? 0; - for(const stat of Object.keys(system.contests.stats)) { + for (const stat of Object.keys(system.contests.stats)) { const combatStat = (() => { - switch(stat) { + switch (stat) { case "cool": return "atk"; case "tough": return "def"; case "beauty": return "spatk"; @@ -297,6 +297,8 @@ class PTUPokemonActor extends PTUActor { this.attributes.health.max = system.health.max; + this.attributes.level.cap = Math.ceil(5 + (1.58 * ((this.trainer?.system.level.current ?? 0) * (game.settings.get("ptu", "variant.trainerRevamp") ? 2 : 1))) + ((4 / 3) * (system.friendship ?? 0) * Math.pow(1 + (((this.trainer?.system.level.current ?? 0) * (game.settings.get("ptu", "variant.trainerRevamp") ? 2 : 1)) / 34), 2))); + /* The Corner of Exceptions */ // Shedinja will always be a special case. @@ -314,12 +316,12 @@ class PTUPokemonActor extends PTUActor { stats[stat].base = speciesStats?.[stat] ?? 1; } - if(this.rollOptions.all["pokeedge:hybrid-attacker"]) { + if (this.rollOptions.all["pokeedge:hybrid-attacker"]) { const equalized = Math.ceil((stats.atk.base + stats.spatk.base) / 2); stats.atk.base = equalized; stats.spatk.base = equalized; } - if(this.rollOptions.all["pokeedge:hybrid-defender"]) { + if (this.rollOptions.all["pokeedge:hybrid-defender"]) { const equalized = Math.ceil((stats.def.base + stats.spdef.base) / 2); stats.def.base = equalized; stats.spdef.base = equalized; @@ -354,27 +356,51 @@ class PTUPokemonActor extends PTUActor { // TODO: Implement rules for capability changing items _calcCapabilities() { - const capabilities = duplicate(this.species?.system?.capabilities ?? {}); - if (!capabilities) return {}; + const speciesCapabilities = duplicate(this.species?.system?.capabilities ?? {}); + if (!speciesCapabilities) return {}; + + const finalCapabilities = {} + // Anything that is not a part of CONFIG.PTU.Capabilities.numericNonMovement or CONFIG.PTU.Capabilities.stringArray is considered movement, without explicitly listing them hardcoded. + const capsFromSpeciesOrModifiers = [...Object.keys(this.system.modifiers.capabilities), ...Object.keys(speciesCapabilities)] + const movementCapabilities = capsFromSpeciesOrModifiers.filter(cap => !CONFIG.PTU.Capabilities.stringArray.includes(cap) || !CONFIG.PTU.Capabilities.numericNonMovement.includes(cap)) const speedCombatStages = this.system.stats.spd.stage.value + this.system.stats.spd.stage.mod; const spdCsChanges = speedCombatStages > 0 ? Math.floor(speedCombatStages / 2) : speedCombatStages < 0 ? Math.ceil(speedCombatStages / 2) : 0; - const capabilityMod = Number(this.system.modifiers.capabilities.all ?? 0); - for (const key of Object.keys(capabilities)) { - if (key == "highJump" || key == "longJump" || key == "power" || key == "weightClass" || key == "naturewalk" || key == "other") continue; - if (capabilities[key] > 0) { - capabilities[key] = Math.max(capabilities[key] + spdCsChanges + capabilityMod, capabilities[key] > 1 ? 2 : 1) - if (this.rollOptions.conditions?.["slowed"]) capabilities[key] = Math.max(1, Math.floor(capabilities[key] * 0.5)); - capabilities[key] = Math.max(1, capabilities[key] + (this.system.modifiers.capabilities?.[key] ?? 0)); + const omniMovementMod = Number(this.system.modifiers.capabilities.all) || 0; + const slowedMultiplier = this.rollOptions.conditions?.["slowed"] ? 0.5 : 1 + + for (const moveCap of movementCapabilities) { + // If the species got the capability naturally or through explicit modifiers + if (this.system.modifiers.capabilities[moveCap] || speciesCapabilities[moveCap]) { + const mod = this.system.modifiers?.capabilities[moveCap] ? this.system.modifiers?.capabilities[moveCap] : 0 + const speciesCap = speciesCapabilities[moveCap] ? speciesCapabilities[moveCap] : 0 + finalCapabilities[moveCap] = Math.max(1, Math.floor(slowedMultiplier * (speciesCap + spdCsChanges + omniMovementMod + mod))) + } else { + delete finalCapabilities[moveCap]; } } - for(const key of Object.keys(this.system.modifiers.capabilities)) { - if(key == "all") continue; - if(capabilities[key] == 0) capabilities[key] = this.system.modifiers.capabilities[key] + capabilityMod; + for (const nonMoveCap of CONFIG.PTU.Capabilities.numericNonMovement) { + // If the species got the capability naturally or through explicit modifiers + if (this.system.modifiers.capabilities[nonMoveCap] || speciesCapabilities[nonMoveCap]) { + const mod = this.system.modifiers?.capabilities[nonMoveCap] ? this.system.modifiers?.capabilities[nonMoveCap] : 0 + finalCapabilities[nonMoveCap] = Math.max(1, mod + speciesCapabilities[nonMoveCap]) + } + } + + // TODO allow to add more naturewalks to an actor. + for (const arrayCap of CONFIG.PTU.Capabilities.stringArray) { + finalCapabilities[arrayCap] = speciesCapabilities[arrayCap] + } + + // Add any capability to the final capabilities not yet handled + for (const cap of Object.keys(speciesCapabilities)) { + if (!speciesCapabilities[cap] || cap in finalCapabilities) continue; + console.warn(`Actor ${this.uuid} had unexpected Capability ${cap} of ${speciesCapabilities[cap]}`) + finalCapabilities[cap] = speciesCapabilities[cap] } - return capabilities; + return finalCapabilities; } /** @override */ @@ -399,24 +425,24 @@ class PTUPokemonActor extends PTUActor { changes["system"]["skills"][value]['value']['mod'][randomID()] = { mode: 'add', value: -1, source: "Skill Background" }; } } - if(game.settings.get("ptu", "variant.spiritPlaytest")) { - if(!changes["system"]["modifiers"]) changes["system"]["modifiers"] = {} - if(!changes["system"]["modifiers"]["acBonus"]) changes["system"]["modifiers"]["acBonus"] = {} - if(!changes["system"]["modifiers"]["acBonus"]["mod"]) changes["system"]["modifiers"]["acBonus"]["mod"] = {} - if(!changes["system"]["modifiers"]["evasion"]) changes["system"]["modifiers"]["evasion"] = {} - if(!changes["system"]["modifiers"]["evasion"]["physical"]) changes["system"]["modifiers"]["evasion"]["physical"] = {} - if(!changes["system"]["modifiers"]["evasion"]["physical"]["mod"]) changes["system"]["modifiers"]["evasion"]["physical"]["mod"] = {} - if(!changes["system"]["modifiers"]["evasion"]["special"]) changes["system"]["modifiers"]["evasion"]["special"] = {} - if(!changes["system"]["modifiers"]["evasion"]["special"]["mod"]) changes["system"]["modifiers"]["evasion"]["special"]["mod"] = {} - if(!changes["system"]["modifiers"]["evasion"]["speed"]) changes["system"]["modifiers"]["evasion"]["speed"] = {} - if(!changes["system"]["modifiers"]["evasion"]["speed"]["mod"]) changes["system"]["modifiers"]["evasion"]["speed"]["mod"] = {} - if(!changes["system"]["modifiers"]["critRange"]) changes["system"]["modifiers"]["critRange"] = {} - if(!changes["system"]["modifiers"]["critRange"]["mod"]) changes["system"]["modifiers"]["critRange"]["mod"] = {} - if(!changes["system"]["modifiers"]["saveChecks"]) changes["system"]["modifiers"]["saveChecks"] = {} - if(!changes["system"]["modifiers"]["saveChecks"]["mod"]) changes["system"]["modifiers"]["saveChecks"]["mod"] = {} - if(!changes["system"]["modifiers"]["skillBonus"]) changes["system"]["modifiers"]["skillBonus"] = {} - if(!changes["system"]["modifiers"]["skillBonus"]["mod"]) changes["system"]["modifiers"]["skillBonus"]["mod"] = {} - switch(this.system.spirit.value) { + if (game.settings.get("ptu", "variant.spiritPlaytest")) { + if (!changes["system"]["modifiers"]) changes["system"]["modifiers"] = {} + if (!changes["system"]["modifiers"]["acBonus"]) changes["system"]["modifiers"]["acBonus"] = {} + if (!changes["system"]["modifiers"]["acBonus"]["mod"]) changes["system"]["modifiers"]["acBonus"]["mod"] = {} + if (!changes["system"]["modifiers"]["evasion"]) changes["system"]["modifiers"]["evasion"] = {} + if (!changes["system"]["modifiers"]["evasion"]["physical"]) changes["system"]["modifiers"]["evasion"]["physical"] = {} + if (!changes["system"]["modifiers"]["evasion"]["physical"]["mod"]) changes["system"]["modifiers"]["evasion"]["physical"]["mod"] = {} + if (!changes["system"]["modifiers"]["evasion"]["special"]) changes["system"]["modifiers"]["evasion"]["special"] = {} + if (!changes["system"]["modifiers"]["evasion"]["special"]["mod"]) changes["system"]["modifiers"]["evasion"]["special"]["mod"] = {} + if (!changes["system"]["modifiers"]["evasion"]["speed"]) changes["system"]["modifiers"]["evasion"]["speed"] = {} + if (!changes["system"]["modifiers"]["evasion"]["speed"]["mod"]) changes["system"]["modifiers"]["evasion"]["speed"]["mod"] = {} + if (!changes["system"]["modifiers"]["critRange"]) changes["system"]["modifiers"]["critRange"] = {} + if (!changes["system"]["modifiers"]["critRange"]["mod"]) changes["system"]["modifiers"]["critRange"]["mod"] = {} + if (!changes["system"]["modifiers"]["saveChecks"]) changes["system"]["modifiers"]["saveChecks"] = {} + if (!changes["system"]["modifiers"]["saveChecks"]["mod"]) changes["system"]["modifiers"]["saveChecks"]["mod"] = {} + if (!changes["system"]["modifiers"]["skillBonus"]) changes["system"]["modifiers"]["skillBonus"] = {} + if (!changes["system"]["modifiers"]["skillBonus"]["mod"]) changes["system"]["modifiers"]["skillBonus"]["mod"] = {} + switch (this.system.spirit.value) { case 5: case 4: case 3: { diff --git a/src/module/actor/sheet.js b/src/module/actor/sheet.js index 5adcc94ff..d94bdbc52 100644 --- a/src/module/actor/sheet.js +++ b/src/module/actor/sheet.js @@ -19,6 +19,15 @@ class PTUActorSheet extends ActorSheet { onclick: () => this._onConfigureActor(), }); } + + // Add notes button + buttons.unshift({ + label: "Notes", + class: "open-notes", + icon: "fas fa-book", + onclick: () => this.openNotes(), + }) + return buttons; } @@ -30,6 +39,60 @@ class PTUActorSheet extends ActorSheet { async emulateItemDrop(data) { return this._onDropItem({ preventDefault: () => {} }, data); } + + async openNotes() { + const folder = await (async () => { + const folderId = game.settings.get("ptu", "worldNotesFolder"); + if (!folderId) { + if(game.user.isGM) return game.ptu.macros.initializeWorldNotes(); + else return null; + } + + const folder = game.folders.get(folderId); + if (!folder) { + if(game.user.isGM) return game.ptu.macros.initializeWorldNotes(); + else return null; + } + + return folder; + })(); + if(!folder) return ui.notifications.error("No folder found for world notes; Please ask your GM to login and not to delete the folder \"Actor Notes\""); + + const journalEntry = await (async () => { + const journalId = this.actor.getFlag("ptu", "notesId"); + if (!journalId) { + const journal = await JournalEntry.create({ + name: this.actor.name, + folder: folder.id, + ownership: this.actor.ownership, + pages: [ + { + name: "Notes", + type: "text", + ownership: this.actor.ownership, + text: { + format: 1, + content: this.actor.system.notes || "" + } + } + ] + }); + await this.actor.setFlag("ptu", "notesId", journal.id); + return journal; + } + + const journal = await fromUuid(`JournalEntry.${journalId}`); + if (!journal) { + await this.actor.unsetFlag("ptu", "notesId"); + return this.openNotes(); + } + + return journal; + })(); + if(!journalEntry) return; + + journalEntry.sheet.render(true); + } } export { PTUActorSheet } \ No newline at end of file diff --git a/src/module/actor/sheet/inventory-config.js b/src/module/actor/sheet/inventory-config.js index 60c4239eb..c318ff5c7 100644 --- a/src/module/actor/sheet/inventory-config.js +++ b/src/module/actor/sheet/inventory-config.js @@ -20,6 +20,16 @@ class InventoryConfigSheet extends FormApplication { // Setup Item Columns data.columns = this.object.actor.getFlag("ptu", "itemColumns"); + const categories = new Set([...data.columns.available, ...data.columns.one, ...data.columns.two]); + const extraCategories = new Set(); + + for(const item of this.object.actor.itemTypes.item) { + const cat = item.system.category || "Misc"; + if(categories.has(cat)) continue; + extraCategories.add(cat); + } + data.columns.available = [...data.columns.available, ...extraCategories]; + data.ballStyle = this.object.ballStyle; return data; diff --git a/src/module/apps/party/sheet.js b/src/module/apps/party/sheet.js index 2aa4da806..02cea37d7 100644 --- a/src/module/apps/party/sheet.js +++ b/src/module/apps/party/sheet.js @@ -45,14 +45,25 @@ class PTUPartySheet extends FormApplication { data.boxed = this.boxed; data.available = this.available; + const averageLevelOfMons = monArray => ( + monArray.reduce( + (a, b) => a + (b.attributes.level.current ?? 0), + 0 + ) / monArray.length + ).toFixed(1); + + data.partyApl = this.party?.length > 0 ? averageLevelOfMons(data.party) : undefined + data.boxedApl = this.boxed?.length > 0 ? averageLevelOfMons(data.boxed) : undefined + data.availableApl = this.available?.length > 0 ? averageLevelOfMons(data.available) : undefined + return data; } _prepare(actor, strict = true) { this.#setTrainer(actor, strict); - if(!this.trainer) return; + if (!this.trainer) return; this.#loadFolders(strict); - if(!this.folders) return; + if (!this.folders) return; this.#loadParty(strict); this.#loadBox(strict); this.#loadAvailable(strict); @@ -107,7 +118,7 @@ class PTUPartySheet extends FormApplication { // Get available folders from the trainer's folder const folder = this.trainer.folder; if (!folder) { - if(strict) { + if (strict) { ui.notifications.error("PTU.PartySheet.NoFolder", { localize: true }); throw new Error("PTU.PartySheet.NoFolder"); } diff --git a/src/module/apps/token-panel.js b/src/module/apps/token-panel.js index 4d5254821..54b92a8f3 100644 --- a/src/module/apps/token-panel.js +++ b/src/module/apps/token-panel.js @@ -37,7 +37,7 @@ export class TokenPanel extends Application { const data = { name: attack.label, img: attack.img, - db: attack.item?.system.damageBase > 0 ? attack.item.system.damageBase : null, + db: attack.item?.damageBase ? attack.item.damageBase.postStab : null, ac: attack.item?.system.ac > 0 ? attack.item.system.ac : null, frequency: attack.item?.system.frequency ?? "At-Will", id, diff --git a/src/module/apps/type-matrix.js b/src/module/apps/type-matrix.js new file mode 100644 index 000000000..ebf88d42e --- /dev/null +++ b/src/module/apps/type-matrix.js @@ -0,0 +1,66 @@ +class TypeMatrix extends FormApplication { + constructor(object, options) { + super(object, options); + this.cache = {}; + } + + static get defaultOptions() { + const options = super.defaultOptions; + options.classes.push("ptu-settings-menu"); + + return mergeObject(options, { + title: "PTU.TypeMatrix.Title", + template: "systems/ptu/static/templates/config/settings/types.hbs", + id: "type-matrix", + width: "auto", + height: "auto", + resizable: true, + submitOnChange: false, + closeOnSubmit: false, + }); + } + + async getData() { + const data = await super.getData(); + + if (this.cache["types"] === undefined) { + const types = game.settings.get("ptu", "type.typeEffectiveness") || this.constructor.settings.typeEffectiveness.default; + this.cache["types"] = types; + } + + const typeEffectiveness = duplicate(this.cache["types"]); + delete typeEffectiveness.Untyped; + + let typeLength = Object.keys(typeEffectiveness).length + 1; + if(!game.settings.get("ptu", "homebrew.nuclearType") && typeEffectiveness["Nuclear"]) typeLength--; + if(!game.settings.get("ptu", "homebrew.shadowType") && typeEffectiveness["Shadow"]) typeLength--; + + return { + ...data, + typeEffectiveness, + types: Object.keys(this.cache["types"].Untyped.effectiveness), + typeLength, + readOnly: true + } + } + + activateListeners($html) { + $html.find(".type").on("mouseover", event => { + const { offensive, defensive } = event.currentTarget.dataset; + if (!offensive || !defensive) return; + + $html.find(`.type[data-offensive="${offensive}"]`).addClass("highlight-x"); + $html.find(`.type[data-defensive="${defensive}"]`).addClass("highlight-y"); + }); + + $html.find(".type").on("mouseout", event => { + const { offensive, defensive } = event.currentTarget.dataset; + if (!offensive || !defensive) return; + + $html.find(`.type[data-offensive="${offensive}"]`).removeClass("highlight-x"); + $html.find(`.type[data-defensive="${defensive}"]`).removeClass("highlight-y"); + }); + } +} + +export { TypeMatrix } \ No newline at end of file diff --git a/src/module/canvas/token/base.js b/src/module/canvas/token/base.js index 433363ccb..a42a3d61c 100644 --- a/src/module/canvas/token/base.js +++ b/src/module/canvas/token/base.js @@ -413,6 +413,7 @@ class PTUToken extends Token { canFlank(flankee) { if(!this.actor || !flankee.actor) return false; if (this === flankee || !game.settings.get("ptu", "automation.flankingDetection")) return false; + if(this.actor.conditions.bySlug("fainted").length > 0) return false; if (!this.actor.isEnemyOf(flankee.actor)) return false; diff --git a/src/module/item/move/document.js b/src/module/item/move/document.js index b01a6f059..2b80bd6df 100644 --- a/src/module/item/move/document.js +++ b/src/module/item/move/document.js @@ -12,7 +12,7 @@ class PTUMove extends PTUItem { /** @override */ get rollOptions() { const options = super.rollOptions; - if(this.isDamaging && this.damageBase.isStab && !!options.all[`move:damage-base:${this.damageBase.preStab}`]) { + if (this.isDamaging && this.damageBase.isStab && !!options.all[`move:damage-base:${this.damageBase.preStab}`]) { delete this.flags.ptu.rollOptions.all[`move:damage-base:${this.damageBase.preStab}`]; delete this.flags.ptu.rollOptions.item[`move:damage-base:${this.damageBase.preStab}`]; @@ -27,7 +27,9 @@ class PTUMove extends PTUItem { /** @override */ get realId() { - return this.system.isStruggle ? `struggle-${this.system.type.toLocaleLowerCase(game.i18n.lang)}-${this.system.category.toLocaleLowerCase(game.i18n.lang)}` : super.realId; + return this.system.isStruggle + ? `struggle-${this.system.type.toLocaleLowerCase(game.i18n.lang)}-${this.system.category.toLocaleLowerCase(game.i18n.lang)}${this.system.isRangedStruggle ? "-ranged" : ""}` + : super.realId; } get isDamaging() { @@ -39,13 +41,13 @@ class PTUMove extends PTUItem { } get damageBase() { - if(!this.isDamaging) return null; + if (!this.isDamaging) return null; const result = { preStab: isNaN(Number(this.system.damageBase)) ? 0 : Number(this.system.damageBase), postStab: 0, isStab: false, } - result.postStab = result.preStab + (this.actor?.types.includes(this.system.type) ? 2 : 0); + result.postStab = result.preStab + (!this.system.isStruggle && this.actor?.types.includes(this.system.type) ? 2 : 0); result.isStab = result.preStab !== result.postStab; return result; } @@ -53,59 +55,63 @@ class PTUMove extends PTUItem { /** @override */ prepareBaseData() { super.prepareBaseData(); - + const rollOptions = { all: { [`move:type:${sluggify(this.system.type)}`]: true, [`move:category:${sluggify(this.system.category)}`]: true, [`move:frequency:${sluggify(this.system.frequency)}`]: true, - } + }, } - + const ranges = this.system.range?.split(",").map(r => r.trim()) ?? []; - for(const range of ranges) { + for (const range of ranges) { rollOptions.all[`move:range:${sluggify(range)}`] = true; } - - if(this.isDamaging) { + + if (this.isDamaging) { rollOptions.all[`move:damage-base:${this.damageBase.postStab}`] = true; rollOptions.all[`move:damage-base:pre-stab:${this.damageBase.preStab}`] = true; } - if(!isNaN(Number(this.system.ac))) rollOptions.all[`move:ac:${this.system.ac}`] = true; + if (!isNaN(Number(this.system.ac))) rollOptions.all[`move:ac:${this.system.ac}`] = true; rollOptions.item = rollOptions.all; - + this.flags.ptu = mergeObject(this.flags.ptu, {rollOptions}); + this.flags.ptu.rollOptions.attack = Object.keys(this.flags.ptu.rollOptions.all).reduce((obj, key) => { + obj[key.replace("move:", "attack:").replace("item:", "attack:")] = true; + return obj; + }, {}); } /** @override */ async use(options = {}) { - if(this.isDamaging || this.system.frequency === "Static") return; + if (this.isDamaging || this.system.frequency === "Static") return; let didSomething = false; const conditions = new Set(this.actor.getFilteredRollOptions("condition")) - if(conditions.has("condition:confused")) { + if (conditions.has("condition:confused")) { await PTUCondition.HandleConfusion(this, this.actor); didSomething = true; } - if(this.referenceEffect) { + if (this.referenceEffect) { const results = []; const effect = await fromUuid(this.referenceEffect); - if(this.range.includes("Self")) { + if (this.range.includes("Self")) { const result = await effect.apply([this.actor], this.actor); - if(result) results.push(...result); + if (result) results.push(...result); } else { const targets = options.targets || [...game.user.targets] || canvas.tokens.controlled; const result = await effect.apply(targets, this.actor); - if(result) results.push(...result); + if (result) results.push(...result); } - if(results.length > 0) { - const statements = results.map((effect) => - game.i18n.format("PTU.Broadcast.ApplyEffect", {actor: effect.actor.link, effect: effect.link, source: this.actor.link}) + if (results.length > 0) { + const statements = results.map((effect) => + game.i18n.format("PTU.Broadcast.ApplyEffect", { actor: effect.actor.link, effect: effect.link, source: this.actor.link }) ).filter(s => s).join("
") - const enrichedHtml = await TextEditor.enrichHTML(statements, {async: true}) + const enrichedHtml = await TextEditor.enrichHTML(statements, { async: true }) const chatData = { user: game.user.id, speaker: ChatMessage.getSpeaker({ actor: this.actor }), @@ -117,8 +123,8 @@ class PTUMove extends PTUItem { didSomething = true; } } - - if(!didSomething) { + + if (!didSomething) { ui.notifications.warn(game.i18n.localize("PTU.Notifications.NoEffect")); } } diff --git a/src/module/rules/index.js b/src/module/rules/index.js index 8401693db..0dde39d71 100644 --- a/src/module/rules/index.js +++ b/src/module/rules/index.js @@ -12,6 +12,7 @@ import { TypeOverwriteRuleElement } from "./rule-element/type-overwrite.js"; import { TempHPRuleElement } from "./rule-element/temp-hp.js"; import { EffectivenessRuleElement } from "./rule-element/effectiveness.js"; import { EphemeralEffectRuleElement } from "./rule-element/ephemeral-effect.js"; +import { ActionPointsRuleElement } from "./rule-element/ap.js"; class RuleElements { static builtin = { @@ -27,7 +28,8 @@ class RuleElements { "TypeOverwrite": TypeOverwriteRuleElement, "TempHP": TempHPRuleElement, "Effectiveness": EffectivenessRuleElement, - "EphemeralEffect": EphemeralEffectRuleElement + "EphemeralEffect": EphemeralEffectRuleElement, + "ActionPoint": ActionPointsRuleElement } static custom = {} diff --git a/src/module/rules/rule-element/ap.js b/src/module/rules/rule-element/ap.js new file mode 100644 index 000000000..f509f24fa --- /dev/null +++ b/src/module/rules/rule-element/ap.js @@ -0,0 +1,51 @@ +import { RuleElementPTU } from "./base.js"; + +export class ActionPointsRuleElement extends RuleElementPTU { + constructor(data, item, options = {}) { + const { drainedValue, boundValue } = data; + super(data, item, options); + + this.drainedValue = this.resolveValue(drainedValue); + this.boundValue = this.resolveValue(boundValue); + } + + /** @override */ + onCreate(actorUpdates) { + if(this.ignored) return; + + const rollOptions = Array.from(new Set(this.actor.getRollOptions())); + + if(!this.predicate.test(rollOptions)) return; + if(typeof this.drainedValue !== "number") return this.failValidation("drainedValue requires a non-zero value field"); + if(typeof this.boundValue !== "number") return this.failValidation("boundValue requires a non-zero value field"); + + const currentApBeforeRule = Number(this.actor.system.ap.value) || 0; + // this.onCreate() runs **AFTER** this.afterPrepareData(). Therefore, within the PTUTrainerActor.prepareDerivedData(), this Rules + // drained and bound values are already included. Therefore, the maxAp before this rule can only be calced by adding + // this rules values up to it again. + const maxApBeforeRule = (Number(this.actor.system.ap.max) || 0) + this.drainedValue + this.boundValue; + const currentApAfterRule = Math.clamped(currentApBeforeRule - this.drainedValue - this.boundValue, 0, maxApBeforeRule - this.drainedValue - this.boundValue); + mergeObject(actorUpdates, { + "system.ap.value": currentApAfterRule + }); + } + + afterPrepareData() { + if(this.ignored) return; + this.actor.synthetics.apAdjustments.bound.push({"value": this.boundValue, "sourceUuid": this.item.uuid}) + this.actor.synthetics.apAdjustments.drained.push({"value": this.drainedValue, "sourceUuid": this.item.uuid}) + } + + /** @override */ + onDelete(actorUpdates) { + const currentApBeforeDeletion = Number(this.actor.system.ap.value) || 0; + const maxApBeforeDeletion = Number(this.actor.system.ap.max) || 0; + + // Regain previously Bound AP + const currentApAfterDeletion = Math.clamped(currentApBeforeDeletion + this.boundValue, 0, maxApBeforeDeletion + this.drainedValue + this.boundValue); + + mergeObject(actorUpdates, { + "system.ap.value": currentApAfterDeletion + }); + } +} \ No newline at end of file diff --git a/src/module/rules/rule-element/token-light.js b/src/module/rules/rule-element/token-light.js index 9691fc21a..1a0ba2e75 100644 --- a/src/module/rules/rule-element/token-light.js +++ b/src/module/rules/rule-element/token-light.js @@ -1,3 +1,4 @@ +import { isObject } from "../../../util/misc.js"; import { RuleElementPTU } from "./base.js"; export class TokenLightRuleElement extends RuleElementPTU { diff --git a/src/module/system/check/attack.js b/src/module/system/check/attack.js index 7e03b57c7..f8e47aceb 100644 --- a/src/module/system/check/attack.js +++ b/src/module/system/check/attack.js @@ -336,7 +336,7 @@ class PTUAttackCheck extends PTUDiceCheck { ui.notifications.warn("PTU.Action.MoveWhileFrozen", { localize: true }); return false; } - if (this.conditionOptions.has("condition:sleep")) { + if (this.conditionOptions.has("condition:sleep") && !this.options.has("self:ignore:sleep")) { ui.notifications.warn("PTU.Action.MoveWhileSleeping", { localize: true }); return false; } diff --git a/src/module/system/check/rolls/attack-roll.js b/src/module/system/check/rolls/attack-roll.js index f9d8aeff7..f07833558 100644 --- a/src/module/system/check/rolls/attack-roll.js +++ b/src/module/system/check/rolls/attack-roll.js @@ -67,6 +67,7 @@ export class AttackRoll extends CheckRoll { tags } - return renderTemplate(template ?? AttackRoll.CHAT_TEMPLATE, chatData); + const content = await renderTemplate(template ?? AttackRoll.CHAT_TEMPLATE, chatData); + return TextEditor.enrichHTML(content, {async: true}) } } \ No newline at end of file diff --git a/src/module/system/check/skill.js b/src/module/system/check/skill.js index a842ed1c1..809ce9aa0 100644 --- a/src/module/system/check/skill.js +++ b/src/module/system/check/skill.js @@ -35,7 +35,7 @@ class PTUSkillCheck extends PTUDiceCheck { /** @type {PTUDiceModifier[]} */ const diceModifiers = [ new PTUDiceModifier({ - diceNumber: this.actor.system.skills[this.skill]?.value?.total ?? 1, + diceNumber: Math.clamped(this.actor.system.skills[this.skill]?.value?.total ?? 1, 1, 6), dieSize: 6, label: game.i18n.format("PTU.Check.SkillDice", { skill: this.skillLabel }) }) diff --git a/src/module/system/settings/settings.js b/src/module/system/settings/settings.js index 560fed768..24f78a808 100644 --- a/src/module/system/settings/settings.js +++ b/src/module/system/settings/settings.js @@ -108,7 +108,7 @@ export function registerSettings() { game.settings.register("ptu", "autoRollDamage", { name: "Auto roll damage", hint: "Automatically roll damage when a move is used.", - scope: "world", + scope: "client", config: true, type: Boolean, default: true @@ -189,6 +189,14 @@ export function registerSettings() { } }); + game.settings.register("ptu", "worldNotesFolder", { + name: "World Notes Folder ID", + scope: "world", + config: false, + default: null, + type: String, + }); + game.settings.register("ptu", "worldSystemVersion", { name: "World System Version", scope: "world", diff --git a/src/module/system/settings/variant.js b/src/module/system/settings/variant.js index b6cecb1b3..0d649547f 100644 --- a/src/module/system/settings/variant.js +++ b/src/module/system/settings/variant.js @@ -33,6 +33,14 @@ const VariantSettingsConfig = { type: Boolean, default: true, requiresReload: true + }, + "advancementRework": { + name: "PTU.Settings.Variant.AdvancementRework.Name", + hint: "PTU.Settings.Variant.AdvancementRework.Hint", + type: Boolean, + default: false, + requiresReload: true, + hide: true } } diff --git a/src/scripts/config/index.js b/src/scripts/config/index.js index 9fe183b24..2ad17ed06 100644 --- a/src/scripts/config/index.js +++ b/src/scripts/config/index.js @@ -268,5 +268,9 @@ export const PTUCONFIG = { }, User: { documentClass: PTUUser + }, + Capabilities: { + numericNonMovement: ["highJump", "longJump", "power", "weightClass"], + stringArray: ["naturewalk", "other"], } } \ No newline at end of file diff --git a/src/scripts/game-ptu.js b/src/scripts/game-ptu.js index f7dbf221d..c6d0a8eb7 100644 --- a/src/scripts/game-ptu.js +++ b/src/scripts/game-ptu.js @@ -12,6 +12,7 @@ import { resolveInjectedProperties, resolveValue } from "../util/value-resolver. import { dexSync } from "./macros/dex-sync.js" import { pokedex } from "./macros/pokedex.js" import { changeRotomForm } from "./macros/rotom-form-change.js" +import { TypeMatrix } from "../module/apps/type-matrix.js"; const GamePTU = { onInit() { @@ -41,7 +42,15 @@ const GamePTU = { macros: { changeRotomForm, pokedex, - dexSync + dexSync, + initializeWorldNotes: (async () => { + if (game.folders.getName("Actor Notes")) { + return game.settings.set("ptu", "worldNotesFolder", game.folders.getName("Actor Notes").id) + } + + const folder = await Folder.create({ name: "Actor Notes", type: "JournalEntry" }); + return game.settings.set("ptu", "worldNotesFolder", folder.id) + }) }, tokenPanel: new TokenPanel() } @@ -53,6 +62,17 @@ const GamePTU = { onSetup() { }, onReady() { game.ptu.compendiumBrowser = new CompendiumBrowser(); + game.ptu.typeMatrix = new TypeMatrix() + + if (game.user.isGM) { + if (!game.settings.get("ptu", "worldNotesFolder")) { + game.ptu.macros.initializeWorldNotes(); + } + // Else if necessary since initializeWorldNotes is async and we don't want to wait for it + else if (game.folders.get(game.settings.get("ptu", "worldNotesFolder")) === null) { + game.ptu.macros.initializeWorldNotes(); + } + } // Reset pokemon that have reloadOnReady marked as true // This is due to having a temporary species override diff --git a/static/images/sprites/851s_hisuian.webp b/static/images/sprites/571s_hisuian.webp similarity index 100% rename from static/images/sprites/851s_hisuian.webp rename to static/images/sprites/571s_hisuian.webp diff --git a/static/lang/en.json b/static/lang/en.json index fd8b8fb72..a687a542b 100644 --- a/static/lang/en.json +++ b/static/lang/en.json @@ -132,7 +132,8 @@ "TypeOverwrite": "Type Overwrite", "TempHP": "Temporary HP", "Effectiveness": "Effectiveness", - "EphemeralEffect": "Ephemeral Effect" + "EphemeralEffect": "Ephemeral Effect", + "ActionPoint": "AP Consumption" }, "PTU": { "Skills": { @@ -302,10 +303,13 @@ "EffectPriority": "Priority", "ActionPoints": "Action Points", + "MaxActionPointsShort": "Max AP", "LevelMilestones": "Milestones", "LevelDexExp": "Dex Exp", "LevelMiscExp": "Misc Exp", + "LevelCap": "Level Cap", + "Money": "Money", "ItemCategories": "Item Categories", "HeldItem": "Held Item", @@ -974,6 +978,9 @@ } }, "ExpBudget": "EXP Reward:", + "TypeMatrix": { + "Title": "Type Chart" + }, "CompendiumBrowser": { "ProgressBar": { "LoadingComplete": "Loading complete", diff --git a/static/templates/actor/pokemon-sheet-compact.hbs b/static/templates/actor/pokemon-sheet-compact.hbs index 211880e4a..fc1e611c9 100644 --- a/static/templates/actor/pokemon-sheet-compact.hbs +++ b/static/templates/actor/pokemon-sheet-compact.hbs @@ -478,10 +478,20 @@
- {{localize "PTU.Spirit.Friendship"}} +
+ {{localize "PTU.Spirit.Friendship"}} +
+
+ {{localize "PTU.LevelCap"}} +
-
- +
+
+ +
+
+ +
diff --git a/static/templates/actor/trainer-sheet-compact.hbs b/static/templates/actor/trainer-sheet-compact.hbs index a4b9f492b..5157dd069 100644 --- a/static/templates/actor/trainer-sheet-compact.hbs +++ b/static/templates/actor/trainer-sheet-compact.hbs @@ -41,10 +41,10 @@
- {{> "systems/ptu/static/templates/partials/mod-field.hbs" - path=(concat "system.skills." key ".value.value") + {{> "systems/ptu/static/templates/partials/mod-field.hbs" + path=(concat "system.skills." key ".value.value") value=skill.value.value - dtype="Number" + dtype="Number" mod=skill.value.mod total=skill.value.total modOrigins=(getProperty ../actor.origins (concat "system.skills." key ".value.mod")) @@ -55,10 +55,10 @@
- {{> "systems/ptu/static/templates/partials/mod-field.hbs" - path=(concat "system.skills." key ".modifier.value") + {{> "systems/ptu/static/templates/partials/mod-field.hbs" + path=(concat "system.skills." key ".modifier.value") value=skill.modifier.value - dtype="Number" + dtype="Number" mod=skill.modifier.mod total=skill.modifier.total modOrigins=(getProperty ../actor.origins (concat "system.skills." key ".modifier.mod") ) @@ -136,9 +136,20 @@ value="{{actor.system.ap.value}}" data-dtype="Integer" min="0" max="{{actor.system.ap.max}}" step="1" />
- +
+ +
/ - +
+ {{> "systems/ptu/static/templates/partials/mod-field.hbs" + path="system.maxAp" + value=actor.system.ap.max + dtype="Number" + mod="" + total=actor.system.ap.max + modOrigins=(getProperty actor.origins "system.maxAp") + disabled=true}} +
@@ -160,7 +171,7 @@
- {{#if (is true (getGameSetting "variant.useDexExp"))}} + {{#if (or (is true (getGameSetting "variant.useDexExp")) (and (getGameSetting "variant.trainerRevamp") (getGameSetting "variant.advancementRework")))}}
@@ -187,7 +198,7 @@
- {{#if (is true (getGameSetting "variant.useDexExp"))}} + {{#if (or (is true (getGameSetting "variant.useDexExp")) (and (getGameSetting "variant.trainerRevamp") (getGameSetting "variant.advancementRework")))}}
diff --git a/static/templates/apps/party-sheet.hbs b/static/templates/apps/party-sheet.hbs index 625ca33ab..2d9006344 100644 --- a/static/templates/apps/party-sheet.hbs +++ b/static/templates/apps/party-sheet.hbs @@ -12,7 +12,7 @@
{{/if}}
-

Party

+

Party {{#if partyApl}}Average Level: {{partyApl}}{{/if}}

{{#each party}}
@@ -30,7 +30,7 @@
-

Boxed

+

Boxed{{#if boxedApl}}Average Level: {{boxedApl}}{{/if}}

{{#each boxed}}
@@ -48,7 +48,7 @@
-

Available

+

Available{{#if availableApl}}Average Level: {{availableApl}}{{/if}}

{{#each available}}
diff --git a/static/templates/config/settings/types.hbs b/static/templates/config/settings/types.hbs index 9e1057750..0fe39a2bd 100644 --- a/static/templates/config/settings/types.hbs +++ b/static/templates/config/settings/types.hbs @@ -1,6 +1,7 @@
-

Double click a type to edit its settings, left click on an effectiveness to increase it, right click an effectiveness to decrease it.

- + {{#unless readOnly}} +

Double click a type to edit its settings, left click on an effectiveness to increase it, right click an effectiveness to decrease it.

+ {{/unless}}
@@ -30,15 +31,17 @@ {{/unless}} {{/each}}
-
- - - -
+ {{#unless readOnly}} +
+ + + +
+ {{/unless}} diff --git a/system.json b/system.json index fa98e2edf..14434301f 100644 --- a/system.json +++ b/system.json @@ -4,10 +4,10 @@ "description": "A re-imagining of the Pokemon Tabletop United TTRPG System now made with FoundryVTT as a central pilar.", "compatibility": { "minimum": 11, - "verified": "11.311", + "verified": "11.314", "maximum": 11 }, - "version": "4.0.0.beta.15", + "version": "4.0.0.release-candidate.1", "templateVersion": 2, "authors": [ { diff --git a/template.json b/template.json index 6bbc29df9..2e5d9eabb 100644 --- a/template.json +++ b/template.json @@ -468,6 +468,7 @@ "injuries": 0, "max": 0 }, + "ap": { "value": 5 },