From e636792201eb34a45ec83b4533fcd15e84946534 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Nov 2023 08:32:13 +1300 Subject: [PATCH 001/142] Bump org.junit.platform:junit-platform-runner from 1.10.0 to 1.10.1 (#6997) Bumps [org.junit.platform:junit-platform-runner](https://github.com/junit-team/junit5) from 1.10.0 to 1.10.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/commits) --- updated-dependencies: - dependency-name: org.junit.platform:junit-platform-runner dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 4cf7c0db8b3..c0de7f692c7 100644 --- a/build.gradle +++ b/build.gradle @@ -260,7 +260,7 @@ dependencies { compileOnly group: 'com.yuvimasory', name: 'orange-extensions', version: '1.3.0' compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.0' - testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.0' + testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.1' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.0' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.0' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.0' From cc011045fb1a6836270c1554ae13838180e08433 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Nov 2023 08:32:24 +1300 Subject: [PATCH 002/142] Bump org.junit.jupiter:junit-jupiter-engine from 5.10.0 to 5.10.1 (#6993) Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.10.0 to 5.10.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.0...r5.10.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c0de7f692c7..704ff574201 100644 --- a/build.gradle +++ b/build.gradle @@ -264,7 +264,7 @@ dependencies { testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.0' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.0' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.0' - testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.0' + testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.1' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '2.2' testImplementation group: 'org.testfx', name: 'testfx-junit5', version: '4.0.17' // TODO openjfx-monocle is no longer updated and chances are openjfx-monocle doesn't work with latest OpenJFX From 831d58566f3daa2308ca4ad50956ea14c8b74801 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Nov 2023 08:32:35 +1300 Subject: [PATCH 003/142] Bump org.junit.jupiter:junit-jupiter-api from 5.10.0 to 5.10.1 (#6994) Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.10.0 to 5.10.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.0...r5.10.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 704ff574201..39302000b62 100644 --- a/build.gradle +++ b/build.gradle @@ -262,7 +262,7 @@ dependencies { testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.1' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.0' - testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.0' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.1' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.0' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.1' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '2.2' From 8af55baeaeee6c32ad045fc7b0f8029f74d5bc42 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Nov 2023 08:50:34 +1300 Subject: [PATCH 004/142] Bump org.junit.jupiter:junit-jupiter-params from 5.10.0 to 5.10.1 (#6995) Bumps [org.junit.jupiter:junit-jupiter-params](https://github.com/junit-team/junit5) from 5.10.0 to 5.10.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.0...r5.10.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-params dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 39302000b62..5d12ef663b9 100644 --- a/build.gradle +++ b/build.gradle @@ -263,7 +263,7 @@ dependencies { testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.1' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.0' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.1' - testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.0' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.1' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.1' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '2.2' testImplementation group: 'org.testfx', name: 'testfx-junit5', version: '4.0.17' From 4c001b3526e3e5deef49c23750e563c578d4f2ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Nov 2023 09:31:17 +1300 Subject: [PATCH 005/142] Bump org.junit.platform:junit-platform-launcher from 1.10.0 to 1.10.1 (#6996) Bumps [org.junit.platform:junit-platform-launcher](https://github.com/junit-team/junit5) from 1.10.0 to 1.10.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/commits) --- updated-dependencies: - dependency-name: org.junit.platform:junit-platform-launcher dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5d12ef663b9..8894b102219 100644 --- a/build.gradle +++ b/build.gradle @@ -261,7 +261,7 @@ dependencies { compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.0' testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.1' - testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.0' + testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.1' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.1' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.1' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.1' From e125a8ac1dd27d68d2fe46ed964b2893f71ad3e4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Nov 2023 11:12:46 +1300 Subject: [PATCH 006/142] Bump com.github.spotbugs:spotbugs-annotations from 4.8.0 to 4.8.1 (#6999) Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.8.0 to 4.8.1. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.8.0...4.8.1) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 8894b102219..28573b09958 100644 --- a/build.gradle +++ b/build.gradle @@ -258,7 +258,7 @@ dependencies { compileOnly group: 'org.jetbrains', name: 'annotations', version:'24.0.1' compileOnly group: 'com.yuvimasory', name: 'orange-extensions', version: '1.3.0' - compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.0' + compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.1' testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.1' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.1' From 0083096af7b3135ee779126a817e57e1fbc7f651 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Nov 2023 11:12:58 +1300 Subject: [PATCH 007/142] Bump org.controlsfx:controlsfx from 11.1.2 to 11.2.0 (#7000) Bumps [org.controlsfx:controlsfx](https://github.com/controlsfx/controlsfx) from 11.1.2 to 11.2.0. - [Release notes](https://github.com/controlsfx/controlsfx/releases) - [Commits](https://github.com/controlsfx/controlsfx/compare/11.1.2...11.2.0) --- updated-dependencies: - dependency-name: org.controlsfx:controlsfx dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 28573b09958..b80e14045ac 100644 --- a/build.gradle +++ b/build.gradle @@ -242,7 +242,7 @@ dependencies { } implementation group: 'net.sourceforge.argparse4j', name: 'argparse4j', version: '0.9.0' implementation group: 'org.xmlunit', name: 'xmlunit-core', version:'2.9.1' - implementation group: 'org.controlsfx', name: 'controlsfx', version:'11.1.2' + implementation group: 'org.controlsfx', name: 'controlsfx', version:'11.2.0' implementation group: 'net.sourceforge.pcgen', name: 'PCGen-base', version:'1.0.170' // The latest Base, but pcgen core would need refactoring to support it. From b040f1f241ebe7c3ef213b9c98db1aaf1741546c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Nov 2023 11:13:07 +1300 Subject: [PATCH 008/142] Bump com.github.spotbugs from 5.2.1 to 5.2.3 (#7001) Bumps com.github.spotbugs from 5.2.1 to 5.2.3. --- updated-dependencies: - dependency-name: com.github.spotbugs dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b80e14045ac..a06ca2ab88e 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ plugins { id 'application' // Creating application bundles id 'build-dashboard' // Produces a build report id 'checkstyle' // Checkstyle for Java, configured further below - id "com.github.spotbugs" version '5.2.1' // Spotbugs for Java + id "com.github.spotbugs" version '5.2.3' // Spotbugs for Java id 'java' // Core java / javac id 'maven-publish' // Publishing to Maven Central id 'pmd' // PMD for Java, configured further below From 1d998bc26ec6768329c33fca560cf6abd3219eff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Nov 2023 18:32:08 +1300 Subject: [PATCH 009/142] Bump org.jetbrains:annotations from 24.0.1 to 24.1.0 (#7002) Bumps [org.jetbrains:annotations](https://github.com/JetBrains/java-annotations) from 24.0.1 to 24.1.0. - [Release notes](https://github.com/JetBrains/java-annotations/releases) - [Changelog](https://github.com/JetBrains/java-annotations/blob/master/CHANGELOG.md) - [Commits](https://github.com/JetBrains/java-annotations/compare/24.0.1...24.1.0) --- updated-dependencies: - dependency-name: org.jetbrains:annotations dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a06ca2ab88e..534184cdd91 100644 --- a/build.gradle +++ b/build.gradle @@ -256,7 +256,7 @@ dependencies { // Use if you're working from your local PCGen Formula //implementation files("../pcgen-formula/PCGen-formula/build/libs/PCgen-formula-1.0.jar") - compileOnly group: 'org.jetbrains', name: 'annotations', version:'24.0.1' + compileOnly group: 'org.jetbrains', name: 'annotations', version:'24.1.0' compileOnly group: 'com.yuvimasory', name: 'orange-extensions', version: '1.3.0' compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.1' From 72fc10766ef2d5387c20e98e96e185166beca928 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 18 Nov 2023 11:16:51 +1300 Subject: [PATCH 010/142] Bump org.springframework:spring-core from 6.0.13 to 6.1.0 (#7005) Bumps [org.springframework:spring-core](https://github.com/spring-projects/spring-framework) from 6.0.13 to 6.1.0. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.0.13...v6.1.0) --- updated-dependencies: - dependency-name: org.springframework:spring-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 534184cdd91..35851484ff8 100644 --- a/build.gradle +++ b/build.gradle @@ -226,7 +226,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.0.13' implementation group: 'org.springframework', name: 'spring-beans', version:'6.0.13' - implementation group: 'org.springframework', name: 'spring-core', version:'6.0.13' + implementation group: 'org.springframework', name: 'spring-core', version:'6.1.0' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.13.0' implementation('org.apache.xmlgraphics:fop:2.9') { From 1ab569e1947fee3a61a21f5e271e34735828c854 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 18 Nov 2023 11:17:13 +1300 Subject: [PATCH 011/142] Bump org.springframework:spring-web from 6.0.13 to 6.1.0 (#7003) Bumps [org.springframework:spring-web](https://github.com/spring-projects/spring-framework) from 6.0.13 to 6.1.0. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.0.13...v6.1.0) --- updated-dependencies: - dependency-name: org.springframework:spring-web dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 35851484ff8..25dd6dd1b0f 100644 --- a/build.gradle +++ b/build.gradle @@ -224,7 +224,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.15.0' - implementation group: 'org.springframework', name: 'spring-web', version:'6.0.13' + implementation group: 'org.springframework', name: 'spring-web', version:'6.1.0' implementation group: 'org.springframework', name: 'spring-beans', version:'6.0.13' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.0' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.13.0' From fb152d16bb3e75189d936d969284269bc55d6d92 Mon Sep 17 00:00:00 2001 From: hathawayd <150967177+hathawayd@users.noreply.github.com> Date: Fri, 17 Nov 2023 14:38:53 -0800 Subject: [PATCH 012/142] Issue_6755: Unchained monk was using monk and unchained monk ac bonus. (#7006) --- .../paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst index cb76ad66b0a..1b84935f183 100644 --- a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst +++ b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst @@ -1085,7 +1085,7 @@ Weapon Training (Thrown) KEY:Weapon Training 4 Thrown CATEGORY:Special Ability # Ability Name Unique Key Category of Ability Type Define Description Template Ability Bonus Ability Pool Combat bonus Add to base move Bonus to Situation Modify VAR Class Skill Spell Res. Damage Reduction Source Page Aspects Monk Core Class Skills KEY:Class Skills ~ Monk CATEGORY:Internal CSKILL:Acrobatics|Climb|TYPE=Craft|Escape Artist|Intimidate|Knowledge (History)|Knowledge (Religion)|Perception|TYPE=Perform|TYPE=Profession|Ride|Sense Motive|Stealth|Swim -CATEGORY=Class|Monk.MOD DEFINE:MonkRestricted|0 DEFINE:MonkHasArmor|0 DEFINE:MonkIsEncumbered|0 DEFINE:MonkHasShield|0 BONUS:VAR|MonkRestricted|MonkHasArmor+MonkIsEncumbered+MonkHasShield|TYPE=Boolean BONUS:VAR|MonkHasArmor|1|PREVARGTEQ:var("COUNT[EQTYPE.ARMOR.EQUIPPED]"),1 BONUS:VAR|MonkIsEncumbered|1|PREVARGTEQ:ENCUMBERANCE,1 BONUS:VAR|MonkHasShield|1|PREVARGTEQ:var("COUNT[EQTYPE.SHIELD.EQUIPPED]"),1 BONUS:VAR|MonkACBonus|min((MonkACLVL)/4,5) BONUS:VAR|MonkACBonus|MonkACStatBonus BONUS:VAR|CMD|MonkACBonus|PREVAREQ:ENCUMBERANCE,0,var("COUNT[EQTYPE.ARMOR.EQUIPPED]"),0,var("COUNT[EQTYPE.SHIELD.EQUIPPED]"),0 BONUS:VAR|MonkACStatBonus|max(WIS,0)|TYPE=Class|PREVARGTEQ:MonkLVL,1 BONUS:VAR|MonkACLVL|MonkLVL|TYPE=Level SOURCEPAGE:p.57 +CATEGORY=Class|Monk.MOD DEFINE:MonkRestricted|0 DEFINE:MonkHasArmor|0 DEFINE:MonkIsEncumbered|0 DEFINE:MonkHasShield|0 BONUS:VAR|MonkRestricted|MonkHasArmor+MonkIsEncumbered+MonkHasShield|TYPE=Boolean BONUS:VAR|MonkHasArmor|1|PREVARGTEQ:var("COUNT[EQTYPE.ARMOR.EQUIPPED]"),1 BONUS:VAR|MonkIsEncumbered|1|PREVARGTEQ:ENCUMBERANCE,1 BONUS:VAR|MonkHasShield|1|PREVARGTEQ:var("COUNT[EQTYPE.SHIELD.EQUIPPED]"),1 BONUS:VAR|MonkACBonus|min((MonkACLVL)/4,5)|TYPE=level BONUS:VAR|MonkACBonus|MonkACStatBonus BONUS:VAR|CMD|MonkACBonus|PREVAREQ:ENCUMBERANCE,0,var("COUNT[EQTYPE.ARMOR.EQUIPPED]"),0,var("COUNT[EQTYPE.SHIELD.EQUIPPED]"),0 BONUS:VAR|MonkACStatBonus|max(WIS,0)|TYPE=Class|PREVARGTEQ:MonkLVL,1 BONUS:VAR|MonkACLVL|MonkLVL|TYPE=Level SOURCEPAGE:p.57 Monk Bonus Feat KEY:Monk ~ Monk Bonus Feat CATEGORY:Special Ability TYPE:MonkClassFeatures.Internal.ClassFeatures DEFINE:MonkBonusFeatLVL|0 DEFINE:MonkBonusFeatLVL|0 BONUS:ABILITYPOOL|Monk Bonus Feat|1+max((MonkBonusFeatLVL+2)/4,0) BONUS:VAR|MonkBonusFeatLVL|MonkLVL AC Bonus KEY:Monk ~ AC Bonus CATEGORY:Special Ability TYPE:MonkClassFeatures.SpecialQuality.Extraordinary DEFINE:MonkACBonus|0 DEFINE:MonkACLVL|0 DEFINE:MonkACStatBonus|0 DESC:When unarmored and unencumbered, you add +%1 to your AC and your CMD. These bonuses apply even against touch attacks or when you are flat-footed. You lose these bonuses when you are immobilized or helpless, when you wear any armor, when you carry a shield, or when you carry a medium or heavy load.|MonkACBonus BONUS:COMBAT|AC|MonkACBonus|PREVAREQ:MonkRestricted,0 From 9021e8fe26d08deb25fc0c2fcea5bafe5b3a232e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 18 Nov 2023 11:39:05 +1300 Subject: [PATCH 013/142] Bump org.springframework:spring-beans from 6.0.13 to 6.1.0 (#7004) Bumps [org.springframework:spring-beans](https://github.com/spring-projects/spring-framework) from 6.0.13 to 6.1.0. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.0.13...v6.1.0) --- updated-dependencies: - dependency-name: org.springframework:spring-beans dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 25dd6dd1b0f..d7237e959d4 100644 --- a/build.gradle +++ b/build.gradle @@ -225,7 +225,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.15.0' implementation group: 'org.springframework', name: 'spring-web', version:'6.1.0' - implementation group: 'org.springframework', name: 'spring-beans', version:'6.0.13' + implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.0' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.0' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.13.0' implementation('org.apache.xmlgraphics:fop:2.9') From 3e8fa8b0917417ddbec3cfb5e74016ffbcf3dfd2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Nov 2023 11:28:57 +1300 Subject: [PATCH 014/142] Bump com.github.ben-manes.versions from 0.49.0 to 0.50.0 (#7007) Bumps com.github.ben-manes.versions from 0.49.0 to 0.50.0. --- updated-dependencies: - dependency-name: com.github.ben-manes.versions dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index d7237e959d4..b03160bdaa1 100644 --- a/build.gradle +++ b/build.gradle @@ -31,7 +31,7 @@ plugins { id 'idea' // For IntelliJ IDEA users id "de.undercouch.download" version '5.5.0' // Shows download percentage id 'edu.sc.seis.launch4j' version '3.0.5' // Creates launch4j - id 'com.github.ben-manes.versions' version '0.49.0' // Checks versions for plugins and dependencies + id 'com.github.ben-manes.versions' version '0.50.0' // Checks versions for plugins and dependencies id "com.dorongold.task-tree" version '2.1.1' // Prints the task dependency tree id 'org.openjfx.javafxplugin' version '0.1.0' // JavaFX support id 'org.beryx.runtime' version '1.13.0' // Creates custom runtimes From 76ac160fcb7537e4074457b426d43c51ceded712 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Nov 2023 08:54:38 +1300 Subject: [PATCH 015/142] Bump org.apache.commons:commons-lang3 from 3.13.0 to 3.14.0 (#7008) Bumps org.apache.commons:commons-lang3 from 3.13.0 to 3.14.0. --- updated-dependencies: - dependency-name: org.apache.commons:commons-lang3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b03160bdaa1..6ea88354ffc 100644 --- a/build.gradle +++ b/build.gradle @@ -227,7 +227,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.1.0' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.0' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.0' - implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.13.0' + implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation('org.apache.xmlgraphics:fop:2.9') { exclude group: 'xml-apis', module: 'xml-apis' From 66b83fa1f6218019b4ea6144ebc756194542799c Mon Sep 17 00:00:00 2001 From: James Yoo <24359440+jyoo980@users.noreply.github.com> Date: Wed, 22 Nov 2023 13:11:14 -0800 Subject: [PATCH 016/142] Mitigate possible `NoSuchElementException` in `RegionFacet.java` (#7009) --- code/src/java/pcgen/cdom/facet/fact/RegionFacet.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/src/java/pcgen/cdom/facet/fact/RegionFacet.java b/code/src/java/pcgen/cdom/facet/fact/RegionFacet.java index 02d953dcae0..15f39cef747 100644 --- a/code/src/java/pcgen/cdom/facet/fact/RegionFacet.java +++ b/code/src/java/pcgen/cdom/facet/fact/RegionFacet.java @@ -385,12 +385,12 @@ private void updateRegion(CharID id) { RegionCacheInfo rci = getInfo(id); Optional current = rci.cachedRegion; - Optional newRegion = getRegion(id); - if (current.isEmpty() || !current.equals(newRegion)) + Optional optNewRegion = getRegion(id); + if (current.isEmpty() || !current.equals(optNewRegion)) { current.ifPresent(region -> fireDataFacetChangeEvent(id, region.toString(), DataFacetChangeEvent.DATA_REMOVED)); - rci.cachedRegion = newRegion; - fireDataFacetChangeEvent(id, newRegion.get().toString(), DataFacetChangeEvent.DATA_ADDED); + rci.cachedRegion = optNewRegion; + optNewRegion.map(Region::toString).ifPresent(newRegion -> fireDataFacetChangeEvent(id, newRegion, DataFacetChangeEvent.DATA_ADDED)); } } From 7a071eb49a74547bba9e091062757f80589c0f20 Mon Sep 17 00:00:00 2001 From: hathawayd <150967177+hathawayd@users.noreply.github.com> Date: Tue, 28 Nov 2023 02:00:03 -0800 Subject: [PATCH 017/142] DATA-4136: Maneuverability spelled wrong causing flight skill to calculate wrong. (#7013) --- .../starfarers_handbook/starfarershb_equip_mech.lst | 2 +- data/homebrew/my_pathfinder_campaign/mpc_races.lst | 2 +- .../dragon_companion_handbook/dch_races.lst | 2 +- data/pathfinder/homebrew/my_homebrew/my_races.lst | 2 +- .../reign_of_winter/players_guide/rowpg_races.lst | 12 ++++++------ .../rise_of_the_runelords_ae/rotr_races.lst | 4 ++-- .../inner_sea_magic/ism_abilities_class.lst | 2 +- .../advanced_race_guide/arg_feats.lst | 2 +- .../bestiary_3/b3_races_companion.lst | 2 +- .../roleplaying_game/bestiary_3/b3_templates.lst | 6 +++--- .../monster_codex/mc_races_companion.lst | 2 +- .../ultimate_wilderness/uw_races_companion.lst | 12 ++++++------ .../starfinder/paizo/alien_archive/saa_abilities.lst | 8 ++++---- 13 files changed, 29 insertions(+), 29 deletions(-) diff --git a/data/3e/fantasy_flight_games/dragonstar/starfarers_handbook/starfarershb_equip_mech.lst b/data/3e/fantasy_flight_games/dragonstar/starfarers_handbook/starfarershb_equip_mech.lst index bddfee7ee00..a3b0448d2cf 100644 --- a/data/3e/fantasy_flight_games/dragonstar/starfarers_handbook/starfarershb_equip_mech.lst +++ b/data/3e/fantasy_flight_games/dragonstar/starfarers_handbook/starfarershb_equip_mech.lst @@ -24,7 +24,7 @@ RU_Enhanced Dexterity +6 TYPE:RoboticUpgrade COST:3600 PRERACE:1,Robot%,S RU_Enhanced Strength +2 TYPE:RoboticUpgrade COST:400 PRERACE:1,Robot%,Soulmech SOURCEPAGE:p.118-122 BONUS:STAT|STR|2|TYPE=MechUpgrade RU_Enhanced Strength +4 TYPE:RoboticUpgrade COST:1600 PRERACE:1,Robot%,Soulmech SOURCEPAGE:p.118-122 BONUS:STAT|STR|4|TYPE=MechUpgrade RU_Enhanced Strength +6 TYPE:RoboticUpgrade COST:3600 PRERACE:1,Robot% SOURCEPAGE:p.118-122 BONUS:STAT|STR|6|TYPE=MechUpgrade -RU_Hoverlift TYPE:RoboticUpgrade COST:3000 PRERACE:1,Robot%,Soulmech PRESIZELTEQ:S SOURCEPAGE:p.118-122 BONUS:POSTMOVEADD|TYPE=Fly|50|TYPE=MechUpgrade|PRESIZEEQ:T BONUS:POSTMOVEADD|TYPE=Fly|40|TYPE=MechUpgrade|PRESIZEEQ:S SPROP:may fly with good manueverability,upgrade does not work on a conventional bipedal robot chassis +RU_Hoverlift TYPE:RoboticUpgrade COST:3000 PRERACE:1,Robot%,Soulmech PRESIZELTEQ:S SOURCEPAGE:p.118-122 BONUS:POSTMOVEADD|TYPE=Fly|50|TYPE=MechUpgrade|PRESIZEEQ:T BONUS:POSTMOVEADD|TYPE=Fly|40|TYPE=MechUpgrade|PRESIZEEQ:S SPROP:may fly with good maneuverability,upgrade does not work on a conventional bipedal robot chassis RU_Improved Audio Sensors TYPE:RoboticUpgrade COST:80 PRERACE:1,Robot%,Soulmech SOURCEPAGE:p.118-122 BONUS:SKILL|Listen|2|TYPE=Enhancement RU_Improved Visual Sensors TYPE:RoboticUpgrade COST:80 PRERACE:1,Robot%,Soulmech SOURCEPAGE:p.118-122 BONUS:SKILL|Search|2|TYPE=Enhancement RU_Integral Laser Sight TYPE:RoboticUpgrade COST:150 PRERACE:1,Robot%,Soulmech SOURCEPAGE:p.118-122 BONUS:COMBAT|BASEAB|1|TYPE=Ranged diff --git a/data/homebrew/my_pathfinder_campaign/mpc_races.lst b/data/homebrew/my_pathfinder_campaign/mpc_races.lst index f1732311b83..2903193fe50 100644 --- a/data/homebrew/my_pathfinder_campaign/mpc_races.lst +++ b/data/homebrew/my_pathfinder_campaign/mpc_races.lst @@ -13,7 +13,7 @@ SOURCELONG:My Pathfinder Campaign SOURCESHORT:MPC SOURCEWEB:http://www.mpcwebsit # TYPE:yyy # RACESUBTYPE:zzz # MOVE:Walk,0 -# BONUS:VAR|Manueverability|0 +# BONUS:VAR|Maneuverability|0 # BONUS:VAR|AC_Natural_Armor|0|TYPE=Base # FACE:5 # REACH:5 diff --git a/data/pathfinder/everyman_gaming/dragon_companion_handbook/dch_races.lst b/data/pathfinder/everyman_gaming/dragon_companion_handbook/dch_races.lst index 3550ddc392a..44a83d09179 100644 --- a/data/pathfinder/everyman_gaming/dragon_companion_handbook/dch_races.lst +++ b/data/pathfinder/everyman_gaming/dragon_companion_handbook/dch_races.lst @@ -1,4 +1,4 @@ # CVS $Revision: $ $Author: $ -- Tue Dec 15 01:48:08 2015 -- reformated by PCGen PrettyLST v6.06.00 # Race Name Starting Feats Move Stat bonus Modify VAR Ability Nb Legs Nb Hands Main Race Type Type Challenge Rating Source Page -Dragon STARTFEATS:1 MOVE:Walk,30,Fly,30 BONUS:STAT|STR|2 BONUS:STAT|CHA|2 BONUS:VAR|Manueverability|2 ABILITY:Internal|AUTOMATIC|Racial Traits ~ Dragon LEGS:4 HANDS:2 RACETYPE:Dragon TYPE:Dragon.PC CR:0 SOURCEPAGE:p.5 FACT:BaseSize|S +Dragon STARTFEATS:1 MOVE:Walk,30,Fly,30 BONUS:STAT|STR|2 BONUS:STAT|CHA|2 BONUS:VAR|Maneuverability|2 ABILITY:Internal|AUTOMATIC|Racial Traits ~ Dragon LEGS:4 HANDS:2 RACETYPE:Dragon TYPE:Dragon.PC CR:0 SOURCEPAGE:p.5 FACT:BaseSize|S diff --git a/data/pathfinder/homebrew/my_homebrew/my_races.lst b/data/pathfinder/homebrew/my_homebrew/my_races.lst index 44bfdd45a41..f05ed4a5d77 100644 --- a/data/pathfinder/homebrew/my_homebrew/my_races.lst +++ b/data/pathfinder/homebrew/my_homebrew/my_races.lst @@ -9,7 +9,7 @@ SOURCELONG:My Pathfinder Campaign SOURCESHORT:MPC SOURCEWEB:http://www.mywebsite # TYPE:yyy # RACESUBTYPE: # MOVE:Walk, -# BONUS:VAR|Manueverability| +# BONUS:VAR|Maneuverability| # BONUS:VAR|AC_Natural_Armor|0|TYPE=Base # FACE: # REACH: diff --git a/data/pathfinder/paizo/adventure_path/reign_of_winter/players_guide/rowpg_races.lst b/data/pathfinder/paizo/adventure_path/reign_of_winter/players_guide/rowpg_races.lst index 537eb4fcf62..798d1c95db8 100644 --- a/data/pathfinder/paizo/adventure_path/reign_of_winter/players_guide/rowpg_races.lst +++ b/data/pathfinder/paizo/adventure_path/reign_of_winter/players_guide/rowpg_races.lst @@ -7,19 +7,19 @@ SOURCELONG:Reign of Winter Player's Guide SOURCESHORT:ROWPG SOURCEWEB:http://pai # Race Name Unique Key Starting Feats Size Move Reach Vision Bonus to Situation Bonus to skill Stat bonus Modify VAR Weapon prof. bonus Ability Nb Legs Define Monster Class Name and Starting Level Main Race Type Race Subtype Type Challenge Rating Source Page Apply Kit FACT Arctic Fox KEY:Familiar ~ Arctic Fox STARTFEATS:1 SIZE:T MOVE:Walk,40 REACH:0 VISION:Low-Light Vision BONUS:SITUATION|Acrobatics=When Jumping|4|TYPE=Racial BONUS:SITUATION|Survival=Track by scent|4|TYPE=Racial BONUS:SITUATION|Stealth=in snow|4 BONUS:STAT|STR|-2 BONUS:STAT|DEX|4 BONUS:STAT|CON|2 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-4 ABILITY:Internal|AUTOMATIC|Bite MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:FamiliarBase CR:1/4 SOURCEPAGE:p.10 KIT:1|TN FACT:BaseSize|T Arctic Hare KEY:Familiar ~ Arctic Hare STARTFEATS:1 SIZE:T MOVE:Walk,50 REACH:0 BONUS:SITUATION|Acrobatics=When Jumping|8 BONUS:SITUATION|Stealth=in snow|4 BONUS:STAT|STR|-8 BONUS:STAT|DEX|6 BONUS:STAT|CON|-2 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-6 ABILITY:Internal|AUTOMATIC|Bite MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:FamiliarBase TYPE:Animal SOURCEPAGE:p.10 FACT:BaseSize|T -Arctic Tern KEY:Familiar ~ Arctic Tern STARTFEATS:1 SIZE:T MOVE:Walk,10,Fly,40 REACH:0 BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|Manueverability|3 ABILITY:Internal|AUTOMATIC|Bite MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:FamiliarBase TYPE:Animal SOURCEPAGE:p.10 FACT:BaseSize|T +Arctic Tern KEY:Familiar ~ Arctic Tern STARTFEATS:1 SIZE:T MOVE:Walk,10,Fly,40 REACH:0 BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|Maneuverability|3 ABILITY:Internal|AUTOMATIC|Bite MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:FamiliarBase TYPE:Animal SOURCEPAGE:p.10 FACT:BaseSize|T Ermine KEY:Familiar ~ Ermine STARTFEATS:1 SIZE:T MOVE:Walk,20,Climb,20 REACH:0 BONUS:SITUATION|Stealth=in snow|4 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:SKILL|Stealth|4|TYPE=Racial BONUS:SKILL|Acrobatics|8|TYPE=Racial BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-6 BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Universal Monster Rule ~ Attach|Scent ABILITY:Internal|AUTOMATIC|Bite LEGS:4 MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:Familiar|Augmented Magical Beast|FamiliarBase RACESUBTYPE:FamiliarBase TYPE:Animal.Companion.Familiar CR:1/4 SOURCEPAGE:p.10 SOURCEPAGE:p.133 KIT:1|Animal ~ Weasel FACT:BaseSize|T Lemming KEY:Familiar ~ Lemming STARTFEATS:1 SIZE:D MOVE:Walk,15 REACH:0 BONUS:SKILL|Stealth|4|TYPE=Racial BONUS:STAT|STR|-10 BONUS:STAT|DEX|2 BONUS:STAT|CON|-4 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-6 MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:FamiliarBase TYPE:Animal SOURCEPAGE:p.10 FACT:BaseSize|D -Ptarmigan KEY:Familiar ~ Ptarmigan STARTFEATS:1 SIZE:T MOVE:Walk,20,Fly,40 REACH:0 BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-10 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|Manueverability|2 ABILITY:Internal|AUTOMATIC|Bite MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:FamiliarBase TYPE:Animal SOURCEPAGE:p.10 FACT:BaseSize|T -Puffin KEY:Familiar ~ Puffin STARTFEATS:1 SIZE:T MOVE:Walk,10,Fly,40 REACH:0 BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-8 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|Manueverability|3 ABILITY:Internal|AUTOMATIC|Bite MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:FamiliarBase TYPE:Animal SOURCEPAGE:p.11 FACT:BaseSize|T +Ptarmigan KEY:Familiar ~ Ptarmigan STARTFEATS:1 SIZE:T MOVE:Walk,20,Fly,40 REACH:0 BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-10 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|Maneuverability|2 ABILITY:Internal|AUTOMATIC|Bite MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:FamiliarBase TYPE:Animal SOURCEPAGE:p.10 FACT:BaseSize|T +Puffin KEY:Familiar ~ Puffin STARTFEATS:1 SIZE:T MOVE:Walk,10,Fly,40 REACH:0 BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-8 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|Maneuverability|3 ABILITY:Internal|AUTOMATIC|Bite MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:FamiliarBase TYPE:Animal SOURCEPAGE:p.11 FACT:BaseSize|T Snowy Owl KEY:Familiar ~ Snowy Owl STARTFEATS:1 SIZE:T MOVE:Walk,10,Fly,60 REACH:0 BONUS:SITUATION|Stealth=in snow|4 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:SKILL|Perception,Stealth|4|TYPE=Racial BONUS:STAT|STR|-4 BONUS:STAT|DEX|6 BONUS:STAT|INT|-8 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-4 BONUS:VAR|Maneuverability|3 BONUS:WEAPONPROF=Talons|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Flight Maneuverability ABILITY:Internal|AUTOMATIC|Talons LEGS:2 DEFINE:Maneuverability|0 MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:FamiliarBase RACESUBTYPE:Familiar|Augmented Magical Beast|FamiliarBase TYPE:Animal.Companion.Familiar CR:1/3 SOURCEPAGE:p.11 SOURCEPAGE:p.132 KIT:1|Animal ~ Owl FACT:BaseSize|T # Animal Versions Arctic Fox STARTFEATS:1 SIZE:T MOVE:Walk,40 REACH:0 VISION:Low-Light Vision BONUS:SITUATION|Acrobatics=When Jumping|4|TYPE=Racial BONUS:SITUATION|Survival=Track by scent|4|TYPE=Racial BONUS:SITUATION|Stealth=in snow|4 BONUS:STAT|STR|-2 BONUS:STAT|DEX|4 BONUS:STAT|CON|2 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-4 ABILITY:Internal|AUTOMATIC|Bite MONSTERCLASS:Animal:1 RACETYPE:Animal CR:1/4 SOURCEPAGE:p.10 KIT:1|TN FACT:BaseSize|T Arctic Hare STARTFEATS:1 SIZE:T MOVE:Walk,50 REACH:0 BONUS:SITUATION|Acrobatics=When Jumping|8 BONUS:SITUATION|Stealth=in snow|4 BONUS:STAT|STR|-8 BONUS:STAT|DEX|6 BONUS:STAT|CON|-2 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-6 ABILITY:Internal|AUTOMATIC|Bite MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal SOURCEPAGE:p.10 FACT:BaseSize|T -Arctic Tern STARTFEATS:1 SIZE:T MOVE:Walk,10,Fly,40 REACH:0 BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|Manueverability|3 ABILITY:Internal|AUTOMATIC|Bite MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal SOURCEPAGE:p.10 FACT:BaseSize|T +Arctic Tern STARTFEATS:1 SIZE:T MOVE:Walk,10,Fly,40 REACH:0 BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|Maneuverability|3 ABILITY:Internal|AUTOMATIC|Bite MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal SOURCEPAGE:p.10 FACT:BaseSize|T Ermine STARTFEATS:1 SIZE:T MOVE:Walk,20,Climb,20 REACH:0 BONUS:SITUATION|Stealth=in snow|4 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:SKILL|Stealth|4|TYPE=Racial BONUS:SKILL|Acrobatics|8|TYPE=Racial BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-6 BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Universal Monster Rule ~ Attach|Scent ABILITY:Internal|AUTOMATIC|Bite LEGS:4 MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal CR:1/4 SOURCEPAGE:p.10 SOURCEPAGE:p.133 KIT:1|Animal ~ Weasel FACT:BaseSize|T Lemming STARTFEATS:1 SIZE:D MOVE:Walk,15 REACH:0 BONUS:SKILL|Stealth|4|TYPE=Racial BONUS:STAT|STR|-10 BONUS:STAT|DEX|2 BONUS:STAT|CON|-4 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-6 MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal SOURCEPAGE:p.10 FACT:BaseSize|D -Ptarmigan STARTFEATS:1 SIZE:T MOVE:Walk,20,Fly,40 REACH:0 BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-10 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|Manueverability|2 ABILITY:Internal|AUTOMATIC|Bite MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal SOURCEPAGE:p.10 FACT:BaseSize|T -Puffin STARTFEATS:1 SIZE:T MOVE:Walk,10,Fly,40 REACH:0 BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-8 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|Manueverability|3 ABILITY:Internal|AUTOMATIC|Bite MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal SOURCEPAGE:p.11 FACT:BaseSize|T +Ptarmigan STARTFEATS:1 SIZE:T MOVE:Walk,20,Fly,40 REACH:0 BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-10 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|Maneuverability|2 ABILITY:Internal|AUTOMATIC|Bite MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal SOURCEPAGE:p.10 FACT:BaseSize|T +Puffin STARTFEATS:1 SIZE:T MOVE:Walk,10,Fly,40 REACH:0 BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-8 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|Maneuverability|3 ABILITY:Internal|AUTOMATIC|Bite MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal SOURCEPAGE:p.11 FACT:BaseSize|T Snowy Owl STARTFEATS:1 SIZE:T MOVE:Walk,10,Fly,60 REACH:0 BONUS:SITUATION|Stealth=in snow|4 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:SKILL|Perception,Stealth|4|TYPE=Racial BONUS:STAT|STR|-4 BONUS:STAT|DEX|6 BONUS:STAT|INT|-8 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-4 BONUS:VAR|Maneuverability|3 BONUS:WEAPONPROF=Talons|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Flight Maneuverability ABILITY:Internal|AUTOMATIC|Talons LEGS:2 DEFINE:Maneuverability|0 MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal CR:1/3 SOURCEPAGE:p.11 SOURCEPAGE:p.132 KIT:1|Animal ~ Owl FACT:BaseSize|T diff --git a/data/pathfinder/paizo/adventure_path/rise_of_the_runelords/rise_of_the_runelords_ae/rotr_races.lst b/data/pathfinder/paizo/adventure_path/rise_of_the_runelords/rise_of_the_runelords_ae/rotr_races.lst index 934e0256539..c7aa373989f 100644 --- a/data/pathfinder/paizo/adventure_path/rise_of_the_runelords/rise_of_the_runelords_ae/rotr_races.lst +++ b/data/pathfinder/paizo/adventure_path/rise_of_the_runelords/rise_of_the_runelords_ae/rotr_races.lst @@ -8,7 +8,7 @@ Black Magga STARTFEATS:1 SIZE:G MOVE:Walk,20,Swim,60 REACH:20 BONUS: Black Magga (Mothers of Oblivion) STARTFEATS:1 SIZE:H MOVE:Walk,20,Swim,60 REACH:15 BONUS:STAT|STR|26 BONUS:STAT|CON|20 BONUS:STAT|INT|14 BONUS:STAT|WIS|8 BONUS:STAT|CHA|10 BONUS:VAR|AC_Natural_Armor|24|TYPE=Base BONUS:VAR|TentacleAttacks|2 BONUS:WEAPONPROF=Tentacle|TOHIT|-5 BONUS:WEAPONPROF=Tentacle|DAMAGE|-STR*1/2 AUTO:LANG|Abyssal|Celestial|Common|Draconic|Infernal|Thassilonian ABILITY:Internal|AUTOMATIC|Racial Traits ~ Black Magga ABILITY:Internal|AUTOMATIC|Tentacle LEGS:8 SR:26 DR:15/cold iron and magic MONSTERCLASS:Outsider (Fort/Ref):10 RACETYPE:Outsider RACESUBTYPE:Aquatic|Native TYPE:Outsider CR:15 SOURCEPAGE:p.406 KIT:1|CE FACT:BaseSize|H Carrionstorm STARTFEATS:1 SIZE:T MOVE:Walk,10,Fly,40 REACH:0 BONUS:STAT|STR|-10 BONUS:STAT|INT|-8 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-4 BONUS:VAR|DarkvisionRange|60|TYPE=Base BONUS:WEAPONPROF=Swarm|DAMAGE|-1*(STR) MONCSKILL:Perception AUTO:LANG|Necril ABILITY:Internal|AUTOMATIC|Racial Traits ~ Carrionstorm LEGS:0 NATURALATTACKS:Swarm,Weapon.Natural.Weapon Group Natural.Melee.Finesseable.Bludgeoning,*1,1d6 MONSTERCLASS:Undead:2 RACETYPE:Undead RACESUBTYPE:Swarm TYPE:Undead CR:1 SOURCEPAGE:p.408 KIT:1|NE FACT:BaseSize|T Forgefiend KEY:Forgefiend (Scanderig) STARTFEATS:1 SIZE:L MOVE:Walk,20,Burrow,20,Earthglide,20 REACH:10 BONUS:STAT|STR|18 BONUS:STAT|DEX|4 BONUS:STAT|CON|14 BONUS:STAT|INT|5 BONUS:STAT|WIS|-2 BONUS:VAR|AC_Natural_Armor|14|TYPE=Base BONUS:VAR|DarkvisionRange|120|TYPE=Base BONUS:VAR|AcidResistanceBonus|10|TYPE=Resistance BONUS:VAR|ColdResistanceBonus|10|TYPE=Resistance MONCSKILL:Acrobatics|Disable Device|Escape Artist|Knowledge (Dungeoneering) AUTO:LANG|Common|Dwarven|Infernal|Terran ABILITY:Internal|AUTOMATIC|Racial Traits ~ Scanderig LEGS:2 HANDS:2 NATURALATTACKS:Bite,Weapon.Natural.Weapon Group Natural.Melee.Finesseable.Bludgeoning.Piercing.Slashing,*1,3d6|Claw,Weapon.Natural.Weapon Group Natural.Melee.Finesseable.Piercing.Slashing,*2,1d8|Bite,Weapon.Natural.Weapon Group Natural.Melee.Finesseable.Bludgeoning.Piercing.Slashing,*1,1d6 MONSTERCLASS:Outsider (Fort/Ref):11 RACETYPE:Outsider RACESUBTYPE:Earth TYPE:Outsider CR:10 SOURCEPAGE:p.409 SPELLS:Innate|TIMES=ATWILL|CASTERLEVEL=11|Major Image,11+INT|Pass without Trace|Passwall|Shatter,10+INT|Stone Shape SPELLS:Innate|TIMES=3|CASTERLEVEL=11|Deeper Darkness|Dimensional Anchor|Flesh to Stone,14+INT|Produce Flame|Wall of Fire|Wall of Stone KIT:1|LE FACT:BaseSize|L -Hungerer KEY:Lamia-Kin (Hungerer) STARTFEATS:1 SIZE:H MOVE:Walk,10,Fly,60 REACH:10 BONUS:STAT|STR|20 BONUS:STAT|DEX|2 BONUS:STAT|CON|20 BONUS:STAT|INT|2 BONUS:STAT|WIS|8 BONUS:STAT|CHA|8 BONUS:VAR|AC_Natural_Armor|21|TYPE=Base BONUS:VAR|DarkvisionRange|90|TYPE=Base BONUS:VAR|ElectricityResistanceBonus,FireResistanceBonus|10|TYPE=Resistance BONUS:VAR|Manueverability|4 AUTO:LANG|Giant|Thassilonian|Abyssal|Common ABILITY:Internal|AUTOMATIC|Racial Traits ~ Hungerer LEGS:2 SR:26 DR:10/cold iron and piercing MONSTERCLASS:Monstrous Humanoid:21 RACETYPE:Monstrous Humanoid TYPE:Monstrous Humanoid CR:15 SOURCEPAGE:p.410 KIT:1|CE FACT:BaseSize|H -Kuchrima KEY:Lamia-Kin (Kuchrima) STARTFEATS:1 SIZE:M MOVE:Walk,20,Fly,60 REACH:5 BONUS:STAT|STR|10 BONUS:STAT|DEX|12 BONUS:STAT|CON|8 BONUS:STAT|INT|-4 BONUS:STAT|WIS|-2 BONUS:VAR|AC_Natural_Armor|6|TYPE=Base BONUS:VAR|Manueverability|4 AUTO:LANG|Common|Giant|Thassilonian ABILITY:Internal|AUTOMATIC|Racial Traits ~ Kuchrima LEGS:2 MONSTERCLASS:Monstrous Humanoid:11 RACETYPE:Monstrous Humanoid TYPE:Monstrous Humanoid CR:8 SOURCEPAGE:p.411 KIT:1|CE FACT:BaseSize|M +Hungerer KEY:Lamia-Kin (Hungerer) STARTFEATS:1 SIZE:H MOVE:Walk,10,Fly,60 REACH:10 BONUS:STAT|STR|20 BONUS:STAT|DEX|2 BONUS:STAT|CON|20 BONUS:STAT|INT|2 BONUS:STAT|WIS|8 BONUS:STAT|CHA|8 BONUS:VAR|AC_Natural_Armor|21|TYPE=Base BONUS:VAR|DarkvisionRange|90|TYPE=Base BONUS:VAR|ElectricityResistanceBonus,FireResistanceBonus|10|TYPE=Resistance BONUS:VAR|Maneuverability|4 AUTO:LANG|Giant|Thassilonian|Abyssal|Common ABILITY:Internal|AUTOMATIC|Racial Traits ~ Hungerer LEGS:2 SR:26 DR:10/cold iron and piercing MONSTERCLASS:Monstrous Humanoid:21 RACETYPE:Monstrous Humanoid TYPE:Monstrous Humanoid CR:15 SOURCEPAGE:p.410 KIT:1|CE FACT:BaseSize|H +Kuchrima KEY:Lamia-Kin (Kuchrima) STARTFEATS:1 SIZE:M MOVE:Walk,20,Fly,60 REACH:5 BONUS:STAT|STR|10 BONUS:STAT|DEX|12 BONUS:STAT|CON|8 BONUS:STAT|INT|-4 BONUS:STAT|WIS|-2 BONUS:VAR|AC_Natural_Armor|6|TYPE=Base BONUS:VAR|Maneuverability|4 AUTO:LANG|Common|Giant|Thassilonian ABILITY:Internal|AUTOMATIC|Racial Traits ~ Kuchrima LEGS:2 MONSTERCLASS:Monstrous Humanoid:11 RACETYPE:Monstrous Humanoid TYPE:Monstrous Humanoid CR:8 SOURCEPAGE:p.411 KIT:1|CE FACT:BaseSize|M Scarlet Walker STARTFEATS:1 SIZE:H MOVE:Walk,40,Climb,40 REACH:30 BONUS:STAT|STR|14 BONUS:STAT|DEX|18 BONUS:STAT|CON|10 BONUS:STAT|INT|4 BONUS:STAT|WIS|10 BONUS:STAT|CHA|10 BONUS:VAR|AC_Natural_Armor|10|TYPE=Base BONUS:VAR|FastHealingRate|10 BONUS:VAR|TelepathyRange|300 AUTO:LANG|Aklo|Infernal ABILITY:Internal|AUTOMATIC|Claw|Racial Traits ~ Scarlet Walker|Tentacle LEGS:6 MONSTERCLASS:Outsider (Ref/Will):16 RACETYPE:Outsider RACESUBTYPE:Evil|Extraplanar|Lawful TYPE:Outsider CR:12 SOURCEPAGE:p.414 KIT:1|LE FACT:BaseSize|H Skull Ripper SIZE:L MOVE:Walk,40,Climb,40 REACH:10 BONUS:STAT|STR|12 BONUS:STAT|DEX|6 BONUS:STAT|INT|-6 BONUS:STAT|WIS|2 BONUS:STAT|CHA|2 BONUS:VAR|AC_Natural_Armor|12|TYPE=Base BONUS:VAR|ColdResistanceBonus|10|TYPE=Resistance AUTO:LANG|Thassilonian ABILITY:Internal|AUTOMATIC|Claw|Racial Traits ~ Skull Ripper|Sting LEGS:6 SR:20 DR:5/adamantine MONSTERCLASS:Construct:15 RACETYPE:Construct RACESUBTYPE:Mindless TYPE:Construct CR:9 SOURCEPAGE:p.415 KIT:1|CN FACT:BaseSize|L diff --git a/data/pathfinder/paizo/campaign_setting/inner_sea_magic/ism_abilities_class.lst b/data/pathfinder/paizo/campaign_setting/inner_sea_magic/ism_abilities_class.lst index 7638f6f9608..f1dbfc99909 100644 --- a/data/pathfinder/paizo/campaign_setting/inner_sea_magic/ism_abilities_class.lst +++ b/data/pathfinder/paizo/campaign_setting/inner_sea_magic/ism_abilities_class.lst @@ -117,7 +117,7 @@ Rift Magic KEY:Outer Rifts Mystery ~ Rift Magic CATEGORY:Special Ability T Rift Weapon KEY:Outer Rifts Mystery ~ Rift Weapon CATEGORY:Special Ability TYPE:OracleClassFeatures.SpecialQuality.OracleRevelation.OuterRiftsRevelation.Supernatural DEFINE:RiftWeaponTimes|0 DEFINE:RiftWeaponDuration|0 DESC:Your understanding of the powers that move through the Outer Rifts allows you to imbue weapons with the ability to penetrate the defenses of creatures native to other planes. %1 per day as a standard action, you can touch one weapon (or a group of up to 20 similar pieces of ammunition) and give it the ability to penetrate DR/cold iron for %2 minutes.|RiftWeaponTimes|RiftWeaponDuration DESC:You can also grant the additional ability to bypass either DR/good and DR/law.|PREVARGTEQ:OracleLVL,9 BONUS:VAR|RiftWeaponTimes|1+OracleLVL/5 BONUS:VAR|RiftWeaponDuration|OracleLVL SOURCEPAGE:p.31 Telepathy KEY:Outer Rifts Mystery ~ Telepathy CATEGORY:Special Ability TYPE:OracleClassFeatures.SpecialQuality.OracleRevelation.OuterRiftsRevelation.Supernatural PRECLASS:1,Oracle=11 DESC:You can mentally communicate with any other creature within 100 feet that has a language. It is possible to address multiple creatures at once telepathically, although maintaining a telepathic conversation with more than one creature at a time is just as difficult as simultaneously speaking and listening to multiple people at the same time. SOURCEPAGE:p.31 Unearthly Terrain KEY:Outer Rifts Mystery ~ Unearthly Terrain CATEGORY:Special Ability TYPE:OracleClassFeatures.SpecialQuality.OracleRevelation.OuterRiftsRevelation.Supernatural DEFINE:UnearthlyTerrainDuration|0 DEFINE:UnearthlyTerrainTimes|0 DESC:You can twist the material world into the harsh, jagged edges and uneven angles of the outer planes. As a standard action, you can turn one 20-foot square into difficult terrain for %1 rounds. You may use this ability %2 times per day.|UnearthlyTerrainDuration|UnearthlyTerrainTimes BONUS:VAR|UnearthlyTerrainDuration|OracleLVL BONUS:VAR|UnearthlyTerrainTimes|3+CHA SOURCEPAGE:p.31 -Wings of Terror KEY:Outer Rifts Mystery ~ Wings of Terror CATEGORY:Special Ability TYPE:OracleClassFeatures.SpecialQuality.OracleRevelation.OuterRiftsRevelation.Supernatural PRECLASS:1,Oracle=7 DEFINE:WingsOfTerrorDuration|0 DESC:You can manifest a pair of enormous, batlike demon wings that grant you a fly speed of DESC:60 feet with average manueverability and a +4 bonus on Intimidate checks.|PREVARLT:OracleLVL,10 DESC:90 feet with good manueverability and a +8 bonus on Intimidate checks.|PREVARGTEQ:OracleLVL,10 DESC:You can use these wings for %1 minutes per day. This duration does not need to be consecutive, but it must be spent in 1-minute increments.|WingsOfTerrorDuration BONUS:VAR|WingsOfTerrorDuration|OracleLVL SOURCEPAGE:p.31 +Wings of Terror KEY:Outer Rifts Mystery ~ Wings of Terror CATEGORY:Special Ability TYPE:OracleClassFeatures.SpecialQuality.OracleRevelation.OuterRiftsRevelation.Supernatural PRECLASS:1,Oracle=7 DEFINE:WingsOfTerrorDuration|0 DESC:You can manifest a pair of enormous, batlike demon wings that grant you a fly speed of DESC:60 feet with average maneuverability and a +4 bonus on Intimidate checks.|PREVARLT:OracleLVL,10 DESC:90 feet with good maneuverability and a +8 bonus on Intimidate checks.|PREVARGTEQ:OracleLVL,10 DESC:You can use these wings for %1 minutes per day. This duration does not need to be consecutive, but it must be spent in 1-minute increments.|WingsOfTerrorDuration BONUS:VAR|WingsOfTerrorDuration|OracleLVL SOURCEPAGE:p.31 Final Revelation KEY:Outer Rifts Mystery ~ Final Revelation CATEGORY:Special Ability TYPE:OracleClassFeatures.SpecialQuality.FinalRevelation SPELLS:Innate|TIMES=1|CASTERLEVEL=OracleLVL|Gate,19+CHA DESC:You gain the ability to open rifts between planes. This allows you to use gate as a spell-like ability once per day. If you use this ability to call creatures, you still need to provide 10,000 gp in offerings to secure the creature's aid. SOURCEPAGE:p.31 diff --git a/data/pathfinder/paizo/roleplaying_game/advanced_race_guide/arg_feats.lst b/data/pathfinder/paizo/roleplaying_game/advanced_race_guide/arg_feats.lst index ddc3775690b..cf782b5fbe6 100644 --- a/data/pathfinder/paizo/roleplaying_game/advanced_race_guide/arg_feats.lst +++ b/data/pathfinder/paizo/roleplaying_game/advanced_race_guide/arg_feats.lst @@ -199,7 +199,7 @@ Shadowy Dash CATEGORY:FEAT TYPE:General PRERACE:1,Wayang,RA ### ##Block: Aasimar Feats # Ability Name Category of Ability Type Required Ability Required Lvl Multiple Requirements Required Non-Monster Lvl Required Race Required Stat Required Text PRETOTALAB QUALIFY:ABILITY Define Description Stackable? Multiple? Choose Move Bonus Ability Pool Bonus to skill Modify VAR Class Skill Source Page Natural Attacks Benefits -Angel Wings CATEGORY:FEAT TYPE:General PREABILITY:1,CATEGORY=FEAT,Angelic Blood PREPCLEVEL:MIN=10 PRERACE:1,Aasimar,RACESUBTYPE=Aasimar DEFINE:Maneuverability|0 DESC:Feathered wings sprout from your back. MOVE:Fly,30 BONUS:VAR|Maneuverability|3 BONUS:VAR|Manueverability|-1|PREVARLT:ENCUMBERANCE,1,var("COUNT[EQTYPE.ARMOR.EQUIPPED.IS.MEDIUM]"),1,var("COUNT[EQTYPE.ARMOR.EQUIPPED.IS.HEAVY]"),1 CSKILL:Fly SOURCEPAGE:p.87 BENEFIT:You gain a pair of gleaming feathered wings that grant a fly speed of 30 feet (average maneuverability) if wearing light armor or unencumbered, or 20 feet (poor maneuverability) with a medium or heavy load or medium or heavy armor. Fly is a class skill for you. +Angel Wings CATEGORY:FEAT TYPE:General PREABILITY:1,CATEGORY=FEAT,Angelic Blood PREPCLEVEL:MIN=10 PRERACE:1,Aasimar,RACESUBTYPE=Aasimar DEFINE:Maneuverability|0 DESC:Feathered wings sprout from your back. MOVE:Fly,30 BONUS:VAR|Maneuverability|3 BONUS:VAR|Maneuverability|-1|PREVARLT:ENCUMBERANCE,1,var("COUNT[EQTYPE.ARMOR.EQUIPPED.IS.MEDIUM]"),1,var("COUNT[EQTYPE.ARMOR.EQUIPPED.IS.HEAVY]"),1 CSKILL:Fly SOURCEPAGE:p.87 BENEFIT:You gain a pair of gleaming feathered wings that grant a fly speed of 30 feet (average maneuverability) if wearing light armor or unencumbered, or 20 feet (poor maneuverability) with a medium or heavy load or medium or heavy armor. Fly is a class skill for you. Angelic Blood CATEGORY:FEAT TYPE:General PRERACE:1,Aasimar,RACESUBTYPE=Aasimar PRESTAT:1,CON=13 DESC:Your blood is infused with holy power. SOURCEPAGE:p.88 BENEFIT:You gain a +2 bonus on saving throws against effects with the evil descriptor and on Constitution checks to stabilize when you are reduced to negative hit points (but not dead). Furthermore, each time you take bleed or blood drain damage, each undead creature or creature with the evil subtype that is currently adjacent to you also takes 1 point of damage. Angelic Flesh CATEGORY:FEAT TYPE:General PREABILITY:1,CATEGORY=FEAT,Angelic Blood PRERACE:1,Aasimar,RACESUBTYPE=Aasimar DESC:Your skin shines like burnished metal. MULT:NO BONUS:ABILITYPOOL|Angelic Flesh Option|1 BONUS:SKILL|Disguise,Stealth|-2 SOURCEPAGE:p.88 BENEFIT:You take a -2 penalty on Disguise and Stealth checks but gain one of the following benefits, depending on the metallic affinity of your flesh (choose one). diff --git a/data/pathfinder/paizo/roleplaying_game/bestiary_3/b3_races_companion.lst b/data/pathfinder/paizo/roleplaying_game/bestiary_3/b3_races_companion.lst index e764d611d91..0ca8df1a2e8 100644 --- a/data/pathfinder/paizo/roleplaying_game/bestiary_3/b3_races_companion.lst +++ b/data/pathfinder/paizo/roleplaying_game/bestiary_3/b3_races_companion.lst @@ -12,7 +12,7 @@ Companion (Dimetrodon) SIZE:M MOVE:Walk,30 REACH:5 BONUS:ABILITYPOOL|Companio Companion (Elk) SIZE:M MOVE:Walk,50 REACH:5 BONUS:ABILITYPOOL|Companion Level Increase Choice|1|PREVARGTEQ:MasterLevel,7 BONUS:STAT|STR|2 BONUS:STAT|DEX|6 BONUS:STAT|CON|4 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|AC_Natural_Armor|1|TYPE=Base BONUS:VAR|HasLowLightVision|1 BONUS:VAR|NoTypeTraits|1 ABILITY:Internal|AUTOMATIC|Gore|Hoof ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Elk|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement DEFINE:NoTypeTraits|0 MONSTERCLASS:Companion:2 RACETYPE:Companion KIT:1|Companion ~ Herd Animal (Elk) FACT:BaseSize|M Companion (Giant Chameleon) SIZE:M MOVE:Walk,30,Climb,30 REACH:5 BONUS:ABILITYPOOL|Companion Level Increase Choice|1|PREVARGTEQ:MasterLevel,4 BONUS:SITUATION|Stealth=While still|10|TYPE=Racial BONUS:STAT|STR|2 BONUS:STAT|DEX|4 BONUS:STAT|CON|4 BONUS:STAT|WIS|0 BONUS:STAT|CHA|-4 BONUS:VAR|HasLowLightVision|1 BONUS:VAR|NoTypeTraits|1 ABILITY:Internal|AUTOMATIC|Bite ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Giant Chameleon|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement DEFINE:NoTypeTraits|0 MONSTERCLASS:Companion:2 RACETYPE:Companion KIT:1|Companion ~ Lizard (Giant Chameleon) FACT:BaseSize|M Companion (Giant Gecko) SIZE:S MOVE:Walk,30 REACH:5 BONUS:ABILITYPOOL|Companion Level Increase Choice|1|PREVARGTEQ:MasterLevel,4 BONUS:STAT|STR|0 BONUS:STAT|DEX|4 BONUS:STAT|CON|2 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-4 BONUS:VAR|HasLowLightVision|1 BONUS:VAR|NoTypeTraits|1 BONUS:WEAPONPROF=Bite|DAMAGESIZE|1 ABILITY:Internal|AUTOMATIC|Bite ABILITY:Special Ability|AUTOMATIC|Giant Gecko ~ Expert Climber ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Giant Gecko|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement DEFINE:NoTypeTraits|0 MONSTERCLASS:Companion:2 RACETYPE:Companion KIT:1|Companion ~ Lizard (Giant Gecko) FACT:BaseSize|S -Companion (Giant Vulture) SIZE:M MOVE:Walk,10,Fly,50 REACH:5 BONUS:ABILITYPOOL|Companion Level Increase Choice|1|PREVARGTEQ:MasterLevel,7 BONUS:STAT|STR|2 BONUS:STAT|DEX|4 BONUS:STAT|CON|4 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-4 BONUS:VAR|AC_Natural_Armor|2|TYPE=Base BONUS:VAR|HasLowLightVision|1 BONUS:VAR|NoTypeTraits|1 BONUS:VAR|Manueverability|3 BONUS:WEAPONPROF=Bite|DAMAGESIZE|1 ABILITY:Internal|AUTOMATIC|Bite ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Giant Vulture|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement SAB:+4 on saves vs. disease. DEFINE:NoTypeTraits|0 MONSTERCLASS:Companion:2 RACETYPE:Companion KIT:1|Companion ~ Vulture (Giant) FACT:BaseSize|M +Companion (Giant Vulture) SIZE:M MOVE:Walk,10,Fly,50 REACH:5 BONUS:ABILITYPOOL|Companion Level Increase Choice|1|PREVARGTEQ:MasterLevel,7 BONUS:STAT|STR|2 BONUS:STAT|DEX|4 BONUS:STAT|CON|4 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-4 BONUS:VAR|AC_Natural_Armor|2|TYPE=Base BONUS:VAR|HasLowLightVision|1 BONUS:VAR|NoTypeTraits|1 BONUS:VAR|Maneuverability|3 BONUS:WEAPONPROF=Bite|DAMAGESIZE|1 ABILITY:Internal|AUTOMATIC|Bite ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Giant Vulture|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement SAB:+4 on saves vs. disease. DEFINE:NoTypeTraits|0 MONSTERCLASS:Companion:2 RACETYPE:Companion KIT:1|Companion ~ Vulture (Giant) FACT:BaseSize|M Companion (Iguanodon) SIZE:M MOVE:Walk,30 REACH:5 BONUS:ABILITYPOOL|Companion Level Increase Choice|1|PREVARGTEQ:MasterLevel,7 BONUS:STAT|STR|6 BONUS:STAT|DEX|4 BONUS:STAT|CON|4 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-4 BONUS:VAR|AC_Natural_Armor|3|TYPE=Base BONUS:VAR|NoTypeTraits|1 ABILITY:Internal|AUTOMATIC|Claw ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Iguanodon|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement DEFINE:NoTypeTraits|0 MONSTERCLASS:Companion:2 RACETYPE:Companion RACESUBTYPE:AnimalCompanionDinosaur KIT:1|Companion ~ Dinosaur (Iguanodon) FACT:BaseSize|M Companion (Kangaroo) SIZE:M MOVE:Walk,40 REACH:5 BONUS:ABILITYPOOL|Companion Level Increase Choice|1|PREVARGTEQ:MasterLevel,4 BONUS:STAT|STR|2 BONUS:STAT|DEX|4 BONUS:STAT|CON|2 BONUS:STAT|WIS|0 BONUS:STAT|CHA|-4 BONUS:VAR|HasLowLightVision|1 BONUS:VAR|NoTypeTraits|1 ABILITY:Special Ability|AUTOMATIC|Scent ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Kangaroo|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement NATURALATTACKS:Kick,Natural.Melee.Weapon,*1,1d4 DEFINE:NoTypeTraits|0 MONSTERCLASS:Companion:2 RACETYPE:Companion KIT:1|Companion ~ Marsupial (Kangaroo) FACT:BaseSize|M Companion (Megalania) SIZE:M MOVE:Walk,30 REACH:5 BONUS:ABILITYPOOL|Companion Level Increase Choice|1|PREVARGTEQ:MasterLevel,7 BONUS:STAT|STR|2 BONUS:STAT|DEX|6 BONUS:STAT|CON|2 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-4 BONUS:VAR|AC_Natural_Armor|1|TYPE=Base BONUS:VAR|HasLowLightVision|1 BONUS:VAR|NoTypeTraits|1 ABILITY:Special Ability|AUTOMATIC|Scent ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Megalania|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement NATURALATTACKS:Bite,Natural.Melee.Weapon,*1,1d6,SPROP=grab DEFINE:NoTypeTraits|0 MONSTERCLASS:Companion:2 RACETYPE:Companion KIT:1|Companion ~ Megafauna (Megalania) FACT:BaseSize|M diff --git a/data/pathfinder/paizo/roleplaying_game/bestiary_3/b3_templates.lst b/data/pathfinder/paizo/roleplaying_game/bestiary_3/b3_templates.lst index 3501c1000d6..ea8d1619138 100644 --- a/data/pathfinder/paizo/roleplaying_game/bestiary_3/b3_templates.lst +++ b/data/pathfinder/paizo/roleplaying_game/bestiary_3/b3_templates.lst @@ -7,12 +7,12 @@ SOURCELONG:Bestiary 3 SOURCESHORT:B3 SOURCEWEB:http://paizo.com/products/btpy8od # Template Name Hit Dice Size Visible Damage Reduction Template Source Page Define Define Stat Required AL Restricted AL Required Lvl Required Race Prohibited Race Required Template Required Text Required Var. value Var. Min. Value Var. Must Be Lower Bonus Ability Pool Combat bonus Bonus DR Misc bonus Caster level bonus Adjust PC Size Bonus to skill Stat bonus Modify VAR Class Skill Add Ability Auto Language Move Clone Movement Subrace Main Race Type Race Subtype Vision Animal Lord DR:10/silver DEFINESTAT:MINVALUE|STR|AnimalSTRScore DEFINESTAT:MINVALUE|DEX|AnimalDEXScore DEFINESTAT:MINVALUE|CON|AnimalCONScore DEFINESTAT:MINVALUE|INT|AnimalINTScore DEFINESTAT:MINVALUE|WIS|AnimalWISScore DEFINESTAT:MINVALUE|CHA|AnimalCHAScore PREALIGN:NG,TN,NE,CN,LN PRELEVEL:MIN=10 PRERACE:1,RACETYPE=Humanoid BONUS:ABILITYPOOL|Animal Lord Choice|1 BONUS:MISC|CR|max(0,CR-AnimalBaseCR)+2 BONUS:STAT|STR|4|TYPE=Racial BONUS:STAT|DEX|4|TYPE=Racial BONUS:STAT|CON|4|TYPE=Racial BONUS:STAT|INT|4|TYPE=Racial BONUS:STAT|WIS|4|TYPE=Racial BONUS:STAT|CHA|4|TYPE=Racial BONUS:VAR|AC_Natural_Armor|2|TYPE=Base.STACK BONUS:VAR|HasLowLightVision|1 ABILITY:Special Ability|AUTOMATIC|Animal Lord ~ Change Shape|Animal Lord ~ Dominion|Animal Lord ~ Spell-Like Abilities SUBRACE:Animal Lord RACETYPE:Outsider RACESUBTYPE:Native|Shapechanger -Fey Creature DR:5/cold iron TEMPLATE:CHOOSE:Fey Creature Has Natural Armor|Fey Creature Has No Natural Armor TEMPLATE:CHOOSE:Fey Creature Has Good Flight Manueverability|Fey Creature Has No Flight Manueverability DEFINESTAT:STAT|INT DEFINESTAT:MINVALUE|INT|3 !PREALIGN:LG,LN,LE !PRERACE:1,Undead,RACESUBTYPE=Incorporeal BONUS:DR|Cold Iron|5|PRELEVEL:MIN=10 BONUS:MISC|CR|1 BONUS:MISC|CR|1|PRELEVEL:MIN=10 BONUS:STAT|STR|-2 BONUS:STAT|DEX|4 BONUS:STAT|INT|2 BONUS:STAT|CHA|2 BONUS:VAR|Maneuverability|3 BONUS:VAR|ColdResistanceBonus,ElectricityResistanceBonus|10|TYPE=Resistance CSKILL:Acrobatics|Bluff|Fly|Stealth ABILITY:Internal|AUTOMATIC|Racial Traits ~ Fey creature AUTO:LANG|Sylvan MOVECLONE:Walk,Fly,*1.5 RACETYPE:Fey +Fey Creature DR:5/cold iron TEMPLATE:CHOOSE:Fey Creature Has Natural Armor|Fey Creature Has No Natural Armor TEMPLATE:CHOOSE:Fey Creature Has Good Flight Maneuverability|Fey Creature Has No Flight Maneuverability DEFINESTAT:STAT|INT DEFINESTAT:MINVALUE|INT|3 !PREALIGN:LG,LN,LE !PRERACE:1,Undead,RACESUBTYPE=Incorporeal BONUS:DR|Cold Iron|5|PRELEVEL:MIN=10 BONUS:MISC|CR|1 BONUS:MISC|CR|1|PRELEVEL:MIN=10 BONUS:STAT|STR|-2 BONUS:STAT|DEX|4 BONUS:STAT|INT|2 BONUS:STAT|CHA|2 BONUS:VAR|Maneuverability|3 BONUS:VAR|ColdResistanceBonus,ElectricityResistanceBonus|10|TYPE=Resistance CSKILL:Acrobatics|Bluff|Fly|Stealth ABILITY:Internal|AUTOMATIC|Racial Traits ~ Fey creature AUTO:LANG|Sylvan MOVECLONE:Walk,Fly,*1.5 RACETYPE:Fey # Fey Creature Has Natural Armor VISIBLE:NO PREVARGTEQ:var("AC.Natural"),1 BONUS:VAR|AC_Natural_Armor|-1|TYPE=Base Fey Creature Has No Natural Armor VISIBLE:NO PREVAREQ:var("AC.Natural"),0 -Fey Creature Has Good Flight Manueverability VISIBLE:NO DEFINE:Maneuverability|0 PREVARGTEQ:Maneuverability,3 BONUS:VAR|Maneuverability|5 -Fey Creature Has No Flight Manueverability VISIBLE:NO DEFINE:Maneuverability|0 PREVARLT:Maneuverability,3 BONUS:VAR|Maneuverability|3 +Fey Creature Has Good Flight Maneuverability VISIBLE:NO DEFINE:Maneuverability|0 PREVARGTEQ:Maneuverability,3 BONUS:VAR|Maneuverability|5 +Fey Creature Has No Flight Maneuverability VISIBLE:NO DEFINE:Maneuverability|0 PREVARLT:Maneuverability,3 BONUS:VAR|Maneuverability|3 # Penanggalen HITDIE:8 DR:5/silver and slashing SOURCEPAGE:p.215 DEFINE:Maneuverability|0 PREALIGN:LE,NE,CE PRELEVEL:MIN=5 BONUS:MISC|CR|1 BONUS:SKILL|Bluff,Fly,Knowledge (Arcana),Perception,Sense Motive,Stealth|8|TYPE=Racial BONUS:STAT|STR|6 BONUS:STAT|DEX|4 BONUS:STAT|INT|2 BONUS:STAT|WIS|2 BONUS:STAT|CHA|4 BONUS:VAR|AC_Natural_Armor|6|TYPE=Base.STACK BONUS:VAR|Maneuverability|3 BONUS:VAR|ChannelResistance|4 BONUS:VAR|FastHealingRate|5 BONUS:VAR|ColdResistanceBonus,FireResistanceBonus|10|TYPE=Resistance ABILITY:Internal|AUTOMATIC|Bite|Slam ABILITY:Special Ability|AUTOMATIC|Channel Resistance|Fast Healing|Flight Maneuverability|Light Sensitivity|Resistance to Cold|Resistance to Fire|TYPE=PenanggalenRacialAbility MOVE:Fly,60 RACETYPE:Undead diff --git a/data/pathfinder/paizo/roleplaying_game/monster_codex/mc_races_companion.lst b/data/pathfinder/paizo/roleplaying_game/monster_codex/mc_races_companion.lst index 5da1ba6ad50..263b5c89ea4 100644 --- a/data/pathfinder/paizo/roleplaying_game/monster_codex/mc_races_companion.lst +++ b/data/pathfinder/paizo/roleplaying_game/monster_codex/mc_races_companion.lst @@ -12,4 +12,4 @@ Familiar (Seru) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MO Familiar (Sootwing Bat) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Walk,5,Fly,40 REACH:0 BONUS:SITUATION|Perception=Blindsense|4|TYPE=Racial BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-6 BONUS:STAT|DEX|2 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-2 BONUS:VAR|AC_Natural_Armor|1|TYPE=Base BONUS:VAR|BlindsenseRange|20|TYPE=Base BONUS:VAR|ChannelResistance|2 BONUS:VAR|Maneuverability|4 ABILITY:Internal|AUTOMATIC|Racial Traits ~ Bat (Sootwing) LEGS:2 NATURALATTACKS:Bite,Natural.Melee.Finesseable.Weapon,*1,1d3,SPROP=plus disease and paralysis MONSTERCLASS:Undead:1 RACETYPE:Undead RACESUBTYPE:Familiar|Augmented Undead|FamiliarBase TYPE:Companion.Familiar.Undead CR:1/2 SOURCEPAGE:p.88 KIT:1|Familiar ~ Sootwing Bat FACT:BaseSize|T #Copied from B3 -Companion (Giant Vulture) MOVE:Walk,10,Fly,50 REACH:5 BONUS:ABILITYPOOL|Companion Level Increase Choice|1|PREVARGTEQ:MasterLevel,7 BONUS:STAT|STR|2 BONUS:STAT|DEX|4 BONUS:STAT|CON|4 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-4 BONUS:VAR|AC_Natural_Armor|2|TYPE=Base BONUS:VAR|HasLowLightVision|1 BONUS:VAR|NoTypeTraits|1 BONUS:VAR|Manueverability|3 BONUS:WEAPONPROF=Bite|DAMAGESIZE|1 ABILITY:Internal|AUTOMATIC|Bite ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Giant Vulture|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement SAB:+4 on saves vs. disease. DEFINE:NoTypeTraits|0 MONSTERCLASS:Companion:2 RACETYPE:Companion KIT:1|Companion ~ Vulture (Giant) FACT:BaseSize|M +Companion (Giant Vulture) MOVE:Walk,10,Fly,50 REACH:5 BONUS:ABILITYPOOL|Companion Level Increase Choice|1|PREVARGTEQ:MasterLevel,7 BONUS:STAT|STR|2 BONUS:STAT|DEX|4 BONUS:STAT|CON|4 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-4 BONUS:VAR|AC_Natural_Armor|2|TYPE=Base BONUS:VAR|HasLowLightVision|1 BONUS:VAR|NoTypeTraits|1 BONUS:VAR|Maneuverability|3 BONUS:WEAPONPROF=Bite|DAMAGESIZE|1 ABILITY:Internal|AUTOMATIC|Bite ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Giant Vulture|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement SAB:+4 on saves vs. disease. DEFINE:NoTypeTraits|0 MONSTERCLASS:Companion:2 RACETYPE:Companion KIT:1|Companion ~ Vulture (Giant) FACT:BaseSize|M diff --git a/data/pathfinder/paizo/roleplaying_game/ultimate_wilderness/uw_races_companion.lst b/data/pathfinder/paizo/roleplaying_game/ultimate_wilderness/uw_races_companion.lst index a8fe6a3e278..9fc3597a70f 100644 --- a/data/pathfinder/paizo/roleplaying_game/ultimate_wilderness/uw_races_companion.lst +++ b/data/pathfinder/paizo/roleplaying_game/ultimate_wilderness/uw_races_companion.lst @@ -73,7 +73,7 @@ Companion (Whiptail Centipede (Giant)) MOVE:Walk,40,Climb,40 REAC # ============================== Familiar (Arctic Fox) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Walk,40 REACH:0 BONUS:SITUATION|Acrobatics=When Jumping|4|TYPE=Racial BONUS:SITUATION|Survival=Track by scent|4|TYPE=Racial BONUS:SITUATION|Stealth=In snow|4|TYPE=Racial BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-2 BONUS:STAT|DEX|4 BONUS:STAT|CON|2 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-4 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Quadruped (Claws) ABILITY:Internal|AUTOMATIC|Bite LEGS:4 MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:Familiar|Augmented Magical Beast|FamiliarBase TYPE:Companion.Familiar.Animal CR:1/4 SOURCEPAGE:p.190 KIT:1|Familiar ~ Arctic Fox FACT:BaseSize|T SIZE:T Familiar (Arctic Hare) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Walk,50 REACH:0 BONUS:SITUATION|Stealth=In snow|4|TYPE=Racial BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-8 BONUS:STAT|DEX|6 BONUS:STAT|CON|-2 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-6 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Quadruped (Claws) ABILITY:Internal|AUTOMATIC|Bite LEGS:4 MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:Familiar|Augmented Magical Beast|FamiliarBase TYPE:Companion.Familiar.Animal CR:1/6 SOURCEPAGE:p.191 KIT:1|Familiar ~ Arctic Hare FACT:BaseSize|T SIZE:T -Familiar (Arctic Tern) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Walk,10,Fly,40 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-8 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:VAR|Manueverability|3 BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Avian ABILITY:Internal|AUTOMATIC|Bite LEGS:2 MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:Familiar|Augmented Magical Beast|FamiliarBase TYPE:Companion.Familiar.Animal CR:1/6 SOURCEPAGE:p.192 KIT:1|Familiar ~ Arctic Tern FACT:BaseSize|T SIZE:T +Familiar (Arctic Tern) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Walk,10,Fly,40 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-8 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:VAR|Maneuverability|3 BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Avian ABILITY:Internal|AUTOMATIC|Bite LEGS:2 MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:Familiar|Augmented Magical Beast|FamiliarBase TYPE:Companion.Familiar.Animal CR:1/6 SOURCEPAGE:p.192 KIT:1|Familiar ~ Arctic Tern FACT:BaseSize|T SIZE:T Familiar (Armadillo) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Walk,30,Burrow,5 REACH:0 BONUS:SITUATION|Perception=sight-based|-8 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:SKILL|Swim|4|TYPE=Racial BONUS:STAT|STR|-6 BONUS:STAT|DEX|4 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-2 BONUS:VAR|AC_Natural_Armor|2|TYPE=Base BONUS:VAR|HasLowLightVision|1|TYPE=Base BONUS:VAR|ClawAttacks|-1 BONUS:WEAPONPROF=Claw|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Quadruped (Claws)|TYPE=ArmadilloRacialTrait ABILITY:Internal|AUTOMATIC|Claw LEGS:4 MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:Familiar|Augmented Magical Beast|FamiliarBase TYPE:Companion.Familiar.Animal CR:1/4 SOURCEPAGE:p.192 KIT:1|Familiar ~ Armadillo FACT:BaseSize|T SIZE:T Familiar (Butterfly) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Walk,5,Fly,30 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-10 BONUS:STAT|DEX|2 BONUS:STAT|CON|-6 BONUS:STAT|INT|-10 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-4 BONUS:VAR|DarkvisionRange|60|TYPE=Base BONUS:VAR|Maneuverability|3 ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Unusual (Plant and Vermin)|Scent LEGS:6 MONSTERCLASS:Vermin:1 RACETYPE:Vermin RACESUBTYPE:Familiar|Augmented Magical Beast|FamiliarBase TYPE:Companion.Familiar.Vermin CR:0 SOURCEPAGE:p.192 KIT:1|Familiar ~ Butterfly FACT:BaseSize|D SIZE:D Familiar (Chicken) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Walk,30,Fly,20 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-8 BONUS:STAT|CON|2 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:STAT|CHA|2 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:VAR|Maneuverability|1 BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Avian|TYPE=ChickenRacialTrait ABILITY:Internal|AUTOMATIC|Bite LEGS:2 MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:Familiar|Augmented Magical Beast|FamiliarBase TYPE:Companion.Familiar.Animal CR:1/6 SOURCEPAGE:p.193 KIT:1|Familiar ~ Chicken FACT:BaseSize|T SIZE:T @@ -107,9 +107,9 @@ Familiar (Penguin) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS Familiar (Petrifern) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Walk,20 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-8 BONUS:STAT|DEX|-2 BONUS:STAT|CON|2 BONUS:STAT|INT|-10 BONUS:STAT|WIS|-4 BONUS:STAT|CHA|-2 BONUS:VAR|AC_Natural_Armor|2|TYPE=Base BONUS:VAR|BlindsightRange|30|TYPE=Base BONUS:VAR|SlamSize|1 BONUS:WEAPONPROF=Slam|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Unusual (Plant and Vermin)|TYPE=PetrifernRacialTrait ABILITY:Internal|AUTOMATIC|Slam LEGS:2 MONSTERCLASS:Plant:1 RACETYPE:Plant RACESUBTYPE:Familiar|FamiliarBase TYPE:Companion.Familiar.Plant CR:1/6 SOURCEPAGE:p.202 KIT:1|Familiar ~ Petrifern FACT:BaseSize|D SIZE:D Familiar (Platypus) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Walk,10,Swim,40 REACH:0 BONUS:SITUATION|Perception=Underwater|4 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-2 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:WEAPONPROF=Spur|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Quadruped (Claws)|TYPE=PlatypusRacialTrait LEGS:4 NATURALATTACKS:Spur,Natural.Melee.Weapon.Primary.Piercing,*1,1d3,SPROP=Plus Poison MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:Familiar|Augmented Magical Beast|FamiliarBase TYPE:Companion.Familiar.Animal CR:1/6 SOURCEPAGE:p.203 KIT:1|Familiar ~ Platypus FACT:BaseSize|T SIZE:T Familiar (Popoto Dolphin) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Swim,60 REACH:5 BONUS:STAT|STR|-2 BONUS:STAT|DEX|6 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-4 BONUS:VAR|AC_Natural_Armor|1|TYPE=Base BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:VAR|DarkvisionRange|60|TYPE=Base BONUS:WEAPONPROF=Slam|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Piscine|TYPE=PopotoDolphinRacialTrait ABILITY:Internal|AUTOMATIC|Slam MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:Familiar|Augmented Magical Beast|FamiliarBase TYPE:Companion.Familiar.Animal CR:1/3 SOURCEPAGE:p.194 KIT:1|Familiar ~ Dolphin (Popoto) FACT:BaseSize|S SIZE:S -Familiar (Ptarmigan) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Walk,20,Fly,40 REACH:0 BONUS:SITUATION|Stealth=In snow|4|TYPE=Racial BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-10 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:VAR|Manueverability|2 BONUS:VAR|BiteSize|-1 BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Avian ABILITY:Internal|AUTOMATIC|Bite LEGS:2 MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:Familiar|Augmented Magical Beast|FamiliarBase TYPE:Companion.Familiar.Animal CR:1/6 SOURCEPAGE:p.203 KIT:1|Familiar ~ Ptarmigan FACT:BaseSize|T SIZE:T +Familiar (Ptarmigan) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Walk,20,Fly,40 REACH:0 BONUS:SITUATION|Stealth=In snow|4|TYPE=Racial BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-10 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:VAR|Maneuverability|2 BONUS:VAR|BiteSize|-1 BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Avian ABILITY:Internal|AUTOMATIC|Bite LEGS:2 MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:Familiar|Augmented Magical Beast|FamiliarBase TYPE:Companion.Familiar.Animal CR:1/6 SOURCEPAGE:p.203 KIT:1|Familiar ~ Ptarmigan FACT:BaseSize|T SIZE:T Familiar (Pufferfish) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Swim,20 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-6 BONUS:STAT|DEX|4 BONUS:STAT|CON|4 BONUS:STAT|INT|-10 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-2 BONUS:VAR|HasLowlightVision|1|TYPE=Base ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Piscine|TYPE=PufferfishRacialTrait MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:Aquatic|Familiar|Augmented Magical Beast|FamiliarBase TYPE:Companion.Familiar.Animal CR:1/4 SOURCEPAGE:p.203 KIT:1|Familiar ~ Pufferfish FACT:BaseSize|T SIZE:T -Familiar (Puffin) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Walk,10,Fly,30,Swim,30 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-10 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-8 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-4 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:VAR|Manueverability|3 BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Avian ABILITY:Internal|AUTOMATIC|Bite LEGS:2 MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:Familiar|Augmented Magical Beast|FamiliarBase TYPE:Companion.Familiar.Animal CR:1/8 SOURCEPAGE:p.204 KIT:1|Familiar ~ Puffin FACT:BaseSize|D SIZE:D +Familiar (Puffin) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Walk,10,Fly,30,Swim,30 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-10 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-8 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-4 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:VAR|Maneuverability|3 BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Avian ABILITY:Internal|AUTOMATIC|Bite LEGS:2 MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:Familiar|Augmented Magical Beast|FamiliarBase TYPE:Companion.Familiar.Animal CR:1/8 SOURCEPAGE:p.204 KIT:1|Familiar ~ Puffin FACT:BaseSize|D SIZE:D Familiar (Rabbit) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Walk,50 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-8 BONUS:STAT|DEX|6 BONUS:STAT|CON|-2 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-6 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Quadruped (Claws) ABILITY:Internal|AUTOMATIC|Bite LEGS:4 MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:Familiar|Augmented Magical Beast|FamiliarBase TYPE:Companion.Familiar.Animal CR:1/6 SOURCEPAGE:p.204 KIT:1|Familiar ~ Rabbit FACT:BaseSize|T SIZE:T Familiar (Ravenous Tumbleweed) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Walk,30 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-4 BONUS:STAT|DEX|2 BONUS:STAT|CON|2 BONUS:STAT|INT|-10 BONUS:STAT|CHA|-6 BONUS:VAR|AC_Natural_Armor|1|TYPE=Base BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:WEAPONPROF=Slam|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Unusual (Plant and Vermin)|TYPE=RavenousTumbleweedRacialTrait|Can't Be Tripped ABILITY:Internal|AUTOMATIC|Slam MONSTERCLASS:Plant:1 RACETYPE:Plant RACESUBTYPE:Familiar|FamiliarBase TYPE:Companion.Familiar.Plant CR:1/3 SOURCEPAGE:p.205 KIT:1|Familiar ~ Ravenous Tumbleweed FACT:BaseSize|T SIZE:T Familiar (Razor Fern) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 MOVE:Walk,15 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-6 BONUS:STAT|DEX|4 BONUS:STAT|INT|-10 BONUS:STAT|CHA|-4 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:VAR|TremorsenseRange|15|TYPE=Base ABILITY:Special Ability|AUTOMATIC|Companion Body Type ~ Unusual (Plant and Vermin)|TYPE=RazorFernRacialTrait ABILITY:FEAT|VIRTUAL|Weapon Finesse LEGS:2 NATURALATTACKS:Frond,Natural.Melee.Finesseable.Weapon.Primary.Slashing,*2,1d4 MONSTERCLASS:Plant:1 RACETYPE:Plant RACESUBTYPE:Familiar|FamiliarBase TYPE:Companion.Familiar.Plant CR:1/4 SOURCEPAGE:p.205 KIT:1|Familiar ~ Razor Fern FACT:BaseSize|T SIZE:T @@ -134,7 +134,7 @@ Familiar (Wallaby) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS # ============================== Arctic Fox STARTFEATS:1 MOVE:Walk,40 REACH:0 BONUS:SITUATION|Acrobatics=When Jumping|4|TYPE=Racial BONUS:SITUATION|Survival=Track by scent|4|TYPE=Racial BONUS:SITUATION|Stealth=In snow|4|TYPE=Racial BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-2 BONUS:STAT|DEX|4 BONUS:STAT|CON|2 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-4 BONUS:VAR|HasLowLightVision|1|TYPE=Base BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Internal|AUTOMATIC|Bite LEGS:4 MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal CR:1/4 SOURCEPAGE:p.190 KIT:1|TN FACT:BaseSize|T SIZE:T Arctic Hare STARTFEATS:1 MOVE:Walk,50 REACH:0 BONUS:SITUATION|Stealth=In snow|4|TYPE=Racial BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-8 BONUS:STAT|DEX|6 BONUS:STAT|CON|-2 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-6 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Internal|AUTOMATIC|Bite LEGS:4 MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal CR:1/6 SOURCEPAGE:p.191 KIT:1|TN FACT:BaseSize|T SIZE:T -Arctic Tern STARTFEATS:1 MOVE:Walk,10,Fly,40 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-8 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|HasLowLightVision|1|TYPE=Base BONUS:VAR|Manueverability|3 BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Internal|AUTOMATIC|Bite LEGS:2 MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal CR:1/6 SOURCEPAGE:p.192 KIT:1|TN FACT:BaseSize|T SIZE:T +Arctic Tern STARTFEATS:1 MOVE:Walk,10,Fly,40 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-8 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|HasLowLightVision|1|TYPE=Base BONUS:VAR|Maneuverability|3 BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Internal|AUTOMATIC|Bite LEGS:2 MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal CR:1/6 SOURCEPAGE:p.192 KIT:1|TN FACT:BaseSize|T SIZE:T Armadillo STARTFEATS:1 MOVE:Walk,30,Burrow,5 REACH:0 BONUS:SITUATION|Perception=sight-based|-8 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:SKILL|Swim|4|TYPE=Racial BONUS:STAT|STR|-6 BONUS:STAT|DEX|4 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-2 BONUS:VAR|AC_Natural_Armor|2|TYPE=Base BONUS:VAR|HasLowLightVision|1|TYPE=Base BONUS:VAR|ClawAttacks|-1 BONUS:WEAPONPROF=Claw|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|TYPE=ArmadilloRacialTrait ABILITY:Internal|AUTOMATIC|Claw LEGS:4 MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal CR:1/4 SOURCEPAGE:p.192 KIT:1|TN FACT:BaseSize|T SIZE:T Butterfly MOVE:Walk,5,Fly,30 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-10 BONUS:STAT|DEX|2 BONUS:STAT|CON|-6 BONUS:STAT|INT|-10 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-4 BONUS:VAR|DarkvisionRange|60|TYPE=Base BONUS:VAR|Maneuverability|3 ABILITY:Special Ability|AUTOMATIC|Scent LEGS:6 MONSTERCLASS:Vermin:1 RACETYPE:Vermin TYPE:Vermin CR:0 SOURCEPAGE:p.192 KIT:1|TN FACT:BaseSize|D SIZE:D Cat (Margay) OUTPUTNAME:[NAME] STARTFEATS:1 MOVE:Walk,20,Climb,20 REACH:0 BONUS:SITUATION|Bluff=Mimic animal sounds|4|TYPE=Racial BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-6 BONUS:STAT|DEX|4 BONUS:STAT|INT|-8 BONUS:STAT|CHA|-2 BONUS:VAR|HasLowlightVision|1|TYPE=Base ABILITY:Special Ability|AUTOMATIC|TYPE=MargayRacialTrait|Scent ABILITY:Internal|AUTOMATIC|Bite|Claw LEGS:4 MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal CR:1/4 SOURCEPAGE:p.193 KIT:1|TN FACT:BaseSize|T SIZE:T @@ -169,9 +169,9 @@ Peafowl STARTFEATS:1 MOVE:Walk,20,Fly,40 REACH:5 Penguin STARTFEATS:1 MOVE:Walk,10,Swim,40,Toboggan,30 REACH:5 BONUS:STAT|STR|-2 BONUS:STAT|DEX|-2 BONUS:STAT|CON|2 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-4 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:VAR|BiteSize|-1 BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|TYPE=PenguinRacialTrait|Hold Breath ABILITY:Internal|AUTOMATIC|Bite LEGS:2 MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal CR:1/3 SOURCEPAGE:p.201 KIT:1|TN FACT:BaseSize|S SIZE:S Petrifern MOVE:Walk,20 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-8 BONUS:STAT|DEX|-2 BONUS:STAT|CON|2 BONUS:STAT|INT|-10 BONUS:STAT|WIS|-4 BONUS:STAT|CHA|-2 BONUS:VAR|AC_Natural_Armor|2|TYPE=Base BONUS:VAR|BlindsightRange|30|TYPE=Base BONUS:VAR|SlamSize|1 BONUS:VAR|Mindless|1 BONUS:WEAPONPROF=Slam|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|TYPE=PetrifernRacialTrait ABILITY:Internal|AUTOMATIC|Slam LEGS:2 MONSTERCLASS:Plant:1 RACETYPE:Plant TYPE:Plant CR:1/6 SOURCEPAGE:p.202 KIT:1|TN FACT:BaseSize|D SIZE:D Platypus STARTFEATS:1 MOVE:Walk,10,Swim,40 REACH:0 BONUS:SITUATION|Perception=Underwater|4 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-2 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:WEAPONPROF=Spur|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|TYPE=PlatypusRacialTrait LEGS:4 NATURALATTACKS:Spur,Natural.Melee.Weapon.Primary.Piercing,*1,1d3,SPROP=Plus Poison MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal CR:1/6 SOURCEPAGE:p.203 KIT:1|TN FACT:BaseSize|T SIZE:T -Ptarmigan STARTFEATS:1 MOVE:Walk,20,Fly,40 REACH:0 BONUS:SITUATION|Stealth=In snow|4|TYPE=Racial BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-10 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:VAR|Manueverability|2 BONUS:VAR|BiteSize|-1 BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Internal|AUTOMATIC|Bite LEGS:2 MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal CR:1/6 SOURCEPAGE:p.203 KIT:1|TN FACT:BaseSize|T SIZE:T +Ptarmigan STARTFEATS:1 MOVE:Walk,20,Fly,40 REACH:0 BONUS:SITUATION|Stealth=In snow|4|TYPE=Racial BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-8 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-10 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-6 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:VAR|Maneuverability|2 BONUS:VAR|BiteSize|-1 BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Internal|AUTOMATIC|Bite LEGS:2 MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal CR:1/6 SOURCEPAGE:p.203 KIT:1|TN FACT:BaseSize|T SIZE:T Pufferfish STARTFEATS:1 MOVE:Swim,20 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-6 BONUS:STAT|DEX|4 BONUS:STAT|CON|4 BONUS:STAT|INT|-10 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-2 BONUS:VAR|HasLowlightVision|1|TYPE=Base ABILITY:Special Ability|AUTOMATIC|TYPE=PufferfishRacialTrait MONSTERCLASS:Animal:1 RACETYPE:Animal RACESUBTYPE:Aquatic TYPE:Animal CR:1/4 SOURCEPAGE:p.203 KIT:1|TN FACT:BaseSize|T SIZE:T -Puffin STARTFEATS:1 MOVE:Walk,10,Fly,30,Swim,30 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-10 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-8 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-4 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:VAR|Manueverability|3 BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Internal|AUTOMATIC|Bite LEGS:2 MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal CR:1/8 SOURCEPAGE:p.204 KIT:1|TN FACT:BaseSize|D SIZE:D +Puffin STARTFEATS:1 MOVE:Walk,10,Fly,30,Swim,30 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-10 BONUS:STAT|DEX|4 BONUS:STAT|CON|-4 BONUS:STAT|INT|-8 BONUS:STAT|WIS|4 BONUS:STAT|CHA|-4 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:VAR|Maneuverability|3 BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Internal|AUTOMATIC|Bite LEGS:2 MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal CR:1/8 SOURCEPAGE:p.204 KIT:1|TN FACT:BaseSize|D SIZE:D Rabbit STARTFEATS:1 MOVE:Walk,50 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-8 BONUS:STAT|DEX|6 BONUS:STAT|CON|-2 BONUS:STAT|INT|-8 BONUS:STAT|WIS|2 BONUS:STAT|CHA|-6 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:WEAPONPROF=Bite|DAMAGE|max(0,(STR/2)) ABILITY:Internal|AUTOMATIC|Bite LEGS:4 MONSTERCLASS:Animal:1 RACETYPE:Animal TYPE:Animal CR:1/6 SOURCEPAGE:p.204 KIT:1|TN FACT:BaseSize|T SIZE:T Ravenous Tumbleweed MOVE:Walk,30 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-4 BONUS:STAT|DEX|2 BONUS:STAT|CON|2 BONUS:STAT|INT|-10 BONUS:STAT|CHA|-6 BONUS:VAR|AC_Natural_Armor|1|TYPE=Base BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:VAR|Mindless|1 BONUS:WEAPONPROF=Slam|DAMAGE|max(0,(STR/2)) ABILITY:Special Ability|AUTOMATIC|TYPE=RavenousTumbleweedRacialTrait|Can't Be Tripped ABILITY:Internal|AUTOMATIC|Slam MONSTERCLASS:Plant:1 RACETYPE:Plant TYPE:Plant CR:1/3 SOURCEPAGE:p.205 KIT:1|TN FACT:BaseSize|T SIZE:T Razor Fern MOVE:Walk,15 REACH:0 BONUS:SKILL|Climb,Swim|DEX-STR BONUS:STAT|STR|-6 BONUS:STAT|DEX|4 BONUS:STAT|INT|-10 BONUS:STAT|CHA|-4 BONUS:VAR|HasLowlightVision|1|TYPE=Base BONUS:VAR|TremorsenseRange|15|TYPE=Base ABILITY:Special Ability|AUTOMATIC|TYPE=RazorFernRacialTrait ABILITY:FEAT|VIRTUAL|Weapon Finesse LEGS:2 NATURALATTACKS:Frond,Natural.Melee.Finesseable.Weapon.Primary.Slashing,*2,1d4 MONSTERCLASS:Plant:1 RACETYPE:Plant TYPE:Plant CR:1/4 SOURCEPAGE:p.205 KIT:1|TN FACT:BaseSize|T SIZE:T diff --git a/data/starfinder/paizo/alien_archive/saa_abilities.lst b/data/starfinder/paizo/alien_archive/saa_abilities.lst index e9e89317f43..6e7266f0c4b 100644 --- a/data/starfinder/paizo/alien_archive/saa_abilities.lst +++ b/data/starfinder/paizo/alien_archive/saa_abilities.lst @@ -63,7 +63,7 @@ Wrikreechee Race Selection ~ Default CATEGORY:Internal TYPE:ContemplativeRaceSe # Ability Name Unique Key SORTKEY Output Name Category of Ability Type Visible Define Description Auto Weapon Prof Ability Bonus Ability Pool Save bonus Bonus to skill Modify VAR Weapon prof. bonus Source Page Aspects SIZE AND TYPE KEY:Barathu Default ~ SIZE AND TYPE SORTKEY:b1 CATEGORY:Racial Trait TYPE:Racial Trait.Barathu Racial Trait DESC:Early stage barathus are Medium aberrations. FACT:Barathu_SizeAndType|false SOURCEPAGE:p.21 EARLY STAGE ADAPTATION KEY:Barathu Default ~ EARLY STAGE ADAPTATION SORTKEY:b2 CATEGORY:Racial Trait TYPE:Racial Trait.Barathu Racial Trait DESC:A barathu's body is extremely mutable and can adapt to respond to virtually any situation. Once per round as a swift action, a barathu can reshape its body and adjust its chemistry to adopt one of the following qualities. A barathu can have only one adaptation in effect at a time; a new adaptation replaces any other in effect. More extreme adaptations are also possible (at the GM's discretion) but could take days to adopt. D The barathu adds an additional amount of damage on melee attacks equal to twice its Strength modifier ** It gains a +4 racial bonus to Armor Class ** Sturdy lower limbs grant it a base speed of 20 feet ** Rigid plates grant it DR 2/- ** It gains a ranged attack with a low attack bonus appropriate for its CR (+10 for most barathus) that deals bludgeoning damage appropriate for its CR (1d6+5 for most barathus) and has a range increment of 60 feet ** Molecular modifications grant it resistance 5 against a single energy type (acid, cold, electricity, fire, or sonic). D Its reach increases to 15 feet. FACT:Barathu_EarlyStageAdaptation|false SOURCEPAGE:p.21 -FLOATERS KEY:Barathu Default ~ FLOATERS SORTKEY:b3 CATEGORY:Racial Trait TYPE:Racial Trait.Barathu Racial Trait DESC:Early stage barathus have a base speed of 0 feet and an extraordinary fly speed of 30 feet with average maneuverability. BONUS:VAR|MANUEVERABILITY|3 FACT:Barathu_Floaters|false SOURCEPAGE:p.21 +FLOATERS KEY:Barathu Default ~ FLOATERS SORTKEY:b3 CATEGORY:Racial Trait TYPE:Racial Trait.Barathu Racial Trait DESC:Early stage barathus have a base speed of 0 feet and an extraordinary fly speed of 30 feet with average maneuverability. BONUS:VAR|Maneuverability|3 FACT:Barathu_Floaters|false SOURCEPAGE:p.21 LIMITED TELEPATHY KEY:Barathu Default ~ LIMITED TELEPATHY SORTKEY:b4 CATEGORY:Racial Trait TYPE:Racial Trait.Barathu Racial Trait DESC:Early stage barathus can communicate telepathically with any creatures within 30 feet with whom they share a language in common. FACT:Barathu_LimitedTelepathy|false SOURCEPAGE:p.21 STRANGE ANATOMY KEY:Barathu Default ~ STRANGE ANATOMY SORTKEY:b5 CATEGORY:Racial Trait TYPE:Racial Trait.Barathu Racial Trait DESC:Early stage barathus gain a +1 racial bonus to Fortitude saving throws. BONUS:SAVE|Fortitude|1 FACT:Barathu_StrangeAnatomy|false SOURCEPAGE:p.21 @@ -71,7 +71,7 @@ STRANGE ANATOMY KEY:Barathu Default ~ STRANGE ANATOMY SORTKEY:b5 CATE SIZE AND TYPE KEY:Contemplative Default ~ SIZE AND TYPE SORTKEY:c1a CATEGORY:Racial Trait TYPE:Racial Trait.Contemplative Racial Trait DESC:Contemplatives are Medium monstrous humanoids. FACT:Contemplative_SizeAndType|false SOURCEPAGE:p.29 APPLIED KNOWLEDGE KEY:Contemplative Default ~ APPLIED KNOWLEDGE SORTKEY:c2a CATEGORY:Racial Trait TYPE:Racial Trait.Contemplative Racial Trait DESC:Once per day before attempting a skill check or saving throw against a creature, a contemplative can use its bonus for the skill associated with that creature's type (such as Life Science for an ooze or Mysticism for an outsider) in place of its normal bonus. FACT:Contemplative_AppliedKnowledge|false SOURCEPAGE:p.29 ATROPHIED KEY:Contemplative Default ~ ATROPHIED SORTKEY:c3a CATEGORY:Racial Trait TYPE:Racial Trait.Contemplative Racial Trait DESC:contemplative's limbs are practically vestigial. A contemplative can manipulate most tools and one-handed weapons (including small arms) without difficulty. A contemplative can't properly wield a two-handed weapon without dedicating its telekinetic powers to supporting the weapon, and even then it takes a -4 penalty to attack rolls. It also can't use its spell-like abilities or fly until it is no longer wielding that weapon. FACT:Contemplative_Atrophied|false SOURCEPAGE:p.29 -PSYCHIC FLIGHT KEY:Contemplative Default ~ PSYCHIC FLIGHT SORTKEY:c4a CATEGORY:Racial Trait TYPE:Racial Trait.Contemplative Racial Trait DESC:Contemplatives fly supernaturally at a speed of 30 feet with average maneuverability, but their base speed is only 5 feet. FACT:Contemplative_PsychicFlight|false BONUS:VAR|MANUEVERABILITY|3 SOURCEPAGE:p.29 +PSYCHIC FLIGHT KEY:Contemplative Default ~ PSYCHIC FLIGHT SORTKEY:c4a CATEGORY:Racial Trait TYPE:Racial Trait.Contemplative Racial Trait DESC:Contemplatives fly supernaturally at a speed of 30 feet with average maneuverability, but their base speed is only 5 feet. FACT:Contemplative_PsychicFlight|false BONUS:VAR|Maneuverability|3 SOURCEPAGE:p.29 PSYCHIC SENSES KEY:Contemplative Default ~ PSYCHIC SENSES SORTKEY:c5a CATEGORY:Racial Trait TYPE:Racial Trait.Contemplative Racial Trait DESC:Contemplatives have blindsense (thought) out to 30 feet and darkvision to a range of 60 feet. FACT:Contemplative_PsychicSenses|false BONUS:VAR|DarkvisionRange|60|TYPE=Base BONUS:VAR|BlindsenseRange|30|TYPE=Base SOURCEPAGE:p.29 # Draelik @@ -86,7 +86,7 @@ SIZE AND TYPE KEY:Dragonkin Default ~ SIZE AND TYPE SORTKEY:d1a CATEG BREATH WEAPON KEY:Dragonkin Default ~ BREATH WEAPON SORTKEY:d2a CATEGORY:Racial Trait TYPE:Racial Trait.Dragonkin Racial Trait DESC:[NOT IMPLEMENTED] As a standard action, a dragonkin can breathe a 30-foot cone of flame that deals 1d6 fire damage. At 3rd level, a dragonkin adds 1-1/2 x his character level to the damage. A creature in the cone can attempt a Reflex save for half damage (DC = 10 + half the dragonkin's character level + his Constitution modifier). A dragonkin can't use this ability again until he has taken a 10-minute rest to recover Stamina Points. FACT:Dragonkin_BreathWeapon|false SOURCEPAGE:p.41 DRACONIC IMMUNITIES KEY:Dragonkin Default ~ DRACONIC IMMUNITIES SORTKEY:d3a CATEGORY:Racial Trait TYPE:Racial Trait.Dragonkin Racial Trait DESC:Dragonkin are immune to sleep effects and gain a +2 racial bonus to saving throws against effects that cause paralysis. FACT:Dragonkin_DraconicImmunities|false SOURCEPAGE:p.41 ASPECT:BonusSave|+2 racial bonus to saving throws against effects that cause paralysis. ASPECT:BonusSave|Immune to sleep effects. DRACONIC VISION KEY:Dragonkin Default ~ DRACONIC VISION SORTKEY:d4a CATEGORY:Racial Trait TYPE:Racial Trait.Dragonkin Racial Trait DESC:Dragonkin gain darkvision with a range of 60 feet and low-light vision, meaning they can see in dim light as if it were normal light. FACT:Dragonkin_DraconicVision|false BONUS:VAR|DarkvisionRange|60|TYPE=Base BONUS:VAR|HasLowLightVision|1|TYPE=Base SOURCEPAGE:p.41 -FLIGHT KEY:Dragonkin Default ~ FLIGHT SORTKEY:d5a CATEGORY:Racial Trait TYPE:Racial Trait.Dragonkin Racial Trait DESC:A dragonkin gains an extraordinary flight speed of 30 feet with average maneuverability. Until a dragonkin is 5th level, he must end his movement on the ground at the end of each turn or fall. FACT:Dragonkin_Flight|false BONUS:VAR|MANUEVERABILITY|3 SOURCEPAGE:p.41 +FLIGHT KEY:Dragonkin Default ~ FLIGHT SORTKEY:d5a CATEGORY:Racial Trait TYPE:Racial Trait.Dragonkin Racial Trait DESC:A dragonkin gains an extraordinary flight speed of 30 feet with average maneuverability. Until a dragonkin is 5th level, he must end his movement on the ground at the end of each turn or fall. FACT:Dragonkin_Flight|false BONUS:VAR|Maneuverability|3 SOURCEPAGE:p.41 PARTNER BOND KEY:Dragonkin Default ~ PARTNER BOND SORTKEY:d6a CATEGORY:Racial Trait TYPE:Racial Trait.Dragonkin Racial Trait DESC:A dragonkin can form a permanent bond with one willing non-dragonkin creature. Once this bond is made, a dragonkin cannot form another partner bond unless its current partner dies. A dragonkin and its partner can communicate with each other as if they both had telepathy with a range of 100 feet. In combat, when a dragonkin is within 30 feet of its partner, both creatures roll initiative checks separately and treat the higher result as the result for both of them. FACT:Dragonkin_PartnerBond|false SOURCEPAGE:p.41 #Drow @@ -171,7 +171,7 @@ TRIMORPHIC KEY:Ryphorian Default ~ TRIMORPHIC SORTKEY:r5a CATEGORY: SIZE AND TYPE KEY:Sarcesian Default ~ SIZE AND TYPE SORTKEY:s1a CATEGORY:Racial Trait TYPE:Racial Trait.Sarcesian Racial Trait DESC:Sarcesians are Medium humanoids with the Sarcesian subtype. FACT:Sarcesian_SizeAndType|false SOURCEPAGE:p.99 LOW-LIGHT VISION KEY:Sarcesian Default ~ LOW-LIGHT VISION SORTKEY:s2a CATEGORY:Racial Trait TYPE:Racial Trait.Sarcesian Racial Trait DESC:A Sarcesian can see in dim light as if it were normal light. FACT:Sarcesian_LowLightVision|false BONUS:VAR|HasLowLightVision|1|TYPE=Base SOURCEPAGE:p.99 SKILLED KEY:Sarcesian Default ~ SKILLED SORTKEY:s3a CATEGORY:Racial Trait TYPE:Racial Trait.Sarcesian Racial Trait DESC:Sarcesians gain an additional skill rank at 1st level and each level thereafter. FACT:Sarcesian_Skilled|false BONUS:VAR|SkillPointBonus|1 SOURCEPAGE:p.99 -VOID FLYER KEY:Sarcesian Default ~ VOID FLYER SORTKEY:s4a CATEGORY:Racial Trait TYPE:Racial Trait.Sarcesian Racial Trait DESC:Sarcesians can go 1 hour without breathing and can exist in a vacuum without suffering the associated environmental effects. When in a vacuum, they automatically grow wings made from pure energy that grant them a supernatural fly speed of 60 feet (average maneuverability) but that work only in a vacuum. FACT:Sarcesian_VoidFlyer|false BONUS:VAR|MANUEVERABILITY|3 SOURCEPAGE:p.99 +VOID FLYER KEY:Sarcesian Default ~ VOID FLYER SORTKEY:s4a CATEGORY:Racial Trait TYPE:Racial Trait.Sarcesian Racial Trait DESC:Sarcesians can go 1 hour without breathing and can exist in a vacuum without suffering the associated environmental effects. When in a vacuum, they automatically grow wings made from pure energy that grant them a supernatural fly speed of 60 feet (average maneuverability) but that work only in a vacuum. FACT:Sarcesian_VoidFlyer|false BONUS:VAR|Maneuverability|3 SOURCEPAGE:p.99 #Shobhad SIZE AND TYPE KEY:Shobhad Default ~ SIZE AND TYPE SORTKEY:s1b CATEGORY:Racial Trait TYPE:Racial Trait.Shobhad Racial Trait DESC:Shobhads are Large monstrous humanoids with space and reach of 10 feet. FACT:Shobhad_SizeAndType|false SOURCEPAGE:p.105 From 4ec68fd36448978551c8d1c196f3423f7dbb7069 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Nov 2023 23:00:28 +1300 Subject: [PATCH 018/142] Bump org.springframework:spring-core from 6.1.0 to 6.1.1 (#7010) Bumps [org.springframework:spring-core](https://github.com/spring-projects/spring-framework) from 6.1.0 to 6.1.1. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.0...v6.1.1) --- updated-dependencies: - dependency-name: org.springframework:spring-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 6ea88354ffc..6da1ff627c7 100644 --- a/build.gradle +++ b/build.gradle @@ -226,7 +226,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.1.0' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.0' - implementation group: 'org.springframework', name: 'spring-core', version:'6.1.0' + implementation group: 'org.springframework', name: 'spring-core', version:'6.1.1' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation('org.apache.xmlgraphics:fop:2.9') { From 68b410852ed3474b136e7d5dd28086483e0ca46f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Nov 2023 23:00:46 +1300 Subject: [PATCH 019/142] Bump org.springframework:spring-web from 6.1.0 to 6.1.1 (#7011) Bumps [org.springframework:spring-web](https://github.com/spring-projects/spring-framework) from 6.1.0 to 6.1.1. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.0...v6.1.1) --- updated-dependencies: - dependency-name: org.springframework:spring-web dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 6da1ff627c7..fd950e7baa0 100644 --- a/build.gradle +++ b/build.gradle @@ -224,7 +224,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.15.0' - implementation group: 'org.springframework', name: 'spring-web', version:'6.1.0' + implementation group: 'org.springframework', name: 'spring-web', version:'6.1.1' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.0' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.1' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' From 4525f62b3f66f2a545a5a9289196163b9e91efbd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Nov 2023 23:00:58 +1300 Subject: [PATCH 020/142] Bump com.github.spotbugs from 5.2.3 to 5.2.4 (#7014) Bumps com.github.spotbugs from 5.2.3 to 5.2.4. --- updated-dependencies: - dependency-name: com.github.spotbugs dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index fd950e7baa0..b5200f8113d 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ plugins { id 'application' // Creating application bundles id 'build-dashboard' // Produces a build report id 'checkstyle' // Checkstyle for Java, configured further below - id "com.github.spotbugs" version '5.2.3' // Spotbugs for Java + id "com.github.spotbugs" version '5.2.4' // Spotbugs for Java id 'java' // Core java / javac id 'maven-publish' // Publishing to Maven Central id 'pmd' // PMD for Java, configured further below From de238150c984757bb3aa2779c9f3f05316591ec4 Mon Sep 17 00:00:00 2001 From: David Date: Tue, 28 Nov 2023 21:02:10 +1100 Subject: [PATCH 021/142] Enabling Medusa Mask (#7015) * Medusa mask ability Added ability to display the Medusa Mask conditional save * Add files via upload * UE spell like abilities Added file reference for item spell like abilities to be documented in * Medusa Mask Made the Medusa mask work --- .../ultimate_equipment/ue_abilities.lst | 3 + .../ue_equip_magic_items.lst | 5 +- .../ultimate_equipment/ue_spells.lst | 71 +++++++++++++++++++ .../ultimate_equipment/ultimate_equipment.pcc | 1 + 4 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_spells.lst diff --git a/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_abilities.lst b/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_abilities.lst index eb8470aae9d..1b9b7c444d8 100644 --- a/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_abilities.lst +++ b/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_abilities.lst @@ -82,6 +82,9 @@ Equipment ~ Blood Reservoir of Physical Prowess (CON) CATEGORY:Internal +2 Circumstance Bonus CATEGORY:Internal TYPE:Circumstance Bonus from Masterwork Tool CHOOSE:SKILL|TYPE=Base MULT:YES STACK:NO TEMPBONUS:PC|SKILL|%LIST|2|TYPE=Circumstance +###Block: Medusa Mask +CATEGORY=Internal|Default.MOD DEFINE:MedusaMaskProtection ASPECT:SaveBonus|+4 bonus on all saving throws against visual effects, including gaze attacks and sight-based illusions. + # # EOF diff --git a/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_equip_magic_items.lst b/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_equip_magic_items.lst index 8c22bfca462..a425ae68fdc 100644 --- a/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_equip_magic_items.lst +++ b/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_equip_magic_items.lst @@ -710,9 +710,8 @@ Mask of Stony Demeanor TYPE:Magic.Wondrous.Headgear.LesserMinor Mask of the Krenshar TYPE:Magic.Wondrous.Headgear.GreaterMinor COST:7200 WT:1 SOURCEPAGE:p.246 Mask of the Skull.MOD TYPE:GreaterMedium COST:22000 WT:3 SOURCEPAGE:p.246 Maw of the Wyrm TYPE:Magic.Wondrous.Headgear.GreaterMedium COST:18000 WT:3 SOURCEPAGE:p.246 SPELLS:Magic Item|TIMES=1|CASTERLEVEL=7|Dragon's Breath,16 BONUS:SKILL|Intimidate|4|TYPE=Competence -Medusa Mask TYPE:Magic.Wondrous.Headgear.LesserMedium COST:10000 WT:1 SOURCEPAGE:p.246 -Miser's Mask TYPE:Magic.Wondrous.Headgear.LesserMinor COST:3000 WT:1 SOURCEPAGE:p.246 BONUS:SITUATION|Appraise=Gems|5|TYPE=Competence -Mitre of the Hierophant TYPE:Magic.Wondrous.Headgear.GreaterMedium COST:18000 WT:2 SOURCEPAGE:p.247 SPELLS:Magic Item|TIMES=1|CASTERLEVEL=9|Commune|PRESPELLCAST:TYPE=Divine SPELLS:Magic Item|TIMES=1|TIMEUNIT=Week|CASTERLEVEL=9|Atonement|PRESPELLCAST:TYPE=Divine BONUS:SKILL|Diplomacy,Knowledge (Religion)|5|TYPE=Competence|PRESPELLCAST:TYPE=Divine +Medusa Mask TYPE:Magic.Wondrous.Headgear.LesserMedium COST:10000 WT:1 SOURCEPAGE:p.246 SPROP:The mask grants protection against visual effects, including gaze attacks and sight-based illusions. SPROP:Once per day as a standard action, the wearer can cause the central gemstone to glow with pale green light, at which point she may target any one creature within 30 feet. The targeted creature must succeed at a DC 15 Fortitude save or be petrified for 1 minute, as if by flesh to stone. SPELLS:Magic Item|TIMES=1|Medusa Mask Gaze BONUS:DC|SPELL.Medusa Mask Gaze|5 BONUS:ABILITY|MedusaMaskProtection +Miser's Mask TYPE:Magic.Wondrous.Headgear.LesserMinor COST:3000 WT:1 SOURCEPAGE:p.246 BONUS:SITUATION|Appraise=Gems|5|TYPE=CompetenceMitre of the Hierophant TYPE:Magic.Wondrous.Headgear.GreaterMedium COST:18000 WT:2 SOURCEPAGE:p.247 SPELLS:Magic Item|TIMES=1|CASTERLEVEL=9|Commune|PRESPELLCAST:TYPE=Divine SPELLS:Magic Item|TIMES=1|TIMEUNIT=Week|CASTERLEVEL=9|Atonement|PRESPELLCAST:TYPE=Divine BONUS:SKILL|Diplomacy,Knowledge (Religion)|5|TYPE=Competence|PRESPELLCAST:TYPE=Divine Plague Mask TYPE:Magic.Wondrous.Headgear.GreaterMedium COST:7500 WT:2 SOURCEPAGE:p.247 SPELLS:Magic Item|TIMES=1|CASTERLEVEL=5|Remove Disease Stalker's Mask TYPE:Magic.Wondrous.Headgear.LesserMinor COST:3500 WT:1 SOURCEPAGE:p.247 BONUS:SKILL|Stealth|5|TYPE=Competence Steel-Mind Cap TYPE:Magic.Wondrous.Headgear.LesserMajor COST:33600 WT:3 SOURCEPAGE:p.247 diff --git a/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_spells.lst b/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_spells.lst new file mode 100644 index 00000000000..dcf4bea4873 --- /dev/null +++ b/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_spells.lst @@ -0,0 +1,71 @@ +# CVS $Revision: 1 $ $Author$ David Brough -- Tue Nov 28 07:22:08 2023 +SOURCELONG:Ultimate Equipment SOURCESHORT:UE SOURCEWEB:http://paizo.com/products/btpy8tmc?Pathfinder-Roleplaying-Game-Ultimate-Equipment SOURCEDATE:2012-08 +# Original Entry by: DavidBrough + +# +# Blank Spell Template +# XXX +# KEY:XXX +# SOURCEPAGE:p. +# SOURCESHORT: +# SOURCELONG: +# SCHOOL: +# SUBSCHOOL: +# DESCRIPTOR: +# CLASSES:x,x=y|x=y +# DOMAINS:x,x=y|x=y +# CASTTIME: +# COMPS: +# RANGE: +# TARGETAREA: +# DURATION: +# ITEM:POTION +# SAVEINFO: +# SPELLRES: +# DESC: +# TEMPBONUS:ANYPC|x|y + +#Item spell like ability data +Medusa Mask Gaze TYPE:Arcane SCHOOL:Transmutation COMPS:F CASTTIME:1 standard action RANGE:30 ft TARGETAREA:One creature DURATION:1 minute SAVEINFO:Fortitude negates SPELLRES:Yes DESC:The subject, along with all its carried gear, turns into a mindless, inert statue. + + +#Every line that starts with a '#' is a comment. You may want to remove these comments, if you use this file to set up +#your own data. Remember not to put the '#' at the start of your own data, as PCGen would see it as a comment only. +# +#When Running PCGen, you can select "Help > Documentation > List Files > List File Tag Index > Spell File tags" to find +#out how the tags in the spells file work. Some of the tags used here are global tags. You will see an alphabetical +#listing of all PCGen tags to the left of the documentation window. You can find the global tags there as well. +# +#To learn the basics of coding a spell, you can also visit "Help > Documentation > List Files > LST File Class > Lesson 7" +# +# +#####Example + +#Teleport CLASSES:Sorcerer,Wizard=5 DOMAINS:Travel=5 SCHOOL:Conjuration SUBSCHOOL:Teleportation TYPE:Arcane.Divine COMPS:V CASTTIME:1 standard action RANGE:Personal and touch TARGETAREA:You and touched objects or other touched willing creatures DURATION:Instantaneous SAVEINFO:None and Will negates (object) SPELLRES:No and Yes (object) DESC:Instantly transports you as far as (CASTERLEVEL*100) miles. SOURCEPAGE:SpellsT-Z ITEM:Potion + +##### +#Teleport is the name of the spell. It will appear in the spells list on PCGen's Spells tab and will be used if a spell is +#added by use of the SPELLS tag. Every spell must have a name. +# +#The CLASSES tag indicates that this spell is the indicated level for the named class. It will appear in most spells, unless +#the spell is for some reason not associated with a class. +# +#The DOMAINS tag indicates that this spell is the indicated level for the named domain. It is only used with spells that +#belong to a domain. +# +#The SCHOOL tag lists the Schools the spell belongs to and is used for specialist wizards to determine their favored schools +#bonus spells. It should be used if the spell belongs to a school (which almost always is the case). +# +#The SUBSCHOOL tag lists the Sub-Schools the spell belongs to and is also used for specialist wizards to determine their +#favored schools bonus spells. You can usually find it in the books in parentheses after the School. If it exists, it should +#be used. +# +#The TYPE tag indicates what "types" are associated with the spell. Every spell should have it. +# +#COMPS, CASTTIME, RANGE, TARGETAREA, DURATION, SAVEINFO, SPELLRES, and DESC are the tags that actually describe the spell. +#Most if not all of them will be used in every spell. +# +#The SOURCEPAGE tag can be used to hold a reference to where you can find the spell. This will be displayed in PCGen and on +#the output sheet. +# +#The ITEM tag tells PCGen what types of items this spell can be used to make (Potions, wands, wondrous items, etc). diff --git a/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ultimate_equipment.pcc b/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ultimate_equipment.pcc index 97cd9111365..343d862e17f 100644 --- a/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ultimate_equipment.pcc +++ b/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ultimate_equipment.pcc @@ -55,6 +55,7 @@ EQUIPMENT:ue_equip_magic_items.lst EQUIPMOD:ue_equipmods.lst KIT:ue_kits.lst SKILL:ue_skills.lst +SPELL:ue_spells.lst TEMPLATE:ue_templates.lst ARMORPROF:ue_profs_armor.lst From 314f05c8d983541639c298249f3c3b4d77e3816c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Nov 2023 23:18:51 +1300 Subject: [PATCH 022/142] Bump org.springframework:spring-beans from 6.1.0 to 6.1.1 (#7012) Bumps [org.springframework:spring-beans](https://github.com/spring-projects/spring-framework) from 6.1.0 to 6.1.1. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.0...v6.1.1) --- updated-dependencies: - dependency-name: org.springframework:spring-beans dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b5200f8113d..cae3195e27a 100644 --- a/build.gradle +++ b/build.gradle @@ -225,7 +225,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.15.0' implementation group: 'org.springframework', name: 'spring-web', version:'6.1.1' - implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.0' + implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.1' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.1' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation('org.apache.xmlgraphics:fop:2.9') From 58ec9903cddab7a1d57a1e7b3f4c6c3239a0378a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 3 Dec 2023 11:41:56 +1300 Subject: [PATCH 023/142] Bump com.github.spotbugs from 5.2.4 to 5.2.5 (#7019) Bumps com.github.spotbugs from 5.2.4 to 5.2.5. --- updated-dependencies: - dependency-name: com.github.spotbugs dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index cae3195e27a..16476ad9ca5 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ plugins { id 'application' // Creating application bundles id 'build-dashboard' // Produces a build report id 'checkstyle' // Checkstyle for Java, configured further below - id "com.github.spotbugs" version '5.2.4' // Spotbugs for Java + id "com.github.spotbugs" version '5.2.5' // Spotbugs for Java id 'java' // Core java / javac id 'maven-publish' // Publishing to Maven Central id 'pmd' // PMD for Java, configured further below From f9e22c2d3edf94eb32ae683c6cc43489b395410d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 3 Dec 2023 11:44:23 +1300 Subject: [PATCH 024/142] Bump commons-io:commons-io from 2.15.0 to 2.15.1 (#7020) Bumps commons-io:commons-io from 2.15.0 to 2.15.1. --- updated-dependencies: - dependency-name: commons-io:commons-io dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 16476ad9ca5..3e07cb63e0d 100644 --- a/build.gradle +++ b/build.gradle @@ -222,7 +222,7 @@ compileJava { */ dependencies { - implementation group: 'commons-io', name: 'commons-io', version:'2.15.0' + implementation group: 'commons-io', name: 'commons-io', version:'2.15.1' implementation group: 'org.springframework', name: 'spring-web', version:'6.1.1' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.1' From 8a6d56e127e4fe7bce6d0ec231894f59002c9294 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 3 Dec 2023 11:44:41 +1300 Subject: [PATCH 025/142] Bump com.github.spotbugs:spotbugs-annotations from 4.8.1 to 4.8.2 (#7021) Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.8.1 to 4.8.2. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.8.1...4.8.2) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 3e07cb63e0d..26435bd6d04 100644 --- a/build.gradle +++ b/build.gradle @@ -258,7 +258,7 @@ dependencies { compileOnly group: 'org.jetbrains', name: 'annotations', version:'24.1.0' compileOnly group: 'com.yuvimasory', name: 'orange-extensions', version: '1.3.0' - compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.1' + compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.2' testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.1' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.1' From a2feb8f78262ec0e7e3915385f2c64b9c3edefd5 Mon Sep 17 00:00:00 2001 From: mertonmonk <33469335+mertonmonk@users.noreply.github.com> Date: Thu, 7 Dec 2023 15:34:53 -0600 Subject: [PATCH 026/142] fix print and export (#7024) --- build.gradle | 1 + code/src/java/pcgen/gui3/component/PCGenToolBar.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 26435bd6d04..fb3236c51bb 100644 --- a/build.gradle +++ b/build.gradle @@ -228,6 +228,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.1' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.1' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' + implementation group: 'xalan', name: 'serializer', version: '2.7.1' implementation('org.apache.xmlgraphics:fop:2.9') { exclude group: 'xml-apis', module: 'xml-apis' diff --git a/code/src/java/pcgen/gui3/component/PCGenToolBar.java b/code/src/java/pcgen/gui3/component/PCGenToolBar.java index 5f8a517cb11..f5034e296b8 100644 --- a/code/src/java/pcgen/gui3/component/PCGenToolBar.java +++ b/code/src/java/pcgen/gui3/component/PCGenToolBar.java @@ -137,7 +137,7 @@ private void onPrint(final ActionEvent actionEvent) private void onExport(final ActionEvent actionEvent) { - GuiAssertions.assertIsNotJavaFXThread(); + //GuiAssertions.assertIsNotJavaFXThread(); JFXPanelFromResource jfxPanelFromResource = new JFXPanelFromResource<>(ExportDialogController.class, "ExportDialog.fxml"); jfxPanelFromResource.showAsStage("Export a PC or Party"); From bb627c0e176a6250db67945082f2e9ba6bcf2c5f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 16:11:19 +1300 Subject: [PATCH 027/142] Bump xalan:serializer from 2.7.1 to 2.7.3 (#7026) Bumps xalan:serializer from 2.7.1 to 2.7.3. --- updated-dependencies: - dependency-name: xalan:serializer dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index fb3236c51bb..37e3b68ffd2 100644 --- a/build.gradle +++ b/build.gradle @@ -228,7 +228,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.1' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.1' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' - implementation group: 'xalan', name: 'serializer', version: '2.7.1' + implementation group: 'xalan', name: 'serializer', version: '2.7.3' implementation('org.apache.xmlgraphics:fop:2.9') { exclude group: 'xml-apis', module: 'xml-apis' From 792b52056379921f8e11fc0426930f44313de569 Mon Sep 17 00:00:00 2001 From: hathawayd <150967177+hathawayd@users.noreply.github.com> Date: Wed, 13 Dec 2023 12:09:29 -0800 Subject: [PATCH 028/142] DATA-4271: Expanded element was subtracting 4 from KinteicistLVL_Base what is half Kinteticist Level instead of 2. (#7027) --- .../occult_adventures/oa_abilities_class.lst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/data/pathfinder/paizo/roleplaying_game/occult_adventures/oa_abilities_class.lst b/data/pathfinder/paizo/roleplaying_game/occult_adventures/oa_abilities_class.lst index fc46e8d9d6f..c828ab4c0ed 100644 --- a/data/pathfinder/paizo/roleplaying_game/occult_adventures/oa_abilities_class.lst +++ b/data/pathfinder/paizo/roleplaying_game/occult_adventures/oa_abilities_class.lst @@ -593,11 +593,11 @@ Water KEY:Kineticist Primary Element ~ Water CATEGORY:Special Ability TYPE:Spe Universal KEY:Kineticist Element ~ Universal CATEGORY:Special Ability TYPE:SpecialQuality DESC:The following wild talents are available to all kineticists. Wild Talents: 1st-draining infusion, extended range, kinetic blade, kinetic fist, skilled kineticist; 2nd-skilled kineticist (greater); 3rd-elemental grip, extreme range, flurry of blasts, kinetic whip, mobile blast, snake; 4th- expanded defense; 5th-grappling infusion, kinetic form, spark of life, wall; 6th-ride the blast; 8th-reverse shift. # Expanded Element Selection -Aether KEY:Kineticist Expanded Element ~ Aether CATEGORY:Special Ability TYPE:SpecialQuality.Kineticist Expanded Element DEFINE:ElementTracker_Aether|0 DEFINE:KineticistLVL_Aether|0 STACK:YES MULT:YES CHOOSE:NOCHOICE ABILITY:Kineticist Utility Wild Talent|AUTOMATIC|Wild Talent ~ Basic Telekinesis|PREVARGTEQ:Kineticist_CFP_Level,1|PREVAREQ:Kineticist_CF_BasicUtilityWildTalent,0 BONUS:ABILITYPOOL|Kineticist Blast|1|PREVAREQ:ElementTracker_Aether,1 BONUS:VAR|ElementTracker_Aether|1 BONUS:VAR|KineticistLVL_Aether|if(ElementTracker_Aether<=2,KineticistLVL_Base,KineticistLVL_Base-4)|TYPE=Base -Air KEY:Kineticist Expanded Element ~ Air CATEGORY:Special Ability TYPE:SpecialQuality.Kineticist Expanded Element DEFINE:ElementTracker_Air|0 DEFINE:KineticistLVL_Air|0 STACK:YES MULT:YES CHOOSE:NOCHOICE ABILITY:Kineticist Utility Wild Talent|AUTOMATIC|Wild Talent ~ basic aerokinesis|PREVARGTEQ:Kineticist_CFP_Level,1|PREVAREQ:Kineticist_CF_BasicUtilityWildTalent,0 BONUS:ABILITYPOOL|Kineticist Blast|1 BONUS:VAR|ElementTracker_Air|1 BONUS:VAR|KineticistLVL_Air|if(ElementTracker_Air<=2,KineticistLVL_Base,KineticistLVL_Base-4)|TYPE=Base -Earth KEY:Kineticist Expanded Element ~ Earth CATEGORY:Special Ability TYPE:SpecialQuality.Kineticist Expanded Element DEFINE:ElementTracker_Earth|0 DEFINE:KineticistLVL_Earth|0 STACK:YES MULT:YES CHOOSE:NOCHOICE ABILITY:Kineticist Utility Wild Talent|AUTOMATIC|Wild Talent ~ basic geokinesis|PREVARGTEQ:Kineticist_CFP_Level,1|PREVAREQ:Kineticist_CF_BasicUtilityWildTalent,0 BONUS:ABILITYPOOL|Kineticist Blast|1|PREVAREQ:ElementTracker_Earth,1 BONUS:VAR|ElementTracker_Earth|1 BONUS:VAR|KineticistLVL_Earth|if(ElementTracker_Earth<=2,KineticistLVL_Base,KineticistLVL_Base-4)|TYPE=Base -Fire KEY:Kineticist Expanded Element ~ Fire CATEGORY:Special Ability TYPE:SpecialQuality.Kineticist Expanded Element DEFINE:ElementTracker_Fire|0 DEFINE:KineticistLVL_Fire|0 STACK:YES MULT:YES CHOOSE:NOCHOICE ABILITY:Kineticist Utility Wild Talent|AUTOMATIC|Wild Talent ~ basic pyrokinesis|PREVARGTEQ:Kineticist_CFP_Level,1|PREVAREQ:Kineticist_CF_BasicUtilityWildTalent,0 BONUS:ABILITYPOOL|Kineticist Blast|1|PREVARGT:ElementTracker_Fire,1 BONUS:VAR|ElementTracker_Fire|1 BONUS:VAR|KineticistLVL_Fire|if(ElementTracker_Fire<=2,KineticistLVL_Base,KineticistLVL_Base-4)|TYPE=Base -Water KEY:Kineticist Expanded Element ~ Water CATEGORY:Special Ability TYPE:SpecialQuality.Kineticist Expanded Element DEFINE:ElementTracker_Water|0 DEFINE:KineticistLVL_Water|0 STACK:YES MULT:YES CHOOSE:NOCHOICE ABILITY:Kineticist Utility Wild Talent|AUTOMATIC|Wild Talent ~ basic hydrokinesis|PREVARGTEQ:Kineticist_CFP_Level,1|PREVAREQ:Kineticist_CF_BasicUtilityWildTalent,0 BONUS:ABILITYPOOL|Kineticist Blast|1 BONUS:VAR|ElementTracker_Water|1 BONUS:VAR|KineticistLVL_Water|if(ElementTracker_Water<=2,KineticistLVL_Base,KineticistLVL_Base-4)|TYPE=Base +Aether KEY:Kineticist Expanded Element ~ Aether CATEGORY:Special Ability TYPE:SpecialQuality.Kineticist Expanded Element DEFINE:ElementTracker_Aether|0 DEFINE:KineticistLVL_Aether|0 STACK:YES MULT:YES CHOOSE:NOCHOICE ABILITY:Kineticist Utility Wild Talent|AUTOMATIC|Wild Talent ~ Basic Telekinesis|PREVARGTEQ:Kineticist_CFP_Level,1|PREVAREQ:Kineticist_CF_BasicUtilityWildTalent,0 BONUS:ABILITYPOOL|Kineticist Blast|1|PREVAREQ:ElementTracker_Aether,1 BONUS:VAR|ElementTracker_Aether|1 BONUS:VAR|KineticistLVL_Aether|if(ElementTracker_Aether<=2,KineticistLVL_Base,KineticistLVL_Base-2)|TYPE=Base +Air KEY:Kineticist Expanded Element ~ Air CATEGORY:Special Ability TYPE:SpecialQuality.Kineticist Expanded Element DEFINE:ElementTracker_Air|0 DEFINE:KineticistLVL_Air|0 STACK:YES MULT:YES CHOOSE:NOCHOICE ABILITY:Kineticist Utility Wild Talent|AUTOMATIC|Wild Talent ~ basic aerokinesis|PREVARGTEQ:Kineticist_CFP_Level,1|PREVAREQ:Kineticist_CF_BasicUtilityWildTalent,0 BONUS:ABILITYPOOL|Kineticist Blast|1 BONUS:VAR|ElementTracker_Air|1 BONUS:VAR|KineticistLVL_Air|if(ElementTracker_Air<=2,KineticistLVL_Base,KineticistLVL_Base-2)|TYPE=Base +Earth KEY:Kineticist Expanded Element ~ Earth CATEGORY:Special Ability TYPE:SpecialQuality.Kineticist Expanded Element DEFINE:ElementTracker_Earth|0 DEFINE:KineticistLVL_Earth|0 STACK:YES MULT:YES CHOOSE:NOCHOICE ABILITY:Kineticist Utility Wild Talent|AUTOMATIC|Wild Talent ~ basic geokinesis|PREVARGTEQ:Kineticist_CFP_Level,1|PREVAREQ:Kineticist_CF_BasicUtilityWildTalent,0 BONUS:ABILITYPOOL|Kineticist Blast|1|PREVAREQ:ElementTracker_Earth,1 BONUS:VAR|ElementTracker_Earth|1 BONUS:VAR|KineticistLVL_Earth|if(ElementTracker_Earth<=2,KineticistLVL_Base,KineticistLVL_Base-2)|TYPE=Base +Fire KEY:Kineticist Expanded Element ~ Fire CATEGORY:Special Ability TYPE:SpecialQuality.Kineticist Expanded Element DEFINE:ElementTracker_Fire|0 DEFINE:KineticistLVL_Fire|0 STACK:YES MULT:YES CHOOSE:NOCHOICE ABILITY:Kineticist Utility Wild Talent|AUTOMATIC|Wild Talent ~ basic pyrokinesis|PREVARGTEQ:Kineticist_CFP_Level,1|PREVAREQ:Kineticist_CF_BasicUtilityWildTalent,0 BONUS:ABILITYPOOL|Kineticist Blast|1|PREVARGT:ElementTracker_Fire,1 BONUS:VAR|ElementTracker_Fire|1 BONUS:VAR|KineticistLVL_Fire|if(ElementTracker_Fire<=2,KineticistLVL_Base,KineticistLVL_Base-2)|TYPE=Base +Water KEY:Kineticist Expanded Element ~ Water CATEGORY:Special Ability TYPE:SpecialQuality.Kineticist Expanded Element DEFINE:ElementTracker_Water|0 DEFINE:KineticistLVL_Water|0 STACK:YES MULT:YES CHOOSE:NOCHOICE ABILITY:Kineticist Utility Wild Talent|AUTOMATIC|Wild Talent ~ basic hydrokinesis|PREVARGTEQ:Kineticist_CFP_Level,1|PREVAREQ:Kineticist_CF_BasicUtilityWildTalent,0 BONUS:ABILITYPOOL|Kineticist Blast|1 BONUS:VAR|ElementTracker_Water|1 BONUS:VAR|KineticistLVL_Water|if(ElementTracker_Water<=2,KineticistLVL_Base,KineticistLVL_Base-2)|TYPE=Base ###Block: Wild Talents # Ability Name Unique Key Category of Ability Type Description Ability Modify VAR Weapon prof. bonus Natural Attacks From 99aa612ea3d56159706486cc9d4396347eb4cc79 Mon Sep 17 00:00:00 2001 From: LegacyKing Date: Sat, 16 Dec 2023 14:45:53 -0800 Subject: [PATCH 029/142] Fixes for random issues not properly tracked: Wrong version number Witch Patron support Feral Mutagen Natural Attack Support War Soul caster level --- .../resources/pcgen/system/prop/PCGenProp.properties | 2 +- .../path_of_war/pow_abilities_psi.lst | 4 ++-- .../occult_origins/oo_abilities_class.lst | 7 ++++++- .../occult_origins/support/oo_abilities_class_arg.lst | 5 ++++- .../advanced_players_guide/apg_abilities_class.lst | 2 +- .../advanced_race_guide/arg_abilities_race.lst | 11 ++++++++++- .../advanced_race_guide/arg_races_companion.lst | 10 +++++----- .../roleplaying_game/core_rulebook/cr_abilities.lst | 3 +++ 8 files changed, 32 insertions(+), 12 deletions(-) diff --git a/code/src/resources/pcgen/system/prop/PCGenProp.properties b/code/src/resources/pcgen/system/prop/PCGenProp.properties index eea935541b7..3572df3d3ac 100644 --- a/code/src/resources/pcgen/system/prop/PCGenProp.properties +++ b/code/src/resources/pcgen/system/prop/PCGenProp.properties @@ -5,7 +5,7 @@ HeadCodeMonkey=Bryan McRoberts (Benevolent Dictator) # Version number should be x.y.z (e.g. 2.0.0) - RC is x.xx.xx RCx -VersionNumber=6.09.06 +VersionNumber=6.09.08 ReleaseDate=2020-07-27 CodeMonkeys=B. K. Oxley (binkley), Jonas Karlsson, Matthew Woodard, Peter Kahle, Tim Dugger, Tom Epperly, Brian Forester, Mario Bonassin, Jason Buchanan, Mark Hulsmanand, Jerry Hill, Eric Statz, Kurt Wimmer, David Fallon, Tyler Bannister, Thomas Clegg, Greg Bingleman, Emily Smirle, Arcady, Thomas Behr, Ryan Koppenhaver, Jayme Cox, Scott Ellsworth, Chris Ryan, James Dempsey, Walter Duncan, Devon Jones, Felipe Diniz, Frugal, Richard Askham, David Hibbs, John Watson, Stefan Radermacher, Ross Lodge, Benjamin Pew, Brian Kuehn, Aaron Divinsky, Andrew Wilson, Brian Hoff, Tom Parker, Andriy Sen, Koen Van Daele, Tobias Wichtrey, Per Christian Henden, Connor Petty, Dan Parks, Jasper Spaans, Steven West (redwolf3), Michael Isaacson, Vincent Lhote, Javier A. Ortiz Bultron, Gabriel Sorrel, John Carimando (UI), Andrew Maitland (LegacyKing), Eitan Adler, Jacob Raihle TestMonkeys=Dave Cortijo, Martin Brabander, John Sussenberger, Stephen Gryphon, Richard O'Doherty-Gregg, Brad Stiles, Chris Andersen, Joseff, and many more. Andrew Maitland, David R. Bender, Patryk Adamski, Paul Grosse, ratbird32, Stefan Radermacher, Vincent Lhote and Henk Slaaf (UI Beta testers) diff --git a/data/pathfinder/dreamscarred_press/path_of_war/pow_abilities_psi.lst b/data/pathfinder/dreamscarred_press/path_of_war/pow_abilities_psi.lst index 3467baf870e..55ba27a1622 100644 --- a/data/pathfinder/dreamscarred_press/path_of_war/pow_abilities_psi.lst +++ b/data/pathfinder/dreamscarred_press/path_of_war/pow_abilities_psi.lst @@ -122,14 +122,14 @@ Thrashing Dragon ~ Maneuver CATEGORY:Special Ability TYPE:PsychicWarrio ###Block: War Soul soulknife archetype # Ability Name Unique Key Category of Ability Type Required Class Multiple Requirements Description Ability Class Skill Cost Source Page -War Soul KEY:Soulknife Archetype ~ War Soul CATEGORY:Archetype TYPE:Archetype.SoulknifeArchetype.SoulknifePsychicStrike.SoulknifeBladeSkill4.SoulknifeBladeSkill10.SoulknifeClassSkills PRECLASS:1,Soulknife=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Soulknife Archetype ~ War Soul],[!PREABILITY:1,CATEGORY=Archetype,TYPE.SoulknifePsychicStrike,TYPE.SoulknifeBladeSkill4,TYPE.SoulknifeBladeSkill10,TYPE.SoulknifeClassSkills] DESC:Some soulknives have more extensive training in the arts of combat than others, and this lends to them the talents and abilities of the martial disciples who follow the Path of War. By dismissing some of their esoteric studies with their mind blades, they instead focus on the mastering of martial disciplines to make themselves a perfected weapon. ABILITY:Internal|AUTOMATIC|War Soul ~ Class Skills ABILITY:Special Ability|AUTOMATIC|War Soul ~ Initiating ABILITY:Special Ability|AUTOMATIC|War Soul ~ Martial Blade Recovery|PRECLASS:1,Soulknife=4 COST:0 SOURCEPAGE:p.135 +War Soul KEY:Soulknife Archetype ~ War Soul CATEGORY:Archetype TYPE:Archetype.SoulknifeArchetype.SoulknifePsychicStrike.SoulknifeBladeSkill4.SoulknifeBladeSkill10.SoulknifeClassSkills PRECLASS:1,Soulknife=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Soulknife Archetype ~ War Soul],[!PREABILITY:1,CATEGORY=Archetype,TYPE.SoulknifePsychicStrike,TYPE.SoulknifeBladeSkill4,TYPE.SoulknifeBladeSkill10,TYPE.SoulknifeClassSkills] DESC:Some soulknives have more extensive training in the arts of combat than others, and this lends to them the talents and abilities of the martial disciples who follow the Path of War. By dismissing some of their esoteric studies with their mind blades, they instead focus on the mastering of martial disciplines to make themselves a perfected weapon. ABILITY:Internal|AUTOMATIC|War Soul ~ Class Skills ABILITY:Special Ability|AUTOMATIC|War Soul ~ Initiating ABILITY:Special Ability|AUTOMATIC|War Soul ~ Martial Blade Recovery|PRECLASS:1,Soulknife=4 COST:0 SOURCEPAGE:p.135 ADD:SPELLCASTER|War Soul ADD:SPELLCASTER|War Soul Stances War Soul ~ Class Skills CATEGORY:Internal CSKILL:Acrobatics|Autohypnosis|Climb|TYPE=Craft|Intimidate|Knowledge (Psionics)|Perception|TYPE=Profession|Sense Motive|Stealth|Swim War Soul ~ Martial Blade Recovery CATEGORY:Special Ability TYPE:SoulknifeClassFeatures.ClassFeatures.SpecialQuality.Supernatural DESC:Psionic channels established during manifestation of a mind blade may allow reclamation of bursts of foreign psychic energy caused by the defeat of an opponent. These bursts of energy can be used to invigorate the mind of the war soul and restore his resolve and skill. If the war soul reduces a living opponent (possessing 1â„2 HD or more and an Intelligence score of 3 or higher) to 0 hit points or less, as a swift action the character may recover either a single expended maneuver or his psionic focus. The war soul must be using a mind blade to recover maneuvers in this fashion. SOURCEPAGE:p.136 ###Block: War Soul initiating set up # Ability Name Unique Key Category of Ability Type Define Description Ability Add Bonus DC Modify VAR Source Page -War Soul Initiating KEY:War Soul ~ Initiating CATEGORY:Special Ability TYPE:SoulknifeClassFeatures.ClassFeatures.SpecialQuality DESC:Initiator Level: %1, Maximum Maneuver Level:%2|WarSoulInitiatorLVL|WarSoulHighestManeuverLevel ABILITY:Internal|AUTOMATIC|War Soul ~ Initiator Variables ABILITY:Soulknife Class Feature|AUTOMATIC|War Soul ~ Maneuvers|PREVARGTEQ:SoulknifeLVL,1 ABILITY:Soulknife Class Feature|AUTOMATIC|War Soul ~ Maneuvers Readied|PREVARGTEQ:SoulknifeLVL,1 ABILITY:Soulknife Class Feature|AUTOMATIC|War Soul ~ Stances Known|PREVARGTEQ:SoulknifeLVL,1 ABILITY:Internal|AUTOMATIC|War Soul ~ Disciplines|PREVARGTEQ:SoulknifeLVL,1 ADD:SPELLCASTER|War Soul ADD:SPELLCASTER|War Soul Stances BONUS:DC|CLASS.War Soul|WIS SOURCEPAGE:p.135 +War Soul Initiating KEY:War Soul ~ Initiating CATEGORY:Special Ability TYPE:SoulknifeClassFeatures.ClassFeatures.SpecialQuality DESC:Initiator Level: %1, Maximum Maneuver Level:%2|WarSoulInitiatorLVL|WarSoulHighestManeuverLevel ABILITY:Internal|AUTOMATIC|War Soul ~ Initiator Variables ABILITY:Soulknife Class Feature|AUTOMATIC|War Soul ~ Maneuvers|PREVARGTEQ:SoulknifeLVL,1 ABILITY:Soulknife Class Feature|AUTOMATIC|War Soul ~ Maneuvers Readied|PREVARGTEQ:SoulknifeLVL,1 ABILITY:Soulknife Class Feature|AUTOMATIC|War Soul ~ Stances Known|PREVARGTEQ:SoulknifeLVL,1 ABILITY:Internal|AUTOMATIC|War Soul ~ Disciplines|PREVARGTEQ:SoulknifeLVL,1 BONUS:DC|CLASS.War Soul|WIS SOURCEPAGE:p.135 War Soul ~ Initiator Variables CATEGORY:Internal DEFINE:WarSoulInitiatorLVL|0 DEFINE:WarSoulHighestManeuverLevel|0 DEFINE:HighestInitiatorLVL|0 BONUS:VAR|WarSoulInitiatorLVL|SoulknifeLVL BONUS:VAR|WarSoulInitiatorLVL|floor(TL-SoulknifeLVL)/2 BONUS:VAR|WarSoulHighestManeuverLevel|min(6,floor((WarSoulInitiatorLVL-1)/2)) BONUS:VAR|WarSoulHighestManeuverLevel|1|PREVAREQ:WarSoulInitiatorLVL,1 BONUS:VAR|WarSoulHighestManeuverLevel|1|PREVAREQ:WarSoulInitiatorLVL,2 BONUS:VAR|WarSoulHighestManeuverLevel|1|PREVAREQ:WarSoulInitiatorLVL,4 BONUS:VAR|HighestInitiatorLVL|WarSoulInitiatorLVL|TYPE=NoStack Maneuvers KEY:War Soul ~ Maneuvers CATEGORY:Special Ability TYPE:SoulknifeClassFeatures.ClassFeatures.SpecialQuality DEFINE:WarSoulManeuversKnown|0 DEFINE:WarSoulManeuversKnownOne|0 DEFINE:WarSoulManeuversKnownTwo|0 DEFINE:WarSoulManeuversKnownThree|0 DEFINE:WarSoulManeuversKnownFour|0 DEFINE:WarSoulManeuversKnownFive|0 DEFINE:WarSoulManeuversKnownSix|0 DESC:The war soul has knowledge of %1 martial maneuvers. The war soul may select any two disciplines from the following list: Broken Blade, Solar Wind, Thrashing Dragon, and Veiled Moon. Once he knows a maneuver, he must ready it before he can use it (see Maneuvers Readied, below). A maneuver usable by a war soul is considered an extraordinary ability unless otherwise noted in its description. His maneuvers are not affected by spell resistance, and he does not provoke attacks of opportunity when he initiates one. The war soul must meet a maneuver's prerequisite to learn it. Upon reaching 4th level, and at every even numbered war soul level after that, he can choose to learn a new maneuver in place of one he already knows. In effect, the war soul loses the old maneuver in exchange for the new one. The war soul need not replace the old maneuver with a maneuver of the same level. He can choose a new maneuver of any level he likes, as long as he observes his restriction on the highest-level maneuvers he knows. The war soul can swap only a single maneuver at any given level. A war soul's primary initiator attribute is Wisdom, and each war soul level is counted as a full initiator level.|WarSoulManeuversKnown BONUS:VAR|WarSoulManeuversKnown|3 BONUS:VAR|WarSoulManeuversKnown|1|PREVARGTEQ:SoulknifeLVL,2 BONUS:VAR|WarSoulManeuversKnown|1|PREVARGTEQ:SoulknifeLVL,3 BONUS:VAR|WarSoulManeuversKnown|1|PREVARGTEQ:SoulknifeLVL,5 BONUS:VAR|WarSoulManeuversKnown|1|PREVARGTEQ:SoulknifeLVL,7 BONUS:VAR|WarSoulManeuversKnown|1|PREVARGTEQ:SoulknifeLVL,9 BONUS:VAR|WarSoulManeuversKnown|1|PREVARGTEQ:SoulknifeLVL,11 BONUS:VAR|WarSoulManeuversKnown|1|PREVARGTEQ:SoulknifeLVL,13 BONUS:VAR|WarSoulManeuversKnown|1|PREVARGTEQ:SoulknifeLVL,15 BONUS:VAR|WarSoulManeuversKnown|1|PREVARGTEQ:SoulknifeLVL,17 BONUS:VAR|WarSoulManeuversKnown|1|PREVARGTEQ:SoulknifeLVL,19 BONUS:VAR|WarSoulManeuversKnownOne|WarSoulManeuversKnown|PREVAREQ:WarSoulHighestManeuverLevel,1 BONUS:VAR|WarSoulManeuversKnownTwo|WarSoulManeuversKnown|PREVAREQ:WarSoulHighestManeuverLevel,2 BONUS:VAR|WarSoulManeuversKnownThree|WarSoulManeuversKnown|PREVAREQ:WarSoulHighestManeuverLevel,3 BONUS:VAR|WarSoulManeuversKnownFour|WarSoulManeuversKnown|PREVAREQ:WarSoulHighestManeuverLevel,4 BONUS:VAR|WarSoulManeuversKnownFive|WarSoulManeuversKnown|PREVAREQ:WarSoulHighestManeuverLevel,5 BONUS:VAR|WarSoulManeuversKnownSix|WarSoulManeuversKnown|PREVAREQ:WarSoulHighestManeuverLevel,6 SOURCEPAGE:p.135 Maneuvers Readied KEY:War Soul ~ Maneuvers Readied CATEGORY:Special Ability TYPE:SoulknifeClassFeatures.ClassFeatures.SpecialQuality DEFINE:WarSoulManeuversReadied|0 DEFINE:WarSoulManeuversReadiedOne|0 DEFINE:WarSoulManeuversReadiedTwo|0 DEFINE:WarSoulManeuversReadiedThree|0 DEFINE:WarSoulManeuversReadiedFour|0 DEFINE:WarSoulManeuversReadiedFive|0 DEFINE:WarSoulManeuversReadiedSix|0 DEFINE:WarSoulStandardActionRecover|0 DEFINE:WarSoulFullRoundActionRecover|0 DESC:A war soul can ready %1 of his maneuvers, but he must choose which maneuvers to ready. He readies his maneuvers by meditating over his mind blade for 10 minutes. The maneuvers he chooses remain readied until he decides to repeat this again and change them. War souls do not need to sleep or be well rested to ready their maneuvers; any time he spends 10 minutes in meditation, he can change his readied maneuvers. He may not ready any individual maneuver more than once. He begins an encounter with all readied maneuvers unexpended, regardless of how many times he may have already used them since he chose them. When the war soul initiates a maneuver, he expends it for the current encounter, so each of his readied maneuvers can be used once per encounter (until they are recovered, see below). War souls may recover their maneuvers in one of two ways. The war soul may concentrate on his mind blade to recover %1 expended maneuver from its psychic projection as a standard action and recover %1 maneuver. Alternately, he may flood his psychic being with martial knowledge by expending his psionic focus to recover a number of expended maneuvers equal to his Wisdom modifier (min of 2) [%3 maneuvers] as a full round action. While recovering maneuvers, the war soul's mental state makes him react violently to those who would attack him. When attacked, he may make an immediate counter-attack against his attacker at his full base attack bonus; he may only make one counter-attack against a given enemy per round, and he may make no more counter-attacks then his 1 + his Wisdom modifier per round. [%4 attacks]|WarSoulManeuversReadied|WarSoulStandardActionRecover|WarSoulFullRoundActionRecover|1+WIS BONUS:VAR|WarSoulManeuversReadied|3 BONUS:VAR|WarSoulManeuversReadied|1|PREVARGTEQ:SoulknifeLVL,4 BONUS:VAR|WarSoulManeuversReadied|1|PREVARGTEQ:SoulknifeLVL,10 BONUS:VAR|WarSoulManeuversReadied|1|PREVARGTEQ:SoulknifeLVL,15 BONUS:VAR|WarSoulManeuversReadied|1|PREVARGTEQ:SoulknifeLVL,20 BONUS:VAR|WarSoulManeuversReadiedOne|WarSoulManeuversReadied|PREVAREQ:WarSoulHighestManeuverLevel,1 BONUS:VAR|WarSoulManeuversReadiedTwo|WarSoulManeuversReadied|PREVAREQ:WarSoulHighestManeuverLevel,2 BONUS:VAR|WarSoulManeuversReadiedThree|WarSoulManeuversReadied|PREVAREQ:WarSoulHighestManeuverLevel,3 BONUS:VAR|WarSoulManeuversReadiedFour|WarSoulManeuversReadied|PREVAREQ:WarSoulHighestManeuverLevel,4 BONUS:VAR|WarSoulManeuversReadiedFive|WarSoulManeuversReadied|PREVAREQ:WarSoulHighestManeuverLevel,5 BONUS:VAR|WarSoulManeuversReadiedSix|WarSoulManeuversReadied|PREVAREQ:WarSoulHighestManeuverLevel,6 BONUS:VAR|WarSoulStandardActionRecover|1 BONUS:VAR|WarSoulFullRoundActionRecover|max(2,WIS) SOURCEPAGE:p.135 diff --git a/data/pathfinder/paizo/player_companion/occult_origins/oo_abilities_class.lst b/data/pathfinder/paizo/player_companion/occult_origins/oo_abilities_class.lst index 59f3c92d002..44e3538b829 100644 --- a/data/pathfinder/paizo/player_companion/occult_origins/oo_abilities_class.lst +++ b/data/pathfinder/paizo/player_companion/occult_origins/oo_abilities_class.lst @@ -237,12 +237,17 @@ Serpent-Fire Adept KEY:Monk Archetype ~ Serpent-Fire Adept CATEGORY:Arche Class Skills KEY:Serpent-Fire Adept ~ Class Skills CATEGORY:Internal TYPE:Monk Class Features.SerpentFireAdeptClassFeatures CSKILL:Acrobatics|Appraise|TYPE=Craft|Diplomacy|Escape Artist|Fly|Heal|Knowledge (Arcana)|Knowledge (Religion)|Linguistics|Perception|TYPE=Profession|Sense Motive|Stealth|Survival Chakra Training KEY:Serpent-Fire Adept ~ Chakra Training CATEGORY:Special Ability TYPE:Monk Class Features.SerpentFireAdeptClassFeatures.SpecialQuality SOURCEPAGE:p.20 DESC:A serpent-fire adept gains Chakra Initiate and Psychic Sensitivity as bonus feats. She need not meet these feats’ prerequisites, and can use her serpent-fire ki from Chakra Initiate to open and maintain her root chakra, despite not being 2nd level. ABILITY:FEAT|AUTOMATIC|Chakra Initiate|Psychic Sensitivity -Chakra Expertise KEY:Serpent-Fire Adept ~ Chakra Expertise CATEGORY:Special Ability TYPE:Monk Class Features.SerpentFireAdeptClassFeatures.SpecialQuality.Extraordinary SOURCEPAGE:p.20 DESC:The serpent-fire adept gains a +%1 bonus on Fortitude and Will saves attempted to maintain awakened chakras.|MonkLVL/2 DESC:When she has opened one or more chakras, she can maintain those chakras (without opening any new chakras) for|PRECLASS:1,Monk=8 DESC:1 round|PRECLASS:1,Monk=8|!PRECLASS:1,Monk=16 DESC:2 rounds|PRECLASS:1,Monk=16 DESC:without taking a swift action, expending ki, or attempting Fortitude or Will saves to maintain the chakras. After maintaining her chakras with chakra expertise, the monk must open a new chakra or maintain her open chakras normally before she can use chakra expertise again.|PRECLASS:1,Monk=8 +Chakra Expertise KEY:Serpent-Fire Adept ~ Chakra Expertise CATEGORY:Special Ability TYPE:Monk Class Features.SerpentFireAdeptClassFeatures.SpecialQuality.Extraordinary SOURCEPAGE:p.20 DESC:The serpent-fire adept gains a +%1 bonus on Fortitude and Will saves attempted to maintain awakened chakras.|MonkLVL/2 DESC:When she has opened one or more chakras, she can maintain those chakras (without opening any new chakras) for|PRECLASS:1,Monk=8 DESC:1 round|PRECLASS:1,Monk=8|!PRECLASS:1,Monk=16 DESC:2 rounds|PRECLASS:1,Monk=16 DESC:without taking a swift action, expending ki, or attempting Fortitude or Will saves to maintain the chakras. After maintaining her chakras with chakra expertise, the monk must open a new chakra or maintain her open chakras normally before she can use chakra expertise again.|PRECLASS:1,Monk=8 Light Spirit KEY:Serpent-Fire Adept ~ Light Spirit CATEGORY:Special Ability TYPE:Monk Class Features.SerpentFireAdeptClassFeatures.SpecialQuality.Supernatural SOURCEPAGE:p.20 DESC:When the serpent-fire adept has her sacral chakra open and chooses to benefit from its power, her fly speed is equal to either her base land speed or her bonus to her base speed from the monk fast movement class ability (whichever is higher). She maintains this fly speed for %1 rounds, even if she closes her chakras.|max(1,WIS) Chakra Adept KEY:Serpent-Fire Adept ~ Chakra Adept CATEGORY:Special Ability TYPE:Monk Class Features.SerpentFireAdeptClassFeatures.SpecialQuality.Extraordinary SOURCEPAGE:p.20 DESC:The serpent-fire adept gains Chakra Adept as a bonus feat. She need not meet the feat’s prerequisites. When the serpent-fire adept has used all her rounds of chakra expertise to maintain open chakras, if she does not spend additional ki to maintain her open chakras on the next round, her highest chakra closes and she can spend a swift action to use any one of the abilities of her remaining open chakras. On the round after that, all her chakras close, and if she wishes to reopen them, she must start again with her root chakra. ABILITY:FEAT|AUTOMATIC|Chakra Adept Linked Chakras KEY:Serpent-Fire Adept ~ Linked Chakras CATEGORY:Special Ability TYPE:Monk Class Features.SerpentFireAdeptClassFeatures.SpecialQuality.Extraordinary SOURCEPAGE:p.20 DESC:The serpent-fire adept can open multiple chakras at once as a standard action. The round that she does this, she is required to make saving throws only to resist being overwhelmed by the highest chakra she opens, though the save DCs are increased by 5. She can do this DESC:once|!PRECLASS:1,Monk=12 DESC:twice|PRECLASS:1,Mink=12|!PRECLASS:1,Monk=17 DESC:three times|PRECLASS:1,Monk=17 DESC:per day. Chakra Mastery KEY:Serpent-Fire Adept ~ Chakra Mastery CATEGORY:Special Ability TYPE:Monk Class Features.SerpentFireAdeptClassFeatures.SpecialQuality.Extraordinary SOURCEPAGE:p.20 DESC:The serpent-fire adept gains Chakra Master as a bonus feat. She need not meet the feat’s prerequisites. When maintaining her open chakras with chakra expertise, she can spend 1 point of ki to gain the benefits of two chakras rather than one in that round (or three chakras, if she has opened her crown chakra). DESC:The serpent-fire adept’s pool of serpent-fire ki increases to 7 points.|PRECLASS:1,Monk=14|!PRECLASS:1,Monk=18 DESC:The serpent-fire adept’s pool of serpent-fire ki increases to 9 points.|PRECLASS:1,Monk=18 ABILITY:FEAT|AUTOMATIC|Chakra Master +# ============================== +# Druid Archetype - Supernaturalist is found in the support/class_arg +# ============================== + + # ============================== # Arcanist Archetype # ============================== diff --git a/data/pathfinder/paizo/player_companion/occult_origins/support/oo_abilities_class_arg.lst b/data/pathfinder/paizo/player_companion/occult_origins/support/oo_abilities_class_arg.lst index 2fe28d2d8e9..a11b5f2add4 100644 --- a/data/pathfinder/paizo/player_companion/occult_origins/support/oo_abilities_class_arg.lst +++ b/data/pathfinder/paizo/player_companion/occult_origins/support/oo_abilities_class_arg.lst @@ -4,7 +4,7 @@ SOURCELONG:Pathfinder Player Companion: Occult Origins SOURCESHORT:OO SOURCEWEB: # Druid Archetype # ============================== -Supernaturalist KEY:Druid Archetype ~ Supernaturalist CATEGORY:Archetype TYPE:Archetype.PaladinArchetype SOURCEPAGE:p.21 DESC:Supernaturalists wholly embrace paranormal phenomena as extensions of nature. PRECLASS:1,Druid=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Druid Archetype ~ Supernaturalist],[!PREFACT:1,ABILITIES,Druid_Archetype_ArmorProficiencies=True,Druid_Archetype_NatureSense=True,Druid_Archetype_TracklessStep=True,Druid_Archetype_ResistNaturesLure=True,Druid_Archetype_WildShape=True] ABILITY:Special Ability|AUTOMATIC|Supernaturalist ~ Eldritch Botanist|PRECLASS:1,Druid=1 ABILITY:Special Ability|AUTOMATIC|Supernaturalist ~ Paranormal Scholar|PRECLASS:1,Druid=1 ABILITY:Special Ability|AUTOMATIC|Supernaturalist ~ Animal Spirit|PRECLASS:1,Druid=4 FACT:Druid_Archetype_ArmorProficiencies|true FACT:Druid_Archetype_NatureSense|true FACT:Druid_Archetype_TracklessStep|true FACT:Druid_Archetype_ResistNaturesLure|true FACT:Druid_Archetype_WildShape|true FACT:Druid_CF_ArmorProficiencies|true FACT:Druid_CF_NatureSense|true FACT:Druid_CF_TracklessStep|true FACT:Druid_CF_ResistNaturesLure|true FACT:Druid_CF_WildShape|true COST:0 +Supernaturalist KEY:Druid Archetype ~ Supernaturalist CATEGORY:Archetype TYPE:Archetype.DruidArchetype SOURCEPAGE:p.21 DESC:Supernaturalists wholly embrace paranormal phenomena as extensions of nature. PRECLASS:1,Druid=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Druid Archetype ~ Supernaturalist],[!PREFACT:1,ABILITIES,Druid_Archetype_ArmorProficiencies=True,Druid_Archetype_NatureSense=True,Druid_Archetype_TracklessStep=True,Druid_Archetype_ResistNaturesLure=True,Druid_Archetype_WildShape=True] ABILITY:Special Ability|AUTOMATIC|Supernaturalist ~ Eldritch Botanist|PRECLASS:1,Druid=1 ABILITY:Special Ability|AUTOMATIC|Supernaturalist ~ Paranormal Scholar|PRECLASS:1,Druid=1 ABILITY:Special Ability|AUTOMATIC|Supernaturalist ~ Animal Spirit|PRECLASS:1,Druid=4 FACT:Druid_Archetype_ArmorProficiencies|true FACT:Druid_Archetype_NatureSense|true FACT:Druid_Archetype_TracklessStep|true FACT:Druid_Archetype_ResistNaturesLure|true FACT:Druid_Archetype_WildShape|true FACT:Druid_CF_ArmorProficiencies|true FACT:Druid_CF_NatureSense|true FACT:Druid_CF_TracklessStep|true FACT:Druid_CF_ResistNaturesLure|true FACT:Druid_CF_WildShape|true COST:0 Eldritch Botanist KEY:Supernaturalist ~ Eldritch Botanist CATEGORY:Special Ability TYPE:Druid Class Features.SupernaturalistClassFeatures.SpecialQuality.Extraordinary SOURCEPAGE:p.21 DESC:A supernaturalist can affect plants with mind-affecting effects she creates and with spells that normally affect animals. Any such spell that allows a Will save can instead be negated by the target plant with a successful Fortitude save at the same DC. She also can choose plant bond and green empathy, as a treesinger druid (Advanced Race Guide 25), in place of nature bond and wild empathy. ABILITY:Internal|AUTOMATIC|Supernaturalist Nature Bond Choice|Supernaturalist Wild Empathy Choice Paranormal Scholar KEY:Supernaturalist ~ Paranormal Scholar CATEGORY:Special Ability TYPE:Druid Class Features.SupernaturalistClassFeatures.SpecialQuality.Extraordinary SOURCEPAGE:p.21 DESC:A supernaturalist gains Psychic Sensitivity as a bonus feat and adds Diplomacy, Knowledge (arcana), and Sense Motive as class skills. DESC:At 3rd level and every 3 levels thereafter, she can select a spell from the psychic class’s spell list (Occult Adventures 69) and add it to her druid spell list, and is able to prepare and cast it as a druid spell.|PRECLASS:1,Druid=3 ABILITY:FEAT|AUTOMATIC|Psychic Sensitivity CSKILL:Diplomacy|Knowledge (arcana)|Sense Motive BONUS:ABILITYPOOL|Supernaturalist Psychic Spell|DruidLVL/3 @@ -22,6 +22,9 @@ Psychic Spells KEY:Supernaturalist ~ Psychic Spells CATEGORY:Internal TYPE:Su Supernaturalist Nature Bond Choice CATEGORY:Internal BONUS:ABILITYPOOL|Supernaturalist Nature Bond|1 Supernaturalist Wild Empathy Choice CATEGORY:Internal BONUS:ABILITYPOOL|Supernaturalist Wild Empathy|1 + + + CATEGORY=Special Ability|Treesinger ~ Plant Bond.MOD TYPE:SupernaturalistNatureBond CATEGORY=Special Ability|Treesinger ~ Green Empathy.MOD TYPE:SupernaturalistWildEmpathy CATEGORY=Special Ability|Druid ~ Wild Empathy.MOD TYPE:SupernaturalistWildEmpathy diff --git a/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilities_class.lst b/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilities_class.lst index bf652bc9629..5c23dc04964 100644 --- a/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilities_class.lst +++ b/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilities_class.lst @@ -132,7 +132,7 @@ Eternal Potion KEY:Discovery ~ Eternal Potion CATEGORY:Special Ability TYPE:Alc Explosive Bomb* KEY:Discovery ~ Explosive Bomb CATEGORY:Special Ability TYPE:AlchemistClassFeatures.SpecialAttack.AlchemistDiscovery.AlchemistBombModifier DESC:The alchemist's bombs now have a splash radius of 10 feet rather than 5 feet. Creatures that take a direct hit from an explosive bomb catch fire, taking 1d%1 points of fire damage each round until the fire is extinguished. Extinguishing the flames is a full-round action that requires a Reflex save. Rolling on the ground provides the target with a +2 to the save. Dousing the target with at least 2 gallons of water automatically extinguishes the flames.|AlchemistBombDiceSize Extend Potion KEY:Discovery ~ Extend Potion CATEGORY:Special Ability TYPE:AlchemistClassFeatures.SpecialQuality.AlchemistDiscovery DESC:A number of times per day equal to his Intelligence modifier, the alchemist can cause any potion he drinks that does not have an instantaneous duration to function at twice its normal duration. This does not apply to extracts. Fast Bombs KEY:Discovery ~ Fast Bombs CATEGORY:Special Ability TYPE:AlchemistClassFeatures.SpecialAttack.AlchemistDiscovery PREVARGTEQ:DiscoveryQualifyLVL,8 DESC:An alchemist with this discovery can quickly create enough bombs to throw more than one in a single round. The alchemist can prepare and throw additional bombs as a full-round action if his base attack bonus is high enough to grant him additional attacks. This functions just like a full-attack with a ranged weapon. -Feral Mutagen KEY:Discovery ~ Feral Mutagen CATEGORY:Special Ability TYPE:AlchemistClassFeatures.SpecialAttack.AlchemistDiscovery.AlchemistMutagenMod DEFINE:FeralMutagenNaturalAttack|0 DESC:Whenever the alchemist imbibes a mutagen, he gains two claw attacks and a bite attack. These are primary attacks and are made using the alchemist's full base attack bonus. The claw attacks deal 1d6 points of damage (1d4 if the alchemist is Small) and the bite attack deals 1d8 points of damage (1d6 if the alchemist is Small). While the mutagen is in effect, the alchemist gains a +2 competence bonus on Intimidate skill checks. ABILITY:Internal|AUTOMATIC|Bite|Claw|PREVAREQ:FeralMutagenNaturalAttack,1 BONUS:WEAPONPROF=Bite|DAMAGESIZE|1|PREVAREQ:FeralMutagenNaturalAttack,1 BONUS:WEAPONPROF=Claw|DAMAGESIZE|1|PREVAREQ:FeralMutagenNaturalAttack,1 TEMPBONUS:PC|VAR|FeralMutagenNaturalAttack|1 TEMPBONUS:PC|SKILL|Intimidate|2 +Feral Mutagen KEY:Discovery ~ Feral Mutagen CATEGORY:Special Ability TYPE:AlchemistClassFeatures.SpecialAttack.AlchemistDiscovery.AlchemistMutagenMod DEFINE:FeralMutagenNaturalAttack|0 DESC:Whenever the alchemist imbibes a mutagen, he gains two claw attacks and a bite attack. These are primary attacks and are made using the alchemist's full base attack bonus. The claw attacks deal 1d6 points of damage (1d4 if the alchemist is Small) and the bite attack deals 1d8 points of damage (1d6 if the alchemist is Small). While the mutagen is in effect, the alchemist gains a +2 competence bonus on Intimidate skill checks. ABILITY:Internal|AUTOMATIC|Bite|Claw BONUS:WEAPONPROF=Bite|DAMAGESIZE|1 BONUS:WEAPONPROF=Claw|DAMAGESIZE|1 ASPECT:SkillBonus|While the feral mutagen is in effect, the alchemist gains a +2 competence bonus on Intimidate skill checks. Force Bomb* KEY:Discovery ~ Force Bomb CATEGORY:Special Ability TYPE:AlchemistClassFeatures.SpecialAttack.AlchemistDiscovery.AlchemistBombModifier PREVARGTEQ:DiscoveryQualifyLVL,8 DEFINE:ForceBombDieSize|0 DESC:When the alchemist creates a bomb, he can choose to have it inflict force damage. Force bombs deal %1d%2 points of force damage instead of the normal damage for a bomb. Creatures that take a direct hit from a force bomb are knocked prone unless they succeed on a Reflex save.|AlchemistBombAdditionalDice+1|ForceBombDieSize BONUS:VAR|ForceBombDieSize|3|PREVAREQ:Alchemist_CF_BombReduction,1 BONUS:VAR|ForceBombDieSize|4|PREVAREQ:Alchemist_CF_BombReduction,0 Frost Bomb* KEY:Discovery ~ Frost Bomb CATEGORY:Special Ability TYPE:AlchemistClassFeatures.SpecialAttack.AlchemistDiscovery.AlchemistBombModifier DESC:When the alchemist creates a bomb, he can choose to have it inflict cold damage. Creatures that take a direct hit from a frost bomb are staggered on their next turn unless they succeed on a Fortitude save. Grand Mutagen KEY:Discovery ~ Grand Mutagen CATEGORY:Special Ability TYPE:AlchemistClassFeatures.SpecialAttack.AlchemistDiscovery.AlchemistMutagenMod PREABILITY:1,CATEGORY=Special Ability,Discovery ~ Greater Mutagen PREVARGTEQ:DiscoveryQualifyLVL,16 DESC:The alchemist's mutagen now grants a +6 natural armor bonus, a +8 alchemical bonus to one ability score (Strength, Dexterity, or Constitution), a +6 alchemical bonus to a second physical ability score, and a +4 alchemical bonus to a third physical ability score. The alchemist takes a -2 penalty to his Intelligence, Wisdom, and Charisma as long as the mutagen persists (see Mutagen). BONUS:VAR|MutagenTierLVL|1 BONUS:VAR|MutagenACBonus|2 BONUS:VAR|MutagenStatBonus|2 diff --git a/data/pathfinder/paizo/roleplaying_game/advanced_race_guide/arg_abilities_race.lst b/data/pathfinder/paizo/roleplaying_game/advanced_race_guide/arg_abilities_race.lst index f9b0c8b579b..1c3f037e919 100644 --- a/data/pathfinder/paizo/roleplaying_game/advanced_race_guide/arg_abilities_race.lst +++ b/data/pathfinder/paizo/roleplaying_game/advanced_race_guide/arg_abilities_race.lst @@ -1820,12 +1820,21 @@ Bonus Ranger Animal Companion DR KEY:Favored Class Bonus ~ Ranger ~ Svirfneblin ###Block: Vanara # Ability Name Unique Key Category of Ability Type Required Class Required Race Define Description Stackable? Multiple? Choose Ability Bonus to skill Modify VAR Source Page Bonus Alchemist Bomb Damage KEY:Favored Class Bonus ~ Alchemist ~ Vanara CATEGORY:Special Ability TYPE:SpecialQuality.FavoredClassBonus.FavoredClassAlchemist PRECLASS:1,Alchemist=1 PRERACE:1,Vanara,RACESUBTYPE=Vanara DESC:Alchemist: Add +1/2 to the alchemist's bomb damage. STACK:YES MULT:YES CHOOSE:NOCHOICE BONUS:VAR|Bonus_Bomb_Damage_two|1 SOURCEPAGE:p.206 -Bonus Druid Wild Empathy and Handle Animal KEY:Favored Class Bonus ~ Druid ~ Vanara CATEGORY:Special Ability TYPE:SpecialQuality.FavoredClassBonus.FavoredClassDruid PRECLASS:1,Druid=1 PRERACE:1,Vanara,RACESUBTYPE=Vanara DEFINE:Bonus_Druid_Skill_Varana|0 DESC:Druid: Add a +1/2 bonus on wild empathy checks and a +1/2 bonus on Handle Animal skill checks. STACK:YES MULT:YES CHOOSE:NOCHOICE BONUS:SKILL|Handle Animal|Bonus_Druid_Skill_Varana/2 BONUS:VAR|Bonus_Druid_Skill_Varana|1 BONUS:VAR|WildEmpathy|Bonus_Druid_Skill_Varana/2 SOURCEPAGE:p.206 +Bonus Druid Wild Empathy and Handle Animal KEY:Favored Class Bonus ~ Druid ~ Vanara CATEGORY:Special Ability TYPE:SpecialQuality.FavoredClassBonus.FavoredClassDruid PRECLASS:1,Druid=1 PRERACE:1,Vanara,RACESUBTYPE=Vanara DEFINE:Bonus_Druid_Skill_Varana|0 DESC:Druid: Add a +1/2 bonus on wild empathy checks and a +1/2 bonus on Handle Animal skill checks. STACK:YES MULT:YES CHOOSE:NOCHOICE SOURCEPAGE:p.206 ABILITY:Internal|AUTOMATIC|ARG FCB Tracker BONUS:VAR|Bonus_Druid_Skill_Varana|1 Bonus Fighter Reposition or Trip CMD KEY:Favored Class Bonus ~ Fighter ~ Vanara CATEGORY:Special Ability TYPE:SpecialQuality.FavoredClassBonus.FavoredClassFighter PRECLASS:1,Fighter=1 PRERACE:1,Vanara,RACESUBTYPE=Vanara DESC:Fighter: Add +1 to the fighter's CMD when resisting a reposition or trip attempt. STACK:YES MULT:YES CHOOSE:NOCHOICE SOURCEPAGE:p.206 Bonus Monk Jump Skill KEY:Favored Class Bonus ~ Monk ~ Vanara CATEGORY:Special Ability TYPE:SpecialQuality.FavoredClassBonus.FavoredClassMonk PRECLASS:1,Monk=1 PRERACE:1,Vanara,RACESUBTYPE=Vanara DESC:Monk: Add a +1 bonus on Acrobatics checks made to jump. STACK:YES MULT:YES CHOOSE:NOCHOICE BONUS:VAR|HighJumpBonus|1 SOURCEPAGE:p.206 Bonus Ranger Favored Enemy Dodge Bonus KEY:Favored Class Bonus ~ Ranger ~ Vanara CATEGORY:Special Ability TYPE:SpecialQuality.FavoredClassBonus.FavoredClassRanger PRECLASS:1,Ranger=1 PRERACE:1,Vanara,RACESUBTYPE=Vanara DESC:Ranger: Add +1/4 dodge bonus to Armor Class against the ranger's favored enemies. STACK:YES MULT:YES CHOOSE:NOCHOICE SOURCEPAGE:p.206 Bonus Rogue Talent KEY:Favored Class Bonus ~ Rogue ~ Vanara CATEGORY:Special Ability TYPE:SpecialQuality.FavoredClassBonus.FavoredClassRogue PRECLASS:1,TYPE.Rogue=1 PRERACE:1,Vanara,RACESUBTYPE=Vanara DESC:Rogue: The rogue gains 1/6 of a new rogue talent. STACK:YES MULT:YES CHOOSE:NOCHOICE ABILITY:Internal|AUTOMATIC|Rogue Talent Bonus Tracker BONUS:VAR|RogueBonusTalentCount|1 SOURCEPAGE:p.206 + +ARG FCB Tracker CATEGORY:Internal BONUS:SKILL|Handle Animal|Bonus_Druid_Skill_Varana/2|TYPE=NoStack BONUS:VAR|WildEmpathy|Bonus_Druid_Skill_Varana/2|TYPE=NoStack + + + + + + + ###Block: Vishkanya # Ability Name Unique Key Category of Ability Type Required Class Required Race Description Stackable? Multiple? Choose Source Page Bonus Bard Bardic Performance KEY:Favored Class Bonus ~ Bard ~ Vishkanya CATEGORY:Special Ability TYPE:SpecialQuality.FavoredClassBonus.FavoredClassBard PRECLASS:1,Bard=1 PRERACE:1,Vishkanya,RACESUBTYPE=Vishkanya DESC:Bard: Add +1 to the bard's total number of bardic performance rounds per day. STACK:YES MULT:YES CHOOSE:NOCHOICE SOURCEPAGE:p.208 diff --git a/data/pathfinder/paizo/roleplaying_game/advanced_race_guide/arg_races_companion.lst b/data/pathfinder/paizo/roleplaying_game/advanced_race_guide/arg_races_companion.lst index 0f5136a3f2c..ae48aaf0548 100644 --- a/data/pathfinder/paizo/roleplaying_game/advanced_race_guide/arg_races_companion.lst +++ b/data/pathfinder/paizo/roleplaying_game/advanced_race_guide/arg_races_companion.lst @@ -10,11 +10,11 @@ Familiar (Parrot) SORTKEY:z_Companion OUTPUTNAME:Familiar [NAME] STARTFEATS:1 SI #Familiar (Cacodaemon) OUTPUTNAME:Familiar [NAME] STARTFEATS:1 FACT:BaseSize|T SIZE:T MOVE:Walk,5,Fly,50 REACH:0 PREVARGTEQ:NotAllowed,1 BONUS:VAR|AC_Natural_Armor|4|TYPE=Base BONUS:STAT|STR,CON,WIS,CHA|2 BONUS:STAT|INT|-2 BONUS:VAR|FastHealingRate|2 BONUS:VAR|Maneuverability|5 BONUS:VAR|SLA_CL|6 AUTO:LANG|Common ABILITY:Special Ability|AUTOMATIC|Change Shape ~ Cacodaemon|Detect Good ~ Constant|Detect Magic ~ Constant|Disease ~ Cacodaemon|Fast Healing|Flight Maneuverability|Cacodaemon ~ Soul Lock LEGS:0 HANDS:0 NATURALATTACKS:Bite,Weapon.Natural.Melee.Finesseable.Bludgeoning.Piercing.Slashing.Disease,*1,1d4 DR:5/good or silver MONSTERCLASS:Outsider (Ref/Will):3 RACETYPE:Outsider RACESUBTYPE:Daemon|Evil|Extraplanar TYPE:Companion.Familiar CR:2 SOURCEPAGE:p.64 SPELLS:Innate|TIMES=ATWILL|CASTERLEVEL=6|Invisibility (self only) SPELLS:Innate|TIMES=3|CASTERLEVEL=6|Confusion (Lesser),11+CHA SPELLS:Innate|TIMES=1|TIMEUNIT=Week|CASTERLEVEL=12|Commune KIT:1|Familiar ~ Cacodaemon SORTKEY:z_Companion ###Block: Plant Companions -# Race Name SORTKEY Output Name Size Move Reach Vision Var. Min. Value Modify VAR Ability Natural Attacks Define Monster Class Name and Starting Level Main Race Type Type Source Page Apply Kit FACT -Companion (Carnivorous Flower) SORTKEY:z_Companion OUTPUTNAME:Plant Companion - Carnivorous Flower SIZE:S MOVE:Walk,30,Climb,10 REACH:5 VISION:Low-Light Vision PREVARGTEQ:NotAllowed,1 BONUS:VAR|AC_Natural_Armor|2|TYPE=Base ABILITY:Special Ability|AUTOMATIC|Scent ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Carnivorous Flower|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement NATURALATTACKS:Bite,Weapon.Natural.Melee.Finesseable.Piercing,*1,1d6 MONSTERCLASS:Companion:2 RACETYPE:Plant TYPE:Companion.PlantCompanion SOURCEPAGE:p.26 KIT:1|Plant Companion ~ Carnivorous Flower FACT:BaseSize|S -Companion (Crawling Vine) SORTKEY:z_Companion OUTPUTNAME:Plant Companion - Crawling Vine SIZE:M MOVE:Walk,20,Climb,20 REACH:5 VISION:Low-Light Vision PREVARGTEQ:NotAllowed,1 BONUS:VAR|AC_Natural_Armor|2|TYPE=Base ABILITY:Special Ability|AUTOMATIC|Grab|Scent ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Crawling Vine|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement NATURALATTACKS:Slam,Weapon.Natural.Melee.Finesseable.Bludgeoning,*1,1d4 MONSTERCLASS:Companion:2 RACETYPE:Plant TYPE:Companion.PlantCompanion SOURCEPAGE:p.26 KIT:1|Plant Companion ~ Crawling Vine FACT:BaseSize|M -Companion (Puffball) SORTKEY:z_Companion OUTPUTNAME:Plant Companion - Puffball SIZE:S MOVE:Walk,20,Fly,60 REACH:5 VISION:Low-Light Vision PREVARGTEQ:NotAllowed,1 BONUS:VAR|AC_Natural_Armor|1|TYPE=Base BONUS:VAR|Maneuverability|3 ABILITY:Special Ability|AUTOMATIC|Flight Maneuverability|Puffball ~ Poison ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Puffball|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement NATURALATTACKS:Thorn,Weapon.Natural.Melee.Finesseable.Piercing,*1,1d4 DEFINE:Maneuverability|0 MONSTERCLASS:Companion:2 RACETYPE:Plant TYPE:Companion.PlantCompanion SOURCEPAGE:p.26 KIT:1|Plant Companion ~ Puffball FACT:BaseSize|S -Companion (Sapling Treant) SORTKEY:z_Companion OUTPUTNAME:Plant Companion - Sapling Treant SIZE:M MOVE:Walk,30,Climb,30 REACH:5 VISION:Low-Light Vision PREVARGTEQ:NotAllowed,1 BONUS:VAR|AC_Natural_Armor|1|TYPE=Base ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Sapling Treant|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement NATURALATTACKS:Slam,Weapon.Natural.Melee.Finesseable.Bludgeoning,*2,1d6 MONSTERCLASS:Companion:2 RACETYPE:Plant TYPE:Companion.PlantCompanion SOURCEPAGE:p.26 KIT:1|Plant Companion ~ Sapling Treant FACT:BaseSize|M +# Race Name SORTKEY Output Name Size Move Reach Vision Var. Min. Value Modify VAR Ability Natural Attacks Define Monster Class Name and Starting Level Main Race Type Type Source Page Apply Kit FACT +Companion (Carnivorous Flower) SORTKEY:z_Companion OUTPUTNAME:Plant Companion - Carnivorous Flower SIZE:S MOVE:Walk,30,Climb,10 REACH:5 VISION:Low-Light Vision PREVARGTEQ:NotAllowed,1 BONUS:VAR|AC_Natural_Armor|2|TYPE=Base BONUS:ABILITYPOOL|Companion Level Increase Choice|1|PREVARGTEQ:MasterLevel,4 ABILITY:Special Ability|AUTOMATIC|Scent ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Carnivorous Flower|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement NATURALATTACKS:Bite,Weapon.Natural.Melee.Finesseable.Piercing,*1,1d6 MONSTERCLASS:Companion:2 RACETYPE:Plant TYPE:Companion.PlantCompanion SOURCEPAGE:p.26 KIT:1|Plant Companion ~ Carnivorous Flower FACT:BaseSize|S +Companion (Crawling Vine) SORTKEY:z_Companion OUTPUTNAME:Plant Companion - Crawling Vine SIZE:M MOVE:Walk,20,Climb,20 REACH:5 VISION:Low-Light Vision PREVARGTEQ:NotAllowed,1 BONUS:VAR|AC_Natural_Armor|2|TYPE=Base BONUS:ABILITYPOOL|Companion Level Increase Choice|1|PREVARGTEQ:MasterLevel,4 ABILITY:Special Ability|AUTOMATIC|Grab|Scent ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Crawling Vine|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement NATURALATTACKS:Slam,Weapon.Natural.Melee.Finesseable.Bludgeoning,*1,1d4 MONSTERCLASS:Companion:2 RACETYPE:Plant TYPE:Companion.PlantCompanion SOURCEPAGE:p.26 KIT:1|Plant Companion ~ Crawling Vine FACT:BaseSize|M +Companion (Puffball) SORTKEY:z_Companion OUTPUTNAME:Plant Companion - Puffball SIZE:S MOVE:Walk,20,Fly,60 REACH:5 VISION:Low-Light Vision PREVARGTEQ:NotAllowed,1 BONUS:VAR|AC_Natural_Armor|1|TYPE=Base BONUS:VAR|Maneuverability|3 BONUS:ABILITYPOOL|Companion Level Increase Choice|1|PREVARGTEQ:MasterLevel,4 ABILITY:Special Ability|AUTOMATIC|Flight Maneuverability|Puffball ~ Poison ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Puffball|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement NATURALATTACKS:Thorn,Weapon.Natural.Melee.Finesseable.Piercing,*1,1d4 DEFINE:Maneuverability|0 MONSTERCLASS:Companion:2 RACETYPE:Plant TYPE:Companion.PlantCompanion SOURCEPAGE:p.26 KIT:1|Plant Companion ~ Puffball FACT:BaseSize|S +Companion (Sapling Treant) SORTKEY:z_Companion OUTPUTNAME:Plant Companion - Sapling Treant SIZE:M MOVE:Walk,30,Climb,30 REACH:5 VISION:Low-Light Vision PREVARGTEQ:NotAllowed,1 BONUS:VAR|AC_Natural_Armor|1|TYPE=Base BONUS:ABILITYPOOL|Companion Level Increase Choice|1|PREVARGTEQ:MasterLevel,4 ABILITY:Special Ability|AUTOMATIC|Companion Advancement ~ Sapling Treant|PREABILITY:1,CATEGORY=Special Ability,Companion Advancement NATURALATTACKS:Slam,Weapon.Natural.Melee.Finesseable.Bludgeoning,*2,1d6 MONSTERCLASS:Companion:2 RACETYPE:Plant TYPE:Companion.PlantCompanion SOURCEPAGE:p.26 KIT:1|Plant Companion ~ Sapling Treant FACT:BaseSize|M ###Block: Beast Rider Mounts diff --git a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities.lst b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities.lst index 8313201efb2..b996514b76e 100644 --- a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities.lst +++ b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities.lst @@ -438,6 +438,9 @@ Add a Feat Ignoring Restrictions SORTKEY:Z_Award CATEGORY:Special Ability TYPE:G Add a Class Skill SORTKEY:Z_Award CATEGORY:Special Ability TYPE:GM_Award.SpecialQuality DESC:GM awarded PC with 1 class skill. STACK:YES MULT:YES CHOOSE:ABILITYSELECTION|Class Skill|ANY ABILITY:Class Skill|AUTOMATIC|%LIST COST:0 Bypass Alignment Restricted Spells SORTKEY:Z_Award CATEGORY:Special Ability TYPE:GM_Award.SpecialQuality DESC:GM allows to bypass alignment restrictions on spells. BONUS:VAR|BypassProhibitSpellAlignment_Restriction|1|TYPE=Bypass COST:0 +Add Witch Patron SORTKEY:Z_Award CATEGORY:Special Ability TYPE:GM_Award.SpecialQuality DESC:GM awarded PC with +1 Patron. STACK:YES MULT:YES CHOOSE:NOCHOICE BONUS:ABILITYPOOL|Witch Patron|1 COST:0 + + ###Block: GM Award Bonus Spells known # Ability Name SORTKEY Category of Ability Type Description Stackable? Multiple? Choose Bonus to spell known/L +1 Level 1 Spell Known SORTKEY:Z_Award CATEGORY:Special Ability TYPE:SpecialQuality.GM Bonus Spell Known DESC:GM awarded PC with +1 level 1 spell known. STACK:YES MULT:YES CHOOSE:CLASS|SPELLCASTER BONUS:SPELLKNOWN|CLASS=%LIST;LEVEL=1|1 From 1ca57ee146927eac36db795b1bca5e6da25a1b50 Mon Sep 17 00:00:00 2001 From: Daniel Hathaway Date: Thu, 7 Dec 2023 13:10:41 -0800 Subject: [PATCH 030/142] DATA-4354: Sauran Shaman was adding the Fire domain when it should have added the Strength domain. --- .../roleplaying_game/ultimate_magic/um_abilities_class.lst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/pathfinder/paizo/roleplaying_game/ultimate_magic/um_abilities_class.lst b/data/pathfinder/paizo/roleplaying_game/ultimate_magic/um_abilities_class.lst index 5251a10111b..d207ee1f68c 100644 --- a/data/pathfinder/paizo/roleplaying_game/ultimate_magic/um_abilities_class.lst +++ b/data/pathfinder/paizo/roleplaying_game/ultimate_magic/um_abilities_class.lst @@ -1177,7 +1177,7 @@ Tongue of the Sun and Moon KEY:Reincarnated Druid ~ Tongue of the Sun and Moon C ###Block: Saurian Shaman archetype abilities # Ability Name Unique Key Category of Ability Type Define Description Ability Bonus Ability Pool Modify VAR Allowed Companions Source Page -Nature Bond KEY:Saurian Shaman ~ Nature Bond CATEGORY:Special Ability TYPE:DruidClassFeatures.ArchetypeDruid.SpecialQuality.NaturesBondAnimalCompanion.NaturesBondDruidDomain DEFINE:DruidAnimalTerrainDomainNotAllowed|0 DESC:If you choose an animal companion, you must select a dinosaur. If you choose a domain, you must choose from the Animal, Destruction, Fire, and War domains. BONUS:VAR|DruidAnimalTerrainDomainNotAllowed|1 BONUS:VAR|DruidAnimalAllowed,DruidDestructionAllowed,DruidFireAllowed,DruidWarAllowed,PreventDruidInquisitions|1|TYPE=DruidDomain SOURCEPAGE:p.39 +Nature Bond KEY:Saurian Shaman ~ Nature Bond CATEGORY:Special Ability TYPE:DruidClassFeatures.ArchetypeDruid.SpecialQuality.NaturesBondAnimalCompanion.NaturesBondDruidDomain DEFINE:DruidAnimalTerrainDomainNotAllowed|0 DESC:If you choose an animal companion, you must select a dinosaur. If you choose a domain, you must choose from the Animal, Destruction, Strength, and War domains. BONUS:VAR|DruidAnimalTerrainDomainNotAllowed|1 BONUS:VAR|DruidAnimalAllowed,DruidDestructionAllowed,DruidStrengthAllowed,DruidWarAllowed,PreventDruidInquisitions|1|TYPE=DruidDomain SOURCEPAGE:p.39 Wild Empathy KEY:Saurian Shaman ~ Wild Empathy CATEGORY:Special Ability TYPE:DruidClassFeatures.ArchetypeDruid.SpecialQuality.Extraordinary DESC:You can use your wild empathy ability with dinosaurs and reptiles as a full-round action with a +4 bonus. SOURCEPAGE:p.40 Totem Transformation KEY:Saurian Shaman ~ Totem Transformation CATEGORY:Special Ability TYPE:DruidClassFeatures.ArchetypeDruid.SpecialQuality.Supernatural DEFINE:TotemTransformationDuration|0 DESC:You may adopt an aspect of the saurian while retaining your normal form. You gain one of the following bonuses: movement (+10 enhancement bonus to land speed), scales (+2 natural armor bonus to AC), senses (low-light vision, scent), or natural weapons (bite [1d6], 2 claws [1d4] for a Medium druid, rake, +2 CMB to grapple). While using totem transformation, you may speak normally and can cast speak with animals (reptiles and dinosaurs only) at will. Using this ability is a standard action at 2nd level, a move action at 7th level, and a swift action at 12th level. You can use this ability for %1 minutes per day. These minutes do not need to be consecutive, but they must be used in 1-minute increments. This is a polymorph effect and cannot be used while you are using another polymorph effect, such as wild shape.|TotemTransformationDuration BONUS:VAR|TotemTransformationDuration|classlevel("Druid") SOURCEPAGE:p.40 Totemic Summons KEY:Saurian Shaman ~ Totemic Summons CATEGORY:Special Ability TYPE:DruidClassFeatures.ArchetypeDruid.SpecialQuality.Supernatural DEFINE:TotemicSummonsTempHP|0 DESC:You may cast summon nature's ally as a standard action when summoning reptiles and dinosaurs, and those summoned creatures gain %1 temporary hit points. You can apply the young template to any reptile or dinosaur to reduce the level of the summoning spell required by one. You can also increase the level of summoning required by one in order to apply either the advanced or the giant template, or increase it by two to apply both the advanced and giant templates.|TotemicSummonsTempHP BONUS:VAR|TotemicSummonsTempHP|classlevel("Druid") SOURCEPAGE:p.40 @@ -1188,8 +1188,8 @@ Saurian Shaman Bonus Feats CATEGORY:Internal DE CATEGORY=Special Ability|Nature's Bond ~ Animal Companion.MOD ABILITY:Special Ability|AUTOMATIC|Saurian Shaman ~ Animal Companion|PREABILITY:1,CATEGORY=Archetype,Druid Archetype ~ Saurian Shaman CATEGORY=Special Ability|Nature's Bond ~ Druid Domain.MOD ABILITY:Special Ability|AUTOMATIC|Saurian Shaman ~ Druid Domain|PREABILITY:1,CATEGORY=Archetype,Druid Archetype ~ Saurian Shaman -Animal Companion KEY:Saurian Shaman ~ Animal Companion CATEGORY:Special Ability TYPE:DruidClassFeatures.ArchetypeDruid.SpecialQuality.Animal Companion DEFINE:DruidAnimalTerrainDomainNotAllowed|0 DEFINE:AnimalCompanionMasterLVL|0 DESC:If you choose an animal companion, you must select a dinosaur. If you choose a domain, you must choose from the Animal, Destruction, Fire, and War domains. BONUS:VAR|DruidAnimalTerrainDomainNotAllowed|1 COMPANIONLIST:Animal Companion|RACESUBTYPE=AnimalCompanionDinosaur SOURCEPAGE:p.39 -Druid Domain KEY:Saurian Shaman ~ Druid Domain CATEGORY:Special Ability TYPE:DruidClassFeatures.ArchetypeDruid.SpecialQuality.DruidDomain DEFINE:DruidAnimalTerrainDomainNotAllowed|0 DESC:If you choose an animal companion, you must select a dinosaur. If you choose a domain, you must choose from the Animal, Destruction, Fire, and War domains. BONUS:VAR|DruidAnimalTerrainDomainNotAllowed|1 BONUS:VAR|DruidAnimalAllowed,DruidDestructionAllowed,DruidFireAllowed,DruidWarAllowed,PreventDruidInquisitions|1|TYPE=DruidDomain SOURCEPAGE:p.39 +Animal Companion KEY:Saurian Shaman ~ Animal Companion CATEGORY:Special Ability TYPE:DruidClassFeatures.ArchetypeDruid.SpecialQuality.Animal Companion DEFINE:DruidAnimalTerrainDomainNotAllowed|0 DEFINE:AnimalCompanionMasterLVL|0 DESC:If you choose an animal companion, you must select a dinosaur. If you choose a domain, you must choose from the Animal, Destruction, Strength, and War domains. BONUS:VAR|DruidAnimalTerrainDomainNotAllowed|1 COMPANIONLIST:Animal Companion|RACESUBTYPE=AnimalCompanionDinosaur SOURCEPAGE:p.39 +Druid Domain KEY:Saurian Shaman ~ Druid Domain CATEGORY:Special Ability TYPE:DruidClassFeatures.ArchetypeDruid.SpecialQuality.DruidDomain DEFINE:DruidAnimalTerrainDomainNotAllowed|0 DESC:If you choose an animal companion, you must select a dinosaur. If you choose a domain, you must choose from the Animal, Destruction, Strength, and War domains. BONUS:VAR|DruidAnimalTerrainDomainNotAllowed|1 BONUS:VAR|DruidAnimalAllowed,DruidDestructionAllowed,DruidStrengthAllowed,DruidWarAllowed,PreventDruidInquisitions|1|TYPE=DruidDomain SOURCEPAGE:p.39 ###Block: Shark Shaman archetype abilities # Ability Name Unique Key Category of Ability Type Define Description Ability Bonus Ability Pool Modify VAR Allowed Companions Source Page From 323fbc6e29aafeb59a9ab99aac9279aee96f8523 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Dec 2023 18:16:47 +1300 Subject: [PATCH 031/142] Bump com.github.spotbugs:spotbugs-annotations from 4.8.2 to 4.8.3 (#7028) Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.8.2 to 4.8.3. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.8.2...4.8.3) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 37e3b68ffd2..b46c5886580 100644 --- a/build.gradle +++ b/build.gradle @@ -259,7 +259,7 @@ dependencies { compileOnly group: 'org.jetbrains', name: 'annotations', version:'24.1.0' compileOnly group: 'com.yuvimasory', name: 'orange-extensions', version: '1.3.0' - compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.2' + compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.3' testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.1' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.1' From 6b278f0b4e5d67d494ff081f2a19aca6abe54222 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Dec 2023 18:17:03 +1300 Subject: [PATCH 032/142] Bump org.springframework:spring-beans from 6.1.1 to 6.1.2 (#7029) Bumps [org.springframework:spring-beans](https://github.com/spring-projects/spring-framework) from 6.1.1 to 6.1.2. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.1...v6.1.2) --- updated-dependencies: - dependency-name: org.springframework:spring-beans dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b46c5886580..a20751952ee 100644 --- a/build.gradle +++ b/build.gradle @@ -225,7 +225,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.15.1' implementation group: 'org.springframework', name: 'spring-web', version:'6.1.1' - implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.1' + implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.2' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.1' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' From bd444c2044bc84c03d2900f65553bebb2c816bed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Dec 2023 15:08:06 +1300 Subject: [PATCH 033/142] Bump org.springframework:spring-core from 6.1.1 to 6.1.2 (#7030) Bumps [org.springframework:spring-core](https://github.com/spring-projects/spring-framework) from 6.1.1 to 6.1.2. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.1...v6.1.2) --- updated-dependencies: - dependency-name: org.springframework:spring-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a20751952ee..b385631ca93 100644 --- a/build.gradle +++ b/build.gradle @@ -226,7 +226,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.1.1' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.2' - implementation group: 'org.springframework', name: 'spring-core', version:'6.1.1' + implementation group: 'org.springframework', name: 'spring-core', version:'6.1.2' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' implementation('org.apache.xmlgraphics:fop:2.9') From 82d982e8df8cc4b081272ed61114dc2331cec318 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Dec 2023 15:08:16 +1300 Subject: [PATCH 034/142] Bump org.springframework:spring-web from 6.1.1 to 6.1.2 (#7031) Bumps [org.springframework:spring-web](https://github.com/spring-projects/spring-framework) from 6.1.1 to 6.1.2. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.1...v6.1.2) --- updated-dependencies: - dependency-name: org.springframework:spring-web dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b385631ca93..2012272b857 100644 --- a/build.gradle +++ b/build.gradle @@ -224,7 +224,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.15.1' - implementation group: 'org.springframework', name: 'spring-web', version:'6.1.1' + implementation group: 'org.springframework', name: 'spring-web', version:'6.1.2' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.2' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.2' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' From 942d85b945988c543c2d6712d37d2a5e5ef305b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 13 Jan 2024 14:35:43 +1300 Subject: [PATCH 035/142] Bump org.springframework:spring-beans from 6.1.2 to 6.1.3 (#7038) Bumps [org.springframework:spring-beans](https://github.com/spring-projects/spring-framework) from 6.1.2 to 6.1.3. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.2...v6.1.3) --- updated-dependencies: - dependency-name: org.springframework:spring-beans dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 2012272b857..ba19c7b95fc 100644 --- a/build.gradle +++ b/build.gradle @@ -225,7 +225,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.15.1' implementation group: 'org.springframework', name: 'spring-web', version:'6.1.2' - implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.2' + implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.3' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.2' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' From 607ad82ba31bb04c03e1ed70f0cf1d6198814c29 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 13 Jan 2024 14:57:37 +1300 Subject: [PATCH 036/142] Bump org.springframework:spring-core from 6.1.2 to 6.1.3 (#7039) Bumps [org.springframework:spring-core](https://github.com/spring-projects/spring-framework) from 6.1.2 to 6.1.3. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.2...v6.1.3) --- updated-dependencies: - dependency-name: org.springframework:spring-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ba19c7b95fc..6cbb73b42ce 100644 --- a/build.gradle +++ b/build.gradle @@ -226,7 +226,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.1.2' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.3' - implementation group: 'org.springframework', name: 'spring-core', version:'6.1.2' + implementation group: 'org.springframework', name: 'spring-core', version:'6.1.3' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' implementation('org.apache.xmlgraphics:fop:2.9') From 811332223934bd16cb1be0711a9c279e245aca9c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 13 Jan 2024 14:57:58 +1300 Subject: [PATCH 037/142] Bump org.springframework:spring-web from 6.1.2 to 6.1.3 (#7040) Bumps [org.springframework:spring-web](https://github.com/spring-projects/spring-framework) from 6.1.2 to 6.1.3. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.2...v6.1.3) --- updated-dependencies: - dependency-name: org.springframework:spring-web dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 6cbb73b42ce..78f449b4467 100644 --- a/build.gradle +++ b/build.gradle @@ -224,7 +224,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.15.1' - implementation group: 'org.springframework', name: 'spring-web', version:'6.1.2' + implementation group: 'org.springframework', name: 'spring-web', version:'6.1.3' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.3' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.3' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' From dadfdeb0a4755076c6610edb9025c94b0b7aa198 Mon Sep 17 00:00:00 2001 From: LegacyKing Date: Thu, 18 Jan 2024 21:12:12 -0800 Subject: [PATCH 038/142] DATA-4356 Voidkin Kitsune Sacred Study + Nine-Tailed Inheritor missing (Kitsune Compendium) --- .../egkc_abilities_race.lst | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/data/pathfinder/everyman_gaming/kitsune_compendium/egkc_abilities_race.lst b/data/pathfinder/everyman_gaming/kitsune_compendium/egkc_abilities_race.lst index 16a1ff89e10..c0ed9bcccac 100644 --- a/data/pathfinder/everyman_gaming/kitsune_compendium/egkc_abilities_race.lst +++ b/data/pathfinder/everyman_gaming/kitsune_compendium/egkc_abilities_race.lst @@ -8,24 +8,24 @@ SOURCELONG:Kitsune Compendium SOURCESHORT:EGKC SOURCEWEB:http://www.everymangami # ============================== # Ability Name Unique Key Category of Ability Type Visible Required Ability Restricted Ability Required Class Multiple Requirements Required Race Required Template Define Innate Spells Description Stackable? Multiple? Choose Template Ability Bonus Ability Pool Caster level Combat bonus Bonus to HP Add to base move Save bonus Bonus to skill Bonus to skill rank Modify VAR Class Skill Cost Source Page Aspects -Affable KEY:Kitsune ~ Affable CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Affable],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Many kitsune are warmly cordial and easy to converse with. A kitsune with this racial trait gains a +1 racial bonus on Bluff, Diplomacy, and Knowledge (local) checks and one of these skills is always a class skill for him. STACK:NO MULT:YES CHOOSE:NUMCHOICES=1|SKILL|Bluff|Diplomacy|Knowledge (local) BONUS:SKILL|Bluff,Diplomacy,Knowledge (local)|1|TYPE=Racial CSKILL:LIST COST:0 SOURCEPAGE:p.7 -Aurora Magic KEY:Kitsune ~ Aurora Magic CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Extraordinary.SpellLike.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Aurora Magic],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Waterkin SPELLS:Innate|TIMES=1|CASTERLEVEL=TL|Color Spray,11+CHA|PRESTAT:1,CHA=11 DESC:Waterkin kitsune treat their caster level as +1 higher when casting pattern spells. Waterkin with a Charisma of 11 or higher gain the following spell-like ability: 1/day-color spray. BONUS:CASTERLEVEL|SUBSCHOOL.Pattern|1 COST:0 SOURCEPAGE:p.17 -Desert Runner KEY:Kitsune ~ Desert Runner CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Desert Runner],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Firekin DESC:Firekin kitsune receive a +4 racial bonus on Constitution checks and Fortitude saves to avoid fatigue and exhaustion, as well as any other ill effects from running, forced marches, starvation, thirst, and hot or cold environments. COST:0 SOURCEPAGE:p.16 -Eidetic KEY:Kitsune ~ Eidetic CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Eidetic],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Many kitsune have an uncanny memory for visual images. The kitsune gains a +1 racial bonus on Perception and Sense Motive checks. BONUS:SKILL|Perception,Sense Motive|1|TYPE=Racial COST:0 SOURCEPAGE:p.7 -Fey Sorcery KEY:Kitsune ~ Fey Sorcery CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Fey Sorcery],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] DESC:[NOT IMPLEMENTED] Many kitsune possess traces of fey blood in their bloodlines. If the kitsune is a sorcerer with the Fey or Kitsune bloodline, he treats his caster level as 1 higher when casting bonus spells and bloodline powers and he increases the saving throw DC of his bloodline spells and bloodline powers by +1. This trait does not give the kitsune early access to level-based powers; it only affects powers that he could already use without this trait. COST:0 SOURCEPAGE:p.7 -Heritage Focus KEY:Kitsune ~ Heritage Focus CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Heritage Focus],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] PRETEMPLATE:1,Voidkin DESC:A voidkin kitsune gains Skill Focus as a bonus feat at 1st level. He must choose Disguise, Knowledge (nature), or Stealth as his chosen skill with this feat. In addition, the chosen skill is always a class skill for the voidkin. BONUS:ABILITYPOOL|Heritage Focus Skill Focus|1 COST:0 SOURCEPAGE:p.16 -Kitsune Chakra KEY:Kitsune ~ Kitsune Chakra CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Kitsune Chakra],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] DESC:Some kitsune are born with a natural wellspring of ki, supernatural energy that can be used to perform amazing feats. The kitsune can spend 1 point from his ki pool as a swift action before making an ability or skill check in order to gain a +2 bonus on the check. Additionally, kitsune with this racial trait have a ki pool with %1 points to activate this ability with. If he already has a ki pool from another source, the kitsune does not gain ki points from this ability but may use ki points from other sources to activate it instead.|1+TL/4 COST:0 SOURCEPAGE:p.7 -Natural Finesse KEY:Kitsune ~ Natural Finesse CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneNaturalWeapons PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Natural Finesse],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneNaturalWeapons] DESC:Sophisticated kitsune hone graceful and precise movements at the expense of their skill with their natural attacks. The kitsune gains Weapon Finesse as a bonus feat at 1st level. ABILITY:FEAT|AUTOMATIC|Weapon Finesse COST:0 SOURCEPAGE:p.7 -Naturalized KEY:Kitsune ~ Naturalized CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Naturalized],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Kitsune who live their entire lives around humans are able to perfectly mimic how humans talk, act, and think. While in human form, the kitsune no longer needs to make Disguise checks in order to appear human and he can take 10 on Bluff checks to convince others that he is human. COST:0 SOURCEPAGE:p.7 -Nimble Dash KEY:Kitsune ~ Nimble Dash CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Nimble Dash],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Kitsune are light on their feet and capable of quick movement in a pinch thanks to their lithe bodies and limber frames. The kitsune gains Run as a bonus feat at 1st level. Additionally, the kitsune receives a +5 foot bonus to his speed when using the charge, run, or withdrawal actions. In his true form, this bonus increases to +10 feet. ABILITY:FEAT|AUTOMATIC|Run COST:0 SOURCEPAGE:p.7 -Nine-Tailed Inheritor KEY:Kitsune ~ Nine-Tailed Inheritor CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Supernatural.KitsuneNaturalWeapons PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Nine-Tailed Inheritor],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneNaturalWeapons] DESC:The kitsune is a wellspring of magical energy that manifests as additional tails. The kitsune gains Magical Tail as a bonus feat at 1st level. In addition, he adds Magical Tail to all class lists of bonus feats as initial feat choices for those lists, including all ranger combat styles and all sorcerer bloodlines. For example, a monk can select Magical Tail when he gains his first bonus feat at 1st level while a ranger can select it when he gains his first combat style feat at 2nd level. Additionally, the kitsune treats Magical Tail as all types of feats (except teamwork) when determining which feats he can select with a class’s bonus feats feature. A kitsune with this racial trait cannot select Magical Tail as a class bonus feat and as a feat from character advancement during the same level. ABILITY:FEAT|AUTOMATIC|Magical Tail COST:0 SOURCEPAGE:p.19 -Prankster KEY:Kitsune ~ Prankster CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Prankster],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] DESC:Kitsune pranksters are experts at fooling and tricking others. A kitsune gains a +1 racial bonus on Bluff and Sleight of Hand checks and one of these skills is always a class skill for him. STACK:NO MULT:YES CHOOSE:NUMCHOICES=1|SKILL|Bluff|Sleight of Hand BONUS:SKILL|Bluff,Sleight of Hand|1|TYPE=Racial CSKILL:LIST COST:0 SOURCEPAGE:p.7 -Sacred Study KEY:Kitsune ~ Sacred Study CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Sacred Study],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] PRETEMPLATE:1,Voidkin DESC:[UNABLE TO RESTRICT CHOICES] A voidkin kitsune must select a divine spellcasting class as his favored class. He may not select archetypes that replace or diminish his favored class's ability to cast divine spells. Treat the voidkin's caster level as +1 higher when casting divine spells from his favored class. BONUS:CASTERLEVEL|TYPE.Divine|1 COST:0 SOURCEPAGE:p.16 -Shifting Mind KEY:Kitsune ~ Shifting Mind CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Shifting Mind],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] DESC:A kitsune's shapeshifting abilities make him resistant to mental attacks. The kitsune gains a +2 bonus on Will saves. Additionally, once per day the kitsune can roll twice when making a Will save and use the better result. He must choose to use this ability before attempting the saving throw. BONUS:SAVE|Will|2|TYPE=Racial COST:0 SOURCEPAGE:p.7 -Skulker KEY:Kitsune ~ Skulker CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Skulker],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Kitsune are able to hide undetected from others with ease. The kitsune gains a +1 racial bonus on Stealth checks and Stealth is always a class skill for him. BONUS:SKILL|Stealth|1|TYPE=Racial CSKILL:Stealth COST:0 SOURCEPAGE:p.7 -Sure Step KEY:Kitsune ~ Sure Step CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Extraordinary.SpellLike.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Sure Step],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Windkin DESC:Windkin are immune to altitude sickness and do not lost their Dexterity bonus to AC when making Climb checks or Acrobatics checks to cross narrow or slippery surfaces. In addition, windkin receive a +4 racial bonus to their CMD when resisting bull rush or trip attempts while standing on the ground. COST:0 SOURCEPAGE:p.17 -Versatility (Two Favored Classes) KEY:Kitsune ~ Versatility (Two Favored) CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Versatility (Two Favored)],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Earthkin DESC:Earthkin kitsune may choose two favored classes at 1st level and gain +1 hit points or +1 skill rank whenever they take a level in either of those classes. BONUS:ABILITYPOOL|Favored Class|1 SOURCEPAGE:p.16 -Versatility (Bonus HP and Skill) KEY:Kitsune ~ Versatility (HP and Skill) CATEGORY:Special Ability TYPE:RacialTrait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Versatility (HP and Skill)],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Earthkin DESC:An earthkin may choose to gain both +1 hit point and +1 skill rank when he gains a level in his favored class instead of choosing either one or the other benefit or he can choose an alternate class reward. SOURCEPAGE:p.16 +Affable KEY:Kitsune ~ Affable CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Affable],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Many kitsune are warmly cordial and easy to converse with. A kitsune with this racial trait gains a +1 racial bonus on Bluff, Diplomacy, and Knowledge (local) checks and one of these skills is always a class skill for him. STACK:NO MULT:YES CHOOSE:NUMCHOICES=1|SKILL|Bluff|Diplomacy|Knowledge (local) BONUS:SKILL|Bluff,Diplomacy,Knowledge (local)|1|TYPE=Racial CSKILL:LIST COST:0 SOURCEPAGE:p.7 +Aurora Magic KEY:Kitsune ~ Aurora Magic CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.SpellLike.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Aurora Magic],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Waterkin SPELLS:Innate|TIMES=1|CASTERLEVEL=TL|Color Spray,11+CHA|PRESTAT:1,CHA=11 DESC:Waterkin kitsune treat their caster level as +1 higher when casting pattern spells. Waterkin with a Charisma of 11 or higher gain the following spell-like ability: 1/day-color spray. BONUS:CASTERLEVEL|SUBSCHOOL.Pattern|1 COST:0 SOURCEPAGE:p.17 +Desert Runner KEY:Kitsune ~ Desert Runner CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Desert Runner],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Firekin DESC:Firekin kitsune receive a +4 racial bonus on Constitution checks and Fortitude saves to avoid fatigue and exhaustion, as well as any other ill effects from running, forced marches, starvation, thirst, and hot or cold environments. COST:0 SOURCEPAGE:p.16 +Eidetic KEY:Kitsune ~ Eidetic CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Eidetic],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Many kitsune have an uncanny memory for visual images. The kitsune gains a +1 racial bonus on Perception and Sense Motive checks. BONUS:SKILL|Perception,Sense Motive|1|TYPE=Racial COST:0 SOURCEPAGE:p.7 +Fey Sorcery KEY:Kitsune ~ Fey Sorcery CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Fey Sorcery],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] DESC:[NOT IMPLEMENTED] Many kitsune possess traces of fey blood in their bloodlines. If the kitsune is a sorcerer with the Fey or Kitsune bloodline, he treats his caster level as 1 higher when casting bonus spells and bloodline powers and he increases the saving throw DC of his bloodline spells and bloodline powers by +1. This trait does not give the kitsune early access to level-based powers; it only affects powers that he could already use without this trait. COST:0 SOURCEPAGE:p.7 +Heritage Focus KEY:Kitsune ~ Heritage Focus CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Heritage Focus],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] PRETEMPLATE:1,Voidkin DESC:A voidkin kitsune gains Skill Focus as a bonus feat at 1st level. He must choose Disguise, Knowledge (nature), or Stealth as his chosen skill with this feat. In addition, the chosen skill is always a class skill for the voidkin. BONUS:ABILITYPOOL|Heritage Focus Skill Focus|1 COST:0 SOURCEPAGE:p.16 +Kitsune Chakra KEY:Kitsune ~ Kitsune Chakra CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Kitsune Chakra],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] DESC:Some kitsune are born with a natural wellspring of ki, supernatural energy that can be used to perform amazing feats. The kitsune can spend 1 point from his ki pool as a swift action before making an ability or skill check in order to gain a +2 bonus on the check. Additionally, kitsune with this racial trait have a ki pool with %1 points to activate this ability with. If he already has a ki pool from another source, the kitsune does not gain ki points from this ability but may use ki points from other sources to activate it instead.|1+TL/4 COST:0 SOURCEPAGE:p.7 +Natural Finesse KEY:Kitsune ~ Natural Finesse CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneNaturalWeapons PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Natural Finesse],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneNaturalWeapons] DESC:Sophisticated kitsune hone graceful and precise movements at the expense of their skill with their natural attacks. The kitsune gains Weapon Finesse as a bonus feat at 1st level. ABILITY:FEAT|AUTOMATIC|Weapon Finesse COST:0 SOURCEPAGE:p.7 +Naturalized KEY:Kitsune ~ Naturalized CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Naturalized],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Kitsune who live their entire lives around humans are able to perfectly mimic how humans talk, act, and think. While in human form, the kitsune no longer needs to make Disguise checks in order to appear human and he can take 10 on Bluff checks to convince others that he is human. COST:0 SOURCEPAGE:p.7 +Nimble Dash KEY:Kitsune ~ Nimble Dash CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Nimble Dash],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Kitsune are light on their feet and capable of quick movement in a pinch thanks to their lithe bodies and limber frames. The kitsune gains Run as a bonus feat at 1st level. Additionally, the kitsune receives a +5 foot bonus to his speed when using the charge, run, or withdrawal actions. In his true form, this bonus increases to +10 feet. ABILITY:FEAT|AUTOMATIC|Run COST:0 SOURCEPAGE:p.7 +Nine-Tailed Inheritor KEY:Kitsune ~ Nine-Tailed Inheritor CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Supernatural.KitsuneNaturalWeapons PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Nine-Tailed Inheritor],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneNaturalWeapons] DESC:The kitsune is a wellspring of magical energy that manifests as additional tails. The kitsune gains Magical Tail as a bonus feat at 1st level. In addition, he adds Magical Tail to all class lists of bonus feats as initial feat choices for those lists, including all ranger combat styles and all sorcerer bloodlines. For example, a monk can select Magical Tail when he gains his first bonus feat at 1st level while a ranger can select it when he gains his first combat style feat at 2nd level. Additionally, the kitsune treats Magical Tail as all types of feats (except teamwork) when determining which feats he can select with a class’s bonus feats feature. A kitsune with this racial trait cannot select Magical Tail as a class bonus feat and as a feat from character advancement during the same level. ABILITY:FEAT|AUTOMATIC|Magical Tail COST:0 SOURCEPAGE:p.19 +Prankster KEY:Kitsune ~ Prankster CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Prankster],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] DESC:Kitsune pranksters are experts at fooling and tricking others. A kitsune gains a +1 racial bonus on Bluff and Sleight of Hand checks and one of these skills is always a class skill for him. STACK:NO MULT:YES CHOOSE:NUMCHOICES=1|SKILL|Bluff|Sleight of Hand BONUS:SKILL|Bluff,Sleight of Hand|1|TYPE=Racial CSKILL:LIST COST:0 SOURCEPAGE:p.7 +Sacred Study KEY:Kitsune ~ Sacred Study CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Sacred Study],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] PRETEMPLATE:1,Voidkin DESC:[UNABLE TO RESTRICT CHOICES] A voidkin kitsune must select a divine spellcasting class as his favored class. He may not select archetypes that replace or diminish his favored class's ability to cast divine spells. Treat the voidkin's caster level as +1 higher when casting divine spells from his favored class. BONUS:CASTERLEVEL|TYPE.Divine|1 COST:0 SOURCEPAGE:p.16 +Shifting Mind KEY:Kitsune ~ Shifting Mind CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Shifting Mind],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] DESC:A kitsune's shapeshifting abilities make him resistant to mental attacks. The kitsune gains a +2 bonus on Will saves. Additionally, once per day the kitsune can roll twice when making a Will save and use the better result. He must choose to use this ability before attempting the saving throw. BONUS:SAVE|Will|2|TYPE=Racial COST:0 SOURCEPAGE:p.7 +Skulker KEY:Kitsune ~ Skulker CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Skulker],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Kitsune are able to hide undetected from others with ease. The kitsune gains a +1 racial bonus on Stealth checks and Stealth is always a class skill for him. BONUS:SKILL|Stealth|1|TYPE=Racial CSKILL:Stealth COST:0 SOURCEPAGE:p.7 +Sure Step KEY:Kitsune ~ Sure Step CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.SpellLike.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Sure Step],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Windkin DESC:Windkin are immune to altitude sickness and do not lost their Dexterity bonus to AC when making Climb checks or Acrobatics checks to cross narrow or slippery surfaces. In addition, windkin receive a +4 racial bonus to their CMD when resisting bull rush or trip attempts while standing on the ground. COST:0 SOURCEPAGE:p.17 +Versatility (Two Favored Classes) KEY:Kitsune ~ Versatility (Two Favored) CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Versatility (Two Favored)],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Earthkin DESC:Earthkin kitsune may choose two favored classes at 1st level and gain +1 hit points or +1 skill rank whenever they take a level in either of those classes. BONUS:ABILITYPOOL|Favored Class|1 SOURCEPAGE:p.16 +Versatility (Bonus HP and Skill) KEY:Kitsune ~ Versatility (HP and Skill) CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Versatility (HP and Skill)],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Earthkin DESC:An earthkin may choose to gain both +1 hit point and +1 skill rank when he gains a level in his favored class instead of choosing either one or the other benefit or he can choose an alternate class reward. SOURCEPAGE:p.16 ###Block: Heritage Focus Disguise KEY:Heritage Focus ~ Disguise CATEGORY:Internal ABILITY:FEAT|AUTOMATIC|Skill Focus (Disguise) CSKILL:Disguise From d42ae132a528e79a16db355dacd627721adc4bed Mon Sep 17 00:00:00 2001 From: LegacyKing Date: Thu, 18 Jan 2024 22:09:15 -0800 Subject: [PATCH 039/142] DATA-4356 Voidkin Kitsune Sacred Study + Nine-Tailed Inheritor missing (Kitsune Compendium) --- .../egkc_abilities_race.lst | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/data/pathfinder/everyman_gaming/kitsune_compendium/egkc_abilities_race.lst b/data/pathfinder/everyman_gaming/kitsune_compendium/egkc_abilities_race.lst index c0ed9bcccac..9363e1947b5 100644 --- a/data/pathfinder/everyman_gaming/kitsune_compendium/egkc_abilities_race.lst +++ b/data/pathfinder/everyman_gaming/kitsune_compendium/egkc_abilities_race.lst @@ -8,24 +8,24 @@ SOURCELONG:Kitsune Compendium SOURCESHORT:EGKC SOURCEWEB:http://www.everymangami # ============================== # Ability Name Unique Key Category of Ability Type Visible Required Ability Restricted Ability Required Class Multiple Requirements Required Race Required Template Define Innate Spells Description Stackable? Multiple? Choose Template Ability Bonus Ability Pool Caster level Combat bonus Bonus to HP Add to base move Save bonus Bonus to skill Bonus to skill rank Modify VAR Class Skill Cost Source Page Aspects -Affable KEY:Kitsune ~ Affable CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Affable],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Many kitsune are warmly cordial and easy to converse with. A kitsune with this racial trait gains a +1 racial bonus on Bluff, Diplomacy, and Knowledge (local) checks and one of these skills is always a class skill for him. STACK:NO MULT:YES CHOOSE:NUMCHOICES=1|SKILL|Bluff|Diplomacy|Knowledge (local) BONUS:SKILL|Bluff,Diplomacy,Knowledge (local)|1|TYPE=Racial CSKILL:LIST COST:0 SOURCEPAGE:p.7 -Aurora Magic KEY:Kitsune ~ Aurora Magic CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.SpellLike.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Aurora Magic],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Waterkin SPELLS:Innate|TIMES=1|CASTERLEVEL=TL|Color Spray,11+CHA|PRESTAT:1,CHA=11 DESC:Waterkin kitsune treat their caster level as +1 higher when casting pattern spells. Waterkin with a Charisma of 11 or higher gain the following spell-like ability: 1/day-color spray. BONUS:CASTERLEVEL|SUBSCHOOL.Pattern|1 COST:0 SOURCEPAGE:p.17 -Desert Runner KEY:Kitsune ~ Desert Runner CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Desert Runner],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Firekin DESC:Firekin kitsune receive a +4 racial bonus on Constitution checks and Fortitude saves to avoid fatigue and exhaustion, as well as any other ill effects from running, forced marches, starvation, thirst, and hot or cold environments. COST:0 SOURCEPAGE:p.16 -Eidetic KEY:Kitsune ~ Eidetic CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Eidetic],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Many kitsune have an uncanny memory for visual images. The kitsune gains a +1 racial bonus on Perception and Sense Motive checks. BONUS:SKILL|Perception,Sense Motive|1|TYPE=Racial COST:0 SOURCEPAGE:p.7 -Fey Sorcery KEY:Kitsune ~ Fey Sorcery CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Fey Sorcery],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] DESC:[NOT IMPLEMENTED] Many kitsune possess traces of fey blood in their bloodlines. If the kitsune is a sorcerer with the Fey or Kitsune bloodline, he treats his caster level as 1 higher when casting bonus spells and bloodline powers and he increases the saving throw DC of his bloodline spells and bloodline powers by +1. This trait does not give the kitsune early access to level-based powers; it only affects powers that he could already use without this trait. COST:0 SOURCEPAGE:p.7 -Heritage Focus KEY:Kitsune ~ Heritage Focus CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Heritage Focus],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] PRETEMPLATE:1,Voidkin DESC:A voidkin kitsune gains Skill Focus as a bonus feat at 1st level. He must choose Disguise, Knowledge (nature), or Stealth as his chosen skill with this feat. In addition, the chosen skill is always a class skill for the voidkin. BONUS:ABILITYPOOL|Heritage Focus Skill Focus|1 COST:0 SOURCEPAGE:p.16 -Kitsune Chakra KEY:Kitsune ~ Kitsune Chakra CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Kitsune Chakra],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] DESC:Some kitsune are born with a natural wellspring of ki, supernatural energy that can be used to perform amazing feats. The kitsune can spend 1 point from his ki pool as a swift action before making an ability or skill check in order to gain a +2 bonus on the check. Additionally, kitsune with this racial trait have a ki pool with %1 points to activate this ability with. If he already has a ki pool from another source, the kitsune does not gain ki points from this ability but may use ki points from other sources to activate it instead.|1+TL/4 COST:0 SOURCEPAGE:p.7 -Natural Finesse KEY:Kitsune ~ Natural Finesse CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneNaturalWeapons PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Natural Finesse],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneNaturalWeapons] DESC:Sophisticated kitsune hone graceful and precise movements at the expense of their skill with their natural attacks. The kitsune gains Weapon Finesse as a bonus feat at 1st level. ABILITY:FEAT|AUTOMATIC|Weapon Finesse COST:0 SOURCEPAGE:p.7 -Naturalized KEY:Kitsune ~ Naturalized CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Naturalized],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Kitsune who live their entire lives around humans are able to perfectly mimic how humans talk, act, and think. While in human form, the kitsune no longer needs to make Disguise checks in order to appear human and he can take 10 on Bluff checks to convince others that he is human. COST:0 SOURCEPAGE:p.7 -Nimble Dash KEY:Kitsune ~ Nimble Dash CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Nimble Dash],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Kitsune are light on their feet and capable of quick movement in a pinch thanks to their lithe bodies and limber frames. The kitsune gains Run as a bonus feat at 1st level. Additionally, the kitsune receives a +5 foot bonus to his speed when using the charge, run, or withdrawal actions. In his true form, this bonus increases to +10 feet. ABILITY:FEAT|AUTOMATIC|Run COST:0 SOURCEPAGE:p.7 -Nine-Tailed Inheritor KEY:Kitsune ~ Nine-Tailed Inheritor CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Supernatural.KitsuneNaturalWeapons PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Nine-Tailed Inheritor],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneNaturalWeapons] DESC:The kitsune is a wellspring of magical energy that manifests as additional tails. The kitsune gains Magical Tail as a bonus feat at 1st level. In addition, he adds Magical Tail to all class lists of bonus feats as initial feat choices for those lists, including all ranger combat styles and all sorcerer bloodlines. For example, a monk can select Magical Tail when he gains his first bonus feat at 1st level while a ranger can select it when he gains his first combat style feat at 2nd level. Additionally, the kitsune treats Magical Tail as all types of feats (except teamwork) when determining which feats he can select with a class’s bonus feats feature. A kitsune with this racial trait cannot select Magical Tail as a class bonus feat and as a feat from character advancement during the same level. ABILITY:FEAT|AUTOMATIC|Magical Tail COST:0 SOURCEPAGE:p.19 -Prankster KEY:Kitsune ~ Prankster CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Prankster],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] DESC:Kitsune pranksters are experts at fooling and tricking others. A kitsune gains a +1 racial bonus on Bluff and Sleight of Hand checks and one of these skills is always a class skill for him. STACK:NO MULT:YES CHOOSE:NUMCHOICES=1|SKILL|Bluff|Sleight of Hand BONUS:SKILL|Bluff,Sleight of Hand|1|TYPE=Racial CSKILL:LIST COST:0 SOURCEPAGE:p.7 -Sacred Study KEY:Kitsune ~ Sacred Study CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Sacred Study],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] PRETEMPLATE:1,Voidkin DESC:[UNABLE TO RESTRICT CHOICES] A voidkin kitsune must select a divine spellcasting class as his favored class. He may not select archetypes that replace or diminish his favored class's ability to cast divine spells. Treat the voidkin's caster level as +1 higher when casting divine spells from his favored class. BONUS:CASTERLEVEL|TYPE.Divine|1 COST:0 SOURCEPAGE:p.16 -Shifting Mind KEY:Kitsune ~ Shifting Mind CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Shifting Mind],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] DESC:A kitsune's shapeshifting abilities make him resistant to mental attacks. The kitsune gains a +2 bonus on Will saves. Additionally, once per day the kitsune can roll twice when making a Will save and use the better result. He must choose to use this ability before attempting the saving throw. BONUS:SAVE|Will|2|TYPE=Racial COST:0 SOURCEPAGE:p.7 -Skulker KEY:Kitsune ~ Skulker CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Skulker],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Kitsune are able to hide undetected from others with ease. The kitsune gains a +1 racial bonus on Stealth checks and Stealth is always a class skill for him. BONUS:SKILL|Stealth|1|TYPE=Racial CSKILL:Stealth COST:0 SOURCEPAGE:p.7 -Sure Step KEY:Kitsune ~ Sure Step CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.SpellLike.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Sure Step],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Windkin DESC:Windkin are immune to altitude sickness and do not lost their Dexterity bonus to AC when making Climb checks or Acrobatics checks to cross narrow or slippery surfaces. In addition, windkin receive a +4 racial bonus to their CMD when resisting bull rush or trip attempts while standing on the ground. COST:0 SOURCEPAGE:p.17 -Versatility (Two Favored Classes) KEY:Kitsune ~ Versatility (Two Favored) CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Versatility (Two Favored)],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Earthkin DESC:Earthkin kitsune may choose two favored classes at 1st level and gain +1 hit points or +1 skill rank whenever they take a level in either of those classes. BONUS:ABILITYPOOL|Favored Class|1 SOURCEPAGE:p.16 -Versatility (Bonus HP and Skill) KEY:Kitsune ~ Versatility (HP and Skill) CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Versatility (HP and Skill)],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Earthkin DESC:An earthkin may choose to gain both +1 hit point and +1 skill rank when he gains a level in his favored class instead of choosing either one or the other benefit or he can choose an alternate class reward. SOURCEPAGE:p.16 +Affable KEY:Kitsune ~ Affable CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile FACT:Kitsune_ReplaceAgile|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Affable],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Many kitsune are warmly cordial and easy to converse with. A kitsune with this racial trait gains a +1 racial bonus on Bluff, Diplomacy, and Knowledge (local) checks and one of these skills is always a class skill for him. STACK:NO MULT:YES CHOOSE:NUMCHOICES=1|SKILL|Bluff|Diplomacy|Knowledge (local) BONUS:SKILL|Bluff,Diplomacy,Knowledge (local)|1|TYPE=Racial CSKILL:LIST COST:0 SOURCEPAGE:p.7 +Aurora Magic KEY:Kitsune ~ Aurora Magic CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.SpellLike.KitsuneAgile FACT:Kitsune_ReplaceAgile|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Aurora Magic],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Waterkin SPELLS:Innate|TIMES=1|CASTERLEVEL=TL|Color Spray,11+CHA|PRESTAT:1,CHA=11 DESC:Waterkin kitsune treat their caster level as +1 higher when casting pattern spells. Waterkin with a Charisma of 11 or higher gain the following spell-like ability: 1/day-color spray. BONUS:CASTERLEVEL|SUBSCHOOL.Pattern|1 COST:0 SOURCEPAGE:p.17 +Desert Runner KEY:Kitsune ~ Desert Runner CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile FACT:Kitsune_ReplaceAgile|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Desert Runner],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Firekin DESC:Firekin kitsune receive a +4 racial bonus on Constitution checks and Fortitude saves to avoid fatigue and exhaustion, as well as any other ill effects from running, forced marches, starvation, thirst, and hot or cold environments. COST:0 SOURCEPAGE:p.16 +Eidetic KEY:Kitsune ~ Eidetic CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile FACT:Kitsune_ReplaceAgile|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Eidetic],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Many kitsune have an uncanny memory for visual images. The kitsune gains a +1 racial bonus on Perception and Sense Motive checks. BONUS:SKILL|Perception,Sense Motive|1|TYPE=Racial COST:0 SOURCEPAGE:p.7 +Fey Sorcery KEY:Kitsune ~ Fey Sorcery CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic FACT:Kitsune_ReplaceKitsuneMagic|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Fey Sorcery],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] DESC:[NOT IMPLEMENTED] Many kitsune possess traces of fey blood in their bloodlines. If the kitsune is a sorcerer with the Fey or Kitsune bloodline, he treats his caster level as 1 higher when casting bonus spells and bloodline powers and he increases the saving throw DC of his bloodline spells and bloodline powers by +1. This trait does not give the kitsune early access to level-based powers; it only affects powers that he could already use without this trait. COST:0 SOURCEPAGE:p.7 +Heritage Focus KEY:Kitsune ~ Heritage Focus CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic FACT:Kitsune_ReplaceKitsuneMagic|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Heritage Focus],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] PRETEMPLATE:1,Voidkin DESC:A voidkin kitsune gains Skill Focus as a bonus feat at 1st level. He must choose Disguise, Knowledge (nature), or Stealth as his chosen skill with this feat. In addition, the chosen skill is always a class skill for the voidkin. BONUS:ABILITYPOOL|Heritage Focus Skill Focus|1 COST:0 SOURCEPAGE:p.16 +Kitsune Chakra KEY:Kitsune ~ Kitsune Chakra CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic FACT:Kitsune_ReplaceKitsuneMagic|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Kitsune Chakra],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] DESC:Some kitsune are born with a natural wellspring of ki, supernatural energy that can be used to perform amazing feats. The kitsune can spend 1 point from his ki pool as a swift action before making an ability or skill check in order to gain a +2 bonus on the check. Additionally, kitsune with this racial trait have a ki pool with %1 points to activate this ability with. If he already has a ki pool from another source, the kitsune does not gain ki points from this ability but may use ki points from other sources to activate it instead.|1+TL/4 COST:0 SOURCEPAGE:p.7 +Natural Finesse KEY:Kitsune ~ Natural Finesse CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneNaturalWeapons FACT:Kitsune_ReplaceNaturalWeapons|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Natural Finesse],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneNaturalWeapons] DESC:Sophisticated kitsune hone graceful and precise movements at the expense of their skill with their natural attacks. The kitsune gains Weapon Finesse as a bonus feat at 1st level. ABILITY:FEAT|AUTOMATIC|Weapon Finesse COST:0 SOURCEPAGE:p.7 +Naturalized KEY:Kitsune ~ Naturalized CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile FACT:Kitsune_ReplaceAgile|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Naturalized],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Kitsune who live their entire lives around humans are able to perfectly mimic how humans talk, act, and think. While in human form, the kitsune no longer needs to make Disguise checks in order to appear human and he can take 10 on Bluff checks to convince others that he is human. COST:0 SOURCEPAGE:p.7 +Nimble Dash KEY:Kitsune ~ Nimble Dash CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile FACT:Kitsune_ReplaceAgile|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Nimble Dash],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Kitsune are light on their feet and capable of quick movement in a pinch thanks to their lithe bodies and limber frames. The kitsune gains Run as a bonus feat at 1st level. Additionally, the kitsune receives a +5 foot bonus to his speed when using the charge, run, or withdrawal actions. In his true form, this bonus increases to +10 feet. ABILITY:FEAT|AUTOMATIC|Run COST:0 SOURCEPAGE:p.7 +Nine-Tailed Inheritor KEY:Kitsune ~ Nine-Tailed Inheritor CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Supernatural.KitsuneNaturalWeapons FACT:Kitsune_ReplaceNaturalWeapons|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Nine-Tailed Inheritor],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneNaturalWeapons] DESC:The kitsune is a wellspring of magical energy that manifests as additional tails. The kitsune gains Magical Tail as a bonus feat at 1st level. In addition, he adds Magical Tail to all class lists of bonus feats as initial feat choices for those lists, including all ranger combat styles and all sorcerer bloodlines. For example, a monk can select Magical Tail when he gains his first bonus feat at 1st level while a ranger can select it when he gains his first combat style feat at 2nd level. Additionally, the kitsune treats Magical Tail as all types of feats (except teamwork) when determining which feats he can select with a class’s bonus feats feature. A kitsune with this racial trait cannot select Magical Tail as a class bonus feat and as a feat from character advancement during the same level. ABILITY:FEAT|AUTOMATIC|Magical Tail COST:0 SOURCEPAGE:p.19 +Prankster KEY:Kitsune ~ Prankster CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic FACT:Kitsune_ReplaceKitsuneMagic|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Prankster],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] DESC:Kitsune pranksters are experts at fooling and tricking others. A kitsune gains a +1 racial bonus on Bluff and Sleight of Hand checks and one of these skills is always a class skill for him. STACK:NO MULT:YES CHOOSE:NUMCHOICES=1|SKILL|Bluff|Sleight of Hand BONUS:SKILL|Bluff,Sleight of Hand|1|TYPE=Racial CSKILL:LIST COST:0 SOURCEPAGE:p.7 +Sacred Study KEY:Kitsune ~ Sacred Study CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic FACT:Kitsune_ReplaceKitsuneMagic|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Sacred Study],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] PRETEMPLATE:1,Voidkin DESC:[UNABLE TO RESTRICT CHOICES] A voidkin kitsune must select a divine spellcasting class as his favored class. He may not select archetypes that replace or diminish his favored class's ability to cast divine spells. Treat the voidkin's caster level as +1 higher when casting divine spells from his favored class. BONUS:CASTERLEVEL|TYPE.Divine|1 COST:0 SOURCEPAGE:p.16 +Shifting Mind KEY:Kitsune ~ Shifting Mind CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneMagic FACT:Kitsune_ReplaceKitsuneMagic|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Shifting Mind],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneMagic] DESC:A kitsune's shapeshifting abilities make him resistant to mental attacks. The kitsune gains a +2 bonus on Will saves. Additionally, once per day the kitsune can roll twice when making a Will save and use the better result. He must choose to use this ability before attempting the saving throw. BONUS:SAVE|Will|2|TYPE=Racial COST:0 SOURCEPAGE:p.7 +Skulker KEY:Kitsune ~ Skulker CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile FACT:Kitsune_ReplaceAgile|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Skulker],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] DESC:Kitsune are able to hide undetected from others with ease. The kitsune gains a +1 racial bonus on Stealth checks and Stealth is always a class skill for him. BONUS:SKILL|Stealth|1|TYPE=Racial CSKILL:Stealth COST:0 SOURCEPAGE:p.7 +Sure Step KEY:Kitsune ~ Sure Step CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.SpellLike.KitsuneAgile FACT:Kitsune_ReplaceAgile|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Sure Step],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Windkin DESC:Windkin are immune to altitude sickness and do not lost their Dexterity bonus to AC when making Climb checks or Acrobatics checks to cross narrow or slippery surfaces. In addition, windkin receive a +4 racial bonus to their CMD when resisting bull rush or trip attempts while standing on the ground. COST:0 SOURCEPAGE:p.17 +Versatility (Two Favored Classes) KEY:Kitsune ~ Versatility (Two Favored) CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile FACT:Kitsune_ReplaceAgile|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Versatility (Two Favored)],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Earthkin DESC:Earthkin kitsune may choose two favored classes at 1st level and gain +1 hit points or +1 skill rank whenever they take a level in either of those classes. BONUS:ABILITYPOOL|Favored Class|1 SOURCEPAGE:p.16 +Versatility (Bonus HP and Skill) KEY:Kitsune ~ Versatility (HP and Skill) CATEGORY:Special Ability TYPE:RacialTrait.Kitsune Racial Trait.KitsuneRacialTrait.SpecialQuality.Extraordinary.KitsuneAgile FACT:Kitsune_ReplaceAgile|true PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune ~ Versatility (HP and Skill)],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.KitsuneAgile] PRETEMPLATE:1,Earthkin DESC:An earthkin may choose to gain both +1 hit point and +1 skill rank when he gains a level in his favored class instead of choosing either one or the other benefit or he can choose an alternate class reward. SOURCEPAGE:p.16 ###Block: Heritage Focus Disguise KEY:Heritage Focus ~ Disguise CATEGORY:Internal ABILITY:FEAT|AUTOMATIC|Skill Focus (Disguise) CSKILL:Disguise @@ -43,11 +43,11 @@ CATEGORY=Special Ability|Favored Class Bonus ~ Skill Rank.MOD CATEGORY=Internal|Racial Traits ~ Kitsune.MOD BONUS:ABILITYPOOL|Kitsune Racial Subtype|1 -Earthkin (Standard Kitsune) KEY:Kitsune Racial Subtype ~ Earthkin CATEGORY:Special Ability TYPE:Kitsune Racial Subtype.SpecialQuality PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune Racial Subtype ~ Earthkin],[!PREFACT:1,ABILITIES,Kitsune_ReplaceAgile=True] DESC:By far the most populous of kitsune, earthkin can be found living in virtually any region inhabited by humans. Outsiders are more likely to encounter earthkin than any other kitsune clan, and as a result earthkin attributes are considered standard and other clans deviations from their norm. Kitsune of all ilk refute such foolishness, but admittedly understand where the misconception arises from. Earthkin have become dominant among kitsune because of their versatility. Rather than adapting to one specific environment, earthkin are flexible enough to excel anywhere. Furthermore, earthkin are more likely to wander than members of other kitsune are and the image of the capricious, wandering kitsune almost exclusively applies to earthkin, though their wandering has significantly aided their clan's expansiveness. Earthkin vary heavily in appearance and can be encountered with all of the fur colors of other kitsune clans. Earthkin tend to be average in appearance compared to the other clans and have no remarkable features by comparison. TEMPLATE:Earthkin BONUS:ABILITYPOOL|Kitsune Versatility|1 FACT:Kitsune_ReplaceAgile|True SOURCEPAGE:p.16 -Firekin (Desert Kitsune) KEY:Kitsune Racial Subtype ~ Firekin CATEGORY:Special Ability TYPE:Kitsune Racial Subtype.SpecialQuality PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune Racial Subtype ~ Firekin],[!PREFACT:1,ABILITIES,Kitsune_ReplaceAgile=True] DESC:Firekin inhabit the sandy deserts of the world. According to their songs and stories, firekin once lived peacefully amidst the sands until human kingdoms encroached upon their lands, forcing them to fully integrate among humans to avoid battling them for resources. For this reason, firekin tend to be more vengeful than other kitsune when slighted and revel in the fear and superstition that humans have of them. Although not inherently evil, firekin have less respect for laws than other kitsune and often ignore legal processes, especially when enraged. Firekin are slightly shorter than kitsune of other clans and possess enlarged ears and puffy, fulvous fur. These adaptations help a firekin to deflect and release heat during the day and keep warm during the frigid night. TEMPLATE:Firekin ABILITY:Special Ability|AUTOMATIC|Kitsune ~ Desert Runner FACT:Kitsune_ReplaceAgile|True SOURCEPAGE:p.16 -Voidkin (Aberrant Kitsune) KEY:Kitsune Racial Subtype ~ Voidkin CATEGORY:Special Ability TYPE:Kitsune Racial Subtype.SpecialQuality PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune Racial Subtype ~ Voidkin],[!PREFACT:1,ABILITIES,Kitsune_ReplaceKitsuneMagic=True] DESC:Voidkin possess a unique place among the different kitsune subraces, for voidkin are considered either blessed or cursed. A voidkin's traits are identical to any one of the other four types of kitsune detailed here except for one detail-the color of their fur. Voidkin possess either snowy white or shadowy fur, with white fur symbolizing divine blessings and black fur revealing a spiritual uncleanliness or a taint in the kitsune's bloodline. Although both types of voidkin are considered two halves of the same whole, white-furred voidkin enjoy popularity among their ilk while black-furred voidkin are pitied as if they had some terminal illness. However, black-furred voidkin enjoy much more freedom then white-furred voidkin, who are expected to follow strict religious tradition after being spirited away for training. TEMPLATE:Voidkin ABILITY:Special Ability|AUTOMATIC|Kitsune ~ Heritage Focus|Kitsune ~ Sacred Study FACT:Kitsune_ReplaceKitsuneMagic|True SOURCEPAGE:p.16 -Waterkin (Arctic Kitsune) KEY:Kitsune Racial Subtype ~ Waterkin CATEGORY:Special Ability TYPE:Kitsune Racial Subtype.SpecialQuality PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune Racial Subtype ~ Waterkin],[!PREFACT:1,ABILITIES,Kitsune_ReplaceAgile=True] DESC:Native to the frozen wastes, waterkin thrive in the most deadly climates known to mortals. Waterkin are often somber and serious towards outsiders, reserving their cheer and laughter only for close companions and allies. Waterkin spend comparatively more time in their true forms than other kitsune races as a result of their decreased interactions with foreigners. Despite their cold demeanor, waterkin kitsune are generally benign and have been known to save strangers from certain doom on many an occasion. Waterkin are said to have close ties with the scintillating lights that glow in the northern sky and are able to produce similar effects to confound their enemies. Waterkin appear thicker than kitsune of other clans because of their fur, which is pale gray during the cold months and dark brown during warmer seasons. During the winter, their fur is warm enough that waterkin are able to survive the night in all but the most extreme cold without equipment if needed to. TEMPLATE:Waterkin ABILITY:Special Ability|AUTOMATIC|Kitsune ~ Aurora Magic FACT:Kitsune_ReplaceAgile|True SOURCEPAGE:p.17 -Windkin (Steppe Kitsune) KEY:Kitsune Racial Subtype ~ Windkin CATEGORY:Special Ability TYPE:Kitsune Racial Subtype.SpecialQuality PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune Racial Subtype ~ Windkin],[!PREFACT:1,ABILITIES,Kitsune_ReplaceAgile=True] DESC:Named for the scouring winds that sweep across their homes, windkin dwell in steppes and on mountains. Once nomadic, most windkin now dwell among humans, but stubborn windkin communities that cling to the old ways exist. Windkin are very relaxed compared to other kitsune and have a benign relationship with humans. They are less mischievous than other kitsune but are also much more reserved and slower to befriend others. They have strong ties to wildlife and are widely considered the most nature-conscious kitsune, but other kitsune consider them to be dreadfully plainspoken. Windkin are of average height and possess slightly larger ears then standard kitsune. Their fur is a medley of gray, brown, orange, and fulvous and most prefer to wear their hair long. Windkin often adorn themselves in ritualistic beads that they claim bolsters their connection to their community's ancestors, making them in-tune with nature and spirits alike. TEMPLATE:Windkin ABILITY:Special Ability|AUTOMATIC|Kitsune ~ Sure Step FACT:Kitsune_ReplaceAgile|True SOURCEPAGE:p.17 +Earthkin (Standard Kitsune) KEY:Kitsune Racial Subtype ~ Earthkin CATEGORY:Special Ability TYPE:Kitsune Racial Subtype.SpecialQuality PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune Racial Subtype ~ Earthkin],[!PREFACT:1,ABILITIES,Kitsune_ReplaceAgile=True] DESC:By far the most populous of kitsune, earthkin can be found living in virtually any region inhabited by humans. Outsiders are more likely to encounter earthkin than any other kitsune clan, and as a result earthkin attributes are considered standard and other clans deviations from their norm. Kitsune of all ilk refute such foolishness, but admittedly understand where the misconception arises from. Earthkin have become dominant among kitsune because of their versatility. Rather than adapting to one specific environment, earthkin are flexible enough to excel anywhere. Furthermore, earthkin are more likely to wander than members of other kitsune are and the image of the capricious, wandering kitsune almost exclusively applies to earthkin, though their wandering has significantly aided their clan's expansiveness. Earthkin vary heavily in appearance and can be encountered with all of the fur colors of other kitsune clans. Earthkin tend to be average in appearance compared to the other clans and have no remarkable features by comparison. TEMPLATE:Earthkin BONUS:ABILITYPOOL|Kitsune Versatility|1 FACT:Kitsune_ReplaceAgile|True SOURCEPAGE:p.16 +Firekin (Desert Kitsune) KEY:Kitsune Racial Subtype ~ Firekin CATEGORY:Special Ability TYPE:Kitsune Racial Subtype.SpecialQuality PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune Racial Subtype ~ Firekin],[!PREFACT:1,ABILITIES,Kitsune_ReplaceAgile=True] DESC:Firekin inhabit the sandy deserts of the world. According to their songs and stories, firekin once lived peacefully amidst the sands until human kingdoms encroached upon their lands, forcing them to fully integrate among humans to avoid battling them for resources. For this reason, firekin tend to be more vengeful than other kitsune when slighted and revel in the fear and superstition that humans have of them. Although not inherently evil, firekin have less respect for laws than other kitsune and often ignore legal processes, especially when enraged. Firekin are slightly shorter than kitsune of other clans and possess enlarged ears and puffy, fulvous fur. These adaptations help a firekin to deflect and release heat during the day and keep warm during the frigid night. TEMPLATE:Firekin ABILITY:Kitsune Racial Trait|AUTOMATIC|Kitsune ~ Desert Runner FACT:Kitsune_ReplaceAgile|True SOURCEPAGE:p.16 +Voidkin (Aberrant Kitsune) KEY:Kitsune Racial Subtype ~ Voidkin CATEGORY:Special Ability TYPE:Kitsune Racial Subtype.SpecialQuality PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune Racial Subtype ~ Voidkin],[!PREFACT:1,ABILITIES,Kitsune_ReplaceKitsuneMagic=True] DESC:Voidkin possess a unique place among the different kitsune subraces, for voidkin are considered either blessed or cursed. A voidkin's traits are identical to any one of the other four types of kitsune detailed here except for one detail-the color of their fur. Voidkin possess either snowy white or shadowy fur, with white fur symbolizing divine blessings and black fur revealing a spiritual uncleanliness or a taint in the kitsune's bloodline. Although both types of voidkin are considered two halves of the same whole, white-furred voidkin enjoy popularity among their ilk while black-furred voidkin are pitied as if they had some terminal illness. However, black-furred voidkin enjoy much more freedom then white-furred voidkin, who are expected to follow strict religious tradition after being spirited away for training. TEMPLATE:Voidkin ABILITY:Kitsune Racial Trait|AUTOMATIC|Kitsune ~ Heritage Focus|Kitsune ~ Sacred Study FACT:Kitsune_ReplaceKitsuneMagic|True SOURCEPAGE:p.16 +Waterkin (Arctic Kitsune) KEY:Kitsune Racial Subtype ~ Waterkin CATEGORY:Special Ability TYPE:Kitsune Racial Subtype.SpecialQuality PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune Racial Subtype ~ Waterkin],[!PREFACT:1,ABILITIES,Kitsune_ReplaceAgile=True] DESC:Native to the frozen wastes, waterkin thrive in the most deadly climates known to mortals. Waterkin are often somber and serious towards outsiders, reserving their cheer and laughter only for close companions and allies. Waterkin spend comparatively more time in their true forms than other kitsune races as a result of their decreased interactions with foreigners. Despite their cold demeanor, waterkin kitsune are generally benign and have been known to save strangers from certain doom on many an occasion. Waterkin are said to have close ties with the scintillating lights that glow in the northern sky and are able to produce similar effects to confound their enemies. Waterkin appear thicker than kitsune of other clans because of their fur, which is pale gray during the cold months and dark brown during warmer seasons. During the winter, their fur is warm enough that waterkin are able to survive the night in all but the most extreme cold without equipment if needed to. TEMPLATE:Waterkin ABILITY:Kitsune Racial Trait|AUTOMATIC|Kitsune ~ Aurora Magic FACT:Kitsune_ReplaceAgile|True SOURCEPAGE:p.17 +Windkin (Steppe Kitsune) KEY:Kitsune Racial Subtype ~ Windkin CATEGORY:Special Ability TYPE:Kitsune Racial Subtype.SpecialQuality PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Kitsune Racial Subtype ~ Windkin],[!PREFACT:1,ABILITIES,Kitsune_ReplaceAgile=True] DESC:Named for the scouring winds that sweep across their homes, windkin dwell in steppes and on mountains. Once nomadic, most windkin now dwell among humans, but stubborn windkin communities that cling to the old ways exist. Windkin are very relaxed compared to other kitsune and have a benign relationship with humans. They are less mischievous than other kitsune but are also much more reserved and slower to befriend others. They have strong ties to wildlife and are widely considered the most nature-conscious kitsune, but other kitsune consider them to be dreadfully plainspoken. Windkin are of average height and possess slightly larger ears then standard kitsune. Their fur is a medley of gray, brown, orange, and fulvous and most prefer to wear their hair long. Windkin often adorn themselves in ritualistic beads that they claim bolsters their connection to their community's ancestors, making them in-tune with nature and spirits alike. TEMPLATE:Windkin ABILITY:Kitsune Racial Trait|AUTOMATIC|Kitsune ~ Sure Step FACT:Kitsune_ReplaceAgile|True SOURCEPAGE:p.17 # ============================== # Kitsune Favored Class Bonuses From b4876f421975f6bca358f83c66f96e22fb681f2f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Jan 2024 22:17:16 +1300 Subject: [PATCH 040/142] Bump com.github.ben-manes.versions from 0.50.0 to 0.51.0 (#7045) Bumps com.github.ben-manes.versions from 0.50.0 to 0.51.0. --- updated-dependencies: - dependency-name: com.github.ben-manes.versions dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 78f449b4467..91144701796 100644 --- a/build.gradle +++ b/build.gradle @@ -31,7 +31,7 @@ plugins { id 'idea' // For IntelliJ IDEA users id "de.undercouch.download" version '5.5.0' // Shows download percentage id 'edu.sc.seis.launch4j' version '3.0.5' // Creates launch4j - id 'com.github.ben-manes.versions' version '0.50.0' // Checks versions for plugins and dependencies + id 'com.github.ben-manes.versions' version '0.51.0' // Checks versions for plugins and dependencies id "com.dorongold.task-tree" version '2.1.1' // Prints the task dependency tree id 'org.openjfx.javafxplugin' version '0.1.0' // JavaFX support id 'org.beryx.runtime' version '1.13.0' // Creates custom runtimes From 13665a837db10a11cc14cd1f4b8d3a099130d639 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Feb 2024 15:59:10 +1300 Subject: [PATCH 041/142] Bump org.junit.platform:junit-platform-launcher from 1.10.1 to 1.10.2 (#7048) Bumps [org.junit.platform:junit-platform-launcher](https://github.com/junit-team/junit5) from 1.10.1 to 1.10.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/commits) --- updated-dependencies: - dependency-name: org.junit.platform:junit-platform-launcher dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 91144701796..b366f552906 100644 --- a/build.gradle +++ b/build.gradle @@ -262,7 +262,7 @@ dependencies { compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.3' testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.1' - testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.1' + testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.2' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.1' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.1' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.1' From 95f808f746f68f6292844389d49e15fa6630dea5 Mon Sep 17 00:00:00 2001 From: mertonmonk <33469335+mertonmonk@users.noreply.github.com> Date: Tue, 6 Feb 2024 21:00:13 -0600 Subject: [PATCH 042/142] Fix min skill points from class issue for pfsrd (#7053) --- code/pluginbuild.xml | 7 +++ code/src/java/pcgen/core/PlayerCharacter.java | 8 +++ .../plugin/bonustokens/MinClassSkillPts.java | 61 +++++++++++++++++++ .../core_rulebook/cr__stats.lst | 2 +- 4 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 code/src/java/plugin/bonustokens/MinClassSkillPts.java diff --git a/code/pluginbuild.xml b/code/pluginbuild.xml index 5f249236501..ef1388eaa36 100644 --- a/code/pluginbuild.xml +++ b/code/pluginbuild.xml @@ -1264,6 +1264,13 @@ jar-all-plugins - Generate the plugin jar files + + + + + + + diff --git a/code/src/java/pcgen/core/PlayerCharacter.java b/code/src/java/pcgen/core/PlayerCharacter.java index 52be3f8f89f..9170ef7c908 100644 --- a/code/src/java/pcgen/core/PlayerCharacter.java +++ b/code/src/java/pcgen/core/PlayerCharacter.java @@ -9364,8 +9364,10 @@ public int recalcSkillPointMod(PCClass pcClass, final int characterLevel) { // int spMod = getSkillPoints(); int spMod = pcClass.getSafe(FormulaKey.START_SKILL_POINTS).resolve(this, pcClass.getQualifiedKey()).intValue(); + int classSp = spMod; // retain class based skillpoints mod spMod += (int) getTotalBonusTo("SKILLPOINTS", "NUMBER"); + int raceSp = spMod - classSp; // this should be the race based skillpoints mod if (pcClass.isMonster()) { @@ -9397,6 +9399,12 @@ else if (characterLevel == 1) } spMod = updateBaseSkillMod(pcClass, spMod); + int otherSp = spMod - classSp - raceSp; // should mostly be stat related skillpoints + final int classSpMin = (int) getTotalBonusTo("MINCLASSSKILLPOINTS", "NUMBER"); + // if a MINCLASSSKILLPOINTS.NUMBER is defined and spMod was lower due to INT penalty + if (classSpMin>0 && (classSp+otherSp + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package plugin.bonustokens; + +import pcgen.core.bonus.MultiTagBonusObj; + +/** + * Handles the BONUS:MINCLASSSKILLPOINTS token. + */ +public final class MinClassSkillPts extends MultiTagBonusObj +{ + private static final String[] BONUS_TAGS = {"NUMBER", "LOCKNUMBER"}; + + /** + * Return the bonus tag handled by this class. + * @return The bonus handled by this class. + */ + @Override + public String getBonusHandled() + { + return "MINCLASSSKILLPOINTS"; + } + + /** + * Get by index, an individual monster skill point attribute that may be bonused. + * @param tagNumber the index of the monster skill point attribute type. + * @see MultiTagBonusObj#getBonusTag(int) + * @return The type of monster skill point attribute . + */ + @Override + protected String getBonusTag(final int tagNumber) + { + return BONUS_TAGS[tagNumber]; + } + + /** + * Get the number of types of monster skill point attributes that may be bonused. + * @see MultiTagBonusObj#getBonusTag(int) + * @return The number of monster skill point attributes. + */ + @Override + protected int getBonusTagLength() + { + return BONUS_TAGS.length; + } +} diff --git a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr__stats.lst b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr__stats.lst index 9c6b13ce567..a8471116caf 100644 --- a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr__stats.lst +++ b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr__stats.lst @@ -4,6 +4,6 @@ Strength SORTKEY:1 ABB:STR KEY:STR STATMOD:floor(SCORE/2)-5 MODIFY:Score|SET|input("STATSCORE") MODIFY:Mod|SET|d20Mod(Score) MODIFY:STR|SET|Mod MODIFY:STRSCORE|SET|Score DEFINE:PreStatScore_STR|0 DEFINE:MAXLEVELSTAT=STR|STRSCORE-10 DEFINE:LOADSCORE|0 DEFINE:TWOHANDDAMAGEDIVISOR|0 DEFINE:OFFHANDLIGHTBONUS|0 DEFINE:RacialVision|0 DEFINE:OversizeWeaponToHitBonus|0 BONUS:COMBAT|TOHIT.Melee|STR|TYPE=Ability|PREVAREQ:DisableToHitMeleeStr,0 BONUS:COMBAT|DAMAGE.Melee,DAMAGE.Thrown|STR|TYPE=Ability BONUS:COMBAT|DAMAGEMULT:0|if(STR>0,0.5,1) BONUS:COMBAT|DAMAGEMULT:1|1 BONUS:COMBAT|DAMAGEMULT:2|if(STR>0,1.5,1) BONUS:COMBAT|DAMAGE.Splash|-STR|TYPE=Ability DEFINE:AltSTRSCORE|0 BONUS:VAR|PreStatScore_STR|max(STRSCORE,AltSTRSCORE)|TYPE=Base BONUS:VAR|LOADSCORE|STRSCORE BONUS:VAR|TWOHANDDAMAGEDIVISOR,OFFHANDLIGHTBONUS|2 BONUS:VAR|RacialVision|1|TYPE=Racial|!PREABILITY:1,CATEGORY=Special Ability,TYPE.Racial Vision ABILITY:Internal|AUTOMATIC|Default Dexterity SORTKEY:2 ABB:DEX KEY:DEX STATMOD:floor(SCORE/2)-5 MODIFY:Score|SET|input("STATSCORE") MODIFY:Mod|SET|d20Mod(Score) MODIFY:DEX|SET|Mod MODIFY:DEXSCORE|SET|Score DEFINE:PreStatScore_DEX|0 DEFINE:FeatDexRequirement|0 DEFINE:MAXLEVELSTAT=DEX|DEXSCORE-10 DEFINE:INITCOMP|0 DEFINE:ACAbilityStat|0 DEFINE:MXDXEN|0 DEFINE:FightingDefensivelyACBonus|0 DEFINE:FightingDefensivelyAC|0 DEFINE:TotalDefenseACBonus|0 DEFINE:TotalDefenseAC|0 BONUS:COMBAT|TOHIT.Ranged|DEX|TYPE=Ability|PREVAREQ:DisableToHitRangedDex,0 BONUS:COMBAT|AC|10|TYPE=Base BONUS:COMBAT|AC|min(ACAbilityStat, min(MXDXEN,MODEQUIPMAXDEX))|TYPE=Ability|PREVAREQ:ACStatNotDex,0 BONUS:COMBAT|AC|max(FightingDefensivelyAC,TotalDefenseAC)|TYPE=Dodge DEFINE:AltDEXSCORE|0 BONUS:VAR|PreStatScore_DEX|max(DEXSCORE,AltDEXSCORE)|TYPE=Base BONUS:VAR|INITCOMP|DEX BONUS:VAR|ACAbilityStat|DEX BONUS:VAR|MXDXEN|1000|PREVAREQ:ENCUMBERANCE,0 BONUS:VAR|MXDXEN|3|PREVAREQ:ENCUMBERANCE,1 BONUS:VAR|MXDXEN|1|PREVAREQ:ENCUMBERANCE,2 Constitution SORTKEY:3 ABB:CON KEY:CON STATMOD:floor(SCORE/2)-5 MODIFY:Score|SET|input("STATSCORE") MODIFY:Mod|SET|d20Mod(Score) MODIFY:CON|SET|Mod MODIFY:CONSCORE|SET|Score DEFINE:PreStatScore_CON|0 DEFINE:MAXLEVELSTAT=CON|CONSCORE-10 DEFINE:UseAlternateDamage|0 DEFINE:UseCombatManueverBonus|0 BONUS:HP|WOUNDPOINTS|CON BONUS:HP|BONUS|CON|PRERULE:1,DAMAGE_HP BONUS:HP|ALTHP|CONSCORE*2 DEFINE:AltCONSCORE|0 BONUS:VAR|PreStatScore_CON|max(CONSCORE,AltCONSCORE)|TYPE=Base BONUS:VAR|UseAlternateDamage|1|PRERULE:1,DAMAGE_VW BONUS:VAR|UseCombatManueverBonus|1|PRERULE:1,USE_CMB -Intelligence SORTKEY:4 ABB:INT KEY:INT STATMOD:floor(SCORE/2)-5 MODIFY:Score|SET|input("STATSCORE") MODIFY:Mod|SET|d20Mod(Score) MODIFY:INT|SET|Mod MODIFY:INTSCORE|SET|Score DEFINE:PreStatScore_INT|0 DEFINE:MAXLEVELSTAT=INT|MaxLevelStat_Int DEFINE:AdditionalLanguage|0 DEFINE:BonusRetroSkillPoints|0 DEFINE:MaxLevelStat_Int|0 DEFINE:AltINTSCORE|0 BONUS:VAR|PreStatScore_INT|max(INTSCORE,AltINTSCORE)|TYPE=Base BONUS:VAR|MaxLevelStat_Int|INTSCORE-10 BONUS:LANG|BONUS|max(INT,0)+var("AdditionalLanguage") BONUS:MODSKILLPOINTS|NUMBER|var("STAT.3.MOD.NOEQUIP.NOTEMP")+BonusRetroSkillPoints +Intelligence SORTKEY:4 ABB:INT KEY:INT STATMOD:floor(SCORE/2)-5 MODIFY:Score|SET|input("STATSCORE") MODIFY:Mod|SET|d20Mod(Score) MODIFY:INT|SET|Mod MODIFY:INTSCORE|SET|Score DEFINE:PreStatScore_INT|0 DEFINE:MAXLEVELSTAT=INT|MaxLevelStat_Int DEFINE:AdditionalLanguage|0 DEFINE:BonusRetroSkillPoints|0 DEFINE:MaxLevelStat_Int|0 DEFINE:AltINTSCORE|0 BONUS:VAR|PreStatScore_INT|max(INTSCORE,AltINTSCORE)|TYPE=Base BONUS:VAR|MaxLevelStat_Int|INTSCORE-10 BONUS:LANG|BONUS|max(INT,0)+var("AdditionalLanguage") BONUS:MODSKILLPOINTS|NUMBER|var("STAT.3.MOD.NOEQUIP.NOTEMP")+BonusRetroSkillPoints BONUS:MINCLASSSKILLPOINTS|NUMBER|1 Wisdom SORTKEY:5 ABB:WIS KEY:WIS STATMOD:floor(SCORE/2)-5 MODIFY:Score|SET|input("STATSCORE") MODIFY:Mod|SET|d20Mod(Score) MODIFY:WIS|SET|Mod MODIFY:WISSCORE|SET|Score DEFINE:PreStatScore_WIS|0 DEFINE:MAXLEVELSTAT=WIS|WISSCORE-10 DEFINE:AltWISSCORE|0 BONUS:VAR|PreStatScore_WIS|max(WISSCORE,AltWISSCORE)|TYPE=Base Charisma SORTKEY:6 ABB:CHA KEY:CHA STATMOD:floor(SCORE/2)-5 MODIFY:Score|SET|input("STATSCORE") MODIFY:Mod|SET|d20Mod(Score) MODIFY:CHA|SET|Mod MODIFY:CHASCORE|SET|Score DEFINE:PreStatScore_CHA|0 DEFINE:MAXLEVELSTAT=CHA|CHASCORE-10 DEFINE:BypassSizeMods|0 DEFINE:NormalMount|0 DEFINE:SizeIncrease|0 DEFINE:SizeDecrease|0 DEFINE:NormalFollower|0 BONUS:COMBAT|AC|min(CHA, min(MXDXEN,MODEQUIPMAXDEX))|TYPE=Ability|PREVAREQ:ACStatIsCha,1 DEFINE:AltCHASCORE|0 BONUS:VAR|PreStatScore_CHA|max(CHASCORE,AltCHASCORE)|TYPE=Base BONUS:VAR|NormalMount,NormalFollower|1 From 79c1722c3959ccbe53b7f465ce4f5b5719e6890d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Feb 2024 16:00:26 +1300 Subject: [PATCH 043/142] Bump org.junit.jupiter:junit-jupiter-engine from 5.10.1 to 5.10.2 (#7050) Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.10.1 to 5.10.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.1...r5.10.2) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b366f552906..2be15519fdd 100644 --- a/build.gradle +++ b/build.gradle @@ -265,7 +265,7 @@ dependencies { testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.2' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.1' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.1' - testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.1' + testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.2' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '2.2' testImplementation group: 'org.testfx', name: 'testfx-junit5', version: '4.0.17' // TODO openjfx-monocle is no longer updated and chances are openjfx-monocle doesn't work with latest OpenJFX From 8f5d542b596da83db2844ffd50454227a6695737 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Feb 2024 17:00:33 +1300 Subject: [PATCH 044/142] Bump org.junit.jupiter:junit-jupiter-api from 5.10.1 to 5.10.2 (#7052) Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.10.1 to 5.10.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.1...r5.10.2) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 2be15519fdd..5b8287cca1e 100644 --- a/build.gradle +++ b/build.gradle @@ -263,7 +263,7 @@ dependencies { testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.1' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.2' - testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.1' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.2' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.1' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.2' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '2.2' From f9243c1f830dcdef5734bd1215b0b60210fa270e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Feb 2024 17:13:30 +1300 Subject: [PATCH 045/142] Bump org.junit.jupiter:junit-jupiter-params from 5.10.1 to 5.10.2 (#7051) Bumps [org.junit.jupiter:junit-jupiter-params](https://github.com/junit-team/junit5) from 5.10.1 to 5.10.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.1...r5.10.2) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-params dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5b8287cca1e..c366ad30e7a 100644 --- a/build.gradle +++ b/build.gradle @@ -264,7 +264,7 @@ dependencies { testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.1' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.2' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.2' - testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.1' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.2' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.2' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '2.2' testImplementation group: 'org.testfx', name: 'testfx-junit5', version: '4.0.17' From 2838ec6200b08de1ddbc15dd126919e86250eba5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Feb 2024 17:13:38 +1300 Subject: [PATCH 046/142] Bump org.junit.platform:junit-platform-runner from 1.10.1 to 1.10.2 (#7049) Bumps [org.junit.platform:junit-platform-runner](https://github.com/junit-team/junit5) from 1.10.1 to 1.10.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/commits) --- updated-dependencies: - dependency-name: org.junit.platform:junit-platform-runner dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c366ad30e7a..42145ee81a2 100644 --- a/build.gradle +++ b/build.gradle @@ -261,7 +261,7 @@ dependencies { compileOnly group: 'com.yuvimasory', name: 'orange-extensions', version: '1.3.0' compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.3' - testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.1' + testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.2' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.2' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.2' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.2' From 28388fb7465253f82320ff838da139ffd9363f3f Mon Sep 17 00:00:00 2001 From: LegacyKing Date: Wed, 7 Feb 2024 09:09:12 -0800 Subject: [PATCH 047/142] Fix file format --- .../advanced_class_origins/OGL.txt | 2 +- .../agents_of_evil/agents_of_evil.jpg | Bin 6931 -> 10630 bytes .../champions_of_purity.jpg | Bin 14050 -> 20963 bytes .../cop_abilities_class.lst | 6 +++--- .../pathfinder_society_primer.jpeg | Bin 25425 -> 39963 bytes .../pathfinder_society_primer/pfsp_feats.lst | 12 ++++++------ .../mythic_adventures/MythicAdventures.jpeg | Bin 28994 -> 44636 bytes .../mythic_adventures/ma_equip.lst | 10 +++++----- .../pathfinder_unchained/OGL.txt | 6 +++--- .../pathfinder_unchained.jpg | Bin 7428 -> 11456 bytes .../ultimate_equipment/ultimate_equipment.jpg | Bin 15637 -> 23476 bytes 11 files changed, 18 insertions(+), 18 deletions(-) diff --git a/data/pathfinder/paizo/player_companion/advanced_class_origins/OGL.txt b/data/pathfinder/paizo/player_companion/advanced_class_origins/OGL.txt index 73042d15a38..8003cf89a01 100644 --- a/data/pathfinder/paizo/player_companion/advanced_class_origins/OGL.txt +++ b/data/pathfinder/paizo/player_companion/advanced_class_origins/OGL.txt @@ -32,7 +32,7 @@ The following text is the property of Wizards of the Coast, Inc. and is Copyrigh 15 COPYRIGHT NOTICE Open Game License v 1.0a Copyright 2000, Wizards of the Coast, Inc. -System Reference Document Copyright 2000, Wizards of the Coast, Inc; Authors: Jonathan Tweet, Monte Cook, and Skip Williams, based on material by E. Gary Gygax and Dave Arneson. +System Reference Document Copyright 2000, Wizards of the Coast, Inc; Authors: Jonathan Tweet, Monte Cook, and Skip Williams, based on material by E. Gary Gygax and Dave Arneson. Demon Lord, Baphomet from the Tome of Horrors Complete Copyright 2011, Necromancer Games, Inc., published and distributed by Frog God Games; Author: Scott Greene, based on material by Gary Gygax. Pathfinder Player Companion: Advanced Class Origins Copyright 2014, Paizo Inc.; Authors: Dennis Baker, Ross Byers, Tom Phillips, Stephen Radney-MacFarland, and Owen K.C. Stephens. PCGen dataset conversion for "Pathfinder Player Companion: Advanced Class Origins" Copyright 2017, PCGen Data team (Including, but not limited to Stefan Radermacher, Andrew Maitland, Vincent Hatakeyama, and Gwen T.). diff --git a/data/pathfinder/paizo/player_companion/agents_of_evil/agents_of_evil.jpg b/data/pathfinder/paizo/player_companion/agents_of_evil/agents_of_evil.jpg index 0c670231d1360de67938b462a000b8163e744f6c..a9312ec812f947b0d1c1b5a34051dd8b7d8ee6f2 100644 GIT binary patch literal 10630 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 X6~K7c1scN<|MyxHr(pOP;MD&Ea;`pA delta 6777 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 b{Xx{!)}HWTe~XZI3y-FzrlzI1bwB^vn|0&l diff --git a/data/pathfinder/paizo/player_companion/champions_of_purity/champions_of_purity.jpg b/data/pathfinder/paizo/player_companion/champions_of_purity/champions_of_purity.jpg index bcb4a1d8e77d207cea010f3a171535ba542d52dc..9fb548d8537c8eec00c73a90c479a1e9227c0fb4 100644 GIT binary patch literal 20963 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 JRd(Jl{vVje0%HIG diff --git a/data/pathfinder/paizo/player_companion/champions_of_purity/cop_abilities_class.lst b/data/pathfinder/paizo/player_companion/champions_of_purity/cop_abilities_class.lst index 05d1eb4f99d..80af325b275 100644 --- a/data/pathfinder/paizo/player_companion/champions_of_purity/cop_abilities_class.lst +++ b/data/pathfinder/paizo/player_companion/champions_of_purity/cop_abilities_class.lst @@ -27,9 +27,9 @@ Chastisement KEY:Domain Power ~ Chastisement CATEGORY:Special Ability TYPE:Spe # Revelry Subdomain Intense Celebration KEY:Domain Power ~ Intense Celebration CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural.DomainPower DESC:At 8th level, any spells you cast that confer a morale effect upon you or your allies are automatically affected as if by the Extend Spell metamagic feat with no increase in spell level. SOURCEPAGE:p.21 -###Block: CELESTIAL RAGE POWERS - While others rage in brutality or for the sheer love of violence, good barbarians’ fury is fuelled by a sense of justice and righteousness for which they live and die. -Celestial Totem KEY:Rage Power ~ Celestial Totem CATEGORY:Special Ability TYPE:BarbarianClassFeatures.ClassFeatures.RagePower.SpecialQuality DESC:While raging, the barbarian shines with a righteous light. This effect bestows upon the barbarian a halo of gleaming light that shines as if it were daylight and triggers an invisibility purge effect in the barbarian’s square and each adjacent square. The invisibility purge only affects nongood creatures. A barbarian must be at least 8th level to select this rage power. PREVARGTEQ:RagePowersPrereqLVL,8 -Celestial Totem, Greater KEY:Rage Power ~ Celestial Totem (Greater) CATEGORY:Special Ability TYPE:BarbarianClassFeatures.ClassFeatures.RagePower.SpecialQuality DESC:While raging, the barbarian gains spell resistance equal to 11 + the barbarian’s class level against spells with the evil descriptor. She also gains a +2 bonus on all saving throws against spells and effects from evil creatures. A barbarian must have the celestial totem rage power and be at least 12th level to select this rage power. PREVARGTEQ:RagePowersPrereqLVL,12 PREABILITY:1,CATEGORY=Special Ability,Rage Power ~ Celestial Totem +###Block: CELESTIAL RAGE POWERS - While others rage in brutality or for the sheer love of violence, good barbarians’ fury is fuelled by a sense of justice and righteousness for which they live and die. +Celestial Totem KEY:Rage Power ~ Celestial Totem CATEGORY:Special Ability TYPE:BarbarianClassFeatures.ClassFeatures.RagePower.SpecialQuality DESC:While raging, the barbarian shines with a righteous light. This effect bestows upon the barbarian a halo of gleaming light that shines as if it were daylight and triggers an invisibility purge effect in the barbarian’s square and each adjacent square. The invisibility purge only affects nongood creatures. A barbarian must be at least 8th level to select this rage power. PREVARGTEQ:RagePowersPrereqLVL,8 +Celestial Totem, Greater KEY:Rage Power ~ Celestial Totem (Greater) CATEGORY:Special Ability TYPE:BarbarianClassFeatures.ClassFeatures.RagePower.SpecialQuality DESC:While raging, the barbarian gains spell resistance equal to 11 + the barbarian’s class level against spells with the evil descriptor. She also gains a +2 bonus on all saving throws against spells and effects from evil creatures. A barbarian must have the celestial totem rage power and be at least 12th level to select this rage power. PREVARGTEQ:RagePowersPrereqLVL,12 PREABILITY:1,CATEGORY=Special Ability,Rage Power ~ Celestial Totem Celestial Totem, Lesser KEY:Rage Power ~ Celestial Totem (Lesser) CATEGORY:Special Ability TYPE:BarbarianClassFeatures.ClassFeatures.RagePower.SpecialQuality DESC:While raging, the barbarian benefits from increased magical healing. Whenever she is subject to a spell that cures hit point damage, she heals 1 additional point of damage per caster level. In the case of non-spell healing effects (such as channeled energy or lay on hands), she heals a number of additional points equal to the class level of the character performing the magical healing. This does not affect fast healing or regeneration. ###Block: diff --git a/data/pathfinder/paizo/player_companion/pathfinder_society_primer/pathfinder_society_primer.jpeg b/data/pathfinder/paizo/player_companion/pathfinder_society_primer/pathfinder_society_primer.jpeg index c6696709fb9d25416c5294891163caaf439104ac..4b677a5e23fdaf8ab86fcaeda7fe95b9bab6a535 100644 GIT binary patch literal 39963 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

T8CjtgLh{gAwY*C$FgI>M0@#R}Lo{m0AFQ6B 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 diff --git a/data/pathfinder/paizo/player_companion/pathfinder_society_primer/pfsp_feats.lst b/data/pathfinder/paizo/player_companion/pathfinder_society_primer/pfsp_feats.lst index b91645aa048..826b31734c6 100644 --- a/data/pathfinder/paizo/player_companion/pathfinder_society_primer/pfsp_feats.lst +++ b/data/pathfinder/paizo/player_companion/pathfinder_society_primer/pfsp_feats.lst @@ -7,20 +7,20 @@ Patient Strike CATEGORY:FEAT SOURCEPAGE:p.8 TYPE:Combat DESC:Your training und Steadfast Mind CATEGORY:FEAT SOURCEPAGE:p.8 TYPE:General DESC:You can concentrate even in the direst circumstances, and know how to retain your magic even when it would otherwise be wasted. PRETEXT:Prerequisite: Cha 15, Int 15, or Wis 15 (see special). PRESTAT:1,CHA=15,INT=15,WIS=15 BENEFIT:Whenever you fail a concentration check while casting defensively and would normally lose a prepared spell or spell slot, you may attempt a Will save (DC = 15 + spell level) to retain the spell as though you had not attempted to cast it. The failed concentration check still results in the spell's failure, even if the spell is retained. Special: To gain the benef its of this feat, you must meet the prerequisite that matches the ability score you use to determine your save DCs, bonus spells per day, and ability to cast spells of a given level. If you gain spells from multiple classes, you must meet the prerequisite ability score for each class to gain the benef its of this feat when casting spells from that class's spell list. Quick Preparation CATEGORY:FEAT SOURCEPAGE:p.9 TYPE:General DESC:Early on in your adventuring career, you learned (perhaps the hard way) how to prepare your spells even when put under extreme time constraints. PRETEXT:Prerequisite: Ability to prepare spells. BENEFIT:When preparing spells, you halve the time necessary to do so. Normal: Preparing all of your spells takes 1 hour. -Renown CATEGORY:FEAT SOURCEPAGE:p.9 TYPE:General DESC:Word of your pre-Pathf inder accomplishments precedes you, and you know how to make the most of your previous reputation. BENEFIT: When in a settlement of 5,000 people or more, treat your Fame score as 2 higher for the purposes of qualifying for Prestige Awards or purchasing equipment. This feat doesn’t grant you any additional Prestige Points. Normal: Your Fame score is determined by the total number of Prestige Points earned over the course of your career. -Versatile Spontaneity CATEGORY:FEAT SOURCEPAGE:p.9 TYPE:General DESC:You made a good name for yourself in the Pathf inder Society in part because you knew how to prepare for the challenges before you, even if your natural magical abilities lend themselves less to preparation and more to spontaneity. PRETEXT:Prerequisites: Int 13 or Wis 13 (see Special), ability to spontaneously cast 2nd-level spells. PRESTAT:1,INT=13,WIS=13 BENEFIT:When you regain spell slots at the start of the day, you may opt to prepare one spell you don’t know in place of a daily spell slot 1 level higher than the prepared spell’s level. To do so, you must have access to the selected spell on a scroll or in a spellbook, and the spell must be on your spell list (even if it is not one of your spells known). This process takes 10 minutes per spell level of the selected spell. You can cast the selected spell a single time, expending the spell slot as though it were a known spell being cast by you. Preparing a spell in this manner expends a scroll but not a spellbook. A spell prepared in this way is considered its actual level rather than the level of the spell slot expended. You can apply metamagic feats to the spell as normal, as long as the spell’s actual level plus the increases from metamagic feats is 1 level lower than the highest-level spell you can cast. For example, a 12th-level sorcerer with this feat, a scroll of fireball, and the Empower Spell metamagic feat could prepare an empowered fireball spell in her 6th-level spell slot. Special: If you spontaneously cast arcane spells, you must have an Intelligence score of at least 13 to take this feat. If you spontaneously cast divine spells, you must have a Wisdom score of at least 13 to take this feat. If you have both arcane and divine spellcasting classes, you can use this feat to prepare a spell using a given class’s spell slot as long as you meet the associated ability score prerequisite. +Renown CATEGORY:FEAT SOURCEPAGE:p.9 TYPE:General DESC:Word of your pre-Pathf inder accomplishments precedes you, and you know how to make the most of your previous reputation. BENEFIT: When in a settlement of 5,000 people or more, treat your Fame score as 2 higher for the purposes of qualifying for Prestige Awards or purchasing equipment. This feat doesn’t grant you any additional Prestige Points. Normal: Your Fame score is determined by the total number of Prestige Points earned over the course of your career. +Versatile Spontaneity CATEGORY:FEAT SOURCEPAGE:p.9 TYPE:General DESC:You made a good name for yourself in the Pathf inder Society in part because you knew how to prepare for the challenges before you, even if your natural magical abilities lend themselves less to preparation and more to spontaneity. PRETEXT:Prerequisites: Int 13 or Wis 13 (see Special), ability to spontaneously cast 2nd-level spells. PRESTAT:1,INT=13,WIS=13 BENEFIT:When you regain spell slots at the start of the day, you may opt to prepare one spell you don’t know in place of a daily spell slot 1 level higher than the prepared spell’s level. To do so, you must have access to the selected spell on a scroll or in a spellbook, and the spell must be on your spell list (even if it is not one of your spells known). This process takes 10 minutes per spell level of the selected spell. You can cast the selected spell a single time, expending the spell slot as though it were a known spell being cast by you. Preparing a spell in this manner expends a scroll but not a spellbook. A spell prepared in this way is considered its actual level rather than the level of the spell slot expended. You can apply metamagic feats to the spell as normal, as long as the spell’s actual level plus the increases from metamagic feats is 1 level lower than the highest-level spell you can cast. For example, a 12th-level sorcerer with this feat, a scroll of fireball, and the Empower Spell metamagic feat could prepare an empowered fireball spell in her 6th-level spell slot. Special: If you spontaneously cast arcane spells, you must have an Intelligence score of at least 13 to take this feat. If you spontaneously cast divine spells, you must have a Wisdom score of at least 13 to take this feat. If you have both arcane and divine spellcasting classes, you can use this feat to prepare a spell using a given class’s spell slot as long as you meet the associated ability score prerequisite. Collective Recollection CATEGORY:FEAT SOURCEPAGE:p.11 TYPE:Teamwork DESC:You and your allies can quickly jog each other's memories to remember essential facts. BENEFIT:When an ally who also has this feat attempts a trained Knowledge skill check while within 30 feet of you, you may attempt an aid another check as a free action to improve that ally's skill check. You must have at least 1 rank in the Knowledge skill to be aided in order to use this feat. If you succeed at the aid another check, you automatically know any information your ally gains from the Knowledge check as if you had rolled the Knowledge check. Whether or not your aid another check is successful, you cannot attempt a Knowledge check to determine the same information as your ally after using this feat. Esoteric Advantage CATEGORY:FEAT SOURCEPAGE:p.11 TYPE:General DESC:You're able to discern subtle and ineffable flaws in a creature's defenses. PRETEXT:Prerequisite: Knowledge (arcana, dungeoneering, local, nature, planes, or religion) 3 ranks. PRESKILL:1,Knowledge (arcana)=3,Knowledge (dungeoneering)=3,Knowledge (local)=3,Knowledge (nature)=3,Knowledge (planes)=3,Knowledge (religion)=3 BENEFIT:After identifying an individual creature with a successful Knowledge skill check, you can spend a move action to adapt your tactics to reduce that individual's natural defenses. Choose one of the following abilities that you identified: damage reduction, energy resistance, or spell resistance. For the next 24 hours you treat the selected ability as if it were 2 lower, to a minimum of 0 (for instance, you would treat DR 5/magic as if it were DR 3/magic). You can only benefit from this feat against one single creature at a time. If you use this feat to adapt your tactics to another individual before 24 hours have passed since you last adapted to a creature, the benefit provided against the first individual ends and is replaced by the benefit against the second individual. You can switch which identified creature you have adapted your tactics to (including which special ability you wish to treat as lower) as a move action. Uncanny Activation CATEGORY:FEAT SOURCEPAGE:p.11 TYPE:General DESC:You can coax greater power out of magical devices. PRETEXT:Prerequisite: Use Magic Device 12 ranks. PRESKILL:1,Use Magic Device=12 BENEFIT:If you exceed the Use Magic Device DC to activate a spell completion or spell trigger item by 5 or more, you can increase the item's caster level by 1 for determining the spell's effect. Alternatively, if you exceed the Use Magic Device DC by 10 or more when activating a magic item with charges, you can expend an additional charge to increase the caster level by 2 levels. Regardless, you can't increase an item's caster level to one that is higher than your own caster level. -Emergency Attunement CATEGORY:FEAT SOURCEPAGE:p.13 TYPE:General DESC:You can adapt your defenses to any situation. PRETEXT:Prerequisite: Spellcraft 7 ranks. PRESKILL:1,Spellcraft=7 BENEFIT: As a standard action, you can alter one of your ongoing abjuration or transmutation spells. It must be currently affecting you and must grant a choice of options when cast. You change its benefit to a different one from the same list. In order to accomplish this, you must make a successful Spellcraft check (DC equal to 10 + the level of the spell to be altered). The duration of the spell is reduced to half of the spell’s remaining duration. For example, a 7thlevel wizard could change her resist energy ( fire) spell with 50 minutes of its duration remaining into resist energy (cold), but the new duration would be 25 minutes. This ability does not change the benefit for any other creatures targeted by the original spell. +Emergency Attunement CATEGORY:FEAT SOURCEPAGE:p.13 TYPE:General DESC:You can adapt your defenses to any situation. PRETEXT:Prerequisite: Spellcraft 7 ranks. PRESKILL:1,Spellcraft=7 BENEFIT: As a standard action, you can alter one of your ongoing abjuration or transmutation spells. It must be currently affecting you and must grant a choice of options when cast. You change its benefit to a different one from the same list. In order to accomplish this, you must make a successful Spellcraft check (DC equal to 10 + the level of the spell to be altered). The duration of the spell is reduced to half of the spell’s remaining duration. For example, a 7thlevel wizard could change her resist energy ( fire) spell with 50 minutes of its duration remaining into resist energy (cold), but the new duration would be 25 minutes. This ability does not change the benefit for any other creatures targeted by the original spell. Planned Spontaneity CATEGORY:FEAT TYPE:General.WizardBonus PRESKILL:1,Knowledge (Arcana)=9 PRESPELLCAST:MEMORIZE=Y PRESPELLTYPE:1,ANY=4 DESC:You have a measure of flexibility when preparing spells. SOURCEPAGE:p.13 BENEFIT:Once per day when you prepare spells, you can designate one spell slot from each of up to three different spell levels that are lower than the highest-level spell that you can cast. In each designated slot you can memorize two different spells of the respective level. You can cast either spell as normal, but when you do, the spell consumes both of the spells prepared in that spell slot. Tapestry Traveler CATEGORY:FEAT SOURCEPAGE:p.13 TYPE:General DESC:Your many visits to the Hao Jin Tapestry demiplane have made you an expert in long-distance travel. PRETEXT:Prerequisite: Character level 5th. PREPCLEVEL:MIN=5 BENEFIT:You cast spells of the teleportation subschool as though your caster level were 2 higher, and you treat yourself as one step more familiar when teleporting to an established Pathfinder lodge with the teleport spell. If you can teleport as a supernatural ability, you treat your class level as if it were 2 higher when calculating the total distance that you can travel with this ability. -Cut Your Losses CATEGORY:FEAT SOURCEPAGE:p.15 TYPE:General DESC:You realize that sometimes it’s a safer bet to simply get out of danger’s way as fast as possible. You are able to summon a surge of adrenaline when you grab what is most dear to you and run. PRETEXT:Prerequisites: Str 13, Acrobatics 1 rank. PRESTAT:1,STR=13 PRESKILL:1,Acrobatics=1 BENEFIT:Whenever you withdraw as a full-round action and have at least one free hand, you can pick up one unattended object or unconscious ally of your size or smaller at any point during your movement without provoking attacks of opportunity. Any additional movement performed on your turn still provokes attacks of opportunity as normal. In addition, you treat your Strength score as 2 higher for the purpose of determining your carrying capacity. -Improved Underhanded Teamwork CATEGORY:FEAT SOURCEPAGE:p.15 TYPE:Combat.Teamwork DESC:You and your allies have trained together long enough to know how to exploit an opponent’s disadvantage to make her predicament even worse. PRETEXT:Prerequisites: Combat Expertise, Improved Dirty Trick, Underhanded Teamwork, base attack bonus +6. PRETOTALAB:6 PREABILITY:3,CATEGORY=Feat,Combat Expertise,Improved Dirty Trick,Underhanded Teamwork BENEFIT:Whenever an ally who also has this feat performs the dirty trick combat maneuver against a foe that you both threaten, you may attempt a dirty trick combat maneuver against the same foe as an immediate action to inf lict a second condition. If the foe uses an action to remove the f irst condition, it also removes the condition imposed by your immediate action. -Underhanded Teamwork CATEGORY:FEAT SOURCEPAGE:p.15 TYPE:Combat.Teamwork DESC:You and your allies know how to use coordinated maneuvers to set up an enemy with an unfair disadvantage. PRETEXT:Prerequisites: Combat Expertise, Improved Dirty Trick. PREABILITY:2,CATEGORY=Feat,Combat Expertise,Improved Dirty Trick BENEFIT:Whenever an ally who also has this feat performs a dirty trick combat maneuver against a foe you both threaten, you can use an immediate action to increase the inflicted condition’s duration by 1 round. +Cut Your Losses CATEGORY:FEAT SOURCEPAGE:p.15 TYPE:General DESC:You realize that sometimes it’s a safer bet to simply get out of danger’s way as fast as possible. You are able to summon a surge of adrenaline when you grab what is most dear to you and run. PRETEXT:Prerequisites: Str 13, Acrobatics 1 rank. PRESTAT:1,STR=13 PRESKILL:1,Acrobatics=1 BENEFIT:Whenever you withdraw as a full-round action and have at least one free hand, you can pick up one unattended object or unconscious ally of your size or smaller at any point during your movement without provoking attacks of opportunity. Any additional movement performed on your turn still provokes attacks of opportunity as normal. In addition, you treat your Strength score as 2 higher for the purpose of determining your carrying capacity. +Improved Underhanded Teamwork CATEGORY:FEAT SOURCEPAGE:p.15 TYPE:Combat.Teamwork DESC:You and your allies have trained together long enough to know how to exploit an opponent’s disadvantage to make her predicament even worse. PRETEXT:Prerequisites: Combat Expertise, Improved Dirty Trick, Underhanded Teamwork, base attack bonus +6. PRETOTALAB:6 PREABILITY:3,CATEGORY=Feat,Combat Expertise,Improved Dirty Trick,Underhanded Teamwork BENEFIT:Whenever an ally who also has this feat performs the dirty trick combat maneuver against a foe that you both threaten, you may attempt a dirty trick combat maneuver against the same foe as an immediate action to inf lict a second condition. If the foe uses an action to remove the f irst condition, it also removes the condition imposed by your immediate action. +Underhanded Teamwork CATEGORY:FEAT SOURCEPAGE:p.15 TYPE:Combat.Teamwork DESC:You and your allies know how to use coordinated maneuvers to set up an enemy with an unfair disadvantage. PRETEXT:Prerequisites: Combat Expertise, Improved Dirty Trick. PREABILITY:2,CATEGORY=Feat,Combat Expertise,Improved Dirty Trick BENEFIT:Whenever an ally who also has this feat performs a dirty trick combat maneuver against a foe you both threaten, you can use an immediate action to increase the inflicted condition’s duration by 1 round. # diff --git a/data/pathfinder/paizo/roleplaying_game/mythic_adventures/MythicAdventures.jpeg b/data/pathfinder/paizo/roleplaying_game/mythic_adventures/MythicAdventures.jpeg index f203ae218480efd0b45c2edf2d0c8ab0222c50ad..660bccecb490202a4187cb6fb6a81f5a0ffa426d 100644 GIT binary patch literal 44636 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 diff --git a/data/pathfinder/paizo/roleplaying_game/mythic_adventures/ma_equip.lst b/data/pathfinder/paizo/roleplaying_game/mythic_adventures/ma_equip.lst index ae38ca47f69..3dea6442328 100644 --- a/data/pathfinder/paizo/roleplaying_game/mythic_adventures/ma_equip.lst +++ b/data/pathfinder/paizo/roleplaying_game/mythic_adventures/ma_equip.lst @@ -62,11 +62,11 @@ Bountiful Bottle TYPE:Magic.Wondrous COST:60000 WT:1 SOURCEPAGE:p.1 Bracers of Might TYPE:Magic.Wondrous.Bracer COST:60000 WT:0.5 SOURCEPAGE:p.148 Bracers of the Shield Mates TYPE:Magic.Wondrous.Bracer COST:60000 WT:2 SOURCEPAGE:p.148 Canopic Jar TYPE:Magic.Wondrous COST:60000 WT:2 SOURCEPAGE:p.148 -Cape of Free Will +1 TYPE:Magic.Wondrous.Cloak COST:1500 WT:1 EQMOD:Material ~ Cloth SOURCEPAGE:p.148 BONUS:SAVE|Fortitude,Reflex|1|TYPE=Resistance BONUS:SAVE|Will|2|TYPE=Resistance QUALITY:Aura|moderate abjuration QUALITY:Caster Level|7th QUALITY:Slot|shoulders QUALITY:Construction Cost|6,750 gp QUALITY:Construction Requirements|Craft Wondrous Item, Mythic crafter, resistance, the creator must have the mythic saves ability SPROP:The wearer of this brightly colored patchwork cape gains a bonus on all saving throws, as with a cloak of resistance, but the resistance bonus on Will saves is one greater. Furthermore, if the wearer fails a Will saving throw, he can expend one use of mythic power as an immediate action to reroll that saving throw. If the wearer fails the saving throw on the reroll, he can’t use this ability again for 24 hours. -Cape of Free Will +2 TYPE:Magic.Wondrous.Cloak COST:6000 WT:1 EQMOD:Material ~ Cloth SOURCEPAGE:p.148 BONUS:SAVE|Fortitude,Reflex|2|TYPE=Resistance BONUS:SAVE|Will|3|TYPE=Resistance QUALITY:Aura|moderate abjuration QUALITY:Caster Level|7th QUALITY:Slot|shoulders QUALITY:Construction Cost|6,750 gp QUALITY:Construction Requirements|Craft Wondrous Item, Mythic crafter, resistance, the creator must have the mythic saves ability SPROP:The wearer of this brightly colored patchwork cape gains a bonus on all saving throws, as with a cloak of resistance, but the resistance bonus on Will saves is one greater. Furthermore, if the wearer fails a Will saving throw, he can expend one use of mythic power as an immediate action to reroll that saving throw. If the wearer fails the saving throw on the reroll, he can’t use this ability again for 24 hours. -Cape of Free Will +3 TYPE:Magic.Wondrous.Cloak COST:13500 WT:1 EQMOD:Material ~ Cloth SOURCEPAGE:p.148 BONUS:SAVE|Fortitude,Reflex|3|TYPE=Resistance BONUS:SAVE|Will|4|TYPE=Resistance QUALITY:Aura|moderate abjuration QUALITY:Caster Level|7th QUALITY:Slot|shoulders QUALITY:Construction Cost|6,750 gp QUALITY:Construction Requirements|Craft Wondrous Item, Mythic crafter, resistance, the creator must have the mythic saves ability SPROP:The wearer of this brightly colored patchwork cape gains a bonus on all saving throws, as with a cloak of resistance, but the resistance bonus on Will saves is one greater. Furthermore, if the wearer fails a Will saving throw, he can expend one use of mythic power as an immediate action to reroll that saving throw. If the wearer fails the saving throw on the reroll, he can’t use this ability again for 24 hours. -Cape of Free Will +4 TYPE:Magic.Wondrous.Cloak COST:24000 WT:1 EQMOD:Material ~ Cloth SOURCEPAGE:p.148 BONUS:SAVE|Fortitude,Reflex|4|TYPE=Resistance BONUS:SAVE|Will|5|TYPE=Resistance QUALITY:Aura|moderate abjuration QUALITY:Caster Level|7th QUALITY:Slot|shoulders QUALITY:Construction Cost|6,750 gp QUALITY:Construction Requirements|Craft Wondrous Item, Mythic crafter, resistance, the creator must have the mythic saves ability SPROP:The wearer of this brightly colored patchwork cape gains a bonus on all saving throws, as with a cloak of resistance, but the resistance bonus on Will saves is one greater. Furthermore, if the wearer fails a Will saving throw, he can expend one use of mythic power as an immediate action to reroll that saving throw. If the wearer fails the saving throw on the reroll, he can’t use this ability again for 24 hours. -Cape of Free Will +5 TYPE:Magic.Wondrous.Cloak COST:37500 WT:1 EQMOD:Material ~ Cloth SOURCEPAGE:p.148 BONUS:SAVE|Fortitude,Reflex|5|TYPE=Resistance BONUS:SAVE|Will|6|TYPE=Resistance QUALITY:Aura|moderate abjuration QUALITY:Caster Level|7th QUALITY:Slot|shoulders QUALITY:Construction Cost|6,750 gp QUALITY:Construction Requirements|Craft Wondrous Item, Mythic crafter, resistance, the creator must have the mythic saves ability SPROP:The wearer of this brightly colored patchwork cape gains a bonus on all saving throws, as with a cloak of resistance, but the resistance bonus on Will saves is one greater. Furthermore, if the wearer fails a Will saving throw, he can expend one use of mythic power as an immediate action to reroll that saving throw. If the wearer fails the saving throw on the reroll, he can’t use this ability again for 24 hours. +Cape of Free Will +1 TYPE:Magic.Wondrous.Cloak COST:1500 WT:1 EQMOD:Material ~ Cloth SOURCEPAGE:p.148 BONUS:SAVE|Fortitude,Reflex|1|TYPE=Resistance BONUS:SAVE|Will|2|TYPE=Resistance QUALITY:Aura|moderate abjuration QUALITY:Caster Level|7th QUALITY:Slot|shoulders QUALITY:Construction Cost|6,750 gp QUALITY:Construction Requirements|Craft Wondrous Item, Mythic crafter, resistance, the creator must have the mythic saves ability SPROP:The wearer of this brightly colored patchwork cape gains a bonus on all saving throws, as with a cloak of resistance, but the resistance bonus on Will saves is one greater. Furthermore, if the wearer fails a Will saving throw, he can expend one use of mythic power as an immediate action to reroll that saving throw. If the wearer fails the saving throw on the reroll, he can’t use this ability again for 24 hours. +Cape of Free Will +2 TYPE:Magic.Wondrous.Cloak COST:6000 WT:1 EQMOD:Material ~ Cloth SOURCEPAGE:p.148 BONUS:SAVE|Fortitude,Reflex|2|TYPE=Resistance BONUS:SAVE|Will|3|TYPE=Resistance QUALITY:Aura|moderate abjuration QUALITY:Caster Level|7th QUALITY:Slot|shoulders QUALITY:Construction Cost|6,750 gp QUALITY:Construction Requirements|Craft Wondrous Item, Mythic crafter, resistance, the creator must have the mythic saves ability SPROP:The wearer of this brightly colored patchwork cape gains a bonus on all saving throws, as with a cloak of resistance, but the resistance bonus on Will saves is one greater. Furthermore, if the wearer fails a Will saving throw, he can expend one use of mythic power as an immediate action to reroll that saving throw. If the wearer fails the saving throw on the reroll, he can’t use this ability again for 24 hours. +Cape of Free Will +3 TYPE:Magic.Wondrous.Cloak COST:13500 WT:1 EQMOD:Material ~ Cloth SOURCEPAGE:p.148 BONUS:SAVE|Fortitude,Reflex|3|TYPE=Resistance BONUS:SAVE|Will|4|TYPE=Resistance QUALITY:Aura|moderate abjuration QUALITY:Caster Level|7th QUALITY:Slot|shoulders QUALITY:Construction Cost|6,750 gp QUALITY:Construction Requirements|Craft Wondrous Item, Mythic crafter, resistance, the creator must have the mythic saves ability SPROP:The wearer of this brightly colored patchwork cape gains a bonus on all saving throws, as with a cloak of resistance, but the resistance bonus on Will saves is one greater. Furthermore, if the wearer fails a Will saving throw, he can expend one use of mythic power as an immediate action to reroll that saving throw. If the wearer fails the saving throw on the reroll, he can’t use this ability again for 24 hours. +Cape of Free Will +4 TYPE:Magic.Wondrous.Cloak COST:24000 WT:1 EQMOD:Material ~ Cloth SOURCEPAGE:p.148 BONUS:SAVE|Fortitude,Reflex|4|TYPE=Resistance BONUS:SAVE|Will|5|TYPE=Resistance QUALITY:Aura|moderate abjuration QUALITY:Caster Level|7th QUALITY:Slot|shoulders QUALITY:Construction Cost|6,750 gp QUALITY:Construction Requirements|Craft Wondrous Item, Mythic crafter, resistance, the creator must have the mythic saves ability SPROP:The wearer of this brightly colored patchwork cape gains a bonus on all saving throws, as with a cloak of resistance, but the resistance bonus on Will saves is one greater. Furthermore, if the wearer fails a Will saving throw, he can expend one use of mythic power as an immediate action to reroll that saving throw. If the wearer fails the saving throw on the reroll, he can’t use this ability again for 24 hours. +Cape of Free Will +5 TYPE:Magic.Wondrous.Cloak COST:37500 WT:1 EQMOD:Material ~ Cloth SOURCEPAGE:p.148 BONUS:SAVE|Fortitude,Reflex|5|TYPE=Resistance BONUS:SAVE|Will|6|TYPE=Resistance QUALITY:Aura|moderate abjuration QUALITY:Caster Level|7th QUALITY:Slot|shoulders QUALITY:Construction Cost|6,750 gp QUALITY:Construction Requirements|Craft Wondrous Item, Mythic crafter, resistance, the creator must have the mythic saves ability SPROP:The wearer of this brightly colored patchwork cape gains a bonus on all saving throws, as with a cloak of resistance, but the resistance bonus on Will saves is one greater. Furthermore, if the wearer fails a Will saving throw, he can expend one use of mythic power as an immediate action to reroll that saving throw. If the wearer fails the saving throw on the reroll, he can’t use this ability again for 24 hours. Cayden's Cup NAMEISPI:YES TYPE:OtherMagic COST:16500 WT:1 SOURCEPAGE:p.149 Censet of Sanctuary TYPE:OtherMagic COST:18000 WT:2 SOURCEPAGE:p.149 Chime of Disillusionment TYPE:OtherMagic COST:35000 WT:2 SOURCEPAGE:p.149 diff --git a/data/pathfinder/paizo/roleplaying_game/pathfinder_unchained/OGL.txt b/data/pathfinder/paizo/roleplaying_game/pathfinder_unchained/OGL.txt index 5ec2902a9e9..36c9172b68f 100644 --- a/data/pathfinder/paizo/roleplaying_game/pathfinder_unchained/OGL.txt +++ b/data/pathfinder/paizo/roleplaying_game/pathfinder_unchained/OGL.txt @@ -1,8 +1,8 @@ OPEN GAME LICENSE Version 1.0a -The following text is the property of Wizards of the Coast, Inc. and is Copyright 2000 Wizards of the Coast, Inc (ÒWizardsÓ). All Rights Reserved. +The following text is the property of Wizards of the Coast, Inc. and is Copyright 2000 Wizards of the Coast, Inc (Ã’WizardsÓ). All Rights Reserved. -1. Definitions: (a) ÒContributorsÓ means the copyright and/or trademark owners who have contributed Open Game Content; (b) ÒDerivative MaterialÓ means copyrighted material including derivative works and translations (including into other computer languages), potation, modification, correction, addition, extension, upgrade, improvement, compilation, abridgment or other form in which an existing work may be recast, transformed or adapted; (c) ÒDistributeÓ means to reproduce, license, rent, lease, sell, broadcast, publicly display, transmit or otherwise distribute; (d) ÒOpen Game ContentÓ means the game mechanic and includes the methods, procedures, processes and routines to the extent such content does not embody the Product Identity and is an enhancement over the prior art and any additional content clearly identified as Open Game Content by the Contributor, and means any work covered by this License, including translations and derivative works under copyright law, but specifically excludes Product Identity. (e) ÒProduct IdentityÓ means product and product line names, logos and identifying marks including trade dress; artifacts, creatures, characters, stories, storylines, plots, thematic elements, dialogue, incidents, language, artwork, symbols, designs, depictions, likenesses, formats, poses, concepts, themes and graphic, photographic and other visual or audio representations; names and descriptions of characters, spells, enchantments, personalities, teams, personas, likenesses and special abilities; places, locations, environments, creatures, equipment, magical or supernatural abilities or effects, logos, symbols, or graphic designs; and any other trademark or registered trademark clearly identified as Product identity by the owner of the Product Identity, and which specifically excludes the Open Game Content; (f ) ÒTrademarkÓ means the logos, names, mark, sign, motto, designs that are used by a Contributor to identify itself or its products or the associated products contributed to the Open Game License by the Contributor (g) ÒUseÓ, ÒUsedÓ or ÒUsingÓ means to use, Distribute, copy, edit, format, modify, translate and otherwise create Derivative Material of Open Game Content. (h) ÒYouÓ or ÒYourÓ means the licensee in terms of this agreement. +1. Definitions: (a) Ã’ContributorsÓ means the copyright and/or trademark owners who have contributed Open Game Content; (b) Ã’Derivative MaterialÓ means copyrighted material including derivative works and translations (including into other computer languages), potation, modification, correction, addition, extension, upgrade, improvement, compilation, abridgment or other form in which an existing work may be recast, transformed or adapted; (c) Ã’DistributeÓ means to reproduce, license, rent, lease, sell, broadcast, publicly display, transmit or otherwise distribute; (d) Ã’Open Game ContentÓ means the game mechanic and includes the methods, procedures, processes and routines to the extent such content does not embody the Product Identity and is an enhancement over the prior art and any additional content clearly identified as Open Game Content by the Contributor, and means any work covered by this License, including translations and derivative works under copyright law, but specifically excludes Product Identity. (e) Ã’Product IdentityÓ means product and product line names, logos and identifying marks including trade dress; artifacts, creatures, characters, stories, storylines, plots, thematic elements, dialogue, incidents, language, artwork, symbols, designs, depictions, likenesses, formats, poses, concepts, themes and graphic, photographic and other visual or audio representations; names and descriptions of characters, spells, enchantments, personalities, teams, personas, likenesses and special abilities; places, locations, environments, creatures, equipment, magical or supernatural abilities or effects, logos, symbols, or graphic designs; and any other trademark or registered trademark clearly identified as Product identity by the owner of the Product Identity, and which specifically excludes the Open Game Content; (f ) Ã’TrademarkÓ means the logos, names, mark, sign, motto, designs that are used by a Contributor to identify itself or its products or the associated products contributed to the Open Game License by the Contributor (g) Ã’UseÓ, Ã’UsedÓ or Ã’UsingÓ means to use, Distribute, copy, edit, format, modify, translate and otherwise create Derivative Material of Open Game Content. (h) Ã’YouÓ or Ã’YourÓ means the licensee in terms of this agreement. 2. The License: This License applies to any Open Game Content that contains a notice indicating that the Open Game Content may only be Used under and in terms of this License. You must affix such a notice to any Open Game Content that you Use. No terms may be added to or subtracted from this License except as described by the License itself. No other terms or conditions may be applied to any Open Game Content distributed using this License. @@ -12,7 +12,7 @@ The following text is the property of Wizards of the Coast, Inc. and is Copyrigh 5. Representation of Authority to Contribute: If You are contributing original material as Open Game Content, You represent that Your Contributions are Your original creation and/or You have sufficient rights to grant the rights conveyed by this License. -6. Notice of License Copyright: You must update the COPYRIGHT NOTICE portion of this License to include the exact text of the COPYRIGHT NOTICE of any Open Game Content You are copying, modifying or distributing, and You must add the title, the copyright date, and the copyright holderÕs name to the COPYRIGHT NOTICE of any original Open Game Content you Distribute. +6. Notice of License Copyright: You must update the COPYRIGHT NOTICE portion of this License to include the exact text of the COPYRIGHT NOTICE of any Open Game Content You are copying, modifying or distributing, and You must add the title, the copyright date, and the copyright holderÕs name to the COPYRIGHT NOTICE of any original Open Game Content you Distribute. 7. Use of Product Identity: You agree not to Use any Product Identity, including as an indication as to compatibility, except as expressly licensed in another, independent Agreement with the owner of each element of that Product Identity. You agree not to indicate compatibility or co-adaptability with any Trademark or Registered Trademark in conjunction with a work containing Open Game Content except as expressly licensed in another, independent Agreement with the owner of such Trademark or Registered Trademark. The use of any Product Identity in Open Game Content does not constitute a challenge to the ownership of that Product Identity. The owner of any Product Identity used in Open Game Content shall retain all rights, title and interest in and to that Product Identity. diff --git a/data/pathfinder/paizo/roleplaying_game/pathfinder_unchained/pathfinder_unchained.jpg b/data/pathfinder/paizo/roleplaying_game/pathfinder_unchained/pathfinder_unchained.jpg index 3752fedf0062900c7be019a8949215c4762ad40f..75487d8c8f656012ced9564b6d31f991c4902240 100644 GIT binary patch literal 11456 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 From 1679aff447887eae7c832981ac72769b7e1a250c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Feb 2024 20:03:08 +1300 Subject: [PATCH 048/142] Bump org.testfx:testfx-junit5 from 4.0.17 to 4.0.18 (#7055) Bumps [org.testfx:testfx-junit5](https://github.com/TestFX/TestFX) from 4.0.17 to 4.0.18. - [Release notes](https://github.com/TestFX/TestFX/releases) - [Changelog](https://github.com/TestFX/TestFX/blob/master/CHANGES.md) - [Commits](https://github.com/TestFX/TestFX/commits) --- updated-dependencies: - dependency-name: org.testfx:testfx-junit5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 42145ee81a2..4f6ef98b0f7 100644 --- a/build.gradle +++ b/build.gradle @@ -267,7 +267,7 @@ dependencies { testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.2' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.2' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '2.2' - testImplementation group: 'org.testfx', name: 'testfx-junit5', version: '4.0.17' + testImplementation group: 'org.testfx', name: 'testfx-junit5', version: '4.0.18' // TODO openjfx-monocle is no longer updated and chances are openjfx-monocle doesn't work with latest OpenJFX // https://github.com/TestFX/Monocle/issues/79 testImplementation group: 'org.testfx', name: 'openjfx-monocle', version: 'jdk-12.0.1+2' From 6c2f24fe6fde64aa5a0506328523bda5ab0b7f41 Mon Sep 17 00:00:00 2001 From: Frank Nielson Date: Tue, 13 Feb 2024 15:27:57 -0700 Subject: [PATCH 049/142] Fix code 3533 (#7056) * Fixed house rule for load being ignored when applied to AC and movement checks. * Foxed style and removed old print statement * Fixed style * Fixed imports --- .run/Main.run.xml | 11 +++ README.md | 9 ++ .../cdom/enumeration/SkillArmorCheck.java | 6 +- .../facet/analysis/MovementResultFacet.java | 96 ++++++++++--------- code/src/java/pcgen/core/PlayerCharacter.java | 24 ++--- .../pcgen/gui3/component/PCGenToolBar.java | 1 - 6 files changed, 89 insertions(+), 58 deletions(-) create mode 100644 .run/Main.run.xml diff --git a/.run/Main.run.xml b/.run/Main.run.xml new file mode 100644 index 00000000000..38778279d24 --- /dev/null +++ b/.run/Main.run.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/README.md b/README.md index 7e598015e28..57a710b1fe4 100644 --- a/README.md +++ b/README.md @@ -203,6 +203,15 @@ This is almost exactly the command Travis runs to verify, if it fails locally yo ### Generate IntelliJ IDEA Project ./gradlew idea +## Troubleshooting +#### +If you have an error stating `Task :run FAILED Error: --module-path requires module path specification` in Intellij, +create a run configuration using Gradle and have the command be `run`. This should fix this error. + +If you want to debug in Intellij, using the `Main` configuration and run it in debug mode. +You can change the Java version to whatever version is supported, and you have installed. + + [PCGen]: https://github.com/PCGen/pcgen [JIRA]: https://pcgenorg.atlassian.net [CODE]: https://pcgenorg.atlassian.net/projects/CODE/issues diff --git a/code/src/java/pcgen/cdom/enumeration/SkillArmorCheck.java b/code/src/java/pcgen/cdom/enumeration/SkillArmorCheck.java index 4a04efe4d72..01b1b75873d 100644 --- a/code/src/java/pcgen/cdom/enumeration/SkillArmorCheck.java +++ b/code/src/java/pcgen/cdom/enumeration/SkillArmorCheck.java @@ -1,16 +1,16 @@ /* * Copyright 2007 (C) Tom Parker - * + * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. - * + * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. - * + * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA diff --git a/code/src/java/pcgen/cdom/facet/analysis/MovementResultFacet.java b/code/src/java/pcgen/cdom/facet/analysis/MovementResultFacet.java index a788ef86f79..186ba84b61c 100644 --- a/code/src/java/pcgen/cdom/facet/analysis/MovementResultFacet.java +++ b/code/src/java/pcgen/cdom/facet/analysis/MovementResultFacet.java @@ -4,12 +4,12 @@ * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. - * + * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA @@ -41,8 +41,10 @@ import pcgen.cdom.facet.model.RaceFacet; import pcgen.cdom.facet.model.TemplateFacet; import pcgen.core.Equipment; +import pcgen.core.Globals; import pcgen.core.MoveClone; import pcgen.core.Race; +import pcgen.core.RuleConstants; import pcgen.core.SettingsHandler; import pcgen.core.SimpleMovement; import pcgen.core.utils.CoreUtility; @@ -53,7 +55,7 @@ * that this does not store the Movement objects granted by CDOMObjects; rather * this is storing the resulting values post aggregation of those Movement * objects. - * + * */ public class MovementResultFacet extends AbstractStorageFacet implements DataFacetChangeListener @@ -74,7 +76,7 @@ public class MovementResultFacet extends AbstractStorageFacet * Returns the movement value of the given type for the Player Character * identified by the given CharID. All appropriate BONUSes are added to the * movement before the result is returned. - * + * * @param id * The CharID identifying the Player Character for which the * movement value of the given type to be returned @@ -97,11 +99,11 @@ public double movementOfType(CharID id, MovementType moveType) * Returns the type-safe MovementCacheInfo for this MoneyFacet and the given * CharID. Will return a new, empty MovementCacheInfo if no Money * information has been set for the given CharID. Will not return null. - * + * * Note that this method SHOULD NOT be public. The MovementCacheInfo object * is owned by MoneyFacet, and since it can be modified, a reference to that * object should not be exposed to any object other than MoneyFacet. - * + * * @param id * The CharID for which the MovementCacheInfo should be returned * @return The MovementCacheInfo for the Player Character represented by the @@ -122,11 +124,11 @@ private MovementCacheInfo getConstructingInfo(CharID id) * Returns the type-safe MovementCacheInfo for this MoneyFacet and the given * CharID. May return null if no Movement information has been set for the * given CharID. - * + * * Note that this method SHOULD NOT be public. The MovementCacheInfo object * is owned by MoneyFacet, and since it can be modified, a reference to that * object should not be exposed to any object other than MoneyFacet. - * + * * @param id * The CharID for which the MovementCacheInfo should be returned * @return The MovementCacheInfo for the Player Character represented by the @@ -208,7 +210,7 @@ private void adjustMoveRates(CharID id) /** * get the base MOVE: plus any bonuses from BONUS:MOVE additions takes * into account Armor restrictions to movement and load carried - * + * * @param id * @return movement */ @@ -260,25 +262,33 @@ public double movementOfType(CharID id, MovementType moveType) // get a list of all equipped Armor Load armorLoad = Load.LIGHT; - for (Equipment eq : equipmentFacet.getSet(id)) + // Ignore armor weight if the house rule has disabled it + if (Globals.checkRule(RuleConstants.SYS_LDPACSK)) { - if (!eq.typeStringContains("Armor") || !eq.isEquipped() || eq.isShield()) + for (Equipment eq : equipmentFacet.getSet(id)) { - continue; - } - if (eq.isHeavy() && !unencumberedArmorFacet.ignoreLoad(id, Load.HEAVY)) - { - armorLoad = armorLoad.max(Load.HEAVY); - } - else if (eq.isMedium() && !unencumberedArmorFacet.ignoreLoad(id, Load.MEDIUM)) - { - armorLoad = armorLoad.max(Load.MEDIUM); + if (!eq.typeStringContains("Armor") || !eq.isEquipped() || eq.isShield()) + { + continue; + } + if (eq.isHeavy() && !unencumberedArmorFacet.ignoreLoad(id, Load.HEAVY)) + { + armorLoad = armorLoad.max(Load.HEAVY); + } + else if (eq.isMedium() && !unencumberedArmorFacet.ignoreLoad(id, Load.MEDIUM)) + { + armorLoad = armorLoad.max(Load.MEDIUM); + } } } double armorMove = armorLoad.calcEncumberedMove(moveInFeet); - Load pcLoad = loadFacet.getLoadType(id); + Load pcLoad = Load.LIGHT; + if (Globals.checkRule(RuleConstants.SYS_LDPACSK)) + { + pcLoad = loadFacet.getLoadType(id); + } double loadMove = calcEncumberedMove(id, pcLoad, moveInFeet); // It is possible to have a PC that is not encumbered by Armor @@ -304,7 +314,7 @@ public List getMovementValues(CharID id) * Returns the base movement value of the given type for the Player * Character. No BONUSes are added to the movement before it is * returned. - * + * * @param moveType * The movement type to be returned * @return The movement value of the given type for the Player Character @@ -318,7 +328,7 @@ public double getMovementOfType(MovementType moveType) * Returns the base movement value of the given type for the Player * Character, when the Player Character is under the given Load. No * BONUSes are added to the movement before it is returned. - * + * * @param moveType * The movement type to be returned * @param load @@ -335,7 +345,7 @@ public int getBaseMovement(MovementType moveType, Load load) /** * Returns true if the Player Character has a movement value of the * given type. - * + * * @param moveType * The movement type to be tested to see if the Player * Character has a movement value of this type @@ -351,7 +361,7 @@ public boolean hasMovement(MovementType moveType) * Works for dnd according to the method noted in the faq. (NOTE: The * table in the dnd faq is wrong for speeds 80 and 90) Not as sure it * works for all other d20 games. - * + * * @param load * @param unencumberedMove * the unencumbered move value @@ -411,7 +421,7 @@ public boolean equals(Object o) /** * Returns the number of movement types for the Player Character identified * by the given CharID. - * + * * @param id * The CharID identifying the Player Character for which the * number of movement types is to be returned @@ -431,7 +441,7 @@ public int countMovementTypes(CharID id) /** * Recalculates all movement values for the Player Character identified by * the given CharID. - * + * * @param id * The CharID for which all of the movement values is to be * recalculated @@ -444,7 +454,7 @@ public void reset(CharID id) /** * Returns a non-null List of the movement values for the Player Character * represented by the given CharID. - * + * * This method is value-semantic in that ownership of the returned List is * transferred to the class calling this method. Modification of the * returned List will not modify this MovementResultFacet and modification @@ -454,7 +464,7 @@ public void reset(CharID id) * MovementResultFacet. If you wish to modify the information stored in this * MovementResultFacet, you must add Movement objects to the Player * Character and call reset(CharID). - * + * * @param id * The CharID identifying the Player Character for which the * movement values should be returned @@ -475,7 +485,7 @@ public List getMovementValues(CharID id) * Returns the base movement value of the given type for the Player * Character identified by the given CharID. No BONUSes are added to the * movement before it is returned. - * + * * @param id * The CharID identifying the Player Character for which the * movement value of the given type to be returned @@ -499,7 +509,7 @@ public double getMovementOfType(CharID id, MovementType moveType) * Character identified by the given CharID, when the Player Character is * under the given Load. No BONUSes are added to the movement before it is * returned. - * + * * @param id * The CharID identifying the Player Character for which the * movement value of the given type to be returned @@ -524,7 +534,7 @@ public int getBaseMovement(CharID id, MovementType moveType, Load load) /** * Returns true if the Player Character identified by the given CharID has a * movement value of the given type. - * + * * @param id * The CharID identifying the Player Character which will be * tested to see if it contains a movement of the given type @@ -547,11 +557,11 @@ public boolean hasMovement(CharID id, MovementType moveType) /** * Triggers a full recalculation of Player Character movement when a * CDOMObject is added to a Player Character. - * + * * Triggered when one of the Facets to which MovementResultFacet listens * fires a DataFacetChangeEvent to indicate a CDOMObject was added to a * Player Character. - * + * * @param dfce * The DataFacetChangeEvent containing the information about the * change @@ -565,11 +575,11 @@ public void dataAdded(DataFacetChangeEvent dfce) /** * Triggers a full recalculation of Player Character movement when a * CDOMObject is added to a Player Character. - * + * * Triggered when one of the Facets to which MovementResultFacet listens * fires a DataFacetChangeEvent to indicate a CDOMObject was removed from a * Player Character. - * + * * @param dfce * The DataFacetChangeEvent containing the information about the * change @@ -637,7 +647,7 @@ public void setLoadFacet(LoadFacet loadFacet) /** * Initializes the connections for MovementResultFacet to other facets. - * + * * This method is automatically called by the Spring framework during * initialization of the MovementResultFacet. */ @@ -651,18 +661,18 @@ public void init() * Copies the contents of the MovementResultFacet from one Player Character * to another Player Character, based on the given CharIDs representing * those Player Characters. - * + * * This is a method in MovementResultFacet in order to avoid exposing the * mutable Map object to other classes. This should not be inlined, as the * Map is internal information to MovementResultFacet and should not be * exposed to other classes. - * + * * Note also the copy is a one-time event and no references are maintained * between the Player Characters represented by the given CharIDs (meaning * once this copy takes place, any change to the MovementResultFacet of one * Player Character will only impact the Player Character where the * MovementResultFacet was changed). - * + * * @param source * The CharID representing the Player Character from which the * information should be copied @@ -680,7 +690,7 @@ public void copyContents(CharID source, CharID copy) copymci.moveRates.putAll(mci.moveRates); } } - + private class MoveSorter implements Comparator { @@ -697,7 +707,7 @@ public int compare(NamedValue o1, NamedValue o2) } return o1.getName().compareTo(o2.getName()); } - + } - + } diff --git a/code/src/java/pcgen/core/PlayerCharacter.java b/code/src/java/pcgen/core/PlayerCharacter.java index 9170ef7c908..0f3f5f5cacc 100644 --- a/code/src/java/pcgen/core/PlayerCharacter.java +++ b/code/src/java/pcgen/core/PlayerCharacter.java @@ -2161,13 +2161,13 @@ public int getPointBuyPoints() /** * Sets the total Experience Points for the Player Character to the given value. - * + * * Note this sets earned Experience Points as a side effect (calculated based on the * level-adjusted Experience Points the Player Character may have). If the given xp * value is less than the level-adjusted Experience Points possessed by the Player * Character, then an error will be logged, and the earned Experience Points will be * set to 0. - * + * * @param xp * The total Experience Points for the Player Character */ @@ -2191,7 +2191,7 @@ public void setXP(int xp) /** * Return the total Experience Points for the Player Character. - * + * * @return The total Experience Points for the Player Character */ public int getXP() @@ -2203,7 +2203,7 @@ public int getXP() /** * Returns the level-adjusted Experience Points for the Player Character. - * + * * @return The level-adjusted Experience Points for the Player Character */ private int getLAXP() @@ -5408,6 +5408,7 @@ public int minXPForNextECL() */ private Load getHouseRuledLoadType() { + System.out.println("getHouseRuledLoadType"); if (Globals.checkRule(RuleConstants.SYS_LDPACSK)) { return getLoadType(); @@ -5477,7 +5478,7 @@ public int processOldMaxDex() { final int statBonus = (int) getStatBonusTo("MISC", "MAXDEX"); final Load load = getHouseRuledLoadType(); - int bonus = (load == Load.MEDIUM) ? 3 : (load == Load.HEAVY) ? 1 : (load == Load.OVERLOAD) ? 0 : statBonus; + int bonus = (load == Load.MEDIUM) ? 2 : (load == Load.HEAVY) ? 1 : (load == Load.OVERLOAD) ? 0 : statBonus; // If this is still true after all the equipment has been // examined, then we should use the Maximum - Maximum Dex modifier. @@ -7854,10 +7855,10 @@ private void processAbilityList(CDOMObject cdo, CDOMReference ref) for (CDOMReference objref : mods) { Collection objs = null; - try + try { objs = objref.getContainedObjects(); - } catch (Exception e) + } catch (Exception e) { Logging.log(Logging.LST_ERROR, "Missing object referenced in the ability list for '" + cdo + "' list is " + ref + ". Source " + cdo.getSourceURI()); @@ -9402,7 +9403,8 @@ else if (characterLevel == 1) int otherSp = spMod - classSp - raceSp; // should mostly be stat related skillpoints final int classSpMin = (int) getTotalBonusTo("MINCLASSSKILLPOINTS", "NUMBER"); // if a MINCLASSSKILLPOINTS.NUMBER is defined and spMod was lower due to INT penalty - if (classSpMin>0 && (classSp+otherSp0 && (classSp+otherSp Date: Tue, 13 Feb 2024 22:20:09 -0700 Subject: [PATCH 050/142] Fix code 3534 (#7057) * Fixed encumbrance showing up as more than Light * Fixed house rule for load being ignored when applied to AC and movement checks. * Foxed style and removed old print statement --- .../pcgen/cdom/facet/analysis/LoadFacet.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/code/src/java/pcgen/cdom/facet/analysis/LoadFacet.java b/code/src/java/pcgen/cdom/facet/analysis/LoadFacet.java index c431189f0d0..5ee32161756 100644 --- a/code/src/java/pcgen/cdom/facet/analysis/LoadFacet.java +++ b/code/src/java/pcgen/cdom/facet/analysis/LoadFacet.java @@ -4,12 +4,12 @@ * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. - * + * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA @@ -25,6 +25,8 @@ import pcgen.cdom.facet.BonusCheckingFacet; import pcgen.cdom.facet.FormulaResolvingFacet; import pcgen.cdom.facet.PlayerCharacterTrackingFacet; +import pcgen.core.Globals; +import pcgen.core.RuleConstants; import pcgen.core.SettingsHandler; import pcgen.core.SizeAdjustment; import pcgen.util.enumeration.Load; @@ -33,7 +35,7 @@ * LoadFacet calculates information about the Load for a Player Character. The * underlying Load information used for these calculations is defined in the * Game Mode LST files. - * + * */ public class LoadFacet { @@ -46,7 +48,7 @@ public class LoadFacet /** * Returns the Load for the Player Character identified by the given CharID. - * + * * @param id * The CharID identifying the Player Character for which the Load * should be returned @@ -57,6 +59,10 @@ public Load getLoadType(CharID id) Float weight = totalWeightFacet.getTotalWeight(id); double dbl = weight / getMaxLoad(id).doubleValue(); + if (!Globals.checkRule(RuleConstants.SYS_LDPACSK)) + { + return Load.LIGHT; + } Float lightMult = SettingsHandler.getGameAsProperty().get().getLoadInfo().getLoadMultiplier("LIGHT"); if (lightMult != null && dbl <= lightMult.doubleValue()) { @@ -81,7 +87,7 @@ public Load getLoadType(CharID id) /** * Returns the maximum Load for the Player Character identified by the given * CharID. - * + * * @param id * The CharID identifying the Player Character for which the * maximum Load should be returned. @@ -96,7 +102,7 @@ public Float getMaxLoad(CharID id) /** * Returns the maximum Load for the Player Character identified by the given * CharID, multiplied by the given multiplier. - * + * * @param id * The CharID identifying the Player Character for which the * maximum Load should be returned. @@ -122,7 +128,7 @@ public Float getMaxLoad(CharID id, double mult) /** * Returns the Load Multiplier for the size of the Player Character * identified by the given CharID. - * + * * @param id * The CharID identifying the Player Character for which the Load * Multiplier will be returned. From 327581e3099a8379e1f4efe603a3ef6eaef96a62 Mon Sep 17 00:00:00 2001 From: LegacyKing Date: Fri, 16 Feb 2024 13:45:42 -0800 Subject: [PATCH 051/142] DATA-4352 *Fix included* Outlander trait not quite working as intended --- .../advanced_players_guide/apg_abilities.lst | 11 +++++++++++ .../advanced_players_guide/apg_abilitycategories.lst | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilities.lst b/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilities.lst index 06bd73452e1..a98a5076840 100644 --- a/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilities.lst +++ b/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilities.lst @@ -163,6 +163,17 @@ Outlander / Lore Seeker KEY:Trait ~ Outlander ~ Lore Seeker CATEGORY: Outlander / Exile KEY:Trait ~ Outlander ~ Exile CATEGORY:Special Ability TYPE:Trait.TraitCampaignChoice VISIBLE:EXPORT PREABILITY:1,CATEGORY=Special Ability,Trait ~ Outlander DESC:For whatever reason, you were forced to flee your homeland. Chance or fate has brought you to Sandpoint, and it's here that your money ran out, leaving you stranded in this small town. You are also being pursued by enemies from your homeland, and that has made you paranoid and quick to react to danger. You gain a +2 trait bonus on Initiative checks. BONUS:COMBAT|INITIATIVE|2|TYPE=Trait SOURCEPAGE:p.331 Outlander / Missionary KEY:Trait ~ Outlander ~ Missionary CATEGORY:Special Ability TYPE:Trait.TraitCampaignChoice VISIBLE:EXPORT PREABILITY:1,CATEGORY=Special Ability,Trait ~ Outlander DESC:You have come to Sandpoint to see about expanding the presence of your chosen faith after receiving visions that told you your faith is needed in Varisia-what that need is, though, you're not quite sure. You gain a +1 trait bonus on Knowledge (religion) checks, and Knowledge (religion) is a class skill for you. If you cast divine spells, pick three spells on your spell list. You are particularly adept at casting these spells, so they function at +1 caster level when you cast them, and their save DCs (if any) gain a +1 bonus. BONUS:SKILL|Knowledge (Religion)|1|TYPE=Trait CSKILL:Knowledge (Religion) SOURCEPAGE:p.331 +###BLOCK: Fixes for Outlander Lore Seeker and Exile Traits to allow spell selection and add to the correct areas of Traits +CATEGORY=Special Ability|Trait ~ Outlander.MOD DESC:.CLEAR DESC:You’ve recently come from somewhere else and are hoping to make your fortune here. + +CATEGORY=Special Ability|Trait ~ Outlander ~ Lore Seeker.MOD DESC:.CLEAR DESC:The secrets of ancient fallen civilizations intrigue you, particularly magical traditions. You’ve studied magic intensely, and hope to increase that knowledge by adding lost lore. You’ve come to pursue that study, and chose this place as your base because it was out of the way of bigger cities—meaning less competition to study the ancient monuments in the region, you hope! BENEFIT:You gain a +1 trait bonus on Knowledge (arcana) checks, and Knowledge (arcana) is a class skill for you. If you cast arcane spells, pick three spells on your spell list. You are particularly adept at casting these spells, so they function at +1 caster level when you cast them, and their save DCs (if any) gain a +1 bonus. BONUS:ABILITYPOOL|Lore Seeker Arcane Spells|1 +Lore Seeker Arcane Spells KEY:Trait ~ Lore Seeker ~ Arcane Spells CATEGORY:Special Ability TYPE:Trait.SampleCampaignTrait.LoreSeekerArcaneSpells PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Trait ~ Outlander ~ Lore Seeker] VISIBLE:YES STACK:NO MULT:YES CHOOSE:NUMCHOICES=3|SPELLS|SPELLTYPE=Arcane[LEVELMAX=9] SELECT:3 BONUS:CASTERLEVEL|SPELL.%LIST|1 DESC:You gain +1 Caster Level to the following spells: %1 as well as +1 DC to these spells where applicable|%LIST ADDSPELLLEVEL:-1 + +CATEGORY=Special Ability|Trait ~ Outlander ~ Missionary.MOD DESC:.CLEAR DESC:You have come here to see about expanding the presence of your chosen faith after receiving visions that told you your faith is needed—what that need is, though, you’re not quite sure. BENEFIT:You gain a +1 trait bonus on Knowledge (religion) checks, and Knowledge (religion) is a class skill for you. If you cast divine spells, pick three spells on your spell list. You are particularly adept at casting these spells, so they function at +1 caster level when you cast them, and their save DCs (if any) gain a +1 bonus. BONUS:ABILITYPOOL|Missionary Divine Spells|1 +Missionary Divine Spells KEY:Trait ~ Missionary ~ Divine Spells CATEGORY:Special Ability TYPE:Trait.SampleCampaignTrait.MissionaryDivineSpells PREMULT:1,[PREABILITY:1,CATEGORY=Special Ability,Trait ~ Outlander ~ Missionary] VISIBLE:YES STACK:NO MULT:YES CHOOSE:NUMCHOICES=3|SPELLS|SPELLTYPE=Divine[LEVELMAX=9] SELECT:3 BONUS:CASTERLEVEL|SPELL.%LIST|1 DESC:You gain +1 Caster Level to the following spells: %1 as well as +1 DC to these spells where applicable|%LIST ADDSPELLLEVEL:-1 + + + ###Block: Race Traits #Dwarf # Ability Name Unique Key Category of Ability Type Multiple Requirements Description Stackable? Multiple? Choose Combat bonus Save bonus Bonus to Situation Bonus to skill Class Skill Source Page Aspects diff --git a/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilitycategories.lst b/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilitycategories.lst index 160270a1abb..9f3a1f3c3c5 100644 --- a/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilitycategories.lst +++ b/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilitycategories.lst @@ -270,3 +270,7 @@ ABILITYCATEGORY:Multiple Companion Combination VISIBLE:QUALIFY EDITABLE:YES EDIT ###Block: ABILITYCATEGORY:Companion Ability Bonus VISIBLE:QUALIFY EDITABLE:YES EDITPOOL:NO FRACTIONALPOOL:NO CATEGORY:Internal TYPE:Companion Ability Bonus PLURAL:Companion Ability Bonuses DISPLAYLOCATION:Racial Abilities + + +ABILITYCATEGORY:Lore Seeker Arcane Spells VISIBLE:QUALIFY EDITABLE:YES EDITPOOL:YES FRACTIONALPOOL:NO CATEGORY:Special Ability TYPE:LoreSeekerArcaneSpells PLURAL:Lore Seeker Arcane Spells DISPLAYLOCATION:Traits +ABILITYCATEGORY:Missionary Divine Spells VISIBLE:QUALIFY EDITABLE:YES EDITPOOL:YES FRACTIONALPOOL:NO CATEGORY:Special Ability TYPE:MissionaryDivineSpells PLURAL:Missionary Divine Spells DISPLAYLOCATION:Traits From c0d8cf0e04122931446ec2fd1c8c0ca37a7a9330 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 17 Feb 2024 13:32:01 +1300 Subject: [PATCH 052/142] Bump org.springframework:spring-core from 6.1.3 to 6.1.4 (#7060) Bumps [org.springframework:spring-core](https://github.com/spring-projects/spring-framework) from 6.1.3 to 6.1.4. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.3...v6.1.4) --- updated-dependencies: - dependency-name: org.springframework:spring-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 4f6ef98b0f7..cf1d2ff5af1 100644 --- a/build.gradle +++ b/build.gradle @@ -226,7 +226,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.1.3' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.3' - implementation group: 'org.springframework', name: 'spring-core', version:'6.1.3' + implementation group: 'org.springframework', name: 'spring-core', version:'6.1.4' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' implementation('org.apache.xmlgraphics:fop:2.9') From c92ed8d4a95dba92f11fb545a20caf2aa5c02f21 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 17 Feb 2024 13:32:16 +1300 Subject: [PATCH 053/142] Bump org.springframework:spring-web from 6.1.3 to 6.1.4 (#7059) Bumps [org.springframework:spring-web](https://github.com/spring-projects/spring-framework) from 6.1.3 to 6.1.4. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.3...v6.1.4) --- updated-dependencies: - dependency-name: org.springframework:spring-web dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index cf1d2ff5af1..677ad97a709 100644 --- a/build.gradle +++ b/build.gradle @@ -224,7 +224,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.15.1' - implementation group: 'org.springframework', name: 'spring-web', version:'6.1.3' + implementation group: 'org.springframework', name: 'spring-web', version:'6.1.4' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.3' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.4' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' From 404aeb9a6f539390bfa9788e73b554023e6d32e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 17 Feb 2024 14:00:56 +1300 Subject: [PATCH 054/142] Bump org.springframework:spring-beans from 6.1.3 to 6.1.4 (#7058) Bumps [org.springframework:spring-beans](https://github.com/spring-projects/spring-framework) from 6.1.3 to 6.1.4. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.3...v6.1.4) --- updated-dependencies: - dependency-name: org.springframework:spring-beans dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 677ad97a709..5e0fc3bc9f9 100644 --- a/build.gradle +++ b/build.gradle @@ -225,7 +225,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.15.1' implementation group: 'org.springframework', name: 'spring-web', version:'6.1.4' - implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.3' + implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.4' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.4' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' From 1111ea72c80999da3a15cfb06b9c2823935c1a16 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 11:13:52 +1300 Subject: [PATCH 055/142] Bump org.beryx.runtime from 1.13.0 to 1.13.1 (#7062) Bumps org.beryx.runtime from 1.13.0 to 1.13.1. --- updated-dependencies: - dependency-name: org.beryx.runtime dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5e0fc3bc9f9..6bb04dc48f4 100644 --- a/build.gradle +++ b/build.gradle @@ -34,7 +34,7 @@ plugins { id 'com.github.ben-manes.versions' version '0.51.0' // Checks versions for plugins and dependencies id "com.dorongold.task-tree" version '2.1.1' // Prints the task dependency tree id 'org.openjfx.javafxplugin' version '0.1.0' // JavaFX support - id 'org.beryx.runtime' version '1.13.0' // Creates custom runtimes + id 'org.beryx.runtime' version '1.13.1' // Creates custom runtimes } /** From 8f5dc515787d998ce6951f21a0fe6134cc09886e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 17:05:52 +1300 Subject: [PATCH 056/142] Bump com.h3xstream.findsecbugs:findsecbugs-plugin from 1.12.0 to 1.13.0 (#7063) Bumps [com.h3xstream.findsecbugs:findsecbugs-plugin](https://github.com/find-sec-bugs/find-sec-bugs) from 1.12.0 to 1.13.0. - [Release notes](https://github.com/find-sec-bugs/find-sec-bugs/releases) - [Changelog](https://github.com/find-sec-bugs/find-sec-bugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/find-sec-bugs/find-sec-bugs/commits) --- updated-dependencies: - dependency-name: com.h3xstream.findsecbugs:findsecbugs-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 6bb04dc48f4..0d6508c1fff 100644 --- a/build.gradle +++ b/build.gradle @@ -280,7 +280,7 @@ dependencies { } testImplementation group: 'org.xmlunit', name: 'xmlunit-matchers', version:'2.9.1' - spotbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.12.0' + spotbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.13.0' } // Properties to support Ant builds From 068bb7f48983f046381da77268e0fc8b5bdad84f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 18:45:41 +1300 Subject: [PATCH 057/142] Bump de.undercouch.download from 5.5.0 to 5.6.0 (#7065) Bumps [de.undercouch.download](https://github.com/michel-kraemer/gradle-download-task) from 5.5.0 to 5.6.0. - [Release notes](https://github.com/michel-kraemer/gradle-download-task/releases) - [Commits](https://github.com/michel-kraemer/gradle-download-task/compare/5.5.0...5.6.0) --- updated-dependencies: - dependency-name: de.undercouch.download dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 0d6508c1fff..5d430dd478e 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ plugins { id 'maven-publish' // Publishing to Maven Central id 'pmd' // PMD for Java, configured further below id 'idea' // For IntelliJ IDEA users - id "de.undercouch.download" version '5.5.0' // Shows download percentage + id "de.undercouch.download" version '5.6.0' // Shows download percentage id 'edu.sc.seis.launch4j' version '3.0.5' // Creates launch4j id 'com.github.ben-manes.versions' version '0.51.0' // Checks versions for plugins and dependencies id "com.dorongold.task-tree" version '2.1.1' // Prints the task dependency tree From b0ef4ce9448055bad1d097ed1e6ae4f24ac9d51a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Mar 2024 14:10:30 +1300 Subject: [PATCH 058/142] Bump org.controlsfx:controlsfx from 11.2.0 to 11.2.1 (#7066) Bumps [org.controlsfx:controlsfx](https://github.com/controlsfx/controlsfx) from 11.2.0 to 11.2.1. - [Release notes](https://github.com/controlsfx/controlsfx/releases) - [Commits](https://github.com/controlsfx/controlsfx/compare/11.2.0...11.2.1) --- updated-dependencies: - dependency-name: org.controlsfx:controlsfx dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5d430dd478e..ee5e5dbd990 100644 --- a/build.gradle +++ b/build.gradle @@ -243,7 +243,7 @@ dependencies { } implementation group: 'net.sourceforge.argparse4j', name: 'argparse4j', version: '0.9.0' implementation group: 'org.xmlunit', name: 'xmlunit-core', version:'2.9.1' - implementation group: 'org.controlsfx', name: 'controlsfx', version:'11.2.0' + implementation group: 'org.controlsfx', name: 'controlsfx', version:'11.2.1' implementation group: 'net.sourceforge.pcgen', name: 'PCGen-base', version:'1.0.170' // The latest Base, but pcgen core would need refactoring to support it. From 9c99688595165e8513ec2d6a6b6afbd89ac6da9b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 17 Mar 2024 22:07:54 +1300 Subject: [PATCH 059/142] Bump org.springframework:spring-core from 6.1.4 to 6.1.5 (#7069) Bumps [org.springframework:spring-core](https://github.com/spring-projects/spring-framework) from 6.1.4 to 6.1.5. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.4...v6.1.5) --- updated-dependencies: - dependency-name: org.springframework:spring-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ee5e5dbd990..6e21d0de4a3 100644 --- a/build.gradle +++ b/build.gradle @@ -226,7 +226,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.1.4' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.4' - implementation group: 'org.springframework', name: 'spring-core', version:'6.1.4' + implementation group: 'org.springframework', name: 'spring-core', version:'6.1.5' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' implementation('org.apache.xmlgraphics:fop:2.9') From a8a2bd3b721c411b827bbf81cabdc6c8370a61e8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 17 Mar 2024 22:08:11 +1300 Subject: [PATCH 060/142] Bump org.springframework:spring-web from 6.1.4 to 6.1.5 (#7067) Bumps [org.springframework:spring-web](https://github.com/spring-projects/spring-framework) from 6.1.4 to 6.1.5. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.4...v6.1.5) --- updated-dependencies: - dependency-name: org.springframework:spring-web dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 6e21d0de4a3..69a33665b3f 100644 --- a/build.gradle +++ b/build.gradle @@ -224,7 +224,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.15.1' - implementation group: 'org.springframework', name: 'spring-web', version:'6.1.4' + implementation group: 'org.springframework', name: 'spring-web', version:'6.1.5' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.4' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.5' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' From 4f8ffa0b53dd48a1b060bd880b4b05aa196d937b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 17 Mar 2024 22:29:59 +1300 Subject: [PATCH 061/142] Bump org.springframework:spring-beans from 6.1.4 to 6.1.5 (#7068) Bumps [org.springframework:spring-beans](https://github.com/spring-projects/spring-framework) from 6.1.4 to 6.1.5. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.4...v6.1.5) --- updated-dependencies: - dependency-name: org.springframework:spring-beans dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 69a33665b3f..7b7924f9659 100644 --- a/build.gradle +++ b/build.gradle @@ -225,7 +225,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.15.1' implementation group: 'org.springframework', name: 'spring-web', version:'6.1.5' - implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.4' + implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.5' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.5' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' From 96e45cb13980efea60d9093fc452176881a96bef Mon Sep 17 00:00:00 2001 From: LegacyKing Date: Mon, 25 Mar 2024 14:18:22 -0700 Subject: [PATCH 062/142] DATA-4359 Evangelist Aligned Class feature (from Inner Sea Gods) --- .../players_guide/rowpg_abilities_class.lst | 17 +++++++++++++ .../players_guide/rowpg_classes.lst | 15 ++---------- .../inner_sea_gods/_inner_sea_gods.pcc | 3 +++ .../support/abilities_rowpg.lst | 24 +++++++++++++++++++ 4 files changed, 46 insertions(+), 13 deletions(-) create mode 100644 data/pathfinder/paizo/campaign_setting/inner_sea_gods/support/abilities_rowpg.lst diff --git a/data/pathfinder/paizo/adventure_path/reign_of_winter/players_guide/rowpg_abilities_class.lst b/data/pathfinder/paizo/adventure_path/reign_of_winter/players_guide/rowpg_abilities_class.lst index f0ebd6ce927..824c85b369b 100644 --- a/data/pathfinder/paizo/adventure_path/reign_of_winter/players_guide/rowpg_abilities_class.lst +++ b/data/pathfinder/paizo/adventure_path/reign_of_winter/players_guide/rowpg_abilities_class.lst @@ -4,6 +4,23 @@ SOURCELONG:Reign of Winter Player's Guide SOURCESHORT:ROWPG SOURCEWEB:http://paizo.com/products/btpy8x1t?Pathfinder-Adventure-Path-Reign-of-Winter-Players-Guide SOURCEDATE:2013-02 # Original Entry by: Andrew Maitland +###Block: Class Feature Progression 2.0 +Winter Witch CATEGORY:Class DEFINE:WinterWitch_CFP_Level|0 BONUS:VAR|WinterWitch_CFP_Level,WitchLVL|WinterWitchLVL + +###Block: Actual Grantors +CATEGORY=Class|Winter Witch.MOD ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Weapon and Armor Proficiency|PREVARGTEQ:WinterWitch_CFP_Level,1 +CATEGORY=Class|Winter Witch.MOD ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Spells per Day|PREVARGTEQ:WinterWitch_CFP_Level,1 +CATEGORY=Class|Winter Witch.MOD ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Hyperboreal Patronage|PREVARGTEQ:WinterWitch_CFP_Level,1 +CATEGORY=Class|Winter Witch.MOD ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Winter Witchcraft|PREVARGTEQ:WinterWitch_CFP_Level,1 +CATEGORY=Class|Winter Witch.MOD ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Freeze and Thaw|PREVARGTEQ:WinterWitch_CFP_Level,2 +CATEGORY=Class|Winter Witch.MOD ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Unnatural Cold|PREVARGTEQ:WinterWitch_CFP_Level,3 +CATEGORY=Class|Winter Witch.MOD ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Sculpt Ice and Snow|PREVARGTEQ:WinterWitch_CFP_Level,4 +CATEGORY=Class|Winter Witch.MOD ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Winter Hex|PREVARGTEQ:WinterWitch_CFP_Level,5 +CATEGORY=Class|Winter Witch.MOD ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Blizzard Sight|PREVARGTEQ:WinterWitch_CFP_Level,6 +CATEGORY=Class|Winter Witch.MOD ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Unearthly Cold|PREVARGTEQ:WinterWitch_CFP_Level,8 +CATEGORY=Class|Winter Witch.MOD ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Iceglide|PREVARGTEQ:WinterWitch_CFP_Level,10 +CATEGORY=Class|Winter Witch.MOD ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Inexorable Cold|PREVARGTEQ:WinterWitch_CFP_Level,10 + ###Block: Winter Witch (Witch) # Ability Name Unique Key Category of Ability Type Required Ability Required Class Multiple Requirements Serves As Define Innate Spells Description Ability Bonus Ability Pool Bonus DC Modify VAR Allow Follower Allowed Companions Cost Source Page FACT Winter Witch KEY:Witch Archetype ~ Winter Witch CATEGORY:Archetype TYPE:Archetype.WitchArchetype PRECLASS:1,Witch=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Witch Archetype ~ Winter Witch],[!PREFACT:1,ABILITIES,Witch_Archetype_Familiar=True,Witch_Archetype_Hex4=True] DESC:The descendents of Baba Yaga rule the frozen realm of Irrisen, and possess a unique power stemming from their otherworldly origin and their ties to cold magic. This power is partly magical, partly political, and partly cultural. Known as winter witches, these scions of Baba Yaga have not bothered to hide their secrets from outsiders, for they understand that those who see winter witches not native to Irrisen working their frozen magic will simply assume the witches are agents of Irrisen. By opening up their traditions to those who have no direct blood connection to Baba Yaga or the ruling families of Irrisen, they spread the notoriety and infamy of their wintry magic far beyond what they could accomplish on their own. While winter witches are most commonly encountered in Irrisen, they could be encountered in any part of the Inner Sea region, where they work to increase Irrisen's notoriety with each frozen spell and manipulative hex they cast. ABILITY:Witch Class Feature|AUTOMATIC|Winter Witch ~ Familiar|PRECLASS:1,Witch=1 ABILITY:Witch Class Feature|AUTOMATIC|Winter Witch ~ Cantrips|PRECLASS:1,Witch=1 ABILITY:Witch Class Feature|AUTOMATIC|Winter Witch ~ Patron|PRECLASS:1,Witch=1 ABILITY:Witch Class Feature|AUTOMATIC|Winter Witch ~ Ice Magic|PRECLASS:1,Witch=1 ABILITY:Witch Class Feature|AUTOMATIC|Winter Witch ~ Cold Flesh|PRECLASS:1,Witch=1 ABILITY:Witch Class Feature|AUTOMATIC|Winter Witch ~ Hexes|PRECLASS:1,Witch=1 COST:0 SOURCEPAGE:p.11 FACT:Witch_Archetype_Familiar|true FACT:Witch_Archetype_Hex4|true FACT:Witch_CF_Familiar|true FACT:Witch_CF_Hex4|true diff --git a/data/pathfinder/paizo/adventure_path/reign_of_winter/players_guide/rowpg_classes.lst b/data/pathfinder/paizo/adventure_path/reign_of_winter/players_guide/rowpg_classes.lst index ceef8812d1c..cdfe48643e0 100644 --- a/data/pathfinder/paizo/adventure_path/reign_of_winter/players_guide/rowpg_classes.lst +++ b/data/pathfinder/paizo/adventure_path/reign_of_winter/players_guide/rowpg_classes.lst @@ -5,24 +5,13 @@ SOURCELONG:Reign of Winter Player's Guide SOURCESHORT:ROWPG SOURCEWEB:http://pai # Class Name Hit Dice Type Max Level Combat bonus Save bonus Modify VAR -CLASS:Winter Witch HD:6 TYPE:PC.Prestige MAXLEVEL:10 BONUS:COMBAT|BASEAB|classlevel("APPLIEDAS=NONEPIC")*1/2|TYPE=Base.REPLACE|PREVAREQ:UseAlternateBABProgression,0 BONUS:SAVE|BASE.Fortitude,BASE.Reflex|classlevel("APPLIEDAS=NONEPIC")+1/3|PREVAREQ:UseAlternateSaveProgression,0 BONUS:SAVE|BASE.Will|classlevel("APPLIEDAS=NONEPIC")+1/2|PREVAREQ:UseAlternateSaveProgression,0 BONUS:VAR|WitchLVL|CL BONUS:VAR|ClassSavePoor_Fortitude|classlevel("APPLIEDAS=NONEPIC")|PREVAREQ:UseFractionalSave,1 BONUS:VAR|ClassSavePoor_Reflex|classlevel("APPLIEDAS=NONEPIC")|PREVAREQ:UseFractionalSave,1 BONUS:VAR|ClassSaveGood_Will|classlevel("APPLIEDAS=NONEPIC")|PREVAREQ:UseFractionalSave,1 +CLASS:Winter Witch HD:6 TYPE:PC.Prestige MAXLEVEL:10 BONUS:COMBAT|BASEAB|classlevel("APPLIEDAS=NONEPIC")*1/2|TYPE=Base.REPLACE|PREVAREQ:UseAlternateBABProgression,0 BONUS:SAVE|BASE.Fortitude,BASE.Reflex|classlevel("APPLIEDAS=NONEPIC")+1/3|PREVAREQ:UseAlternateSaveProgression,0 BONUS:SAVE|BASE.Will|classlevel("APPLIEDAS=NONEPIC")+1/2|PREVAREQ:UseAlternateSaveProgression,0 DEFINE:WinterWitchLVL|0 BONUS:VAR|WinterWitchLVL|CL BONUS:VAR|ClassSavePoor_Fortitude|classlevel("APPLIEDAS=NONEPIC")|PREVAREQ:UseFractionalSave,1 BONUS:VAR|ClassSavePoor_Reflex|classlevel("APPLIEDAS=NONEPIC")|PREVAREQ:UseFractionalSave,1 BONUS:VAR|ClassSaveGood_Will|classlevel("APPLIEDAS=NONEPIC")|PREVAREQ:UseFractionalSave,1 # Class Name Required Skill Required Text CLASS:Winter Witch PRESKILL:2,Knowledge (Arcana)=5,Spellcraft=5 PRETEXT:Skills: Knowledge (arcana) 5 ranks, Spellcraft 5 ranks. Spells: Able to cast at least three different spells with the cold descriptor, one of which must be of 3rd level or higher. Special: Must have a patron and the ice magic class feature (Inner Sea Magic 43). # Class Name Skill Pts/Lvl Class Skill CLASS:Winter Witch STARTSKILLPTS:2 CSKILL:Bluff|Intimidate|Knowledge (Arcana)|Knowledge (Nobility)|Survival|Use Magic Device ###Block: -1 ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Weapon and Armor Proficiency -1 ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Spells per Day -1 ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Hyperboreal Patronage -2 ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Winter Witchcraft -3 ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Freeze and Thaw -4 ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Unnatural Cold -5 ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Sculpt Ice and Snow -6 ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Winter Hex -7 ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Blizzard Sight -8 ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Unearthly Cold -10 ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Iceglide -10 ABILITY:Winter Witch Class Feature|AUTOMATIC|Winter Witch ~ Inexorable Cold +1 ABILITY:Class|AUTOMATIC|Winter Witch ###Block: 2:REPEATLEVEL:1 ADD:SPELLCASTER|Witch diff --git a/data/pathfinder/paizo/campaign_setting/inner_sea_gods/_inner_sea_gods.pcc b/data/pathfinder/paizo/campaign_setting/inner_sea_gods/_inner_sea_gods.pcc index d1fa98a324f..3cb9bc19c47 100644 --- a/data/pathfinder/paizo/campaign_setting/inner_sea_gods/_inner_sea_gods.pcc +++ b/data/pathfinder/paizo/campaign_setting/inner_sea_gods/_inner_sea_gods.pcc @@ -69,6 +69,9 @@ ABILITY:support/isg_abilities_races_b4.lst|PRECAMPAIGN:1,INCLUDES=Bestiary 4 KIT:support/isg_kits_race_b4.lst|PRECAMPAIGN:1,INCLUDES=Bestiary 4 RACE:support/isg_races_b4.lst|PRECAMPAIGN:1,INCLUDES=Bestiary 4 +# Additional Support +ABILITY:support/abilities_rowpg.lst|PRECAMPAIGN:1,INCLUDES=Reign of Winter Player's Guide + # ENTRY DATE: 2015-02 # LST MONKEY: Andrew Maitland # LICENSE MONKEY: Paul Grosse (2015-11-04) diff --git a/data/pathfinder/paizo/campaign_setting/inner_sea_gods/support/abilities_rowpg.lst b/data/pathfinder/paizo/campaign_setting/inner_sea_gods/support/abilities_rowpg.lst new file mode 100644 index 00000000000..b63f550d156 --- /dev/null +++ b/data/pathfinder/paizo/campaign_setting/inner_sea_gods/support/abilities_rowpg.lst @@ -0,0 +1,24 @@ +# Reign of Winter Player's Guide + + + + + + + + + + + + + + + + + + + + + +# Winter Witch +Winter Witch CATEGORY:Aligned Class TYPE:Aligned Class PREABILITY:1,CATEGORY=Class,Winter Witch BONUS:PCLEVEL|Winter Witch|EvangelistLVL-1 BONUS:VAR|WinterWitchLVL|EvangelistLVL-1 ADD:SPELLCASTER|Witch BONUS:CASTERLEVEL|Witch|WinterWitchLVL-2 BONUS:PCLEVEL|Witch|var("WinterWitchLVL")-2 From c271a9fa22d2c6332317328e518de6fa7c0576d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Mar 2024 04:25:31 +0000 Subject: [PATCH 063/142] Bump org.openjfx:javafx-graphics from 17 to 22 Bumps org.openjfx:javafx-graphics from 17 to 22. --- updated-dependencies: - dependency-name: org.openjfx:javafx-graphics dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 7b7924f9659..c540124e7a8 100644 --- a/build.gradle +++ b/build.gradle @@ -274,7 +274,7 @@ dependencies { constraints { implementation('org.openjfx:javafx-base:17') implementation('org.openjfx:javafx-controls:17') - implementation('org.openjfx:javafx-graphics:17') { + implementation('org.openjfx:javafx-graphics:22') { because 'Monocle uses 12.0.1+2 that does not support Mac`s ARM' } } From e2cba62ead872099629800b6b41c55b63a6186b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Mar 2024 04:25:07 +0000 Subject: [PATCH 064/142] Bump org.openjfx:javafx-base from 17 to 22 Bumps org.openjfx:javafx-base from 17 to 22. --- updated-dependencies: - dependency-name: org.openjfx:javafx-base dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c540124e7a8..99abdd9caac 100644 --- a/build.gradle +++ b/build.gradle @@ -272,7 +272,7 @@ dependencies { // https://github.com/TestFX/Monocle/issues/79 testImplementation group: 'org.testfx', name: 'openjfx-monocle', version: 'jdk-12.0.1+2' constraints { - implementation('org.openjfx:javafx-base:17') + implementation('org.openjfx:javafx-base:22') implementation('org.openjfx:javafx-controls:17') implementation('org.openjfx:javafx-graphics:22') { because 'Monocle uses 12.0.1+2 that does not support Mac`s ARM' From bdd7fa4b920f54a976c56c7c9a87edd02667f048 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Mar 2024 21:52:22 +1300 Subject: [PATCH 065/142] Bump commons-io:commons-io from 2.15.1 to 2.16.0 (#7075) Bumps commons-io:commons-io from 2.15.1 to 2.16.0. --- updated-dependencies: - dependency-name: commons-io:commons-io dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 99abdd9caac..6ca3b99efcf 100644 --- a/build.gradle +++ b/build.gradle @@ -222,7 +222,7 @@ compileJava { */ dependencies { - implementation group: 'commons-io', name: 'commons-io', version:'2.15.1' + implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' implementation group: 'org.springframework', name: 'spring-web', version:'6.1.5' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.5' From c6d1cb4649ea4f2dc289482434ff27465f78aac1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 30 Mar 2024 21:52:32 +1300 Subject: [PATCH 066/142] Bump org.openjfx:javafx-controls from 17 to 22 (#7071) Bumps org.openjfx:javafx-controls from 17 to 22. --- updated-dependencies: - dependency-name: org.openjfx:javafx-controls dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 6ca3b99efcf..a0d15395604 100644 --- a/build.gradle +++ b/build.gradle @@ -273,7 +273,7 @@ dependencies { testImplementation group: 'org.testfx', name: 'openjfx-monocle', version: 'jdk-12.0.1+2' constraints { implementation('org.openjfx:javafx-base:22') - implementation('org.openjfx:javafx-controls:17') + implementation('org.openjfx:javafx-controls:22') implementation('org.openjfx:javafx-graphics:22') { because 'Monocle uses 12.0.1+2 that does not support Mac`s ARM' } From 3336a412ef3d8de9b7dd3a311924884420578158 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Apr 2024 04:40:45 +0000 Subject: [PATCH 067/142] Bump com.dorongold.task-tree from 2.1.1 to 3.0.0 Bumps com.dorongold.task-tree from 2.1.1 to 3.0.0. --- updated-dependencies: - dependency-name: com.dorongold.task-tree dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a0d15395604..e0d5274dbe4 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ plugins { id "de.undercouch.download" version '5.6.0' // Shows download percentage id 'edu.sc.seis.launch4j' version '3.0.5' // Creates launch4j id 'com.github.ben-manes.versions' version '0.51.0' // Checks versions for plugins and dependencies - id "com.dorongold.task-tree" version '2.1.1' // Prints the task dependency tree + id "com.dorongold.task-tree" version '3.0.0' // Prints the task dependency tree id 'org.openjfx.javafxplugin' version '0.1.0' // JavaFX support id 'org.beryx.runtime' version '1.13.1' // Creates custom runtimes } From 1fa2f0f4fd4787906684814d0f24c46548d6ae9d Mon Sep 17 00:00:00 2001 From: Frank Edwards Date: Sat, 6 Apr 2024 16:50:06 -0400 Subject: [PATCH 068/142] Update pcgen.sh (#7078) * Update pcgen.sh Added directory change to code/pcgen.sh to fix double-clicking from the macOS Finder GUI. * Update pcgen.sh Added use case description for the pigeon.sh changes --- code/pcgen.sh | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/code/pcgen.sh b/code/pcgen.sh index b77ba592fc8..6c0b3c70241 100755 --- a/code/pcgen.sh +++ b/code/pcgen.sh @@ -1,6 +1,24 @@ #!/bin/sh set -e +# Most GUIs will change directory to the location of the script +# when the script is double-clicked. But nooooo, not macOS. +# So if we don't find the script in the current directory, we +# need to find it. +if [ ! -e ./pcgen.sh ]; then + # We're not in the directory where the script lives. + # Change to it so relative paths will work. + if ! cd "${0%/*}"; then + # Can't change to the directory containing this script?? + # Could be because invoker doesn't put full path in $0, + # but then how are scripts supposed to figure out where + # they are executed from? I suppose we could check the + # PATH iteratively? Maybe in the next version. + echo >&2 "pcgen.sh: Not in proper directory (must be in same directory as 'pcgen.sh')" + exit 1 + fi +fi + available_memory="unknown" default_min_memory=256 default_max_memory=512 From 5479f0e216d140276bcc1ecb04280088f06378d0 Mon Sep 17 00:00:00 2001 From: LegacyKing Date: Sun, 7 Apr 2024 00:41:31 -0700 Subject: [PATCH 069/142] Patch data issues --- .../acg_abilities_class.lst | 4 +- .../apg_abilities_class.lst | 24 ++++++------ .../core_essentials/ce_abilities_race.lst | 39 ++++++++----------- .../core_essentials/ce_templates.lst | 5 +++ .../core_rulebook/cr_spells.lst | 2 +- .../ultimate_equipment/ue_abilities.lst | 2 +- .../ue_equip_magic_items.lst | 2 +- .../ultimate_magic/um_feats.lst | 4 +- 8 files changed, 41 insertions(+), 41 deletions(-) diff --git a/data/pathfinder/paizo/roleplaying_game/advanced_class_guide/acg_abilities_class.lst b/data/pathfinder/paizo/roleplaying_game/advanced_class_guide/acg_abilities_class.lst index 681750bb6fd..f9770fb02d1 100644 --- a/data/pathfinder/paizo/roleplaying_game/advanced_class_guide/acg_abilities_class.lst +++ b/data/pathfinder/paizo/roleplaying_game/advanced_class_guide/acg_abilities_class.lst @@ -3526,8 +3526,8 @@ Shared Focus KEY:Wild Hunter ~ Shared Focus CATEGORY:Special Ability # ============================== # Rogue Archetypes # ============================== -Counterfeit Mage KEY:Rogue Archetype ~ Counterfeit Mage CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTalent4 PRECLASS:1,Rogue=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Counterfeit Mage],[!PREABILITY:1,CATEGORY=Archetype,TYPE.RogueTrapfinding,TYPE.RogueTalent4] DESC:Charlatans and stage magicians use slight of hand to fake magic. A counterfeit mage goes a step further, parroting the motions and activation phrases used by arcane casters to activate wands or other magical accoutrements. While counterfeit mages rarely fool a real wizard, their command of the arcane is enough to convince most lay people. ABILITY:Rogue Class Feature|AUTOMATIC|Counterfeit Mage ~ Magical Expertise|PRECLASS:1,Rogue=1 ABILITY:Rogue Class Feature|AUTOMATIC|Counterfeit Mage ~ Signature Wand|PRECLASS:1,Rogue=4 ABILITY:Rogue Class Feature|AUTOMATIC|Counterfeit Mage ~ Wand Adept|PRECLASS:1,Rogue=6 COST:0 SOURCEPAGE:p.109 ASPECT:Archetype Base Class|Rogue -Underground Chemist KEY:Rogue Archetype ~ Underground Chemist CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueEvasion.RogueTalent4.RogueAdvancedTalents PRECLASS:1,Rogue=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Underground Chemist],[!PREABILITY:1,CATEGORY=Archetype,TYPE.RogueEvasion,TYPE.RogueTalent4,TYPE.RogueAdvancedTalents] DESC:Underground chemists are part of the rotting, fetid underbelly of the alchemical world. While underground chemists can't hold a candle to dedicated alchemists, they're tricky and dangerous with alchemical substances and potions. ABILITY:Rogue Class Feature|AUTOMATIC|Underground Chemist ~ Chemical Weapons|PRECLASS:1,Rogue=2 ABILITY:Rogue Class Feature|AUTOMATIC|Underground Chemist ~ Precise Splash Weapons|PRECLASS:1,Rogue=4 ABILITY:Rogue Class Feature|AUTOMATIC|Underground Chemist ~ Discovery|PRECLASS:1,Rogue=10 COST:0 SOURCEPAGE:p.109 ASPECT:Archetype Base Class|Rogue +Counterfeit Mage KEY:Rogue Archetype ~ Counterfeit Mage CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTalent4 PREMULT:1,[PRECLASS:1,Rogue=1],[PREFACT:1,ABILITIES,ActAsClass_Rogue=true] PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Counterfeit Mage],[!PREABILITY:1,CATEGORY=Archetype,TYPE.RogueTrapfinding,TYPE.RogueTalent4] DESC:Charlatans and stage magicians use slight of hand to fake magic. A counterfeit mage goes a step further, parroting the motions and activation phrases used by arcane casters to activate wands or other magical accoutrements. While counterfeit mages rarely fool a real wizard, their command of the arcane is enough to convince most lay people. ABILITY:Rogue Class Feature|AUTOMATIC|Counterfeit Mage ~ Magical Expertise|PREVARGTEQ:Rogue_CFP_Level,1 ABILITY:Rogue Class Feature|AUTOMATIC|Counterfeit Mage ~ Signature Wand|PREVARGTEQ:Rogue_CFP_Level,4 ABILITY:Rogue Class Feature|AUTOMATIC|Counterfeit Mage ~ Wand Adept|PREVARGTEQ:Rogue_CFP_Level,6 COST:0 SOURCEPAGE:p.109 ASPECT:Archetype Base Class|Rogue +Underground Chemist KEY:Rogue Archetype ~ Underground Chemist CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueEvasion.RogueTalent4.RogueAdvancedTalents PREMULT:1,[PRECLASS:1,Rogue=1],[PREFACT:1,ABILITIES,ActAsClass_Rogue=true] PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Underground Chemist],[!PREABILITY:1,CATEGORY=Archetype,TYPE.RogueEvasion,TYPE.RogueTalent4,TYPE.RogueAdvancedTalents] DESC:Underground chemists are part of the rotting, fetid underbelly of the alchemical world. While underground chemists can't hold a candle to dedicated alchemists, they're tricky and dangerous with alchemical substances and potions. ABILITY:Rogue Class Feature|AUTOMATIC|Underground Chemist ~ Chemical Weapons|PREVARGTEQ:Rogue_CFP_Level,2 ABILITY:Rogue Class Feature|AUTOMATIC|Underground Chemist ~ Precise Splash Weapons|PREVARGTEQ:Rogue_CFP_Level,4 ABILITY:Rogue Class Feature|AUTOMATIC|Underground Chemist ~ Discovery|PREVARGTEQ:Rogue_CFP_Level,10 COST:0 SOURCEPAGE:p.109 ASPECT:Archetype Base Class|Rogue # Counterfeit Mage Magical Expertise KEY:Counterfeit Mage ~ Magical Expertise CATEGORY:Special Ability TYPE:Counterfeit Mage Class Feature.Rogue Class Feature.SpecialQuality.Extraordinary DESC:A counterfeit mage adds +%1 his level to Disable Device checks to disarm magical traps, Perception checks to find magical traps, and Use Magic Device checks to activate scrolls and wands. A counterfeit mage can use Disable Device to disarm magic traps.|floor(RogueLVL/2) SOURCEPAGE:p.109 diff --git a/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilities_class.lst b/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilities_class.lst index 5c23dc04964..032d50eb613 100644 --- a/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilities_class.lst +++ b/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilities_class.lst @@ -2938,18 +2938,18 @@ Thoughtful Reexamining KEY:Rogue Talent ~ Thoughtful Reexamining CATEGORY:Speci ###Block: Rogue archetypes ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ # Ability Name Unique Key Category of Ability Type Required Class Multiple Requirements Description Ability Cost Source Page Aspects -Acrobat KEY:Rogue Archetype ~ Acrobat CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTrapSense PRECLASS:1,Rogue=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Acrobat],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding,TYPE=RogueTrapSense] DESC:Agility and daring are both excellent rogue traits, and their confluence can create spectacular feats of acrobatics. Whether they are daring thieves, infiltrating assassins, or intrepid spies, proper training in acrobatics is a valuable boon for rogues. ABILITY:Rogue Class Feature|AUTOMATIC|Acrobat ~ Expert Acrobat|PRECLASS:1,Rogue=1 ABILITY:Rogue Class Feature|AUTOMATIC|Acrobat ~ Second Chance|PRECLASS:1,Rogue=3 COST:0 SOURCEPAGE:p.132 ASPECT:Archetype Base Class|Rogue -Burglar KEY:Rogue Archetype ~ Burglar CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueUncannyDodge.RogueImprovedUncannyDodge PRECLASS:1,Rogue=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Burglar],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueUncannyDodge,TYPE=RogueImprovedUncannyDodge] ABILITY:Rogue Class Feature|AUTOMATIC|Rogue ~ Careful Disarm|PRECLASS:1,Rogue=4 ABILITY:Rogue Class Feature|AUTOMATIC|Burglar ~ Distraction|PRECLASS:1,Rogue=8 COST:0 SOURCEPAGE:p.132 ASPECT:Archetype Base Class|Rogue -Cutpurse KEY:Rogue Archetype ~ Cutpurse CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTrapSense PRECLASS:1,Rogue=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Cutpurse],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding,TYPE=RogueTrapSense] ABILITY:Rogue Class Feature|AUTOMATIC|Cutpurse ~ Measure the Mark|PRECLASS:1,Rogue=1 ABILITY:Rogue Class Feature|AUTOMATIC|Cutpurse ~ Stab and Grab|PRECLASS:1,Rogue=3 COST:0 SOURCEPAGE:p.132 ASPECT:Archetype Base Class|Rogue -Investigator KEY:Rogue Archetype ~ Investigator CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding PRECLASS:1,Rogue=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Investigator],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding] ABILITY:Rogue Class Feature|AUTOMATIC|Investigator ~ Follow Up|PRECLASS:1,Rogue=1 COST:0 SOURCEPAGE:p.133 ASPECT:Archetype Base Class|Rogue -Poisoner KEY:Rogue Archetype ~ Poisoner CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTrapSense PRECLASS:1,Rogue=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Poisoner],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding,TYPE=RogueTrapSense] ABILITY:Rogue Class Feature|AUTOMATIC|Rogue ~ Poison Use|PRECLASS:1,Rogue=1 ABILITY:Rogue Class Feature|AUTOMATIC|Poisoner ~ Master Poisoner|PRECLASS:1,Rogue=3 COST:0 SOURCEPAGE:p.134 ASPECT:Archetype Base Class|Rogue -Rake KEY:Rogue Archetype ~ Rake CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTrapSense PRECLASS:1,Rogue=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Rake],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding,TYPE=RogueTrapSense] ABILITY:Rogue Class Feature|AUTOMATIC|Rake ~ Bravado's Blade|PRECLASS:1,Rogue=1 ABILITY:Rogue Class Feature|AUTOMATIC|Rake ~ Rake's Smile|PRECLASS:1,Rogue=3 COST:0 SOURCEPAGE:p.134 ASPECT:Archetype Base Class|Rogue -Scout KEY:Rogue Archetype ~ Scout CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueUncannyDodge.RogueImprovedUncannyDodge PRECLASS:1,Rogue=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Scout],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueUncannyDodge,TYPE=RogueImprovedUncannyDodge] DESC:Not all rogues live in the city. Scouts frequently roam the wilderness, often banding together as bandits, but sometimes serving as guides, as trailblazers, or as companions to a ranger or barbarian warrior. More comfortable with sneaking and hiding outdoors, the scout is still effective in the city and the dungeon. ABILITY:Rogue Class Feature|AUTOMATIC|Scout ~ Scout's Charge|PRECLASS:1,Rogue=4 ABILITY:Rogue Class Feature|AUTOMATIC|Scout ~ Skirmisher|PRECLASS:1,Rogue=8 COST:0 SOURCEPAGE:p.134 ASPECT:Archetype Base Class|Rogue -Sniper KEY:Rogue Archetype ~ Sniper CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTrapSense PRECLASS:1,Rogue=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Sniper],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding,TYPE=RogueTrapSense] ABILITY:Rogue Class Feature|AUTOMATIC|Sniper ~ Accuracy|PRECLASS:1,Rogue=1 ABILITY:Rogue Class Feature|AUTOMATIC|Sniper ~ Deadly Range|PRECLASS:1,Rogue=3 COST:0 SOURCEPAGE:p.134 ASPECT:Archetype Base Class|Rogue -Spy KEY:Rogue Archetype ~ Spy CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTrapSense PRECLASS:1,Rogue=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Spy],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding,TYPE=RogueTrapSense] ABILITY:Rogue Class Feature|AUTOMATIC|Spy ~ Skilled Liar|PRECLASS:1,Rogue=1 ABILITY:Rogue Class Feature|AUTOMATIC|Rogue ~ Poison Use|PRECLASS:1,Rogue=3 COST:0 SOURCEPAGE:p.135 ASPECT:Archetype Base Class|Rogue -Swashbuckler KEY:Rogue Archetype ~ Swashbuckler CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTrapSense PRECLASS:1,Rogue=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Swashbuckler],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding,TYPE=RogueTrapSense] DESC:A paragon of mobile swordplay, the swashbuckler is a rogue who focuses almost exclusively on honing her skill at arms and perfecting daring acrobatic moves and elaborate flourishes that border on performance. ABILITY:Rogue Class Feature|AUTOMATIC|Swashbuckler ~ Martial Training|PRECLASS:1,Rogue=1 ABILITY:Rogue Class Feature|AUTOMATIC|Swashbuckler ~ Daring|PRECLASS:1,Rogue=3 COST:0 SOURCEPAGE:p.135 ASPECT:Archetype Base Class|Rogue -Thug KEY:Rogue Archetype ~ Thug CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTrapSense PRECLASS:1,Rogue=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Thug],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding,TYPE=RogueTrapSense] ABILITY:Rogue Class Feature|AUTOMATIC|Thug ~ Frightening|PRECLASS:1,Rogue=1 ABILITY:Rogue Class Feature|AUTOMATIC|Thug ~ Brutal Beating|PRECLASS:1,Rogue=3 COST:0 SOURCEPAGE:p.135 ASPECT:Archetype Base Class|Rogue -Trapsmith KEY:Rogue Archetype ~ Trapsmith CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueUncannyDodge.RogueImprovedUncannyDodge PRECLASS:1,Rogue=1 PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Trapsmith],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueUncannyDodge,TYPE=RogueImprovedUncannyDodge] ABILITY:Rogue Class Feature|AUTOMATIC|Rogue ~ Careful Disarm|PRECLASS:1,Rogue=4 ABILITY:Rogue Class Feature|AUTOMATIC|Trapsmith ~ Trap Master|PRECLASS:1,Rogue=8 COST:0 SOURCEPAGE:p.135 ASPECT:Archetype Base Class|Rogue +Acrobat KEY:Rogue Archetype ~ Acrobat CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTrapSense PREMULT:1,[PRECLASS:1,Rogue=1],[PREFACT:1,ABILITIES,ActAsClass_Rogue=true] PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Acrobat],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding,TYPE=RogueTrapSense] DESC:Agility and daring are both excellent rogue traits, and their confluence can create spectacular feats of acrobatics. Whether they are daring thieves, infiltrating assassins, or intrepid spies, proper training in acrobatics is a valuable boon for rogues. ABILITY:Rogue Class Feature|AUTOMATIC|Acrobat ~ Expert Acrobat|PREVARGTEQ:Rogue_CFP_Level,1 ABILITY:Rogue Class Feature|AUTOMATIC|Acrobat ~ Second Chance|PREVARGTEQ:Rogue_CFP_Level,3 COST:0 SOURCEPAGE:p.132 ASPECT:Archetype Base Class|Rogue +Burglar KEY:Rogue Archetype ~ Burglar CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueUncannyDodge.RogueImprovedUncannyDodge PREMULT:1,[PRECLASS:1,Rogue=1],[PREFACT:1,ABILITIES,ActAsClass_Rogue=true] PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Burglar],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueUncannyDodge,TYPE=RogueImprovedUncannyDodge] ABILITY:Rogue Class Feature|AUTOMATIC|Rogue ~ Careful Disarm|PREVARGTEQ:Rogue_CFP_Level,4 ABILITY:Rogue Class Feature|AUTOMATIC|Burglar ~ Distraction|PREVARGTEQ:Rogue_CFP_Level,8 COST:0 SOURCEPAGE:p.132 ASPECT:Archetype Base Class|Rogue +Cutpurse KEY:Rogue Archetype ~ Cutpurse CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTrapSense PREMULT:1,[PRECLASS:1,Rogue=1],[PREFACT:1,ABILITIES,ActAsClass_Rogue=true] PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Cutpurse],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding,TYPE=RogueTrapSense] ABILITY:Rogue Class Feature|AUTOMATIC|Cutpurse ~ Measure the Mark|PREVARGTEQ:Rogue_CFP_Level,1 ABILITY:Rogue Class Feature|AUTOMATIC|Cutpurse ~ Stab and Grab|PREVARGTEQ:Rogue_CFP_Level,3 COST:0 SOURCEPAGE:p.132 ASPECT:Archetype Base Class|Rogue +Investigator KEY:Rogue Archetype ~ Investigator CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding PREMULT:1,[PRECLASS:1,Rogue=1],[PREFACT:1,ABILITIES,ActAsClass_Rogue=true] PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Investigator],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding] ABILITY:Rogue Class Feature|AUTOMATIC|Investigator ~ Follow Up|PREVARGTEQ:Rogue_CFP_Level,1 COST:0 SOURCEPAGE:p.133 ASPECT:Archetype Base Class|Rogue +Poisoner KEY:Rogue Archetype ~ Poisoner CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTrapSense PREMULT:1,[PRECLASS:1,Rogue=1],[PREFACT:1,ABILITIES,ActAsClass_Rogue=true] PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Poisoner],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding,TYPE=RogueTrapSense] ABILITY:Rogue Class Feature|AUTOMATIC|Rogue ~ Poison Use|PREVARGTEQ:Rogue_CFP_Level,1 ABILITY:Rogue Class Feature|AUTOMATIC|Poisoner ~ Master Poisoner|PREVARGTEQ:Rogue_CFP_Level,3 COST:0 SOURCEPAGE:p.134 ASPECT:Archetype Base Class|Rogue +Rake KEY:Rogue Archetype ~ Rake CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTrapSense PREMULT:1,[PRECLASS:1,Rogue=1],[PREFACT:1,ABILITIES,ActAsClass_Rogue=true] PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Rake],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding,TYPE=RogueTrapSense] ABILITY:Rogue Class Feature|AUTOMATIC|Rake ~ Bravado's Blade|PREVARGTEQ:Rogue_CFP_Level,1 ABILITY:Rogue Class Feature|AUTOMATIC|Rake ~ Rake's Smile|PREVARGTEQ:Rogue_CFP_Level,3 COST:0 SOURCEPAGE:p.134 ASPECT:Archetype Base Class|Rogue +Scout KEY:Rogue Archetype ~ Scout CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueUncannyDodge.RogueImprovedUncannyDodge PREMULT:1,[PRECLASS:1,Rogue=1],[PREFACT:1,ABILITIES,ActAsClass_Rogue=true] PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Scout],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueUncannyDodge,TYPE=RogueImprovedUncannyDodge] DESC:Not all rogues live in the city. Scouts frequently roam the wilderness, often banding together as bandits, but sometimes serving as guides, as trailblazers, or as companions to a ranger or barbarian warrior. More comfortable with sneaking and hiding outdoors, the scout is still effective in the city and the dungeon. ABILITY:Rogue Class Feature|AUTOMATIC|Scout ~ Scout's Charge|PREVARGTEQ:Rogue_CFP_Level,4 ABILITY:Rogue Class Feature|AUTOMATIC|Scout ~ Skirmisher|PREVARGTEQ:Rogue_CFP_Level,8 COST:0 SOURCEPAGE:p.134 ASPECT:Archetype Base Class|Rogue +Sniper KEY:Rogue Archetype ~ Sniper CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTrapSense PREMULT:1,[PRECLASS:1,Rogue=1],[PREFACT:1,ABILITIES,ActAsClass_Rogue=true] PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Sniper],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding,TYPE=RogueTrapSense] ABILITY:Rogue Class Feature|AUTOMATIC|Sniper ~ Accuracy|PREVARGTEQ:Rogue_CFP_Level,1 ABILITY:Rogue Class Feature|AUTOMATIC|Sniper ~ Deadly Range|PREVARGTEQ:Rogue_CFP_Level,3 COST:0 SOURCEPAGE:p.134 ASPECT:Archetype Base Class|Rogue +Spy KEY:Rogue Archetype ~ Spy CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTrapSense PREMULT:1,[PRECLASS:1,Rogue=1],[PREFACT:1,ABILITIES,ActAsClass_Rogue=true] PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Spy],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding,TYPE=RogueTrapSense] ABILITY:Rogue Class Feature|AUTOMATIC|Spy ~ Skilled Liar|PREVARGTEQ:Rogue_CFP_Level,1 ABILITY:Rogue Class Feature|AUTOMATIC|Rogue ~ Poison Use|PREVARGTEQ:Rogue_CFP_Level,3 COST:0 SOURCEPAGE:p.135 ASPECT:Archetype Base Class|Rogue +Swashbuckler KEY:Rogue Archetype ~ Swashbuckler CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTrapSense PREMULT:1,[PRECLASS:1,Rogue=1],[PREFACT:1,ABILITIES,ActAsClass_Rogue=true] PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Swashbuckler],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding,TYPE=RogueTrapSense] DESC:A paragon of mobile swordplay, the swashbuckler is a rogue who focuses almost exclusively on honing her skill at arms and perfecting daring acrobatic moves and elaborate flourishes that border on performance. ABILITY:Rogue Class Feature|AUTOMATIC|Swashbuckler ~ Martial Training|PREVARGTEQ:Rogue_CFP_Level,1 ABILITY:Rogue Class Feature|AUTOMATIC|Swashbuckler ~ Daring|PREVARGTEQ:Rogue_CFP_Level,3 COST:0 SOURCEPAGE:p.135 ASPECT:Archetype Base Class|Rogue +Thug KEY:Rogue Archetype ~ Thug CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueTrapfinding.RogueTrapSense PREMULT:1,[PRECLASS:1,Rogue=1],[PREFACT:1,ABILITIES,ActAsClass_Rogue=true] PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Thug],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueTrapfinding,TYPE=RogueTrapSense] ABILITY:Rogue Class Feature|AUTOMATIC|Thug ~ Frightening|PREVARGTEQ:Rogue_CFP_Level,1 ABILITY:Rogue Class Feature|AUTOMATIC|Thug ~ Brutal Beating|PREVARGTEQ:Rogue_CFP_Level,3 COST:0 SOURCEPAGE:p.135 ASPECT:Archetype Base Class|Rogue +Trapsmith KEY:Rogue Archetype ~ Trapsmith CATEGORY:Archetype TYPE:Archetype.RogueArchetype.RogueUncannyDodge.RogueImprovedUncannyDodge PREMULT:1,[PRECLASS:1,Rogue=1],[PREFACT:1,ABILITIES,ActAsClass_Rogue=true] PREMULT:1,[PREABILITY:1,CATEGORY=Archetype,Rogue Archetype ~ Trapsmith],[!PREABILITY:1,CATEGORY=Archetype,TYPE=RogueUncannyDodge,TYPE=RogueImprovedUncannyDodge] ABILITY:Rogue Class Feature|AUTOMATIC|Rogue ~ Careful Disarm|PREVARGTEQ:Rogue_CFP_Level,4 ABILITY:Rogue Class Feature|AUTOMATIC|Trapsmith ~ Trap Master|PREVARGTEQ:Rogue_CFP_Level,8 COST:0 SOURCEPAGE:p.135 ASPECT:Archetype Base Class|Rogue ###Block: Rogue Archetypes abilities # Acrobat diff --git a/data/pathfinder/paizo/roleplaying_game/core_essentials/ce_abilities_race.lst b/data/pathfinder/paizo/roleplaying_game/core_essentials/ce_abilities_race.lst index 7e06da6db53..b3a50515c48 100644 --- a/data/pathfinder/paizo/roleplaying_game/core_essentials/ce_abilities_race.lst +++ b/data/pathfinder/paizo/roleplaying_game/core_essentials/ce_abilities_race.lst @@ -246,7 +246,7 @@ Reset Attack Start Value ~ Wing CATEGORY:Internal BONUS:VAR|WingAttacks|-2 # Wing - 1 1d2 1d3 1d4 1d6 1d8 2d6 2d8 B Secondary x2 (Max set up is 7) # Ability Name Category of Ability Type Define Ability Modify VAR Weapon prof. bonus -Bite CATEGORY:Internal TYPE:NaturalAttack.NaturalAttackPrimary.Primary DEFINE:NaturalAttacks|0 DEFINE:BiteAttacks|0 DEFINE:BiteOnlyAttack|0 ABILITY:Internal|AUTOMATIC|Bite Damage Increase|PREVAREQ:BiteOnlyAttack,1 BONUS:VAR|BiteAttacks|1 BONUS:VAR|NaturalAttacks|BiteAttacks BONUS:VAR|BiteOnlyAttack|1|TYPE=Base|PREVARLT:NaturalAttacks,2 BONUS:WEAPONPROF=Bite|TOHIT|-5|PREVAREQ:UseWeaponsWithNaturalAttacks,1 BONUS:WEAPONPROF=Bite|DAMAGE|floor(STR/2)-STR|PREVAREQ:UseWeaponsWithNaturalAttacks,1 +Bite CATEGORY:Internal TYPE:NaturalAttack.NaturalAttackPrimary.Primary DEFINE:NaturalAttacks|0 DEFINE:BiteAttacks|0 DEFINE:BiteOnlyAttack|0 BONUS:VAR|BiteAttacks|1 BONUS:VAR|NaturalAttacks|BiteAttacks BONUS:VAR|BiteOnlyAttack|1|TYPE=Base|PREVARLT:NaturalAttacks,2 BONUS:WEAPONPROF=Bite|TOHIT|-5|PREVAREQ:UseWeaponsWithNaturalAttacks,1 BONUS:WEAPONPROF=Bite|DAMAGE|floor(STR/2)-STR|PREVAREQ:UseWeaponsWithNaturalAttacks,1 BONUS:WEAPONPROF=Bite|DAMAGE|MAX(STR/2,0)|PREVAREQ:BiteOnlyAttack,1 Gore CATEGORY:Internal TYPE:NaturalAttack.NaturalAttackPrimary.Primary DEFINE:NaturalAttacks|0 DEFINE:GoreAttacks|0 BONUS:VAR|GoreAttacks|1 BONUS:VAR|NaturalAttacks|GoreAttacks BONUS:WEAPONPROF=Gore|TOHIT|-5|PREVAREQ:UseWeaponsWithNaturalAttacks,1 BONUS:WEAPONPROF=Gore|DAMAGE|floor(STR/2)-STR|PREVAREQ:UseWeaponsWithNaturalAttacks,1 BONUS:WEAPONPROF=Gore|DAMAGE|MAX(STR/2,0)|PREVAREQ:NaturalAttacks,1|!PREVAREQ:UseWeaponsWithNaturalAttacks,1 Claw CATEGORY:Internal TYPE:NaturalAttack.NaturalAttackPrimary.Primary DEFINE:NaturalAttacks|0 DEFINE:ClawAttacks|0 BONUS:VAR|ClawAttacks|2 BONUS:VAR|NaturalAttacks|ClawAttacks BONUS:WEAPONPROF=Claw|TOHIT|-5|PREVAREQ:UseWeaponsWithNaturalAttacks,1 BONUS:WEAPONPROF=Claw|DAMAGE|floor(STR/2)-STR|PREVAREQ:UseWeaponsWithNaturalAttacks,1 BONUS:WEAPONPROF=Claw|DAMAGE|MAX(STR/2,0)|PREVAREQ:NaturalAttacks,1|!PREVAREQ:UseWeaponsWithNaturalAttacks,1 Slam CATEGORY:Internal TYPE:NaturalAttack.NaturalAttackPrimary.Primary DEFINE:NaturalAttacks|0 DEFINE:SlamAttacks|0 BONUS:VAR|SlamAttacks|1 BONUS:VAR|NaturalAttacks|SlamAttacks BONUS:WEAPONPROF=Slam|TOHIT|-5|PREVAREQ:UseWeaponsWithNaturalAttacks,1 BONUS:WEAPONPROF=Slam|DAMAGE|floor(STR/2)-STR|PREVAREQ:UseWeaponsWithNaturalAttacks,1 BONUS:WEAPONPROF=Slam|DAMAGE|MAX(STR/2,0)|PREVAREQ:NaturalAttacks,1|!PREVAREQ:UseWeaponsWithNaturalAttacks,1 @@ -273,29 +273,24 @@ Tail Sweep CATEGORY:Internal TYPE:NaturalAttack.NaturalAttackSecondary.Seconda Crush CATEGORY:Internal TYPE:NaturalAttack.NaturalAttackSecondary.Secondary DEFINE:NaturalAttacks|0 BONUS:VAR|NaturalAttacks|1 BONUS:WEAPONPROF=Crush|DAMAGE|(STR/2) -###Block: Mechanism to Grant STR 1-1/2 damage by other non-stacking means -# Ability Name Category of Ability Weapon prof. bonus -Bite Damage Increase CATEGORY:Internal BONUS:WEAPONPROF=Bite|DAMAGE|MAX(STR/2,0)|!PREVAREQ:UseWeaponsWithNaturalAttacks,1 - - ###Block: Mechanism to fix Wield Category Alterations by SIZEMOD # Ability Name Define Modify VAR Weapon prof. bonus -CATEGORY=Internal|Bite.MOD BONUS:WEAPONPROF=Bite|WIELDCATEGORY|SizeIncrease -CATEGORY=Internal|Gore.MOD BONUS:WEAPONPROF=Gore|WIELDCATEGORY|SizeIncrease -CATEGORY=Internal|Pincers.MOD BONUS:WEAPONPROF=Pincers|WIELDCATEGORY|SizeIncrease -CATEGORY=Internal|Tail Slap.MOD BONUS:WEAPONPROF=Tail Slap|WIELDCATEGORY|SizeIncrease -CATEGORY=Internal|Claw.MOD BONUS:WEAPONPROF=Claw|WIELDCATEGORY|SizeIncrease -CATEGORY=Internal|Slam.MOD BONUS:WEAPONPROF=Slam|WIELDCATEGORY|SizeIncrease -CATEGORY=Internal|Sting.MOD BONUS:WEAPONPROF=Sting|WIELDCATEGORY|SizeIncrease -CATEGORY=Internal|Talons.MOD BONUS:WEAPONPROF=Talons|WIELDCATEGORY|SizeIncrease -CATEGORY=Internal|Hoof.MOD BONUS:WEAPONPROF=Hoof|WIELDCATEGORY|SizeIncrease -CATEGORY=Internal|Tentacle.MOD BONUS:WEAPONPROF=Tentacle|WIELDCATEGORY|SizeIncrease -CATEGORY=Internal|Wing.MOD BONUS:WEAPONPROF=Wing|WIELDCATEGORY|SizeIncrease -CATEGORY=Internal|Rake.MOD BONUS:WEAPONPROF=Rake|WIELDCATEGORY|SizeIncrease -CATEGORY=Internal|Tail Sweep.MOD BONUS:WEAPONPROF=Tail Sweep|WIELDCATEGORY|SizeIncrease -CATEGORY=Internal|Crush.MOD BONUS:WEAPONPROF=Crush|WIELDCATEGORY|SizeIncrease -CATEGORY=Internal|Hair.MOD BONUS:WEAPONPROF=Hair|WIELDCATEGORY|SizeIncrease -CATEGORY=Internal|Ranged Slam.MOD BONUS:WEAPONPROF=Ranged Slam|WIELDCATEGORY|SizeIncrease +#CATEGORY=Internal|Bite.MOD BONUS:WEAPONPROF=Bite|WIELDCATEGORY|0 +#CATEGORY=Internal|Gore.MOD BONUS:WEAPONPROF=Gore|WIELDCATEGORY|SizeIncrease +#CATEGORY=Internal|Pincers.MOD BONUS:WEAPONPROF=Pincers|WIELDCATEGORY|SizeIncrease +#CATEGORY=Internal|Tail Slap.MOD BONUS:WEAPONPROF=Tail Slap|WIELDCATEGORY|SizeIncrease +#CATEGORY=Internal|Claw.MOD BONUS:WEAPONPROF=Claw|WIELDCATEGORY|SizeIncrease +#CATEGORY=Internal|Slam.MOD BONUS:WEAPONPROF=Slam|WIELDCATEGORY|SizeIncrease +#CATEGORY=Internal|Sting.MOD BONUS:WEAPONPROF=Sting|WIELDCATEGORY|SizeIncrease +#CATEGORY=Internal|Talons.MOD BONUS:WEAPONPROF=Talons|WIELDCATEGORY|SizeIncrease +#CATEGORY=Internal|Hoof.MOD BONUS:WEAPONPROF=Hoof|WIELDCATEGORY|SizeIncrease +#CATEGORY=Internal|Tentacle.MOD BONUS:WEAPONPROF=Tentacle|WIELDCATEGORY|SizeIncrease +#CATEGORY=Internal|Wing.MOD BONUS:WEAPONPROF=Wing|WIELDCATEGORY|SizeIncrease +#CATEGORY=Internal|Rake.MOD BONUS:WEAPONPROF=Rake|WIELDCATEGORY|SizeIncrease +#CATEGORY=Internal|Tail Sweep.MOD BONUS:WEAPONPROF=Tail Sweep|WIELDCATEGORY|SizeIncrease +#CATEGORY=Internal|Crush.MOD BONUS:WEAPONPROF=Crush|WIELDCATEGORY|SizeIncrease +#CATEGORY=Internal|Hair.MOD BONUS:WEAPONPROF=Hair|WIELDCATEGORY|SizeIncrease +#CATEGORY=Internal|Ranged Slam.MOD BONUS:WEAPONPROF=Ranged Slam|WIELDCATEGORY|SizeIncrease CATEGORY=Internal|Default.MOD DEFINE:NaturalAttackSize|0 CATEGORY=Internal|Default.MOD BONUS:VAR|NaturalAttackSize|1|PREBASESIZEEQ:F diff --git a/data/pathfinder/paizo/roleplaying_game/core_essentials/ce_templates.lst b/data/pathfinder/paizo/roleplaying_game/core_essentials/ce_templates.lst index df48b833073..fcc0f31dfbf 100644 --- a/data/pathfinder/paizo/roleplaying_game/core_essentials/ce_templates.lst +++ b/data/pathfinder/paizo/roleplaying_game/core_essentials/ce_templates.lst @@ -1315,3 +1315,8 @@ Legs ~ 26 LEGS:26 VISIBLE:NO Legs ~ 27 LEGS:27 VISIBLE:NO Legs ~ 28 LEGS:28 VISIBLE:NO +Decrease Bite Wield Category by 1 BONUS:WEAPONPROF=Bite|WIELDCATEGORY|-1 +Decrease Bite Wield Category by 2 BONUS:WEAPONPROF=Bite|WIELDCATEGORY|-2 + +Increase Bite Wield Category by 1 BONUS:WEAPONPROF=Bite|WIELDCATEGORY|1 +Increase Bite Wield Category by 2 BONUS:WEAPONPROF=Bite|WIELDCATEGORY|2 diff --git a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_spells.lst b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_spells.lst index 422aa04e8fc..6a3ee49399e 100644 --- a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_spells.lst +++ b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_spells.lst @@ -682,7 +682,7 @@ Zone of Truth TYPE:Divine CLASSES:Cleric,Paladin=2 SCHOOL:Enchantment ###Block: Temporary Bonuses # Spell Name Type Target Area or Effect Duration Source Page Source Pub Link Description Temporary effect description Temporary Bonus TEMPVALUE Aid.MOD TEMPDESC:Grants attack bonus and temporary HP TEMPBONUS:ANYPC|COMBAT|TOHIT|1|TYPE=Morale TEMPBONUS:ANYPC|HP|CURRENTMAX|%CHOICE|TYPE=Enhancement TEMPVALUE:MIN=4|MAX=18|TITLE=Choose number of bonus hp. -Animal Growth.MOD TEMPDESC:The target animal grows to twice its normal size and eight times its normal weight. TEMPBONUS:ANYPC|COMBAT|TOHIT.GRAPPLE|5|TYPE=Size TEMPBONUS:ANYPC|SIZEMOD|NUMBER|1 TEMPBONUS:ANYPC|WIELDCATEGORY|ALL|1 TEMPBONUS:ANYPC|WEAPONPROF=TYPE=Natural|DAMAGESIZE|1 +Animal Growth.MOD TEMPDESC:The target animal grows to twice its normal size and eight times its normal weight. TEMPBONUS:ANYPC|COMBAT|TOHIT.GRAPPLE|5|TYPE=Size TEMPBONUS:ANYPC|SIZEMOD|NUMBER|1 TEMPBONUS:ANYPC|WEAPONPROF=TYPE=Natural|DAMAGESIZE|1 Barkskin.MOD TEMPDESC:Grants natural armor bonus based on caster level TEMPBONUS:ANYPC|COMBAT|AC|min(max(%CHOICE/3+1,2),5)|TYPE=NaturalArmorEnhancement TEMPVALUE:MIN=1|MAX=20|TITLE=Choose spell caster level Bear's Endurance.MOD TEMPDESC:Grants +4 enhancement bonus to Constitution TEMPBONUS:ANYPC|STAT|CON|4|TYPE=Enhancement Bless.MOD TEMPDESC:Grants attack bonus TEMPBONUS:ANYPC|COMBAT|TOHIT|1|TYPE=Morale diff --git a/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_abilities.lst b/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_abilities.lst index 1b9b7c444d8..ae0eb2533cb 100644 --- a/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_abilities.lst +++ b/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_abilities.lst @@ -83,7 +83,7 @@ Equipment ~ Blood Reservoir of Physical Prowess (CON) CATEGORY:Internal +2 Circumstance Bonus CATEGORY:Internal TYPE:Circumstance Bonus from Masterwork Tool CHOOSE:SKILL|TYPE=Base MULT:YES STACK:NO TEMPBONUS:PC|SKILL|%LIST|2|TYPE=Circumstance ###Block: Medusa Mask -CATEGORY=Internal|Default.MOD DEFINE:MedusaMaskProtection ASPECT:SaveBonus|+4 bonus on all saving throws against visual effects, including gaze attacks and sight-based illusions. +Equipment ~ Medusa Mask CATEGORY:Internal DEFINE:MedusaMaskProtection|0 ASPECT:SaveBonus|+%1 bonus on all saving throws against visual effects, including gaze attacks and sight-based illusions.|MedusaMaskProtection BONUS:VAR|MedusaMaskProtection|4 # diff --git a/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_equip_magic_items.lst b/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_equip_magic_items.lst index a425ae68fdc..c8468f4e7d9 100644 --- a/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_equip_magic_items.lst +++ b/data/pathfinder/paizo/roleplaying_game/ultimate_equipment/ue_equip_magic_items.lst @@ -710,7 +710,7 @@ Mask of Stony Demeanor TYPE:Magic.Wondrous.Headgear.LesserMinor Mask of the Krenshar TYPE:Magic.Wondrous.Headgear.GreaterMinor COST:7200 WT:1 SOURCEPAGE:p.246 Mask of the Skull.MOD TYPE:GreaterMedium COST:22000 WT:3 SOURCEPAGE:p.246 Maw of the Wyrm TYPE:Magic.Wondrous.Headgear.GreaterMedium COST:18000 WT:3 SOURCEPAGE:p.246 SPELLS:Magic Item|TIMES=1|CASTERLEVEL=7|Dragon's Breath,16 BONUS:SKILL|Intimidate|4|TYPE=Competence -Medusa Mask TYPE:Magic.Wondrous.Headgear.LesserMedium COST:10000 WT:1 SOURCEPAGE:p.246 SPROP:The mask grants protection against visual effects, including gaze attacks and sight-based illusions. SPROP:Once per day as a standard action, the wearer can cause the central gemstone to glow with pale green light, at which point she may target any one creature within 30 feet. The targeted creature must succeed at a DC 15 Fortitude save or be petrified for 1 minute, as if by flesh to stone. SPELLS:Magic Item|TIMES=1|Medusa Mask Gaze BONUS:DC|SPELL.Medusa Mask Gaze|5 BONUS:ABILITY|MedusaMaskProtection +Medusa Mask TYPE:Magic.Wondrous.Headgear.LesserMedium COST:10000 WT:1 SOURCEPAGE:p.246 SPROP:The mask grants protection against visual effects, including gaze attacks and sight-based illusions. SPROP:Once per day as a standard action, the wearer can cause the central gemstone to glow with pale green light, at which point she may target any one creature within 30 feet. The targeted creature must succeed at a DC 15 Fortitude save or be petrified for 1 minute, as if by flesh to stone. SPELLS:Magic Item|TIMES=1|Medusa Mask Gaze BONUS:DC|SPELL.Medusa Mask Gaze|5 ABILITY:Internal|AUTOMATIC|Equipment ~ Medusa Mask Miser's Mask TYPE:Magic.Wondrous.Headgear.LesserMinor COST:3000 WT:1 SOURCEPAGE:p.246 BONUS:SITUATION|Appraise=Gems|5|TYPE=CompetenceMitre of the Hierophant TYPE:Magic.Wondrous.Headgear.GreaterMedium COST:18000 WT:2 SOURCEPAGE:p.247 SPELLS:Magic Item|TIMES=1|CASTERLEVEL=9|Commune|PRESPELLCAST:TYPE=Divine SPELLS:Magic Item|TIMES=1|TIMEUNIT=Week|CASTERLEVEL=9|Atonement|PRESPELLCAST:TYPE=Divine BONUS:SKILL|Diplomacy,Knowledge (Religion)|5|TYPE=Competence|PRESPELLCAST:TYPE=Divine Plague Mask TYPE:Magic.Wondrous.Headgear.GreaterMedium COST:7500 WT:2 SOURCEPAGE:p.247 SPELLS:Magic Item|TIMES=1|CASTERLEVEL=5|Remove Disease Stalker's Mask TYPE:Magic.Wondrous.Headgear.LesserMinor COST:3500 WT:1 SOURCEPAGE:p.247 BONUS:SKILL|Stealth|5|TYPE=Competence diff --git a/data/pathfinder/paizo/roleplaying_game/ultimate_magic/um_feats.lst b/data/pathfinder/paizo/roleplaying_game/ultimate_magic/um_feats.lst index 1bd4c8a5ac2..e141be99146 100644 --- a/data/pathfinder/paizo/roleplaying_game/ultimate_magic/um_feats.lst +++ b/data/pathfinder/paizo/roleplaying_game/ultimate_magic/um_feats.lst @@ -88,7 +88,7 @@ Painful Anchor CATEGORY:FEAT TYPE:General PREABILITY:1,CATEGORY=Special Piercing Spell CATEGORY:FEAT TYPE:Metamagic DESC:Your studies have helped you develop methods to overcome spell resistance. ADDSPELLLEVEL:1 SOURCEPAGE:p.154 BENEFIT:When you cast a piercing spell against a target with spell resistance, it treats the spell resistance of the target as 5 lower than its actual SR. A piercing spell uses up a spell slot one level higher than the spell's actual level. FACT:AppliedName|Piercing Planar Preservationist CATEGORY:FEAT TYPE:General PREABILITY:1,CATEGORY=Archetype,Alchemist Archetype ~ Preservationist DESC:You know how to preserve and reconstitute extraplanar monsters as well as normal animals. SOURCEPAGE:p.154 BENEFIT:For every summon nature's ally extract you know, you learn the equivalent summon monster spell as an extract. If you later learn other summon nature's ally extracts, you automatically learn the equivalent summon monster spell as an extract. SPELLKNOWN:CLASS|Alchemist=1|Summon Monster I|PRESPELL:1,Summon Nature's Ally I SPELLKNOWN:CLASS|Alchemist=2|Summon Monster II|PRESPELL:1,Summon Nature's Ally II SPELLKNOWN:CLASS|Alchemist=3|Summon Monster IV|PRESPELL:1,Summon Nature's Ally IV SPELLKNOWN:CLASS|Alchemist=4|Summon Monster V|PRESPELL:1,Summon Nature's Ally V SPELLKNOWN:CLASS|Alchemist=5|Summon Monster VII|PRESPELL:1,Summon Nature's Ally VII SPELLKNOWN:CLASS|Alchemist=9|Summon Monster IX|PRESPELL:1,Summon Nature's Ally IX # NEEDS CODE WORK: Allow size change for particular aspects only. -Powerful Shape CATEGORY:FEAT TYPE:General PREABILITY:1,CATEGORY=Special Ability,TYPE.DruidWildShape PRECLASS:1,Druid=8 DESC:Your wild shapes are mighty and muscular. SOURCEPAGE:p.154 BENEFIT:When in wild shape, treat your size as one category larger for the purpose of calculating CMB, CMD, carrying capacity, and any size-based special attacks you use or that are used against you (such as grab, swallow whole, and trample). +Powerful Shape CATEGORY:FEAT TYPE:General PREABILITY:1,CATEGORY=Special Ability,TYPE.DruidWildShape PREVARGTEQ:DruidLVL,8 DESC:Your wild shapes are mighty and muscular. SOURCEPAGE:p.154 BENEFIT:When in wild shape, treat your size as one category larger for the purpose of calculating CMB, CMD, carrying capacity, and any size-based special attacks you use or that are used against you (such as grab, swallow whole, and trample). # NEEDS CODE/DATA WORK: How to get the +4 bonus at 10 ranks? Prodigy CATEGORY:FEAT TYPE:General DESC:You are naturally skilled at arts, professions, and the acquisition of knowledge. STACK:NO MULT:YES CHOOSE:SKILL|TYPE=Craft|TYPE=Perform|TYPE=Profession SELECT:2 BONUS:SKILL|%LIST|if(skillinfo("TOTALRANK","%LIST")>=10,4,2)|TYPE=Prodigy SOURCEPAGE:p.154 BENEFIT:Choose two Craft, Perform, or Profession skills in any combination (two Craft skills, a Craft skill and a Perform skill, and so on). You receive a +2 bonus on checks with these skills. If you have 10 or more ranks in any one of these skills, the bonus increases to +4 for that skill. Prophetic Visionary CATEGORY:FEAT TYPE:General PREABILITY:1,CATEGORY=Special Ability,TYPE.OracleMystery DESC:Your oracular abilities give you a glimpse into the future. SOURCEPAGE:p.154 BENEFIT:Once per day, you can enter a deep trance to receive a vision of the future. The trance lasts for 10 minutes, during which time you can take no other actions. If you are interrupted, you must begin again. When you come out of the trance, you know whether a particular action in the immediate future will bring good or bad results, as an augury spell with a 70%% chance of success. @@ -165,7 +165,7 @@ Versatile Channeler CATEGORY:FEAT TYPE:General PREABILITY:1,CATEGORY=Spe Vigilant Eidolon CATEGORY:FEAT TYPE:General PREABILITY:1,CATEGORY=Special Ability,TYPE.Eidolon DESC:Your eidolon is highly observant, and its link with you increases your own watchfulness. SOURCEPAGE:p.159 BENEFIT:While your eidolon is within your reach, you gain a +4 bonus on Perception checks. If you have 10 or more ranks in Perception, this bonus increases to +8. This does not apply if your eidolon is helpless or unconscious. Voice of the Sibyl CATEGORY:FEAT TYPE:General PRESTAT:1,CHA=15 DESC:Your voice is strangely compelling. BONUS:SITUATION|Bluff=Using voice|if(skillinfo("TOTALRANK","Bluff")>=10,3,1) BONUS:SITUATION|Diplomacy=Using voice|if(skillinfo("TOTALRANK","Diplomacy")>=10,3,1) BONUS:SKILL|Perform (Oratory)|if(skillinfo("TOTALRANK","Perform (Oratory)")>=10,3,1) SOURCEPAGE:p.159 BENEFIT:You get a +1 bonus on all Bluff, Diplomacy, and Perform (oratory) skill checks. If you have 10 or more ranks in one of these skills, the bonus increases to +3 for that skill. You do not get these bonuses if you do not use your voice when using the skill (such as using Bluff to feint in combat). Warrior Priest CATEGORY:FEAT TYPE:General PREABILITY:1,CATEGORY=Special Ability,TYPE.CF_Domain PRESPELLCAST:TYPE=Divine DESC:Your religion is both a shield and a weapon in battle. BONUS:COMBAT|INITIATIVE|1 SOURCEPAGE:p.159 BENEFIT:You gain a +1 bonus on initiative checks and a +2 bonus on concentration checks made to cast a spell or use a spell-like ability when casting defensively or while grappled. -Wild Speech CATEGORY:FEAT TYPE:General PREABILITY:1,CATEGORY=Special Ability,TYPE.DruidWildShape PRECLASS:1,Druid=6 DEFINE:WildSpeechCasterLevel|0 DEFINE:WildSpeechDuration|0 DESC:You speak with the tongue of men and beasts. BONUS:VAR|WildSpeechCasterLevel|classlevel("Druid") BONUS:VAR|WildSpeechDuration|classlevel("Druid") SOURCEPAGE:p.159 BENEFIT:When using wild shape to take the form in which you cannot speak (such as an animal), you are able to speak normally in any language you know. This allows you to cast spells with verbal components, speak command words, and activate spell completion and spell trigger items. However, it does not give you the ability to cast spells requiring somatic components unless you also have the Natural Spell feat, or cast spells with material components merged into your form. BENEFIT:When using wild shape to take the form of an animal, you may use speak with animals to communicate with animals of your assumed form. This is a spell-like ability with a caster level of %1, and you may use it for %2 minutes per day. These minutes do not have to be consecutive, but must be used in one-minute increments.|WildSpeechCasterLevel|WildSpeechDuration +Wild Speech CATEGORY:FEAT TYPE:General PREABILITY:1,CATEGORY=Special Ability,TYPE.DruidWildShape PREVARGTEQ:DruidLVL,6 DEFINE:WildSpeechCasterLevel|0 DEFINE:WildSpeechDuration|0 DESC:You speak with the tongue of men and beasts. BONUS:VAR|WildSpeechCasterLevel|DruidLVL BONUS:VAR|WildSpeechDuration|DruidLVL SOURCEPAGE:p.159 BENEFIT:When using wild shape to take the form in which you cannot speak (such as an animal), you are able to speak normally in any language you know. This allows you to cast spells with verbal components, speak command words, and activate spell completion and spell trigger items. However, it does not give you the ability to cast spells requiring somatic components unless you also have the Natural Spell feat, or cast spells with material components merged into your form. BENEFIT:When using wild shape to take the form of an animal, you may use speak with animals to communicate with animals of your assumed form. This is a spell-like ability with a caster level of %1, and you may use it for %2 minutes per day. These minutes do not have to be consecutive, but must be used in one-minute increments.|WildSpeechCasterLevel|WildSpeechDuration # COMMENT: Add the DC bonus to witch patron spells? This would require quite a bit of work; is it worth it? Witch Knife CATEGORY:FEAT TYPE:General PRECLASS:1,Witch=1 DESC:You empower your witch spells by incorporating the use of a special ceremonial knife during your castings. SOURCEPAGE:p.159 BENEFIT:Each day, when you prepare your spells, you can select a masterwork or magical dagger, transforming it into a witch knife, which serves as an additional focus component for witch patron spells. Add +1 to the DC of all your patron spells. Word of Healing CATEGORY:FEAT TYPE:General PREABILITY:1,CATEGORY=Special Ability,TYPE.Lay On Hands DESC:Using the same divine energy as your lay on hands ability, you can heal others at a distance. SOURCEPAGE:p.159 BENEFIT:You may use your lay on hands to heal another creature at a range of 30 feet as a standard action that does not provoke an attack of opportunity. You must be able to speak and have a free hand to use this ability. The target heals half the amount they would have healed if you had touched them, but gains the benefits of your mercies as normal. From fbc074c401aada544c8bb31e6f460f059492cd31 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Apr 2024 16:37:20 +1200 Subject: [PATCH 070/142] Bump com.github.spotbugs:spotbugs-annotations from 4.8.3 to 4.8.4 (#7081) Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.8.3 to 4.8.4. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.8.3...4.8.4) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index e0d5274dbe4..aa595abe3f4 100644 --- a/build.gradle +++ b/build.gradle @@ -259,7 +259,7 @@ dependencies { compileOnly group: 'org.jetbrains', name: 'annotations', version:'24.1.0' compileOnly group: 'com.yuvimasory', name: 'orange-extensions', version: '1.3.0' - compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.3' + compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.4' testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.2' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.2' From c6e427e0e7ba03a8ade6336894ec61a8eba82b9b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Apr 2024 16:47:21 +1200 Subject: [PATCH 071/142] Bump org.springframework:spring-beans from 6.1.5 to 6.1.6 (#7091) Bumps [org.springframework:spring-beans](https://github.com/spring-projects/spring-framework) from 6.1.5 to 6.1.6. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.5...v6.1.6) --- updated-dependencies: - dependency-name: org.springframework:spring-beans dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index aa595abe3f4..6f0fe252a73 100644 --- a/build.gradle +++ b/build.gradle @@ -225,7 +225,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' implementation group: 'org.springframework', name: 'spring-web', version:'6.1.5' - implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.5' + implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.6' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.5' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' From b502a75faf38fd8a85bc324b8cfceaee618df75c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Apr 2024 17:01:54 +1200 Subject: [PATCH 072/142] Bump org.springframework:spring-web from 6.1.5 to 6.1.6 (#7092) Bumps [org.springframework:spring-web](https://github.com/spring-projects/spring-framework) from 6.1.5 to 6.1.6. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.5...v6.1.6) --- updated-dependencies: - dependency-name: org.springframework:spring-web dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 6f0fe252a73..b71a5fe5867 100644 --- a/build.gradle +++ b/build.gradle @@ -224,7 +224,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' - implementation group: 'org.springframework', name: 'spring-web', version:'6.1.5' + implementation group: 'org.springframework', name: 'spring-web', version:'6.1.6' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.6' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.5' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' From b6da455297e1f57818f7dc0e36472d8b438f30f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Apr 2024 17:02:03 +1200 Subject: [PATCH 073/142] Bump org.springframework:spring-core from 6.1.5 to 6.1.6 (#7094) Bumps [org.springframework:spring-core](https://github.com/spring-projects/spring-framework) from 6.1.5 to 6.1.6. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.5...v6.1.6) --- updated-dependencies: - dependency-name: org.springframework:spring-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b71a5fe5867..5698f5d5ead 100644 --- a/build.gradle +++ b/build.gradle @@ -226,7 +226,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.1.6' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.6' - implementation group: 'org.springframework', name: 'spring-core', version:'6.1.5' + implementation group: 'org.springframework', name: 'spring-core', version:'6.1.6' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' implementation('org.apache.xmlgraphics:fop:2.9') From 3846cf207d499246e65f1bb782c046f1334a0304 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:06:41 +1200 Subject: [PATCH 074/142] Bump org.openjfx:javafx-graphics from 22 to 22.0.1 (#7096) Bumps org.openjfx:javafx-graphics from 22 to 22.0.1. --- updated-dependencies: - dependency-name: org.openjfx:javafx-graphics dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5698f5d5ead..53d44904a10 100644 --- a/build.gradle +++ b/build.gradle @@ -274,7 +274,7 @@ dependencies { constraints { implementation('org.openjfx:javafx-base:22') implementation('org.openjfx:javafx-controls:22') - implementation('org.openjfx:javafx-graphics:22') { + implementation('org.openjfx:javafx-graphics:22.0.1') { because 'Monocle uses 12.0.1+2 that does not support Mac`s ARM' } } From 0d8767db3fd3c9369b538eee36b0207f04292cc6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:06:48 +1200 Subject: [PATCH 075/142] Bump org.openjfx:javafx-base from 22 to 22.0.1 (#7097) Bumps org.openjfx:javafx-base from 22 to 22.0.1. --- updated-dependencies: - dependency-name: org.openjfx:javafx-base dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 53d44904a10..4cd3f1529ed 100644 --- a/build.gradle +++ b/build.gradle @@ -272,7 +272,7 @@ dependencies { // https://github.com/TestFX/Monocle/issues/79 testImplementation group: 'org.testfx', name: 'openjfx-monocle', version: 'jdk-12.0.1+2' constraints { - implementation('org.openjfx:javafx-base:22') + implementation('org.openjfx:javafx-base:22.0.1') implementation('org.openjfx:javafx-controls:22') implementation('org.openjfx:javafx-graphics:22.0.1') { because 'Monocle uses 12.0.1+2 that does not support Mac`s ARM' From b2f6e628a8d3d37d06a20c9fe8ee4920f36ecc48 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 23:25:57 +1200 Subject: [PATCH 076/142] Bump org.openjfx:javafx-controls from 22 to 22.0.1 (#7098) Bumps org.openjfx:javafx-controls from 22 to 22.0.1. --- updated-dependencies: - dependency-name: org.openjfx:javafx-controls dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 4cd3f1529ed..69962089097 100644 --- a/build.gradle +++ b/build.gradle @@ -273,7 +273,7 @@ dependencies { testImplementation group: 'org.testfx', name: 'openjfx-monocle', version: 'jdk-12.0.1+2' constraints { implementation('org.openjfx:javafx-base:22.0.1') - implementation('org.openjfx:javafx-controls:22') + implementation('org.openjfx:javafx-controls:22.0.1') implementation('org.openjfx:javafx-graphics:22.0.1') { because 'Monocle uses 12.0.1+2 that does not support Mac`s ARM' } From 11b8231186cdd04d17069320ada916425b658969 Mon Sep 17 00:00:00 2001 From: LegacyKing Date: Thu, 25 Apr 2024 14:25:06 -0700 Subject: [PATCH 077/142] Patch adds FACT 'ActAsClass_Rogue' for support --- .../paizo/roleplaying_game/core_rulebook/cr__datacontrols.lst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr__datacontrols.lst b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr__datacontrols.lst index 51ab83afd6a..fad494f8231 100644 --- a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr__datacontrols.lst +++ b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr__datacontrols.lst @@ -1032,3 +1032,6 @@ FACTDEF:ABILITY|Archetype_FamiliarSpeakwithMaster DATAFORMAT:BOOLEAN REQUIRED:N FACTDEF:ABILITY|Archetype_FamiliarSpeakwithAnimalsofItsKind DATAFORMAT:BOOLEAN REQUIRED:NO SELECTABLE:NO VISIBLE:YES DISPLAYNAME:FamiliarSpeakwithAnimalsofItsKind EXPLANATION:FamiliarSpeakwithAnimalsofItsKind FACTDEF:ABILITY|Archetype_FamiliarSpellResistance DATAFORMAT:BOOLEAN REQUIRED:NO SELECTABLE:NO VISIBLE:YES DISPLAYNAME:FamiliarSpellResistance EXPLANATION:FamiliarSpellResistance FACTDEF:ABILITY|Archetype_FamiliarShareSpells DATAFORMAT:BOOLEAN REQUIRED:NO SELECTABLE:NO VISIBLE:YES DISPLAYNAME:FamiliarShareSpells EXPLANATION:FamiliarShareSpells + +FACTDEF:ABILITY|ActAsClass_Rogue DATAFORMAT:BOOLEAN REQUIRED:NO SELECTABLE:NO VISIBLE:YES DISPLAYNAME:ActAsClass_Rogue EXPLANATION:Acts as Class named + From 24f0af744f14636ec3f81c9efc4fc47ade159956 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Apr 2024 16:04:50 +1200 Subject: [PATCH 078/142] Bump org.xmlunit:xmlunit-core from 2.9.1 to 2.10.0 (#7102) Bumps [org.xmlunit:xmlunit-core](https://github.com/xmlunit/xmlunit) from 2.9.1 to 2.10.0. - [Release notes](https://github.com/xmlunit/xmlunit/releases) - [Changelog](https://github.com/xmlunit/xmlunit/blob/main/RELEASE_NOTES.md) - [Commits](https://github.com/xmlunit/xmlunit/compare/v2.9.1...v2.10.0) --- updated-dependencies: - dependency-name: org.xmlunit:xmlunit-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 69962089097..58364967b74 100644 --- a/build.gradle +++ b/build.gradle @@ -242,7 +242,7 @@ dependencies { exclude group: 'xml-apis', module: 'xml-apis' } implementation group: 'net.sourceforge.argparse4j', name: 'argparse4j', version: '0.9.0' - implementation group: 'org.xmlunit', name: 'xmlunit-core', version:'2.9.1' + implementation group: 'org.xmlunit', name: 'xmlunit-core', version:'2.10.0' implementation group: 'org.controlsfx', name: 'controlsfx', version:'11.2.1' implementation group: 'net.sourceforge.pcgen', name: 'PCGen-base', version:'1.0.170' From f86e11d0b29059578b504ba223ecb033b56098b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Apr 2024 16:05:00 +1200 Subject: [PATCH 079/142] Bump org.xmlunit:xmlunit-matchers from 2.9.1 to 2.10.0 (#7101) Bumps [org.xmlunit:xmlunit-matchers](https://github.com/xmlunit/xmlunit) from 2.9.1 to 2.10.0. - [Release notes](https://github.com/xmlunit/xmlunit/releases) - [Changelog](https://github.com/xmlunit/xmlunit/blob/main/RELEASE_NOTES.md) - [Commits](https://github.com/xmlunit/xmlunit/compare/v2.9.1...v2.10.0) --- updated-dependencies: - dependency-name: org.xmlunit:xmlunit-matchers dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 58364967b74..77c1cd4de03 100644 --- a/build.gradle +++ b/build.gradle @@ -279,7 +279,7 @@ dependencies { } } - testImplementation group: 'org.xmlunit', name: 'xmlunit-matchers', version:'2.9.1' + testImplementation group: 'org.xmlunit', name: 'xmlunit-matchers', version:'2.10.0' spotbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.13.0' } From aa5dbed10726a3d569cf8d1e71b191bda067d465 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 17:01:41 +1200 Subject: [PATCH 080/142] Bump com.github.spotbugs:spotbugs-annotations from 4.8.4 to 4.8.5 (#7104) Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.8.4 to 4.8.5. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.8.4...4.8.5) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 77c1cd4de03..a63c28d53b4 100644 --- a/build.gradle +++ b/build.gradle @@ -259,7 +259,7 @@ dependencies { compileOnly group: 'org.jetbrains', name: 'annotations', version:'24.1.0' compileOnly group: 'com.yuvimasory', name: 'orange-extensions', version: '1.3.0' - compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.4' + compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.5' testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.2' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.2' From e0f4562412bd89ba423c904bea0198223abbfcc3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 May 2024 04:53:04 +0000 Subject: [PATCH 081/142] Bump org.springframework:spring-core from 6.1.6 to 6.1.7 Bumps [org.springframework:spring-core](https://github.com/spring-projects/spring-framework) from 6.1.6 to 6.1.7. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.6...v6.1.7) --- updated-dependencies: - dependency-name: org.springframework:spring-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a63c28d53b4..b7dcded7ef4 100644 --- a/build.gradle +++ b/build.gradle @@ -226,7 +226,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.1.6' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.6' - implementation group: 'org.springframework', name: 'spring-core', version:'6.1.6' + implementation group: 'org.springframework', name: 'spring-core', version:'6.1.7' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' implementation('org.apache.xmlgraphics:fop:2.9') From bfd9a8ba2b8608a298f20303075037dbd0283589 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 May 2024 04:53:11 +0000 Subject: [PATCH 082/142] Bump org.springframework:spring-web from 6.1.6 to 6.1.7 Bumps [org.springframework:spring-web](https://github.com/spring-projects/spring-framework) from 6.1.6 to 6.1.7. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.6...v6.1.7) --- updated-dependencies: - dependency-name: org.springframework:spring-web dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b7dcded7ef4..abbb90d212b 100644 --- a/build.gradle +++ b/build.gradle @@ -224,7 +224,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' - implementation group: 'org.springframework', name: 'spring-web', version:'6.1.6' + implementation group: 'org.springframework', name: 'spring-web', version:'6.1.7' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.6' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.7' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' From 522c26de4bd13d47bae927e15a382df0ae833c4c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 May 2024 06:31:42 +0000 Subject: [PATCH 083/142] Bump org.springframework:spring-beans from 6.1.6 to 6.1.7 Bumps [org.springframework:spring-beans](https://github.com/spring-projects/spring-framework) from 6.1.6 to 6.1.7. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.6...v6.1.7) --- updated-dependencies: - dependency-name: org.springframework:spring-beans dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index abbb90d212b..ea8c9ba7a3a 100644 --- a/build.gradle +++ b/build.gradle @@ -225,7 +225,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' implementation group: 'org.springframework', name: 'spring-web', version:'6.1.7' - implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.6' + implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.7' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.7' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' From 87ebe70ed1d5f6205e70b473f6ccc58192a65fe5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 May 2024 20:09:33 +1200 Subject: [PATCH 084/142] Bump org.springframework:spring-core from 6.1.7 to 6.1.8 (#7113) Bumps [org.springframework:spring-core](https://github.com/spring-projects/spring-framework) from 6.1.7 to 6.1.8. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.7...v6.1.8) --- updated-dependencies: - dependency-name: org.springframework:spring-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ea8c9ba7a3a..053db2b9320 100644 --- a/build.gradle +++ b/build.gradle @@ -226,7 +226,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.1.7' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.7' - implementation group: 'org.springframework', name: 'spring-core', version:'6.1.7' + implementation group: 'org.springframework', name: 'spring-core', version:'6.1.8' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' implementation('org.apache.xmlgraphics:fop:2.9') From ec529a3ad6d363e681735b0b9b07629fd26c2a71 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 May 2024 20:11:24 +1200 Subject: [PATCH 085/142] Bump org.springframework:spring-web from 6.1.7 to 6.1.8 (#7114) Bumps [org.springframework:spring-web](https://github.com/spring-projects/spring-framework) from 6.1.7 to 6.1.8. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.7...v6.1.8) --- updated-dependencies: - dependency-name: org.springframework:spring-web dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 053db2b9320..c662d12a68d 100644 --- a/build.gradle +++ b/build.gradle @@ -224,7 +224,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' - implementation group: 'org.springframework', name: 'spring-web', version:'6.1.7' + implementation group: 'org.springframework', name: 'spring-web', version:'6.1.8' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.7' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.8' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' From 3a26ef3740412948a4c321abf5285a35b1eb3e42 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 May 2024 21:39:06 +1200 Subject: [PATCH 086/142] Bump org.springframework:spring-beans from 6.1.7 to 6.1.8 (#7112) Bumps [org.springframework:spring-beans](https://github.com/spring-projects/spring-framework) from 6.1.7 to 6.1.8. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.7...v6.1.8) --- updated-dependencies: - dependency-name: org.springframework:spring-beans dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c662d12a68d..8f0fc1ac2b4 100644 --- a/build.gradle +++ b/build.gradle @@ -225,7 +225,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' implementation group: 'org.springframework', name: 'spring-web', version:'6.1.8' - implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.7' + implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.8' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.8' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' From 6ba75e82653dcc1afe569e5af3ed06e1599d6df7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 21:26:29 +1200 Subject: [PATCH 087/142] Bump org.freemarker:freemarker from 2.3.32 to 2.3.33 (#7115) Bumps org.freemarker:freemarker from 2.3.32 to 2.3.33. --- updated-dependencies: - dependency-name: org.freemarker:freemarker dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 8f0fc1ac2b4..c4cec550213 100644 --- a/build.gradle +++ b/build.gradle @@ -235,7 +235,7 @@ dependencies { } implementation group: 'org.apache.commons', name: 'commons-collections4', version: '4.4' implementation group: 'org.scijava', name: 'jep', version:'2.4.2' - implementation group: 'org.freemarker', name: 'freemarker', version:'2.3.32' + implementation group: 'org.freemarker', name: 'freemarker', version:'2.3.33' implementation group: 'org.jdom', name: 'jdom2', version:'2.0.6.1' implementation('xalan:xalan:2.7.3') { From 0a135d7d72bca826d2b9689ec8d5c55781b1d4f6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Jun 2024 04:26:44 +0000 Subject: [PATCH 088/142] Bump com.dorongold.task-tree from 3.0.0 to 4.0.0 Bumps com.dorongold.task-tree from 3.0.0 to 4.0.0. --- updated-dependencies: - dependency-name: com.dorongold.task-tree dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c4cec550213..9c2b7488d45 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ plugins { id "de.undercouch.download" version '5.6.0' // Shows download percentage id 'edu.sc.seis.launch4j' version '3.0.5' // Creates launch4j id 'com.github.ben-manes.versions' version '0.51.0' // Checks versions for plugins and dependencies - id "com.dorongold.task-tree" version '3.0.0' // Prints the task dependency tree + id "com.dorongold.task-tree" version '4.0.0' // Prints the task dependency tree id 'org.openjfx.javafxplugin' version '0.1.0' // JavaFX support id 'org.beryx.runtime' version '1.13.1' // Creates custom runtimes } From 982f012e953073ce09f6357589448b4e53755d26 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 22:45:16 +1200 Subject: [PATCH 089/142] Bump org.springframework:spring-web from 6.1.8 to 6.1.9 (#7118) Bumps [org.springframework:spring-web](https://github.com/spring-projects/spring-framework) from 6.1.8 to 6.1.9. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.8...v6.1.9) --- updated-dependencies: - dependency-name: org.springframework:spring-web dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9c2b7488d45..0c17ce45cbf 100644 --- a/build.gradle +++ b/build.gradle @@ -224,7 +224,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' - implementation group: 'org.springframework', name: 'spring-web', version:'6.1.8' + implementation group: 'org.springframework', name: 'spring-web', version:'6.1.9' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.8' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.8' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' From 319b355b2fb792cbdf6ce38d8184969a3c950124 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 22:45:27 +1200 Subject: [PATCH 090/142] Bump org.springframework:spring-core from 6.1.8 to 6.1.9 (#7119) Bumps [org.springframework:spring-core](https://github.com/spring-projects/spring-framework) from 6.1.8 to 6.1.9. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.8...v6.1.9) --- updated-dependencies: - dependency-name: org.springframework:spring-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 0c17ce45cbf..4067581d131 100644 --- a/build.gradle +++ b/build.gradle @@ -226,7 +226,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.1.9' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.8' - implementation group: 'org.springframework', name: 'spring-core', version:'6.1.8' + implementation group: 'org.springframework', name: 'spring-core', version:'6.1.9' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' implementation('org.apache.xmlgraphics:fop:2.9') From f47a891a470a632d7d892a0cbf1d3cb2379e4282 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 15 Jun 2024 12:22:21 +1200 Subject: [PATCH 091/142] Bump org.springframework:spring-beans from 6.1.8 to 6.1.9 (#7120) Bumps [org.springframework:spring-beans](https://github.com/spring-projects/spring-framework) from 6.1.8 to 6.1.9. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.8...v6.1.9) --- updated-dependencies: - dependency-name: org.springframework:spring-beans dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 4067581d131..747695f1ee5 100644 --- a/build.gradle +++ b/build.gradle @@ -225,7 +225,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' implementation group: 'org.springframework', name: 'spring-web', version:'6.1.9' - implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.8' + implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.9' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.9' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' From bb7b1e9da1f5fdde9662e946ec6ecd00132d7a76 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Jun 2024 04:57:32 +0000 Subject: [PATCH 092/142] Bump org.springframework:spring-core from 6.1.9 to 6.1.10 Bumps [org.springframework:spring-core](https://github.com/spring-projects/spring-framework) from 6.1.9 to 6.1.10. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.9...v6.1.10) --- updated-dependencies: - dependency-name: org.springframework:spring-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 747695f1ee5..c97718f3699 100644 --- a/build.gradle +++ b/build.gradle @@ -226,7 +226,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.1.9' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.9' - implementation group: 'org.springframework', name: 'spring-core', version:'6.1.9' + implementation group: 'org.springframework', name: 'spring-core', version:'6.1.10' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' implementation('org.apache.xmlgraphics:fop:2.9') From 1ac859c453f1d7764ffa144762e0b80516c7f627 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 13:12:49 +1200 Subject: [PATCH 093/142] Bump com.github.spotbugs:spotbugs-annotations from 4.8.5 to 4.8.6 (#7124) Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.8.5 to 4.8.6. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.8.5...4.8.6) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c97718f3699..c96fecc77ae 100644 --- a/build.gradle +++ b/build.gradle @@ -259,7 +259,7 @@ dependencies { compileOnly group: 'org.jetbrains', name: 'annotations', version:'24.1.0' compileOnly group: 'com.yuvimasory', name: 'orange-extensions', version: '1.3.0' - compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.5' + compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.6' testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.2' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.2' From edc3698b3e7dd85a263de09eef5c0ce753eb2a4f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 13:18:00 +1200 Subject: [PATCH 094/142] Bump org.springframework:spring-beans from 6.1.9 to 6.1.10 (#7125) Bumps [org.springframework:spring-beans](https://github.com/spring-projects/spring-framework) from 6.1.9 to 6.1.10. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.9...v6.1.10) --- updated-dependencies: - dependency-name: org.springframework:spring-beans dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c96fecc77ae..97d58f9d9f0 100644 --- a/build.gradle +++ b/build.gradle @@ -225,7 +225,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' implementation group: 'org.springframework', name: 'spring-web', version:'6.1.9' - implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.9' + implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.10' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.10' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' From 895de3cb357e2c61cca5c0ae2ddac0c1bae80351 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 13:43:32 +1200 Subject: [PATCH 095/142] Bump org.springframework:spring-web from 6.1.9 to 6.1.10 (#7126) Bumps [org.springframework:spring-web](https://github.com/spring-projects/spring-framework) from 6.1.9 to 6.1.10. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.9...v6.1.10) --- updated-dependencies: - dependency-name: org.springframework:spring-web dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 97d58f9d9f0..8d2d019c026 100644 --- a/build.gradle +++ b/build.gradle @@ -224,7 +224,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' - implementation group: 'org.springframework', name: 'spring-web', version:'6.1.9' + implementation group: 'org.springframework', name: 'spring-web', version:'6.1.10' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.10' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.10' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' From 7e955e5388dfc73db740ef628ee3108e37c32900 Mon Sep 17 00:00:00 2001 From: Eitan Adler Date: Mon, 24 Jun 2024 01:03:43 -0700 Subject: [PATCH 096/142] [build] bump gradle to latest: 8.8 (#7130) --- gradle/wrapper/gradle-wrapper.jar | Bin 63721 -> 43453 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 16 ++++++++-------- gradlew.bat | 20 ++++++++++---------- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7f93135c49b765f8051ef9d0a6055ff8e46073d8..e6441136f3d4ba8a0da8d277868979cfbc8ad796 100644 GIT binary patch literal 43453 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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

NnX)EH+Nua)3Y(c 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鯊%1Et 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⁢ zv5o9#E7!G0XmdzfsS{efPNi`1b44~SZ4Z8fuX!I}#8g+(wxzQwUT#Xb2(tbY1+EUhGKoT@KEU9Ktl>_0 z%bjDJg;#*gtJZv!-Zs`?^}v5eKmnbjqlvnSzE@_SP|LG_PJ6CYU+6zY6>92%E+ z=j@TZf-iW4(%U{lnYxQA;7Q!b;^brF8n0D>)`q5>|WDDXLrqYU_tKN2>=#@~OE7grMnNh?UOz-O~6 z6%rHy{#h9K0AT+lDC7q4{hw^|q6*Ry;;L%Q@)Ga}$60_q%D)rv(CtS$CQbpq9|y1e zRSrN4;$Jyl{m5bZw`$8TGvb}(LpY{-cQ)fcyJv7l3S52TLXVDsphtv&aPuDk1OzCA z4A^QtC(!11`IsNx_HnSy?>EKpHJWT^wmS~hc^p^zIIh@9f6U@I2 zC=Mve{j2^)mS#U$e{@Q?SO6%LDsXz@SY+=cK_QMmXBIU)j!$ajc-zLx3V60EXJ!qC zi<%2x8Q24YN+&8U@CIlN zrZkcT9yh%LrlGS9`G)KdP(@9Eo-AQz@8GEFWcb7U=a0H^ZVbLmz{+&M7W(nXJ4sN8 zJLR7eeK(K8`2-}j(T7JsO`L!+CvbueT%izanm-^A1Dn{`1Nw`9P?cq;7no+XfC`K(GO9?O^5zNIt4M+M8LM0=7Gz8UA@Z0N+lg+cX)NfazRu z5D)~HA^(u%w^cz+@2@_#S|u>GpB+j4KzQ^&Wcl9f z&hG#bCA(Yk0D&t&aJE^xME^&E-&xGHhXn%}psEIj641H+Nl-}boj;)Zt*t(4wZ5DN z@GXF$bL=&pBq-#vkTkh>7hl%K5|3 z{`Vn9b$iR-SoGENp}bn4;fR3>9sA%X2@1L3aE9yTra;Wb#_`xWwLSLdfu+PAu+o3| zGVnpzPr=ch{uuoHjtw7+_!L_2;knQ!DuDl0R`|%jr+}jFzXtrHIKc323?JO{l&;VF z*L1+}JU7%QJOg|5|Tc|D8fN zJORAg=_vsy{ak|o);@)Yh8Lkcg@$FG3k@ep36BRa^>~UmnRPziS>Z=`Jb2x*Q#`%A zU*i3&Vg?TluO@X0O;r2Jl6LKLUOVhSqg1*qOt^|8*c7 zo(298@+r$k_wQNGHv{|$tW(T8L+4_`FQ{kEW5Jgg{yf7ey4ss_(SNKfz(N9lx&a;< je(UuV8hP?p&}TPdm1I$XmG#(RzlD&B2izSj9sl%y5~4qc diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d11cdd907dd..6f7a6eb33e8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 0adc8e1a532..b740cf13397 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -145,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -153,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -202,11 +202,11 @@ fi # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/gradlew.bat b/gradlew.bat index 93e3f59f135..25da30dbdee 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -43,11 +43,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail From 1889ab16da8ccdef567141bbec41d1c80952ab49 Mon Sep 17 00:00:00 2001 From: Misha Date: Sat, 22 Jun 2024 15:02:38 -0500 Subject: [PATCH 097/142] Fleeting Glance rendering fix Fixed the way Fleeting Glance renders in PCGen. Now the text lists how many rounds per day the ability can be used --- .../paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst index 1b84935f183..1b6f546f457 100644 --- a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst +++ b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst @@ -2509,7 +2509,7 @@ Bloodline Arcana KEY:Fey Bloodline ~ Bloodline Arcana CATEGORY:Special Ability Bloodline Powers KEY:Fey Bloodline ~ Bloodline Powers CATEGORY:Special Ability TYPE:Class Feature.Sorcerer Class Feature DESC:You have always had a tie to the natural world, and as your power increases, so does the influence of the fey over your magic. SOURCEPAGE:p.76 ASPECT:MasterAbility|FeyBloodlinePowers Laughing Touch KEY:Fey Bloodline ~ Laughing Touch CATEGORY:Special Ability TYPE:Class Feature.Sorcerer Class Feature.Fey Bloodline ~ Power LVL 01.Sorcerer Bloodline Power.SpecialAttack.SpellLike PREABILITY:1,CATEGORY=Special Ability,Sorcerer Bloodline ~ Fey PREVARGTEQ:Sorcerer_Fey_BloodlineProgressionLVL,1 DEFINE:Sorcerer_Fey_BloodlinePower1LVL|0 DEFINE:Sorcerer_Fey_BloodlinePower1Times|0 DESC:You can cause a creature to burst out laughing for 1 round as a melee touch attack. A laughing creature can only take a move action but can defend itself normally. Once a creature has been affected by laughing touch, it is immune to its effects for 24 hours. You can use this ability %1 times per day. This is a mind-affecting effect.|Sorcerer_Fey_BloodlinePower1Times SOURCEPAGE:p.76 ASPECT:CheckCount|%1|Sorcerer_Fey_BloodlinePower1Times ASPECT:CheckType|Uses per Day ASPECT:ChildAbility|FeyBloodlinePowers Woodland Stride KEY:Fey Bloodline ~ Woodland Stride CATEGORY:Special Ability TYPE:Class Feature.Sorcerer Class Feature.Fey Bloodline ~ Power LVL 03.Sorcerer Bloodline Power.SpecialQuality.Special Quality.Extraordinary PREABILITY:1,CATEGORY=Special Ability,Sorcerer Bloodline ~ Fey PREVARGTEQ:Sorcerer_Fey_BloodlineProgressionLVL,3 DEFINE:Sorcerer_Fey_BloodlinePower3LVL|0 DESC:You can move through any sort of undergrowth (such as natural thorns, briars, overgrown areas, and similar terrain) at your normal speed and without taking damage or suffering any other impairment. Thorns, briars, and overgrown areas that have been magically manipulated to impede motion, however, still affect you. SOURCEPAGE:p.76 ASPECT:ChildAbility|FeyBloodlinePowers -Fleeting Glance KEY:Fey Bloodline ~ Fleeting Glance CATEGORY:Special Ability TYPE:Class Feature.Sorcerer Class Feature.Fey Bloodline ~ Power LVL 09.Sorcerer Bloodline Power.SpecialQuality.SpellLike PREABILITY:1,CATEGORY=Special Ability,Sorcerer Bloodline ~ Fey PREVARGTEQ:Sorcerer_Fey_BloodlineProgressionLVL,9 DEFINE:Sorcerer_Fey_BloodlinePower9LVL|0 DEFINE:Sorcerer_FeyFleetingGlance_Time|0 DESC:You can turn invisible for %1 rounds per day. This ability functions as greater invisibility. These rounds need not be consecutive. BONUS:VAR|Sorcerer_FeyFleetingGlance_Time|Sorcerer_Fey_BloodlinePower9LVL SOURCEPAGE:p.76 ASPECT:CheckCount|%1|Sorcerer_FeyFleetingGlance_Time ASPECT:CheckType|Rounds per Day ASPECT:ChildAbility|FeyBloodlinePowers +Fleeting Glance KEY:Fey Bloodline ~ Fleeting Glance CATEGORY:Special Ability TYPE:Class Feature.Sorcerer Class Feature.Fey Bloodline ~ Power LVL 09.Sorcerer Bloodline Power.SpecialQuality.SpellLike PREABILITY:1,CATEGORY=Special Ability,Sorcerer Bloodline ~ Fey PREVARGTEQ:Sorcerer_Fey_BloodlineProgressionLVL,9 DEFINE:Sorcerer_Fey_BloodlinePower9LVL|0 DEFINE:Sorcerer_FeyFleetingGlance_Time|0 DESC:You can turn invisible for %1 rounds per day. This ability functions as greater invisibility. These rounds need not be consecutive.|Sorcerer_FeyFleetingGlance_Time BONUS:VAR|Sorcerer_FeyFleetingGlance_Time|Sorcerer_Fey_BloodlinePower9LVL SOURCEPAGE:p.76 ASPECT:CheckCount|%1|Sorcerer_FeyFleetingGlance_Time ASPECT:CheckType|Rounds per Day ASPECT:ChildAbility|FeyBloodlinePowers Fey Magic KEY:Fey Bloodline ~ Fey Magic CATEGORY:Special Ability TYPE:Class Feature.Sorcerer Class Feature.Fey Bloodline ~ Power LVL 15.Sorcerer Bloodline Power.SpecialAttack.Special Attack.Supernatural PREABILITY:1,CATEGORY=Special Ability,Sorcerer Bloodline ~ Fey PREVARGTEQ:Sorcerer_Fey_BloodlineProgressionLVL,15 DEFINE:Sorcerer_Fey_BloodlinePower15LVL|0 DESC:You may reroll any caster level check made to overcome spell resistance. You must decide to use this ability before the results are revealed by the GM. You must take the second result, even if it is worse. You can use this ability at will. SOURCEPAGE:p.76 ASPECT:ChildAbility|FeyBloodlinePowers Soul of the Fey KEY:Fey Bloodline ~ Soul of the Fey CATEGORY:Special Ability TYPE:Class Feature.Sorcerer Class Feature.Fey Bloodline ~ Power LVL 20.Sorcerer Bloodline Power.SpecialQuality.Special Quality.Supernatural PREABILITY:1,CATEGORY=Special Ability,Sorcerer Bloodline ~ Fey PREVARGTEQ:Sorcerer_Fey_BloodlineProgressionLVL,20 DEFINE:Sorcerer_Fey_BloodlinePower20LVL|0 DEFINE:Sorcerer_FeySoulOfTheFey_CasterLevel|0 SPELLS:Bloodline|TIMES=1|CASTERLEVEL=Sorcerer_FeySoulOfTheFey_CasterLevel|Shadow Walk,16+Sorcerer_Spells_StatBonus DESC:Your soul becomes one with the world of the fey. You gain immunity to poison and DR 10/cold iron. Creatures of the animal type do not attack you unless compelled to do so through magic. Once per day, you can cast shadow walk as a spell-like ability with a caster level of %1.|Sorcerer_FeySoulOfTheFey_CasterLevel ABILITY:Special Ability|AUTOMATIC|Immunity to Poison BONUS:VAR|Sorcerer_FeySoulOfTheFey_CasterLevel|Sorcerer_Fey_BloodlinePower20LVL DR:10/Cold Iron SOURCEPAGE:p.76 ASPECT:ChildAbility|FeyBloodlinePowers From 280b1b405cc0cab317d02146f7361c3b90505071 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 29 Jun 2024 01:41:00 -0700 Subject: [PATCH 098/142] Bump org.junit.jupiter:junit-jupiter-engine from 5.10.2 to 5.10.3 (#7135) Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.10.2 to 5.10.3. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.2...r5.10.3) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 8d2d019c026..5b264aaba62 100644 --- a/build.gradle +++ b/build.gradle @@ -265,7 +265,7 @@ dependencies { testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.2' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.2' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.2' - testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.2' + testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.3' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '2.2' testImplementation group: 'org.testfx', name: 'testfx-junit5', version: '4.0.18' // TODO openjfx-monocle is no longer updated and chances are openjfx-monocle doesn't work with latest OpenJFX From e110f6f4c9f03b3ca54c3eb2276247d6a8cede29 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 29 Jun 2024 01:41:12 -0700 Subject: [PATCH 099/142] Bump org.junit.jupiter:junit-jupiter-api from 5.10.2 to 5.10.3 (#7134) Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.10.2 to 5.10.3. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.2...r5.10.3) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5b264aaba62..c33fc4a3876 100644 --- a/build.gradle +++ b/build.gradle @@ -263,7 +263,7 @@ dependencies { testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.2' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.2' - testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.2' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.3' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.2' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.3' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '2.2' From 4c13ad7c08eb6a5aab06162e3b49efefa4aaccf2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 29 Jun 2024 01:41:21 -0700 Subject: [PATCH 100/142] Bump org.junit.platform:junit-platform-runner from 1.10.2 to 1.10.3 (#7131) Bumps [org.junit.platform:junit-platform-runner](https://github.com/junit-team/junit5) from 1.10.2 to 1.10.3. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/commits) --- updated-dependencies: - dependency-name: org.junit.platform:junit-platform-runner dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c33fc4a3876..c96504a9a9f 100644 --- a/build.gradle +++ b/build.gradle @@ -261,7 +261,7 @@ dependencies { compileOnly group: 'com.yuvimasory', name: 'orange-extensions', version: '1.3.0' compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.6' - testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.2' + testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.3' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.2' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.3' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.2' From baefa9a03e18c4e2792331e8125e1769b98746e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 29 Jun 2024 03:03:20 -0700 Subject: [PATCH 101/142] Bump org.junit.jupiter:junit-jupiter-params from 5.10.2 to 5.10.3 (#7133) Bumps [org.junit.jupiter:junit-jupiter-params](https://github.com/junit-team/junit5) from 5.10.2 to 5.10.3. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.2...r5.10.3) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-params dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c96504a9a9f..35e0de7bdbe 100644 --- a/build.gradle +++ b/build.gradle @@ -264,7 +264,7 @@ dependencies { testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.3' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.2' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.3' - testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.2' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.3' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.3' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '2.2' testImplementation group: 'org.testfx', name: 'testfx-junit5', version: '4.0.18' From 709d7814e99fe36bc62f2ad9fba3e09bb69857bf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 29 Jun 2024 03:03:41 -0700 Subject: [PATCH 102/142] Bump org.junit.platform:junit-platform-launcher from 1.10.2 to 1.10.3 (#7132) Bumps [org.junit.platform:junit-platform-launcher](https://github.com/junit-team/junit5) from 1.10.2 to 1.10.3. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/commits) --- updated-dependencies: - dependency-name: org.junit.platform:junit-platform-launcher dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 35e0de7bdbe..46bd99f18c0 100644 --- a/build.gradle +++ b/build.gradle @@ -262,7 +262,7 @@ dependencies { compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.6' testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.3' - testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.2' + testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.3' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.3' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.3' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.3' From 7b3f27844ca4a74f4209365c9fc5cb8e4abcfbdb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jul 2024 00:59:15 -0700 Subject: [PATCH 103/142] Bump edu.sc.seis.launch4j from 3.0.5 to 3.0.6 (#7136) Bumps edu.sc.seis.launch4j from 3.0.5 to 3.0.6. --- updated-dependencies: - dependency-name: edu.sc.seis.launch4j dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 46bd99f18c0..19e4b7ca532 100644 --- a/build.gradle +++ b/build.gradle @@ -30,7 +30,7 @@ plugins { id 'pmd' // PMD for Java, configured further below id 'idea' // For IntelliJ IDEA users id "de.undercouch.download" version '5.6.0' // Shows download percentage - id 'edu.sc.seis.launch4j' version '3.0.5' // Creates launch4j + id 'edu.sc.seis.launch4j' version '3.0.6' // Creates launch4j id 'com.github.ben-manes.versions' version '0.51.0' // Checks versions for plugins and dependencies id "com.dorongold.task-tree" version '4.0.0' // Prints the task dependency tree id 'org.openjfx.javafxplugin' version '0.1.0' // JavaFX support From 04d55ab790109de612eea2dc9fc25aa733a8e34e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 14 Jul 2024 13:57:13 +1200 Subject: [PATCH 104/142] Bump org.springframework:spring-web from 6.1.10 to 6.1.11 (#7137) Bumps [org.springframework:spring-web](https://github.com/spring-projects/spring-framework) from 6.1.10 to 6.1.11. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.10...v6.1.11) --- updated-dependencies: - dependency-name: org.springframework:spring-web dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 19e4b7ca532..85c32b6083d 100644 --- a/build.gradle +++ b/build.gradle @@ -224,7 +224,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' - implementation group: 'org.springframework', name: 'spring-web', version:'6.1.10' + implementation group: 'org.springframework', name: 'spring-web', version:'6.1.11' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.10' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.10' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' From 99c34aa464c7892d5b6488a7bf85c8072ce208b0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 14 Jul 2024 13:57:41 +1200 Subject: [PATCH 105/142] Bump org.springframework:spring-core from 6.1.10 to 6.1.11 (#7140) Bumps [org.springframework:spring-core](https://github.com/spring-projects/spring-framework) from 6.1.10 to 6.1.11. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.10...v6.1.11) --- updated-dependencies: - dependency-name: org.springframework:spring-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 85c32b6083d..b0bcacc945e 100644 --- a/build.gradle +++ b/build.gradle @@ -226,7 +226,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.1.11' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.10' - implementation group: 'org.springframework', name: 'spring-core', version:'6.1.10' + implementation group: 'org.springframework', name: 'spring-core', version:'6.1.11' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' implementation('org.apache.xmlgraphics:fop:2.9') From 4b1cc715535cfa9143deb67337a1dd75e2aef8d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 14 Jul 2024 14:10:15 +1200 Subject: [PATCH 106/142] Bump org.springframework:spring-beans from 6.1.10 to 6.1.11 (#7139) Bumps [org.springframework:spring-beans](https://github.com/spring-projects/spring-framework) from 6.1.10 to 6.1.11. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.10...v6.1.11) --- updated-dependencies: - dependency-name: org.springframework:spring-beans dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b0bcacc945e..bbcb6c61384 100644 --- a/build.gradle +++ b/build.gradle @@ -225,7 +225,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' implementation group: 'org.springframework', name: 'spring-web', version:'6.1.11' - implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.10' + implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.11' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.11' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' From 5321c98bed12fd8f6aa7c0c69fd8d027ebc984d5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 00:23:34 -0700 Subject: [PATCH 107/142] Bump org.openjfx:javafx-base from 22.0.1 to 22.0.2 (#7143) Bumps org.openjfx:javafx-base from 22.0.1 to 22.0.2. --- updated-dependencies: - dependency-name: org.openjfx:javafx-base dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index bbcb6c61384..4bc77039772 100644 --- a/build.gradle +++ b/build.gradle @@ -272,7 +272,7 @@ dependencies { // https://github.com/TestFX/Monocle/issues/79 testImplementation group: 'org.testfx', name: 'openjfx-monocle', version: 'jdk-12.0.1+2' constraints { - implementation('org.openjfx:javafx-base:22.0.1') + implementation('org.openjfx:javafx-base:22.0.2') implementation('org.openjfx:javafx-controls:22.0.1') implementation('org.openjfx:javafx-graphics:22.0.1') { because 'Monocle uses 12.0.1+2 that does not support Mac`s ARM' From 68f7b1157b4c5605fd1bc36934ce2f2384f90d05 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 00:23:44 -0700 Subject: [PATCH 108/142] Bump org.openjfx:javafx-graphics from 22.0.1 to 22.0.2 (#7141) Bumps org.openjfx:javafx-graphics from 22.0.1 to 22.0.2. --- updated-dependencies: - dependency-name: org.openjfx:javafx-graphics dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 4bc77039772..ff74d01789f 100644 --- a/build.gradle +++ b/build.gradle @@ -274,7 +274,7 @@ dependencies { constraints { implementation('org.openjfx:javafx-base:22.0.2') implementation('org.openjfx:javafx-controls:22.0.1') - implementation('org.openjfx:javafx-graphics:22.0.1') { + implementation('org.openjfx:javafx-graphics:22.0.2') { because 'Monocle uses 12.0.1+2 that does not support Mac`s ARM' } } From 45d29f620aa46a744c20eabe2d7691ec46ba6d4c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Jul 2024 15:15:35 +1200 Subject: [PATCH 109/142] Bump org.openjfx:javafx-controls from 22.0.1 to 22.0.2 (#7142) Bumps org.openjfx:javafx-controls from 22.0.1 to 22.0.2. --- updated-dependencies: - dependency-name: org.openjfx:javafx-controls dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ff74d01789f..1e0930378a1 100644 --- a/build.gradle +++ b/build.gradle @@ -273,7 +273,7 @@ dependencies { testImplementation group: 'org.testfx', name: 'openjfx-monocle', version: 'jdk-12.0.1+2' constraints { implementation('org.openjfx:javafx-base:22.0.2') - implementation('org.openjfx:javafx-controls:22.0.1') + implementation('org.openjfx:javafx-controls:22.0.2') implementation('org.openjfx:javafx-graphics:22.0.2') { because 'Monocle uses 12.0.1+2 that does not support Mac`s ARM' } From c870e73d0dc91bd4d6b4718e9d0b5d3ec305a0be Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 21:57:04 -0700 Subject: [PATCH 110/142] Bump org.apache.commons:commons-lang3 from 3.14.0 to 3.15.0 (#7144) Bumps org.apache.commons:commons-lang3 from 3.14.0 to 3.15.0. --- updated-dependencies: - dependency-name: org.apache.commons:commons-lang3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 1e0930378a1..3d4cd4ebfc0 100644 --- a/build.gradle +++ b/build.gradle @@ -227,7 +227,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.1.11' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.11' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.11' - implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.14.0' + implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.15.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' implementation('org.apache.xmlgraphics:fop:2.9') { From 8c579a8804c350fe7ed13d9b7881acaa6e6c43a8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Aug 2024 22:57:10 -0700 Subject: [PATCH 111/142] Bump org.hamcrest:hamcrest from 2.2 to 3.0 (#7145) Bumps [org.hamcrest:hamcrest](https://github.com/hamcrest/JavaHamcrest) from 2.2 to 3.0. - [Release notes](https://github.com/hamcrest/JavaHamcrest/releases) - [Changelog](https://github.com/hamcrest/JavaHamcrest/blob/master/CHANGES.md) - [Commits](https://github.com/hamcrest/JavaHamcrest/compare/v2.2...v3.0) --- updated-dependencies: - dependency-name: org.hamcrest:hamcrest dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 3d4cd4ebfc0..12e67f69c26 100644 --- a/build.gradle +++ b/build.gradle @@ -266,7 +266,7 @@ dependencies { testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.3' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.3' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.3' - testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '2.2' + testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '3.0' testImplementation group: 'org.testfx', name: 'testfx-junit5', version: '4.0.18' // TODO openjfx-monocle is no longer updated and chances are openjfx-monocle doesn't work with latest OpenJFX // https://github.com/TestFX/Monocle/issues/79 From 0581eb2ceb84c6dc7c8a6fb824ab15e9641f628b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 21:49:19 -0700 Subject: [PATCH 112/142] Bump org.apache.commons:commons-lang3 from 3.15.0 to 3.16.0 (#7146) Bumps org.apache.commons:commons-lang3 from 3.15.0 to 3.16.0. --- updated-dependencies: - dependency-name: org.apache.commons:commons-lang3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 12e67f69c26..66f63e679c3 100644 --- a/build.gradle +++ b/build.gradle @@ -227,7 +227,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.1.11' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.11' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.11' - implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.15.0' + implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.16.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' implementation('org.apache.xmlgraphics:fop:2.9') { From 7f3478429293000741cfef7159fda3c1235fb7ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Aug 2024 18:15:56 +1200 Subject: [PATCH 113/142] Bump org.junit.platform:junit-platform-launcher from 1.10.3 to 1.11.0 (#7148) Bumps [org.junit.platform:junit-platform-launcher](https://github.com/junit-team/junit5) from 1.10.3 to 1.11.0. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/commits) --- updated-dependencies: - dependency-name: org.junit.platform:junit-platform-launcher dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 66f63e679c3..667002db430 100644 --- a/build.gradle +++ b/build.gradle @@ -262,7 +262,7 @@ dependencies { compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.6' testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.3' - testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.10.3' + testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.11.0' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.3' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.3' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.3' From 2033102e6ba27bd639970df1d00c0a378e310ba2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Aug 2024 18:16:17 +1200 Subject: [PATCH 114/142] Bump org.junit.jupiter:junit-jupiter-engine from 5.10.3 to 5.11.0 (#7155) Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.10.3 to 5.11.0. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.3...r5.11.0) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 667002db430..2aedf5e281a 100644 --- a/build.gradle +++ b/build.gradle @@ -265,7 +265,7 @@ dependencies { testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.11.0' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.3' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.3' - testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.10.3' + testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.11.0' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '3.0' testImplementation group: 'org.testfx', name: 'testfx-junit5', version: '4.0.18' // TODO openjfx-monocle is no longer updated and chances are openjfx-monocle doesn't work with latest OpenJFX From 08a746a2c15d7ea39156122fe5cea9bbe46a324d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Aug 2024 18:16:27 +1200 Subject: [PATCH 115/142] Bump org.springframework:spring-web from 6.1.11 to 6.1.12 (#7149) Bumps [org.springframework:spring-web](https://github.com/spring-projects/spring-framework) from 6.1.11 to 6.1.12. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.11...v6.1.12) --- updated-dependencies: - dependency-name: org.springframework:spring-web dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 2aedf5e281a..5af971d8115 100644 --- a/build.gradle +++ b/build.gradle @@ -224,7 +224,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' - implementation group: 'org.springframework', name: 'spring-web', version:'6.1.11' + implementation group: 'org.springframework', name: 'spring-web', version:'6.1.12' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.11' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.11' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.16.0' From 4fd68c5d82d0138cd7a001f45f4e84fcfec2adb1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Aug 2024 18:18:46 +1200 Subject: [PATCH 116/142] Bump org.springframework:spring-core from 6.1.11 to 6.1.12 (#7152) Bumps [org.springframework:spring-core](https://github.com/spring-projects/spring-framework) from 6.1.11 to 6.1.12. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.11...v6.1.12) --- updated-dependencies: - dependency-name: org.springframework:spring-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5af971d8115..d5b6c30ad54 100644 --- a/build.gradle +++ b/build.gradle @@ -226,7 +226,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.1.12' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.11' - implementation group: 'org.springframework', name: 'spring-core', version:'6.1.11' + implementation group: 'org.springframework', name: 'spring-core', version:'6.1.12' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.16.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' implementation('org.apache.xmlgraphics:fop:2.9') From ab814cc9afe5e865db8fc6d3358eae296cdfb432 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Aug 2024 18:23:58 +1200 Subject: [PATCH 117/142] Bump org.junit.jupiter:junit-jupiter-api from 5.10.3 to 5.11.0 (#7150) Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.10.3 to 5.11.0. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.3...r5.11.0) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index d5b6c30ad54..6f38f22363a 100644 --- a/build.gradle +++ b/build.gradle @@ -263,7 +263,7 @@ dependencies { testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.3' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.11.0' - testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.10.3' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.11.0' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.3' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.11.0' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '3.0' From f9cd523368f7c5f89280895f0cf56312aa391336 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Aug 2024 18:24:14 +1200 Subject: [PATCH 118/142] Bump org.junit.platform:junit-platform-runner from 1.10.3 to 1.11.0 (#7153) Bumps [org.junit.platform:junit-platform-runner](https://github.com/junit-team/junit5) from 1.10.3 to 1.11.0. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/commits) --- updated-dependencies: - dependency-name: org.junit.platform:junit-platform-runner dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 6f38f22363a..faa2f19e252 100644 --- a/build.gradle +++ b/build.gradle @@ -261,7 +261,7 @@ dependencies { compileOnly group: 'com.yuvimasory', name: 'orange-extensions', version: '1.3.0' compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.6' - testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.10.3' + testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.11.0' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.11.0' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.11.0' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.3' From 5e2a4f1f786d4edb29453e6a9d7f902dba3d7d0d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Aug 2024 18:25:48 +1200 Subject: [PATCH 119/142] Bump org.springframework:spring-beans from 6.1.11 to 6.1.12 (#7151) Bumps [org.springframework:spring-beans](https://github.com/spring-projects/spring-framework) from 6.1.11 to 6.1.12. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.11...v6.1.12) --- updated-dependencies: - dependency-name: org.springframework:spring-beans dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index faa2f19e252..3943a6c045c 100644 --- a/build.gradle +++ b/build.gradle @@ -225,7 +225,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' implementation group: 'org.springframework', name: 'spring-web', version:'6.1.12' - implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.11' + implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.12' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.12' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.16.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' From 4ac8691154e5369bc4abfa5cc9c3063b6e4f8bdb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Aug 2024 20:48:59 +1200 Subject: [PATCH 120/142] Bump org.junit.jupiter:junit-jupiter-params from 5.10.3 to 5.11.0 (#7154) Bumps [org.junit.jupiter:junit-jupiter-params](https://github.com/junit-team/junit5) from 5.10.3 to 5.11.0. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.3...r5.11.0) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-params dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 3943a6c045c..1aae6f444dd 100644 --- a/build.gradle +++ b/build.gradle @@ -264,7 +264,7 @@ dependencies { testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.11.0' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.11.0' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.11.0' - testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.10.3' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.11.0' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.11.0' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '3.0' testImplementation group: 'org.testfx', name: 'testfx-junit5', version: '4.0.18' From 2f503b9e3ed9b1cd82a97a9af39ee360404fa616 Mon Sep 17 00:00:00 2001 From: LegacyKing Date: Sun, 18 Aug 2024 10:06:22 -0700 Subject: [PATCH 121/142] DATA-4357 --- .../roleplaying_game/core_rulebook/cr_abilities_class.lst | 6 ++++-- .../pathfinder_unchained/pu_abilities_class.lst | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst index 1b6f546f457..b8f2b357682 100644 --- a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst +++ b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst @@ -1085,10 +1085,12 @@ Weapon Training (Thrown) KEY:Weapon Training 4 Thrown CATEGORY:Special Ability # Ability Name Unique Key Category of Ability Type Define Description Template Ability Bonus Ability Pool Combat bonus Add to base move Bonus to Situation Modify VAR Class Skill Spell Res. Damage Reduction Source Page Aspects Monk Core Class Skills KEY:Class Skills ~ Monk CATEGORY:Internal CSKILL:Acrobatics|Climb|TYPE=Craft|Escape Artist|Intimidate|Knowledge (History)|Knowledge (Religion)|Perception|TYPE=Perform|TYPE=Profession|Ride|Sense Motive|Stealth|Swim -CATEGORY=Class|Monk.MOD DEFINE:MonkRestricted|0 DEFINE:MonkHasArmor|0 DEFINE:MonkIsEncumbered|0 DEFINE:MonkHasShield|0 BONUS:VAR|MonkRestricted|MonkHasArmor+MonkIsEncumbered+MonkHasShield|TYPE=Boolean BONUS:VAR|MonkHasArmor|1|PREVARGTEQ:var("COUNT[EQTYPE.ARMOR.EQUIPPED]"),1 BONUS:VAR|MonkIsEncumbered|1|PREVARGTEQ:ENCUMBERANCE,1 BONUS:VAR|MonkHasShield|1|PREVARGTEQ:var("COUNT[EQTYPE.SHIELD.EQUIPPED]"),1 BONUS:VAR|MonkACBonus|min((MonkACLVL)/4,5)|TYPE=level BONUS:VAR|MonkACBonus|MonkACStatBonus BONUS:VAR|CMD|MonkACBonus|PREVAREQ:ENCUMBERANCE,0,var("COUNT[EQTYPE.ARMOR.EQUIPPED]"),0,var("COUNT[EQTYPE.SHIELD.EQUIPPED]"),0 BONUS:VAR|MonkACStatBonus|max(WIS,0)|TYPE=Class|PREVARGTEQ:MonkLVL,1 BONUS:VAR|MonkACLVL|MonkLVL|TYPE=Level SOURCEPAGE:p.57 +Monk AC Tracker CATEGORY:Internal BONUS:COMBAT|AC|MonkACBonus|TYPE=MonkAC|PREVAREQ:MonkRestricted,0 DEFINE:MonkACBonus|0 DEFINE:MonkACLVL|0 DEFINE:MonkACStatBonus|0 BONUS:VAR|MonkACBonus|min((MonkACLVL)/4,5)|TYPE=level BONUS:VAR|MonkACBonus|MonkACStatBonus DEFINE:MonkRestricted|0 DEFINE:MonkHasArmor|0 DEFINE:MonkIsEncumbered|0 DEFINE:MonkHasShield|0 BONUS:VAR|MonkRestricted|MonkHasArmor+MonkIsEncumbered+MonkHasShield|TYPE=Boolean BONUS:VAR|MonkHasArmor|1|PREVARGTEQ:var("COUNT[EQTYPE.ARMOR.EQUIPPED]"),1 BONUS:VAR|MonkIsEncumbered|1|PREVARGTEQ:ENCUMBERANCE,1 BONUS:VAR|MonkHasShield|1|PREVARGTEQ:var("COUNT[EQTYPE.SHIELD.EQUIPPED]"),1 BONUS:VAR|CMD|MonkACBonus|PREVAREQ:MonkRestricted,0 BONUS:VAR|MonkACStatBonus|max(WIS,0)|TYPE=Class|PREVARGTEQ:MonkACLVL,1 + +CATEGORY=Class|Monk.MOD SOURCEPAGE:p.57 Monk Bonus Feat KEY:Monk ~ Monk Bonus Feat CATEGORY:Special Ability TYPE:MonkClassFeatures.Internal.ClassFeatures DEFINE:MonkBonusFeatLVL|0 DEFINE:MonkBonusFeatLVL|0 BONUS:ABILITYPOOL|Monk Bonus Feat|1+max((MonkBonusFeatLVL+2)/4,0) BONUS:VAR|MonkBonusFeatLVL|MonkLVL -AC Bonus KEY:Monk ~ AC Bonus CATEGORY:Special Ability TYPE:MonkClassFeatures.SpecialQuality.Extraordinary DEFINE:MonkACBonus|0 DEFINE:MonkACLVL|0 DEFINE:MonkACStatBonus|0 DESC:When unarmored and unencumbered, you add +%1 to your AC and your CMD. These bonuses apply even against touch attacks or when you are flat-footed. You lose these bonuses when you are immobilized or helpless, when you wear any armor, when you carry a shield, or when you carry a medium or heavy load.|MonkACBonus BONUS:COMBAT|AC|MonkACBonus|PREVAREQ:MonkRestricted,0 +AC Bonus KEY:Monk ~ AC Bonus CATEGORY:Special Ability TYPE:MonkClassFeatures.SpecialQuality.Extraordinary DESC:When unarmored and unencumbered, you add +%1 to your AC and your CMD. These bonuses apply even against touch attacks or when you are flat-footed. You lose these bonuses when you are immobilized or helpless, when you wear any armor, when you carry a shield, or when you carry a medium or heavy load.|MonkACBonus ABILITY:Internal|AUTOMATIC|Monk AC Tracker BONUS:VAR|MonkACLVL|MonkLVL|TYPE=Level Flurry of Blows KEY:Monk ~ Flurry of Blows CATEGORY:Special Ability TYPE:MonkClassFeatures.SpecialAttack.Extraordinary.Flurry of Blows DESC:You can make a flurry of blows as a full-attack action. Stunning Fist KEY:Monk ~ Stunning Fist CATEGORY:Special Ability TYPE:MonkClassFeatures.SpecialAttack.Extraordinary.Stunning Fist DEFINE:StunningFistMonkLVL|0 DESC:You gain Stunning Fist as a bonus feat. ABILITY:FEAT|VIRTUAL|Stunning Fist BONUS:VAR|StunningFistMonkLVL|MonkLVL SOURCEPAGE:p.59 Fast Movement KEY:Monk ~ Fast Movement CATEGORY:Special Ability TYPE:MonkClassFeatures.SpecialQuality.Extraordinary.ModifyMovement DEFINE:MonkFastMovementLVL|0 DEFINE:MonkFastMovementBonus|0 DESC:You gain a +%1 feet enhancement bonus to your land speed. If you wear armor or carry a medium or heavy load, you lose this extra speed.|MonkFastMovementBonus BONUS:MOVEADD|TYPE=Walk|MonkFastMovementBonus|TYPE=Enhancement|PREVAREQ:ENCUMBERANCE,0,var("COUNT[EQTYPE.ARMOR.EQUIPPED]"),0 BONUS:VAR|MonkFastMovementBonus|10*floor(MonkFastMovementLVL/3) BONUS:VAR|MonkFastMovementLVL|MonkLVL SOURCEPAGE:p.59 diff --git a/data/pathfinder/paizo/roleplaying_game/pathfinder_unchained/pu_abilities_class.lst b/data/pathfinder/paizo/roleplaying_game/pathfinder_unchained/pu_abilities_class.lst index 6832b691dbe..03c6c88aae2 100644 --- a/data/pathfinder/paizo/roleplaying_game/pathfinder_unchained/pu_abilities_class.lst +++ b/data/pathfinder/paizo/roleplaying_game/pathfinder_unchained/pu_abilities_class.lst @@ -457,7 +457,7 @@ Class Skills ~ Unchained Monk CATEGORY:Internal CSKILL:Acrobatics|Climb|TYPE=Cr ###Block: # Ability Name Unique Key Category of Ability Type Serves As Define Description Auto Weapon Prof Ability Bonus Ability Pool Combat bonus Add to base move Modify VAR Source Page Weapon and Armor Proficiency KEY:Unchained Monk ~ Weapon and Armor Proficiency CATEGORY:Special Ability TYPE:Unchained Monk Class Feature.SpecialQuality DESC:Monks are proficient with the club, crossbow (light or heavy), dagger, handaxe, javelin, kama, nunchaku, quarterstaff, sai, short sword, shortspear, shuriken, siangham, sling, spear, and any weapon with the monk special weapon quality. Monks are not proficient with any armor or shields. When wearing armor, using a shield, or carrying a medium or heavy load, a monk loses his AC bonus, as well as his fast movement and flurry of blows abilities. AUTO:WEAPONPROF|Club|Crossbow (Light)|Crossbow (Heavy)|Dagger|Handaxe|Javelin|Kama|Nunchaku|Quarterstaff|Sai|Sword (Short)|Shortspear|Shuriken|Siangham|Sling|Spear|TYPE=Monk SOURCEPAGE:p.14 -AC Bonus KEY:Unchained Monk ~ AC Bonus CATEGORY:Special Ability TYPE:Unchained Monk Class Feature.SpecialQuality.Extraordinary SERVESAS:ABILITY=Special Ability|Monk ~ AC Bonus DEFINE:MonkACBonus|0 DEFINE:MonkACLVL|0 DEFINE:MonkACStatBonus|0 DESC:When unarmored and unencumbered, the monk adds his Wisdom bonus (if any) to his AC and CMD. In addition, a monk gains a +1 bonus to AC and CMD at 4th level. This bonus increases by 1 for every four monk levels thereafter, up to a maximum of +5 at 20th level. These bonuses to AC apply even against touch attacks or when the monk is flat-footed. He loses these bonuses when he is immobilized or helpless, when he wears any armor, when he carries a shield, or when he carries a medium or heavy load. BONUS:COMBAT|AC|MonkACBonus|PREVAREQ:ENCUMBERANCE,0,var("COUNT[EQTYPE.ARMOR.EQUIPPED]"),0,var("COUNT[EQTYPE.SHIELD.EQUIPPED]"),0 BONUS:VAR|MonkACBonus|min(floor((MonkACLVL)/4),5)|TYPE=Level BONUS:VAR|MonkACBonus|MonkACStatBonus|TYPE=Stat BONUS:VAR|CMD|MonkACBonus|PREVAREQ:ENCUMBERANCE,0,var("COUNT[EQTYPE.ARMOR.EQUIPPED]"),0,var("COUNT[EQTYPE.SHIELD.EQUIPPED]"),0 BONUS:VAR|MonkACStatBonus|max(WIS,0) BONUS:VAR|MonkACLVL|MonkLVL|TYPE=Level SOURCEPAGE:p.14 +AC Bonus KEY:Unchained Monk ~ AC Bonus CATEGORY:Special Ability TYPE:Unchained Monk Class Feature.SpecialQuality.Extraordinary SERVESAS:ABILITY=Special Ability|Monk ~ AC Bonus DEFINE:MonkACLVL|0 DESC:When unarmored and unencumbered, the monk adds his Wisdom bonus (if any) to his AC and CMD. In addition, a monk gains a +1 bonus to AC and CMD at 4th level. This bonus increases by 1 for every four monk levels thereafter, up to a maximum of +5 at 20th level. These bonuses to AC apply even against touch attacks or when the monk is flat-footed. He loses these bonuses when he is immobilized or helpless, when he wears any armor, when he carries a shield, or when he carries a medium or heavy load. BONUS:VAR|MonkACLVL|MonkLVL|TYPE=Level SOURCEPAGE:p.14 ABILITY:Internal|AUTOMATIC|Monk AC Tracker Bonus Feat KEY:Unchained Monk ~ Bonus Feat CATEGORY:Special Ability TYPE:Unchained Monk Class Feature.SpecialQuality DEFINE:MonkBonusFeatLVL|0 DEFINE:MonkBonusFeatLVL|0 DESC:At 1st level, 2nd level, and every 4 levels thereafter, a monk can select a bonus feat. These feats must be taken from the following list: Catch Off-Guard, Combat Reflexes, Deflect Arrows, Dodge, Improved Grapple, Scorpion Style, and Throw Anything. At 6th level, the following feats are added to the list: Gorgon's Fist, Improved Bull Rush, Improved Disarm, Improved Feint, Improved Trip, and Mobility. At 10th level, the following feats are added to the list: Improved Critical, Medusa's Wrath, Snatch Arrows, and Spring Attack. A monk need not have any of the prerequisites normally required for these feats to select them. BONUS:ABILITYPOOL|Unchained Monk Bonus Feat|1+max((MonkBonusFeatLVL+2)/4,0) BONUS:VAR|MonkFeatQualify|MonkLVL BONUS:VAR|MonkBonusFeatLVL|MonkLVL SOURCEPAGE:p.14 Flurry of Blows KEY:Unchained Monk ~ Flurry of Blows CATEGORY:Special Ability TYPE:Unchained Monk Class Feature.SpecialQuality.Extraordinary.Flurry of Blows SERVESAS:ABILITY=Special Ability|Monk ~ Flurry of Blows DESC:At 1st level, a monk can make a flurry of blows as a full-attack action. When making a flurry of blows, the monk can make one additional attack at his highest base attack bonus. This additional attack stacks with the bonus attacks from haste and other similar effects. When using this ability, the monk can make these attacks with any combination of his unarmed strikes and weapons that have the monk special weapon quality. He takes no penalty for using multiple weapons when making a flurry of blows, but he does not gain any additional attacks beyond what's already granted by the flurry for doing so. (He can still gain additional attacks from a high base attack bonus, from this ability, and from haste and similar effects). At 11th level, a monk can make an additional attack at his highest base attack bonus whenever he makes a flurry of blows. This stacks with the first attack from this ability and additional attacks from haste and similar effects. SOURCEPAGE:p.14 Stunning Fist KEY:Unchained Monk ~ Stunning Fist CATEGORY:Special Ability TYPE:Unchained Monk Class Feature.SpecialQuality.Extraordinary.Stunning Fist SERVESAS:ABILITY=Special Ability|Monk ~ Stunning Fist DESC:At 1st level, the monk gains Stunning Fist as a bonus feat, even if he does not meet the prerequisites. At 4th level, and every 4 levels thereafter, the monk gains the ability to apply a new condition to the target of his Stunning Fist. This condition replaces stunning the target for 1 round, and a successful saving throw still negates the effect. At 4th level, the monk can choose to make the target fatigued. At 8th level, he can make the target sickened for 1 minute. At 12th level, he can make the target staggered for 1d6+1 rounds. At 16th level, he can permanently blind or deafen the target. At 20th level, he can paralyze the target for 1d6+1 rounds. The monk must choose which condition will apply before the attack roll is made. These effects do not stack with themselves (a creature fatigued by Stunning Fist cannot become exhausted if hit by Stunning Fist again), but additional hits do increase the duration. ABILITY:FEAT|VIRTUAL|Stunning Fist BONUS:VAR|StunningFistMonkLVL|MonkLVL SOURCEPAGE:p.14 From 2c04cf9448439a1ab4e1d7292b3c4f6bbdf3bec7 Mon Sep 17 00:00:00 2001 From: LegacyKing Date: Sun, 18 Aug 2024 10:08:56 -0700 Subject: [PATCH 122/142] DATA-4362 --- .../advanced_class_guide/acg_abilities_class.lst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/pathfinder/paizo/roleplaying_game/advanced_class_guide/acg_abilities_class.lst b/data/pathfinder/paizo/roleplaying_game/advanced_class_guide/acg_abilities_class.lst index f9770fb02d1..62d0be5ee0f 100644 --- a/data/pathfinder/paizo/roleplaying_game/advanced_class_guide/acg_abilities_class.lst +++ b/data/pathfinder/paizo/roleplaying_game/advanced_class_guide/acg_abilities_class.lst @@ -3973,7 +3973,7 @@ Forgepriest Bonus Combat Feats KEY:Forgepriest ~ Bonus Combat Feats CAT # Sacred Fist Class Skills KEY:Sacred Fist ~ Class Skills CATEGORY:Special Ability TYPE:Sacred Fist Class Feature.Warpriest Class Feature.SpecialQuality DESC:The sacred fist's class skills are Acrobatics (Dex), Climb (Str), Craft (Int), Diplomacy (Cha), Escape Artist (Dex), Heal (Wis), Intimidate (Cha), Knowledge (history) (Int), Knowledge (religion) (Int), Perception (Wis), Profession (Wis), Sense Motive (Wis), Ride (Dex), Sense Motive (Wis), Spellcraft (Int), Stealth (Dex), and Swim (Str). These skills replace the warpriest's class skills. CSKILL:Acrobatics|Climb|TYPE=Craft|Diplomacy|Escape Artist|Heal|Intimidate|Knowledge (History)|Knowledge (Religion)|Perception|TYPE=Profession|Sense Motive|Ride|Sense Motive|Spellcraft|Stealth|Swim SOURCEPAGE:p.130 Weapon and Armor Proficiency KEY:Sacred Fist ~ Weapon and Armor Proficiency CATEGORY:Special Ability TYPE:Sacred Fist Class Feature.Warpriest Class Feature.SpecialQuality DESC:Sacred fists are proficient with the club, crossbow (light or heavy), dagger, handaxe, javelin, kama, nunchaku, quarterstaff, sai, shortspear, short sword, shuriken, siangham, sling, and spear. Sacred fists are not proficient with any armor or shields. When wearing armor, using shield, or carrying a medium or heavy load, a sacred fist loses his AC bonus and flurry of blows. AUTO:WEAPONPROF|Club|Crossbow (Light)|Crossbow (Heavy)|Dagger|Handaxe|Javelin|Kama|Nunchaku|Quarterstaff|Sai|Shortspear|Sword (Short)|Shuriken|Siangham|Sling|Spear SOURCEPAGE:p.131 -AC Bonus KEY:Sacred Fist ~ AC Bonus CATEGORY:Special Ability TYPE:Sacred Fist Class Feature.Warpriest Class Feature.SpecialQuality.Supernatural DEFINE:WarpriestACBonus|0 DEFINE:WarpriestACLVL|0 DEFINE:WarpriestACWisBonus|0 DEFINE:WarpriestACDodgeBonus|0 DESC:A deity protects her sacred fist as long as he is unarmored and unencumbered. A sacred fist adds his Wisdom modifier (minimum 0) to his AC and his CMD. In addition, a sacred fist gains a +1 dodge bonus to AC and CMD at 4th level. This bonus increases by 1 for every 4 levels thereafter (to a maximum of +5 at 20th level). These bonuses to AC apply even against touch attacks or when the sacred fist is flat-footed. He loses these bonuses when he is immobilized or helpless, when he wears any armor, when he carries a shield, or when he carries a medium or heavy load. This counts as monk ability of the same name, and the sacred fist's warpriest level stack with monk levels for determining the benefit. BONUS:COMBAT|AC|WarpriestACBonus|PREVAREQ:ENCUMBERANCE,0,var("COUNT[EQTYPE.ARMOR.EQUIPPED]"),0,var("COUNT[EQTYPE.SHIELD.EQUIPPED]"),0 BONUS:COMBAT|AC|WarpriestACDodgeBonus|TYPE=Dodge BONUS:VAR|WarpriestACLVL|WarpriestLVL BONUS:VAR|WarpriestACBonus|min((WarpriestACLVL)/4,5) BONUS:VAR|WarpriestACBonus|WarpriestACWisBonus BONUS:VAR|CMD|WarpriestACBonus|PREVAREQ:ENCUMBERANCE,0,var("COUNT[EQTYPE.ARMOR.EQUIPPED]"),0,var("COUNT[EQTYPE.SHIELD.EQUIPPED]"),0 BONUS:VAR|WarpriestACWisBonus|max(WIS,0) BONUS:VAR|WarpriestACDodgeBonus|WarpriestLVL/4 SOURCEPAGE:p.131 +AC Bonus KEY:Sacred Fist ~ AC Bonus CATEGORY:Special Ability TYPE:Sacred Fist Class Feature.Warpriest Class Feature.SpecialQuality.Supernatural DEFINE:WarpriestACLVL|0 DESC:A deity protects her sacred fist as long as he is unarmored and unencumbered. A sacred fist adds his Wisdom modifier (minimum 0) to his AC and his CMD. In addition, a sacred fist gains a +1 dodge bonus to AC and CMD at 4th level. This bonus increases by 1 for every 4 levels thereafter (to a maximum of +5 at 20th level). These bonuses to AC apply even against touch attacks or when the sacred fist is flat-footed. He loses these bonuses when he is immobilized or helpless, when he wears any armor, when he carries a shield, or when he carries a medium or heavy load. This counts as monk ability of the same name, and the sacred fist's warpriest level stack with monk levels for determining the benefit. BONUS:VAR|MonkACLVL|WarpriestLVL SOURCEPAGE:p.131 ABILITY:Internal|AUTOMATIC|Monk AC Tracker SERVESAS:ABILITY=Special Ability|Monk ~ AC Bonus Flurry of Blows KEY:Sacred Fist ~ Flurry of Blows CATEGORY:Special Ability TYPE:Sacred Fist Class Feature.Warpriest Class Feature.SpecialQuality.Extraordinary DESC:A sacred fist can make a flurry of blows attack as a full-attack action. This ability works like the monk ability of the same name, except the sacred fist's attack bonus from warpriest levels does not count as his warpriest level. ABILITY:Special Ability|AUTOMATIC|Monk ~ Flurry of Blows BONUS:VAR|FlurryLVL|WarpriestLVL SOURCEPAGE:p.131 Unarmed Strike KEY:Sacred Fist ~ Unarmed Strike CATEGORY:Special Ability TYPE:Sacred Fist Class Feature.Warpriest Class Feature.SpecialQuality DESC:A sacred fist gains Improved Unarmed Strike as a bonus feat. He uses his warpriest levels as monk levels for determining the amount of damage dealt with an unarmed strike. ABILITY:Feat|AUTOMATIC|Improved Unarmed Strike ABILITY:Internal|AUTOMATIC|Monk ~ Unarmed Damage BONUS:VAR|MonkUnarmedDamageLVL|WarpriestLVL SOURCEPAGE:p.131 Blessed Fortitude KEY:Sacred Fist ~ Blessed Fortitude CATEGORY:Special Ability TYPE:Sacred Fist Class Feature.Warpriest Class Feature.SpecialQuality.Supernatural DESC:A sacred fist can avoid even magical and unusual attacks with help from his deity. If he succeeds at a Fortitude saving throw against an attack that has a reduced effect on a successful save, he instead avoids the effect entirely. A helpless sacred fist does not gain the benefit of the blessed fortitude ability. SOURCEPAGE:p.131 From 4ee06f9a967074669ce0dd1c319f8c6bc1348648 Mon Sep 17 00:00:00 2001 From: LegacyKing Date: Sun, 18 Aug 2024 10:09:28 -0700 Subject: [PATCH 123/142] Fix PreReq in Latent Psion --- .../legacy_of_fire/players_guide/lofpg_abilities.lst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/pathfinder/paizo/adventure_path/legacy_of_fire/players_guide/lofpg_abilities.lst b/data/pathfinder/paizo/adventure_path/legacy_of_fire/players_guide/lofpg_abilities.lst index 61c1abf88b6..3538b747108 100644 --- a/data/pathfinder/paizo/adventure_path/legacy_of_fire/players_guide/lofpg_abilities.lst +++ b/data/pathfinder/paizo/adventure_path/legacy_of_fire/players_guide/lofpg_abilities.lst @@ -28,7 +28,7 @@ Forlorn KEY:Forlorn_Trait CATEGORY:Special Ability TYPE:Trait.Ra Freedom Fighter KEY:Freedom Fighter_Trait CATEGORY:Special Ability TYPE:Trait.RaceTrait PREMULT:1,[PREVAREQ:BypassTraitRestriction,1],[PREABILITY:1,CATEGORY=Special Ability,Freedom Fighter_Trait],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.RaceTrait] PRERACE:1,Halfling,RACESUBTYPE=Halfling DESC:Although halfling slaves are not as common in Katapesh as they are in Cheliax, they still make up a quarter of slaves sold at the Katapeshi Fleshfairs. Your parents allowed escaping slaves to hide in your home frequently, and the stories you've heard from these escaping slaves instilled into you a deep loathing of slavery. CSKILL:Escape Artist SOURCEPAGE:p.8 Genie Blood KEY:Genie Blood_Trait CATEGORY:Special Ability TYPE:Trait.RaceTrait PREMULT:1,[PREVAREQ:BypassTraitRestriction,1],[PREABILITY:1,CATEGORY=Special Ability,Genie Blood_Trait],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.RaceTrait] PRERACE:1,Human,RACESUBTYPE=Human PRETEXT:Keleshite DESC:One of your ancestors was genie-kind. MULT:YES CHOOSE:NUMCHOICES=1|STRING|Air|Earth|Fire|Water SOURCEPAGE:p.8 Historian KEY:Historian_Trait CATEGORY:Special Ability TYPE:Trait.RaceTrait PREMULT:1,[PREVAREQ:BypassTraitRestriction,1],[PREABILITY:1,CATEGORY=Special Ability,Historian_Trait],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.RaceTrait] PRERACE:1,Human,RACESUBTYPE=Human PRETEXT:Garundi DESC:Your parents were scholars of history, whether genealogists of your own family tree, sages on the subject of ancient empires, or simply hobbyists with a deep and abiding love for the past. BONUS:SKILL|Knowledge (History)|1|TYPE=Trait BONUS:VAR|BardicKnowledge|1|TYPE=Trait CSKILL:Knowledge (History) SOURCEPAGE:p.8 -Latent Psion KEY:Latent Psion_Trait CATEGORY:Special Ability TYPE:Trait.RaceTrait PREMULT:1,[PREVAREQ:BypassTraitRestriction,1],[PREABILITY:1,CATEGORY=Special Ability,Psion_Trait],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.RaceTrait] PRERACE:1,Human,RACESUBTYPE=Human PRETEXT:Vudrani DESC:The power to affect the world with the mind is very much a reality in your distant homeland. Although you may not even have been born in Vudra, this power remains potent in your mind as well and protects you from mental assault. SOURCEPAGE:p.8 +Latent Psion KEY:Latent Psion_Trait CATEGORY:Special Ability TYPE:Trait.RaceTrait PREMULT:1,[PREVAREQ:BypassTraitRestriction,1],[PREABILITY:1,CATEGORY=Special Ability,Latent Psion_Trait],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.RaceTrait] PRERACE:1,Human,RACESUBTYPE=Human PRETEXT:Vudrani DESC:The power to affect the world with the mind is very much a reality in your distant homeland. Although you may not even have been born in Vudra, this power remains potent in your mind as well and protects you from mental assault. SOURCEPAGE:p.8 Legacy of Sand KEY:Legacy of Sand_Trait CATEGORY:Special Ability TYPE:Trait.RaceTrait PREMULT:1,[PREVAREQ:BypassTraitRestriction,1],[PREABILITY:1,CATEGORY=Special Ability,Legacy of Sand_Trait],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.RaceTrait] PRERACE:1,Half-Orc DESC:A large tribe of orcs adapted to life in the desert once dwelt in southeastern Katapesh. Although this tribe is long extinct, some half-orcs of Katapesh carry the traits of this tribe in their particularly large jaws, broad shoulders, and shockingly pale eyes. You often have dreams of hunts and strange ceremonies held under moonlight in the desert sands. Some ascribe these dreams to racial memory, others to visions or prophecies. These dreams have instilled in you a fierce sense of tradition. BONUS:SAVE|Will|1|TYPE=Trait SOURCEPAGE:p.8 Spirits in the Stone KEY:Spirits in the Stone_Trait CATEGORY:Special Ability TYPE:Trait.RaceTrait PREMULT:1,[PREVAREQ:BypassTraitRestriction,1],[PREABILITY:1,CATEGORY=Special Ability,Spirits in the Stone_Trait],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.RaceTrait] PRERACE:1,Human,RACESUBTYPE=Human PRETEXT:Mwangi DESC:You have an almost instinctive ability to sense danger and peril in ruined structures. SOURCEPAGE:p.8 World Traveler KEY:World Traveler_Trait CATEGORY:Special Ability TYPE:Trait.RaceTrait PREMULT:1,[PREVAREQ:BypassTraitRestriction,1],[PREABILITY:1,CATEGORY=Special Ability,World Traveler_Trait],[!PREABILITY:1,CATEGORY=Special Ability,TYPE.RaceTrait] PRERACE:1,Human,RACESUBTYPE=Human PRETEXT:Varisian DESC:Your family has taken the love of travel to an extreme, roaming the world extensively. You've seen dozens of cultures and have learned to appreciate the diversity of what the world has to offer. MULT:YES CHOOSE:NUMCHOICES=1|SKILL|Diplomacy|Knowledge (Local)|Sense Motive BONUS:SKILL|LIST|1|TYPE=Trait CSKILL:LIST SOURCEPAGE:p.8 From 774fb2299db16b702bb4190405c0a33cb297ae50 Mon Sep 17 00:00:00 2001 From: LegacyKing Date: Sun, 18 Aug 2024 10:26:47 -0700 Subject: [PATCH 124/142] DATA-4351 --- .../advanced_class_guide/acg_abilities_class.lst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/pathfinder/paizo/roleplaying_game/advanced_class_guide/acg_abilities_class.lst b/data/pathfinder/paizo/roleplaying_game/advanced_class_guide/acg_abilities_class.lst index 62d0be5ee0f..9d0b90f1c76 100644 --- a/data/pathfinder/paizo/roleplaying_game/advanced_class_guide/acg_abilities_class.lst +++ b/data/pathfinder/paizo/roleplaying_game/advanced_class_guide/acg_abilities_class.lst @@ -2358,7 +2358,7 @@ Sentient Sword KEY:Blade Adept ~ Sentient Sword CATEGORY:Special Abi Adept Exploits KEY:Blade Adept ~ Adept Exploits CATEGORY:Special Ability TYPE:Blade Adept Class Feature.Arcanist Class Feature.SpecialQuality DESC:A blade adept can select from the following additional exploits. Eldritch Blade, Magus Arcana, Spell Strike, Student of the Blade, and Weapon Specialization. SOURCEPAGE:p.76 Adept Blade Weapon CATEGORY:Internal TYPE:ArcanistClassFeatures.AdeptBladeChoice DEFINE:SwordBoundAdeptBladeBonus|0 DEFINE:AdeptBladeFocus|0 DEFINE:AdeptBladeSpecialize|0 MULT:YES CHOOSE:WEAPONPROFICIENCY|TYPE=Simple,TYPE=Piercing,TYPE=OneHanded,TYPE=Melee|TYPE=Simple,TYPE=Slashing,TYPE=OneHanded,TYPE=Melee|TYPE=Martial,TYPE=Piercing,TYPE=OneHanded,TYPE=Melee|TYPE=Martial,TYPE=Slashing,TYPE=OneHanded,TYPE=Melee AUTO:WEAPONPROF|%LIST BONUS:VAR|SwordBoundAdeptBladeBonus|1|PREVARGTEQ:ArcanistLVL,3 BONUS:VAR|SwordBoundAdeptBladeBonus|1|PREVARGTEQ:ArcanistLVL,5 BONUS:VAR|SwordBoundAdeptBladeBonus|1|PREVARGTEQ:ArcanistLVL,9 BONUS:VAR|SwordBoundAdeptBladeBonus|1|PREVARGTEQ:ArcanistLVL,13 BONUS:VAR|SwordBoundAdeptBladeBonus|1|PREVARGTEQ:ArcanistLVL,17 BONUS:VAR|WEAPONPROF=%LIST|TOHIT|1|PREVARGTEQ=AdeptBladeFocus,1 BONUS:VAR|WEAPONPROF=%LIST|DAMAGE|2|PREVARGTEQ=AdeptBladeSpecialize,1 BONUS:WEAPONPROF=%LIST|TOHIT,DAMAGE|SwordBoundAdeptBladeBonus|TYPE=Enhancement BONUS:WEAPONPROF=%LIST|TOHIT - +Blade Adept Arcana CATEGORY:Internal TYPE:ArcanistClassFeatures.BladeAdeptArcana MULT:YES CHOOSE:ABILITYSELECTION|Special Ability|TYPE=BladeAdeptArcana ABILITY:Special Ability|AUTOMATIC|%LIST ##COMMENT:Unsure HOW Eldrich Blade works since generally Caster Level IS Class Level. Not sure if there IS a need to implement. Eldritch Blade KEY:Arcanist Exploit ~ Eldritch Blade CATEGORY:Special Ability TYPE:ArcanistExploit.Arcanist Class Feature.SpecialQuality PREABILITY:1,CATEGORY=Archetype,Arcanist Archetype ~ Blade Adept DESC:A blade adept with this exploit uses her caster level instead of her class level for the purpose of advancing her bonded sword's powers. SOURCEPAGE:p.76 Magus Arcana KEY:Arcanist Exploit ~ Magus Arcana CATEGORY:Special Ability TYPE:ArcanistExploit.Arcanist Class Feature.SpecialQuality PREABILITY:1,CATEGORY=Archetype,Arcanist Archetype ~ Blade Adept DESC:A blade adept can select any of the following magus arcana, using her arcane reservoir in place of the magus's arcane pool: arcane accuracy, close range, critical strike, dispelling strike, and hasted assault. The blade adept treats her arcanist level as her magus level when determining the effects of magus arcana and when specific arcana are available. A blade adept can take this exploit multiple times. Each time it is taken, it applies to a different magus arcana. STACK:YES MULT:YES CHOOSE:NOCHOICE BONUS:ABILITYPOOL|Blade Adept Arcana|1 SOURCEPAGE:p.76 From c9c3b02f348bdb3e42256d122b72758264cb8c6d Mon Sep 17 00:00:00 2001 From: pokemonpasta Date: Thu, 15 Aug 2024 17:59:41 +0100 Subject: [PATCH 125/142] DATA-4361 --- .../paizo/roleplaying_game/core_rulebook/cr_abilities.lst | 1 + .../roleplaying_game/core_rulebook/cr_abilitycategories.lst | 1 + .../roleplaying_game/core_rulebook/cr_equip_magic_items.lst | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities.lst b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities.lst index b996514b76e..7b2977d5a59 100644 --- a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities.lst +++ b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities.lst @@ -135,6 +135,7 @@ Unarmed Vicious CATEGORY:Special Ability TYPE:UnarmedDisplay Unarmed Wounding CATEGORY:Special Ability TYPE:UnarmedDisplay ASPECT:UnarmedNotes|unarmed and natural attacks deal 1 point of bleed damage per hit Headband of Intellect Skill Selection CATEGORY:Special Ability TYPE:HeadbandSkill STACK:NO MULT:YES CHOOSE:SKILL|TYPE=Base BONUS:SKILLRANK|%LIST|TL +Ioun Stone Skill Selection CATEGORY:Special Ability TYPE:IounStoneSkill STACK:NO MULT:YES CHOOSE:SKILL|TYPE=Base BONUS:SKILLRANK|%LIST|TL ###Block: Abilities for Intelligent Magic Items diff --git a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilitycategories.lst b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilitycategories.lst index e18db51c4f7..8cd4b47b464 100644 --- a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilitycategories.lst +++ b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilitycategories.lst @@ -226,6 +226,7 @@ ABILITYCATEGORY:Human Ethnicity VISIBLE:QUALIFY EDITABLE:YES EDITPOOL:NO FRA ABILITYCATEGORY:Region of Origin VISIBLE:QUALIFY EDITABLE:YES EDITPOOL:NO FRACTIONALPOOL:NO CATEGORY:Background TYPE:Region PLURAL:Regions of Origin DISPLAYLOCATION:Background ABILITYCATEGORY:Headband of Intellect Skill Choice VISIBLE:QUALIFY EDITABLE:YES EDITPOOL:NO FRACTIONALPOOL:NO CATEGORY:Special Ability TYPE:HeadbandSkill DISPLAYLOCATION:Misc +ABILITYCATEGORY:Scarlet and blue Sphere Ioun Stone Skill Choice VISIBLE:QUALIFY EDITABLE:YES EDITPOOL:NO FRACTIONALPOOL:NO CATEGORY:Special Ability TYPE:IounStoneSkill DISPLAYLOCATION:Misc ABILITYCATEGORY:Intelligence-Based Skill VISIBLE:QUALIFY EDITABLE:YES EDITPOOL:NO CATEGORY:Special Ability TYPE:IntBaseSkill DISPLAYLOCATION:Class Features diff --git a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_equip_magic_items.lst b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_equip_magic_items.lst index 5a239702172..09d5ec879ab 100644 --- a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_equip_magic_items.lst +++ b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_equip_magic_items.lst @@ -230,7 +230,7 @@ Incandescent blue Sphere Ioun Stone KEY:Ioun Stone (Incandescent blue Sphere) Pale blue Rhomboid Ioun Stone KEY:Ioun Stone (Pale blue Rhomboid) SORTKEY:Ioun Stone, Pale blue Rhomboid TYPE:Magic.Wondrous.Ioun COST:8000 WT:0 SOURCEPAGE:p.520 BONUS:STAT|STR|2|TYPE=Enhancement QUALITY:Aura|strong varied QUALITY:Caster Level|12th QUALITY:Slot|none QUALITY:Construction Cost|4,000 gp QUALITY:Construction Requirements|Craft Wondrous Item, creator must be 12th level DESC:These crystalline stones always float in the air and must be within 3 feet of their owner to be of any use. When a character first acquires a stone, she must hold it and then release it, whereupon it takes up a circling orbit 1d3 feet from her head. Thereafter, a stone must be grasped or netted to separate it from its owner. The owner may voluntarily seize and stow a stone (to keep it safe while she is sleeping, for example), but she loses the benefits of the stone during that time. Ioun stones have AC 24, 10 hit points, and hardness 5. The powers of each stone vary depending on its color and shape (see the table).&nl;Regeneration from the pearly white ioun stone works like a ring of regeneration. It only cures damage taken while the character is using the stone. The pale lavender and lavender-and-green stones work like a rod of absorption, but absorbing a spell requires a readied action, and these stones cannot be used to empower spells. Stored spells in the vibrant purple stone must be placed by a spellcaster but can be used by anyone (see ring of minor spell storing). Pink Rhomboid Ioun Stone KEY:Ioun Stone (Pink Rhomboid) SORTKEY:Ioun Stone, Pink Rhomboid TYPE:Magic.Wondrous.Ioun COST:8000 WT:0 SOURCEPAGE:p.520 BONUS:STAT|CON|2|TYPE=Enhancement QUALITY:Aura|strong varied QUALITY:Caster Level|12th QUALITY:Slot|none QUALITY:Construction Cost|4,000 gp QUALITY:Construction Requirements|Craft Wondrous Item, creator must be 12th level DESC:These crystalline stones always float in the air and must be within 3 feet of their owner to be of any use. When a character first acquires a stone, she must hold it and then release it, whereupon it takes up a circling orbit 1d3 feet from her head. Thereafter, a stone must be grasped or netted to separate it from its owner. The owner may voluntarily seize and stow a stone (to keep it safe while she is sleeping, for example), but she loses the benefits of the stone during that time. Ioun stones have AC 24, 10 hit points, and hardness 5. The powers of each stone vary depending on its color and shape (see the table).&nl;Regeneration from the pearly white ioun stone works like a ring of regeneration. It only cures damage taken while the character is using the stone. The pale lavender and lavender-and-green stones work like a rod of absorption, but absorbing a spell requires a readied action, and these stones cannot be used to empower spells. Stored spells in the vibrant purple stone must be placed by a spellcaster but can be used by anyone (see ring of minor spell storing). Pink and green Sphere Ioun Stone KEY:Ioun Stone (Pink and green Sphere) SORTKEY:Ioun Stone, Pink and green Sphere TYPE:Magic.Wondrous.Ioun COST:8000 WT:0 SOURCEPAGE:p.520 BONUS:STAT|CHA|2|TYPE=Enhancement QUALITY:Aura|strong varied QUALITY:Caster Level|12th QUALITY:Slot|none QUALITY:Construction Cost|4,000 gp QUALITY:Construction Requirements|Craft Wondrous Item, creator must be 12th level DESC:These crystalline stones always float in the air and must be within 3 feet of their owner to be of any use. When a character first acquires a stone, she must hold it and then release it, whereupon it takes up a circling orbit 1d3 feet from her head. Thereafter, a stone must be grasped or netted to separate it from its owner. The owner may voluntarily seize and stow a stone (to keep it safe while she is sleeping, for example), but she loses the benefits of the stone during that time. Ioun stones have AC 24, 10 hit points, and hardness 5. The powers of each stone vary depending on its color and shape (see the table).&nl;Regeneration from the pearly white ioun stone works like a ring of regeneration. It only cures damage taken while the character is using the stone. The pale lavender and lavender-and-green stones work like a rod of absorption, but absorbing a spell requires a readied action, and these stones cannot be used to empower spells. Stored spells in the vibrant purple stone must be placed by a spellcaster but can be used by anyone (see ring of minor spell storing). -Scarlet and blue Sphere Ioun Stone KEY:Ioun Stone (Scarlet and blue Sphere) SORTKEY:Ioun Stone, Scarlet and blue Sphere TYPE:Magic.Wondrous.Ioun.Intelligence COST:8000 WT:0 SOURCEPAGE:p.520 BONUS:STAT|INT|2|TYPE=Enhancement QUALITY:Aura|strong varied QUALITY:Caster Level|12th QUALITY:Slot|none QUALITY:Construction Cost|4,000 gp QUALITY:Construction Requirements|Craft Wondrous Item, creator must be 12th level DESC:These crystalline stones always float in the air and must be within 3 feet of their owner to be of any use. When a character first acquires a stone, she must hold it and then release it, whereupon it takes up a circling orbit 1d3 feet from her head. Thereafter, a stone must be grasped or netted to separate it from its owner. The owner may voluntarily seize and stow a stone (to keep it safe while she is sleeping, for example), but she loses the benefits of the stone during that time. Ioun stones have AC 24, 10 hit points, and hardness 5. The powers of each stone vary depending on its color and shape (see the table).&nl;Regeneration from the pearly white ioun stone works like a ring of regeneration. It only cures damage taken while the character is using the stone. The pale lavender and lavender-and-green stones work like a rod of absorption, but absorbing a spell requires a readied action, and these stones cannot be used to empower spells. Stored spells in the vibrant purple stone must be placed by a spellcaster but can be used by anyone (see ring of minor spell storing). +Scarlet and blue Sphere Ioun Stone KEY:Ioun Stone (Scarlet and blue Sphere) SORTKEY:Ioun Stone, Scarlet and blue Sphere TYPE:Magic.Wondrous.Ioun.Intelligence COST:8000 WT:0 SOURCEPAGE:p.520 BONUS:ABILITYPOOL|Scarlet and blue Sphere Ioun Stone Skill Choice|1 BONUS:STAT|INT|2|TYPE=Enhancement QUALITY:Aura|strong varied QUALITY:Caster Level|12th QUALITY:Slot|none QUALITY:Construction Cost|4,000 gp QUALITY:Construction Requirements|Craft Wondrous Item, creator must be 12th level DESC:These crystalline stones always float in the air and must be within 3 feet of their owner to be of any use. When a character first acquires a stone, she must hold it and then release it, whereupon it takes up a circling orbit 1d3 feet from her head. Thereafter, a stone must be grasped or netted to separate it from its owner. The owner may voluntarily seize and stow a stone (to keep it safe while she is sleeping, for example), but she loses the benefits of the stone during that time. Ioun stones have AC 24, 10 hit points, and hardness 5. The powers of each stone vary depending on its color and shape (see the table).&nl;Regeneration from the pearly white ioun stone works like a ring of regeneration. It only cures damage taken while the character is using the stone. The pale lavender and lavender-and-green stones work like a rod of absorption, but absorbing a spell requires a readied action, and these stones cannot be used to empower spells. Stored spells in the vibrant purple stone must be placed by a spellcaster but can be used by anyone (see ring of minor spell storing). Dark blue Rhomboid Ioun Stone KEY:Ioun Stone (Dark blue Rhomboid) SORTKEY:Ioun Stone, Dark blue Rhomboid TYPE:Magic.Wondrous.Ioun COST:10000 WT:0 SOURCEPAGE:p.520 ABILITY:FEAT|VIRTUAL|Alertness QUALITY:Aura|strong varied QUALITY:Caster Level|12th QUALITY:Slot|none QUALITY:Construction Cost|5,000 gp QUALITY:Construction Requirements|Craft Wondrous Item, creator must be 12th level DESC:These crystalline stones always float in the air and must be within 3 feet of their owner to be of any use. When a character first acquires a stone, she must hold it and then release it, whereupon it takes up a circling orbit 1d3 feet from her head. Thereafter, a stone must be grasped or netted to separate it from its owner. The owner may voluntarily seize and stow a stone (to keep it safe while she is sleeping, for example), but she loses the benefits of the stone during that time. Ioun stones have AC 24, 10 hit points, and hardness 5. The powers of each stone vary depending on its color and shape (see the table).&nl;Regeneration from the pearly white ioun stone works like a ring of regeneration. It only cures damage taken while the character is using the stone. The pale lavender and lavender-and-green stones work like a rod of absorption, but absorbing a spell requires a readied action, and these stones cannot be used to empower spells. Stored spells in the vibrant purple stone must be placed by a spellcaster but can be used by anyone (see ring of minor spell storing). Iridescent Spindle Ioun Stone KEY:Ioun Stone (Iridescent Spindle) SORTKEY:Ioun Stone, Iridescent Spindle TYPE:Magic.Wondrous.Ioun COST:18000 WT:0 SOURCEPAGE:p.520 QUALITY:Aura|strong varied QUALITY:Caster Level|12th QUALITY:Slot|none QUALITY:Construction Cost|9,000 gp QUALITY:Construction Requirements|Craft Wondrous Item, creator must be 12th level SPROP:Sustains creature without air DESC:These crystalline stones always float in the air and must be within 3 feet of their owner to be of any use. When a character first acquires a stone, she must hold it and then release it, whereupon it takes up a circling orbit 1d3 feet from her head. Thereafter, a stone must be grasped or netted to separate it from its owner. The owner may voluntarily seize and stow a stone (to keep it safe while she is sleeping, for example), but she loses the benefits of the stone during that time. Ioun stones have AC 24, 10 hit points, and hardness 5. The powers of each stone vary depending on its color and shape (see the table).&nl;Regeneration from the pearly white ioun stone works like a ring of regeneration. It only cures damage taken while the character is using the stone. The pale lavender and lavender-and-green stones work like a rod of absorption, but absorbing a spell requires a readied action, and these stones cannot be used to empower spells. Stored spells in the vibrant purple stone must be placed by a spellcaster but can be used by anyone (see ring of minor spell storing). Pale lavender Ellipsoid Ioun Stone KEY:Ioun Stone (Pale lavender Ellipsoid) SORTKEY:Ioun Stone, Pale lavender Ellipsoid TYPE:Magic.Wondrous.Ioun COST:20000 WT:0 EQMOD:Special Ability ~ Charged Item / 20 Maximum|CHARGES[20] SOURCEPAGE:p.520 QUALITY:Aura|strong varied QUALITY:Caster Level|12th QUALITY:Slot|none QUALITY:Construction Cost|10,000 gp QUALITY:Construction Requirements|Craft Wondrous Item, creator must be 12th level SPROP:Absorbs spells of 4th level or lower DESC:These crystalline stones always float in the air and must be within 3 feet of their owner to be of any use. When a character first acquires a stone, she must hold it and then release it, whereupon it takes up a circling orbit 1d3 feet from her head. Thereafter, a stone must be grasped or netted to separate it from its owner. The owner may voluntarily seize and stow a stone (to keep it safe while she is sleeping, for example), but she loses the benefits of the stone during that time. Ioun stones have AC 24, 10 hit points, and hardness 5. The powers of each stone vary depending on its color and shape (see the table).&nl;Regeneration from the pearly white ioun stone works like a ring of regeneration. It only cures damage taken while the character is using the stone. The pale lavender and lavender-and-green stones work like a rod of absorption, but absorbing a spell requires a readied action, and these stones cannot be used to empower spells. Stored spells in the vibrant purple stone must be placed by a spellcaster but can be used by anyone (see ring of minor spell storing). From 35327480f157b2a56183a105bb1f65eacf741f62 Mon Sep 17 00:00:00 2001 From: pokemonpasta Date: Thu, 15 Aug 2024 18:45:10 +0100 Subject: [PATCH 126/142] DATA-4355 --- .../curse_of_the_crimson_throne/ap10/ap10_equipmods.lst | 2 +- .../paizo/roleplaying_game/ultimate_combat/uc_feats.lst | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/pathfinder/paizo/adventure_path/curse_of_the_crimson_throne/ap10/ap10_equipmods.lst b/data/pathfinder/paizo/adventure_path/curse_of_the_crimson_throne/ap10/ap10_equipmods.lst index a296093d0c3..bd7414f7280 100644 --- a/data/pathfinder/paizo/adventure_path/curse_of_the_crimson_throne/ap10/ap10_equipmods.lst +++ b/data/pathfinder/paizo/adventure_path/curse_of_the_crimson_throne/ap10/ap10_equipmods.lst @@ -4,7 +4,7 @@ SOURCELONG:Curse of the Crimson Throne, Chapter 4: A History of Ashes SOURCESHOR # Original Entry by: Paul Grosse # Modifier Name Unique Key Type Plus Visible Source Page Required Type Weapon prop. bonus Special Property Apply to both heads -Guided KEY:Special Ability ~ Guided ~ Weapon TYPE:Weapon.Melee.Thrown PLUS:1 VISIBLE:QUALIFY SOURCEPAGE:p.22 PRETYPE:2,WeaponEnhancement,Weapon PRETYPE:1,Melee,Thrown BONUS:WEAPON|TOHIT,DAMAGE|WIS-STR|PRETYPE:1,Weapon SPROP:A weapon with the guided property allows its wielder to use his instinct when striking blows with it ASSIGNTOALL:NO +Guided KEY:Special Ability ~ Guided ~ Weapon TYPE:Weapon.Melee.Thrown PLUS:1 VISIBLE:QUALIFY SOURCEPAGE:p.22 PRETYPE:2,WeaponEnhancement,Weapon PRETYPE:1,Melee,Thrown BONUS:WEAPON|TOHIT,DAMAGE|WIS-STR|TYPE=Ability|PRETYPE:1,Weapon SPROP:A weapon with the guided property allows its wielder to use his instinct when striking blows with it ASSIGNTOALL:NO diff --git a/data/pathfinder/paizo/roleplaying_game/ultimate_combat/uc_feats.lst b/data/pathfinder/paizo/roleplaying_game/ultimate_combat/uc_feats.lst index 473e92104de..bbb90468fdd 100644 --- a/data/pathfinder/paizo/roleplaying_game/ultimate_combat/uc_feats.lst +++ b/data/pathfinder/paizo/roleplaying_game/ultimate_combat/uc_feats.lst @@ -383,9 +383,9 @@ Greater Called Shot CATEGORY:FEAT TYPE:Called Shot PREABILITY:2,CATEGORY=FEAT,C Non-Monk Levels Unarmed Damage Tracker CATEGORY:Internal BONUS:UDAM|CLASS.Monk|NonMonkClassLevels/2|TYPE=Base BONUS:VAR|MonkUnarmedDamageLVL|NonMonkClassLevels/2|TYPE=Base DEFINE:NonMonkClassLevels|0 BONUS:VAR|NonMonkClassLevels|(TL-MonkLVL)|TYPE=Base ###Block: Guided Hand Choices -Guided Hand ~ Melee CATEGORY:Internal TYPE:Guided Hand MULT:YES CHOOSE:WEAPONPROFICIENCY|DEITYWEAPON,TYPE=Melee BONUS:WEAPONPROF=%LIST|TOHIT|WIS-STR -Guided Hand ~ Ranged CATEGORY:Internal TYPE:Guided Hand MULT:YES CHOOSE:WEAPONPROFICIENCY|DEITYWEAPON,TYPE=Ranged BONUS:WEAPONPROF=%LIST|TOHIT|WIS-DEX -Guided Hand ~ Both CATEGORY:Internal TYPE:Guided Hand MULT:YES CHOOSE:WEAPONPROFICIENCY|DEITYWEAPON,TYPE=Melee,TYPE=Ranged BONUS:WEAPONPROF=%LIST|TOHIT|DEX-STR|TYPE=NotRanged BONUS:WEAPONPROF=%LIST|TOHIT|WIS-DEX +Guided Hand ~ Melee CATEGORY:Internal TYPE:Guided Hand MULT:YES CHOOSE:WEAPONPROFICIENCY|DEITYWEAPON,TYPE=Melee BONUS:WEAPONPROF=%LIST|TOHIT|WIS-STR|TYPE=Ability +Guided Hand ~ Ranged CATEGORY:Internal TYPE:Guided Hand MULT:YES CHOOSE:WEAPONPROFICIENCY|DEITYWEAPON,TYPE=Ranged BONUS:WEAPONPROF=%LIST|TOHIT|WIS-DEX|TYPE=Ability +Guided Hand ~ Both CATEGORY:Internal TYPE:Guided Hand MULT:YES CHOOSE:WEAPONPROFICIENCY|DEITYWEAPON,TYPE=Melee,TYPE=Ranged BONUS:WEAPONPROF=%LIST|TOHIT|DEX-STR|TYPE=NotRanged BONUS:WEAPONPROF=%LIST|TOHIT|WIS-DEX|TYPE=Ability ###Block: Master of Many Styles Wildcard Style Feat Wildcard CATEGORY:FEAT TYPE:Style VISIBLE:EXPORT PRECLASS:1,Monk=6 PREABILITY:1,CATEGORY=Archetype,Monk Archetype ~ Master Of Many Styles DEFINE:MonkWildcardSlot|0 DESC:This wildcard slot can be used to take on feats in a style feat path as long as the prerequisites are met. This wildcard can be changed every time the master of many styles changes styles. STACK:YES MULT:YES CHOOSE:NOCHOICE SOURCEPAGE:p.59 BONUS:VAR|MonkWildcardSlot|1 BENEFIT: The master of many monks currently has %1 wildcard slots available|MonkWildcardSlot From 71f8a54571c18a0558bce200f9a07241da00fb8d Mon Sep 17 00:00:00 2001 From: Misha Date: Sat, 15 Jun 2024 18:02:15 -0500 Subject: [PATCH 127/142] Update mc_feats.lst Fixed how Chain Challenge calculates the amount of challenges a samurai can chain; now correctly displays the samurai's Charisma modifier (minimum 1). --- .../paizo/roleplaying_game/monster_codex/mc_feats.lst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/pathfinder/paizo/roleplaying_game/monster_codex/mc_feats.lst b/data/pathfinder/paizo/roleplaying_game/monster_codex/mc_feats.lst index 16aa1270f17..f686a80f47d 100644 --- a/data/pathfinder/paizo/roleplaying_game/monster_codex/mc_feats.lst +++ b/data/pathfinder/paizo/roleplaying_game/monster_codex/mc_feats.lst @@ -7,7 +7,7 @@ Aquatic Adaption CATEGORY:FEAT TYPE:General Aquatic Advantage CATEGORY:FEAT TYPE:General PREABILITY:1,CATEGORY=FEAT,Combat Reflexes PREMOVE:1,Swim=1 DESC:Foes without a swim speed provoke attacks of opportunity from you underwater. SOURCEPAGE:p.188 BENEFIT:A creature that lacks a swim speed provokes an attack of opportunity from you when it attacks you underwater. You don't get an attack of opportunity if the attacker is under the effects of freedom of movement. Awesome Charge CATEGORY:FEAT TYPE:Combat PREABILITY:3,CATEGORY=FEAT,Awesome Blow,Improved Bull Rush,Power Attack PREVARGTEQ:PreStatScore_STR,25 DESC:When you charge, you can send your opponent flying. SOURCEPAGE:p.60 BENEFIT:When you hit your opponent with a charge attack, you can attempt an awesome blow combat maneuver against that opponent as a free action. Bushwhack CATEGORY:FEAT TYPE:Combat PREABILITY:2,CATEGORY=FEAT,Improved Grapple,Improved Unarmed Strike PREVARGTEQ:PreStatScore_DEX,13 DESC:You can subdue an unsuspecting foe quickly. SOURCEPAGE:p.20 BENEFIT:When a flat-footed creature is unaware of your presence and you successfully grapple it, you can attempt a second grapple combat maneuver check to pin the creature as a free action. If you have the Chokehold feat (Ultimate Combat 92), you can instead use this second combat maneuver check to initiate a chokehold. -Chain Challenge CATEGORY:FEAT TYPE:General PREABILITY:1,CATEGORY=Special Ability,Cavalier ~ Challenge,Samurai ~ Challenge PRELEVEL:MIN=7 DESC:You feed off the rush of victory over your enemies, and channel that fervor into battle. SOURCEPAGE:p.116 BENEFIT:When the target of your challenge ability is killed or knocked unconscious, you can declare a new challenge target within 30 feet as an immediate action. This action must be taken immediately upon your initial challenge target's defeat, and you can't take it later if you are unable to act at the time. If you declare a new challenge using this feat, it doesn't count against your total daily uses of challenge. You can chain together %1 challenges beyond the first.|min(1,CHA) +Chain Challenge CATEGORY:FEAT TYPE:General PREABILITY:1,CATEGORY=Special Ability,Cavalier ~ Challenge,Samurai ~ Challenge PRELEVEL:MIN=7 DESC:You feed off the rush of victory over your enemies, and channel that fervor into battle. SOURCEPAGE:p.116 BENEFIT:When the target of your challenge ability is killed or knocked unconscious, you can declare a new challenge target within 30 feet as an immediate action. This action must be taken immediately upon your initial challenge target's defeat, and you can't take it later if you are unable to act at the time. If you declare a new challenge using this feat, it doesn't count against your total daily uses of challenge. You can chain together %1 challenges beyond the first.|max(1,CHA) Cleaving Sweep CATEGORY:FEAT TYPE:Combat PREABILITY:3,CATEGORY=FEAT,Cleave,Improved Trip,Weapon Focus (greataxe) PRETOTALAB:11 PREVARGTEQ:PreStatScore_STR,15 DESC:You can sweep multiple foes to the ground with a single blow of your axe. SOURCEPAGE:p.60 BENEFIT:When using a full-attack action with a two-handed weapon, you can give up your regular attacks and instead attempt a trip combat maneuver at your highest base attack bonus against each opponent within reach. You must attempt a separate combat maneuver check against each opponent. Coordinated Reposition CATEGORY:FEAT TYPE:Teamwork PREABILITY:1,CATEGORY=FEAT,Step Up DESC:You are skilled in coordinating combat positioning with your allies. SOURCEPAGE:p.92 BENEFIT:Whenever an ally with this feat who is threatening a creature you are threatening takes a 5-foot step, you can move 5 feet as an immediate action. This movement does not provoke attacks of opportunity. Disarm Partner CATEGORY:FEAT TYPE:Combat.Teamwork PRETOTALAB:1 DESC:When your ally fails to disarm an opponent within your reach, you can try to disarm that same foe. SOURCEPAGE:p.93 BENEFIT:When an ally with this feat fails a disarm combat maneuver check made on his turn against an opponent within your melee reach, as an immediate action you can attempt a disarm combat maneuver check against that foe. From d635ffad87762caff9894f7448d84bc1efc3d092 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Aug 2024 00:45:04 -0700 Subject: [PATCH 128/142] Bump org.apache.commons:commons-lang3 from 3.16.0 to 3.17.0 (#7159) Bumps org.apache.commons:commons-lang3 from 3.16.0 to 3.17.0. --- updated-dependencies: - dependency-name: org.apache.commons:commons-lang3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 1aae6f444dd..03cd04a9b51 100644 --- a/build.gradle +++ b/build.gradle @@ -227,7 +227,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.1.12' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.12' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.12' - implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.16.0' + implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.17.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' implementation('org.apache.xmlgraphics:fop:2.9') { From 64740d0c9bee418c18b41bff31018dfef9c8ac8e Mon Sep 17 00:00:00 2001 From: LegacyKing Date: Wed, 21 Aug 2024 01:03:26 -0700 Subject: [PATCH 129/142] DATA-4360 Fixed the formula for the Monk Standard Flurry Added the correct value to the temp bonus for the Zen Archer Archetype Anyone with Improved Strike feat now correctly displays the Lethal or nonlethal --- .../apg_abilities_class.lst | 2 +- .../core_rulebook/cr_abilities_class.lst | 77 ++++++++++--------- system/gameModes/Pathfinder/base.xml.ftl | 20 ++--- 3 files changed, 51 insertions(+), 48 deletions(-) diff --git a/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilities_class.lst b/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilities_class.lst index 032d50eb613..d004ff505d9 100644 --- a/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilities_class.lst +++ b/data/pathfinder/paizo/roleplaying_game/advanced_players_guide/apg_abilities_class.lst @@ -2378,7 +2378,7 @@ Weapon Specialization / Monk Weapon KEY:Weapon Specialization ~ Weapon Adept # Zen Archer Weapon and Armor Proficiency KEY:Zen Archer ~ Weapon and Armor Proficiency CATEGORY:Special Ability TYPE:ClassFeatures.MonkClassFeatures.SpecialQuality DESC:Zen archers are proficient with longbows, shortbows, composite longbows, and composite shortbows in addition to their normal weapon proficiencies. AUTO:WEAPONPROF|TYPE=Bow SOURCEPAGE:p.115 -Flurry of Blows KEY:Zen Archer ~ Flurry of Blows CATEGORY:Special Ability TYPE:ClassFeatures.MonkClassFeatures.SpecialQuality.Extraordinary DESC:Starting at 1st level, a zen archer can make a flurry of blows as a full-attack action, but only when using a bow (even though it is a ranged weapon). He may not make a flurry of blows with his unarmed attacks or any other weapons. A zen archer does not apply his Strength bonus on damage rolls made with flurry of blows unless he is using a composite bow with a Strength rating. A zen archer's flurry of blows otherwise functions as normal for a monk of his level. A zen archer cannot use Rapid Shot or Manyshot when making a flurry of blows with his bow. SOURCEPAGE:p.115 TEMPBONUS:EQ|Weapon,Ranged|WEAPON|ATTACKS|FlurryExtraAttacks+1 TEMPBONUS:EQ|Weapon,Ranged|WEAPON|TOHIT|-2 +Flurry of Blows KEY:Zen Archer ~ Flurry of Blows CATEGORY:Special Ability TYPE:ClassFeatures.MonkClassFeatures.SpecialQuality.Extraordinary DESC:Starting at 1st level, a zen archer can make a flurry of blows as a full-attack action, but only when using a bow (even though it is a ranged weapon). He may not make a flurry of blows with his unarmed attacks or any other weapons. A zen archer does not apply his Strength bonus on damage rolls made with flurry of blows unless he is using a composite bow with a Strength rating. A zen archer's flurry of blows otherwise functions as normal for a monk of his level. A zen archer cannot use Rapid Shot or Manyshot when making a flurry of blows with his bow. SOURCEPAGE:p.115 TEMPBONUS:EQ|Weapon,Ranged|WEAPON|ATTACKS|FlurryExtraAttacks+1 TEMPBONUS:EQ|Weapon,Ranged|WEAPON|TOHIT|FlurryBABOffset-2 DEFINE:FlurryBABOffset|0 DEFINE:MonkBAB|0 BONUS:VAR|MonkBAB|MonkLVL*3/4|TYPE=Base BONUS:VAR|FlurryBABOffset|MonkLVL-MonkBAB|TYPE=Base DEFINE:FlurryExtraAttacks|0 BONUS:VAR|FlurryExtraAttacks|min((BAB+FlurryBABOffset+6)/7,3)|TYPE=Base Bonus Feats KEY:Zen Archer ~ Bonus Feats CATEGORY:Special Ability TYPE:ClassFeatures.MonkClassFeatures.SpecialQuality.MonkBonusFeats DEFINE:MonkBonusFeatLVL|0 DESC:A zen archer's bonus feats must be taken from the following list: Combat Reflexes, Deflect Arrows, Dodge, Far Shot, Point-Blank Shot, Precise Shot, and Rapid Shot. At 6th level, the following feats are added to the list: Focused Shot*, Improved Precise Shot, Manyshot, Mobility, and Parting Shot*. At 10th level, the following feats are added to the list: Improved Critical, Pinpoint Targeting, Shot on the Run, and Snatch Arrows. A monk need not have any of the prerequisites normally required for these feats to select them. These feats replace the monk's normal bonus feats. BONUS:ABILITYPOOL|Zen Archer Feat|0 BONUS:VAR|MonkBonusFeatLVL|0 SOURCEPAGE:p.115 Perfect Strike KEY:Zen Archer ~ Perfect Strike CATEGORY:Special Ability TYPE:ClassFeatures.MonkClassFeatures.SpecialQuality.Extraordinary.MonkStunningFist DESC:At 1st level, a zen archer gains Perfect Strike as a bonus feat, even if he does not meet the prerequisites. A zen archer can use Perfect Strike with any bow. At 10th level, the monk can roll his attack roll three times and take the highest result. If one of these rolls is a critical threat, the monk must choose one of his other two rolls to use as his confirmation roll. This ability replaces Stunning Fist. ABILITY:FEAT|AUTOMATIC|Perfect Strike SOURCEPAGE:p.115 Way of the Bow KEY:Zen Archer ~ Way of the Bow CATEGORY:Special Ability TYPE:ClassFeatures.MonkClassFeatures.SpecialQuality.Extraordinary.MonkEvasion DESC:At 2nd level, a zen archer gains Weapon Focus as a bonus feat with one type of bow. At 6th level, the monk gains Weapon Specialization with the same weapon as a bonus feat, even if he does not meet the prerequisites. This ability replaces evasion. BONUS:ABILITYPOOL|Zen Archer Weapon Focus Choice|1 BONUS:ABILITYPOOL|Zen Archer Weapon Specialization Choice|1|PRECLASS:1,Monk=6 SOURCEPAGE:p.115 diff --git a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst index b8f2b357682..e31e1b44dd6 100644 --- a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst +++ b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_abilities_class.lst @@ -9,7 +9,7 @@ SOURCELONG:Core Rulebook SOURCESHORT:CR SOURCEWEB:http://paizo.com/store/downloa # Ability Pool # Ability Name Define Bonus Ability Pool Modify VAR -CATEGORY=Internal|Default.MOD DEFINE:Divine_Bond_Mount|0 DEFINE:Hunters_Bond_Animal_Companion|0 DEFINE:BypassClassAlignment_All_Class|0 DEFINE:BypassProhibitSpellAlignment_Restriction|0 DEFINE:Pool_Rage_Power|0 BONUS:ABILITYPOOL|Favored Class|1|PREPCLEVEL:MIN=1 +CATEGORY=Internal|Default.MOD DEFINE:Divine_Bond_Mount|0 DEFINE:Hunters_Bond_Animal_Companion|0 DEFINE:BypassClassAlignment_All_Class|0 DEFINE:BypassProhibitSpellAlignment_Restriction|0 DEFINE:Pool_Rage_Power|0 BONUS:ABILITYPOOL|Favored Class|1|PREPCLEVEL:MIN=1 DEFINE:UnarmedLethal|0 # Handles the Prohibited spell issue based upon alignment - Supports disabling for Mythic Adventures or Homebrew CATEGORY=Internal|Default.MOD DEFINE:ProhibitSpell_Alignment_Good|0 BONUS:VAR|ProhibitSpell_Alignment_Good|1|PREMULT:2,[PREMULT:1,[PREALIGN:LE,NE,CE],[PREDEITYALIGN:LE,NE,CE]],[PREVAREQ:BypassProhibitSpellAlignment_Restriction,0] @@ -1091,7 +1091,7 @@ CATEGORY=Class|Monk.MOD SOURCEPAGE:p.57 Monk Bonus Feat KEY:Monk ~ Monk Bonus Feat CATEGORY:Special Ability TYPE:MonkClassFeatures.Internal.ClassFeatures DEFINE:MonkBonusFeatLVL|0 DEFINE:MonkBonusFeatLVL|0 BONUS:ABILITYPOOL|Monk Bonus Feat|1+max((MonkBonusFeatLVL+2)/4,0) BONUS:VAR|MonkBonusFeatLVL|MonkLVL AC Bonus KEY:Monk ~ AC Bonus CATEGORY:Special Ability TYPE:MonkClassFeatures.SpecialQuality.Extraordinary DESC:When unarmored and unencumbered, you add +%1 to your AC and your CMD. These bonuses apply even against touch attacks or when you are flat-footed. You lose these bonuses when you are immobilized or helpless, when you wear any armor, when you carry a shield, or when you carry a medium or heavy load.|MonkACBonus ABILITY:Internal|AUTOMATIC|Monk AC Tracker BONUS:VAR|MonkACLVL|MonkLVL|TYPE=Level -Flurry of Blows KEY:Monk ~ Flurry of Blows CATEGORY:Special Ability TYPE:MonkClassFeatures.SpecialAttack.Extraordinary.Flurry of Blows DESC:You can make a flurry of blows as a full-attack action. +Flurry of Blows KEY:Monk ~ Flurry of Blows CATEGORY:Special Ability TYPE:MonkClassFeatures.SpecialAttack.Extraordinary.Flurry of Blows DESC:You can make a flurry of blows as a full-attack action. SOURCEPAGE:p.57 Stunning Fist KEY:Monk ~ Stunning Fist CATEGORY:Special Ability TYPE:MonkClassFeatures.SpecialAttack.Extraordinary.Stunning Fist DEFINE:StunningFistMonkLVL|0 DESC:You gain Stunning Fist as a bonus feat. ABILITY:FEAT|VIRTUAL|Stunning Fist BONUS:VAR|StunningFistMonkLVL|MonkLVL SOURCEPAGE:p.59 Fast Movement KEY:Monk ~ Fast Movement CATEGORY:Special Ability TYPE:MonkClassFeatures.SpecialQuality.Extraordinary.ModifyMovement DEFINE:MonkFastMovementLVL|0 DEFINE:MonkFastMovementBonus|0 DESC:You gain a +%1 feet enhancement bonus to your land speed. If you wear armor or carry a medium or heavy load, you lose this extra speed.|MonkFastMovementBonus BONUS:MOVEADD|TYPE=Walk|MonkFastMovementBonus|TYPE=Enhancement|PREVAREQ:ENCUMBERANCE,0,var("COUNT[EQTYPE.ARMOR.EQUIPPED]"),0 BONUS:VAR|MonkFastMovementBonus|10*floor(MonkFastMovementLVL/3) BONUS:VAR|MonkFastMovementLVL|MonkLVL SOURCEPAGE:p.59 Maneuver Training KEY:Monk ~ Maneuver Training CATEGORY:Special Ability TYPE:MonkClassFeatures.SpecialQuality.Extraordinary DEFINE:ManeuverTrainingLVL|0 DEFINE:ManeuverTrainingBAB|0 DESC:A monk uses his monk level in place of his base attack bonus when calculating his combat maneuver bonus. Base attack bonuses granted from other classes are unaffected and are added normally. BONUS:VAR|CMB_BAB|ManeuverTrainingLVL-ManeuverTrainingBAB BONUS:VAR|ManeuverTrainingLVL|MonkLVL BONUS:VAR|ManeuverTrainingBAB|MonkLVL*3/4 SOURCEPAGE:p.59 @@ -1130,43 +1130,46 @@ CATEGORY=Special Ability|Monk ~ Slow Fall.MOD ###Block: Flurry of Blows update 2. ### Modified to correct attack bonus from 13th level to 20th level. ### and to allow other classes to act as the Monk class for the purpose of improving Flurry of Blows' attack bonus and number of attacks. -# Ability Name Category of Ability Type Var. Must Be Grater Define Ability Bonus Ability Pool Modify VAR Source Page -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FlurryExtraAttacks|min((FlurryLVL+6)/7,3) -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FlurryBABBonus|FlurryLVL-MonkBAB -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FlurryLVL|(FlurryBABRaw) -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FlurryBAB|FlurryBABRaw*3/4 ### Changed MonkLVL to FlurryLVL to allow extra attacks due to other classes to show up. -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FlurryAttacks|2+(FlurryLVL>=6)+(FlurryLVL>=8)+(FlurryLVL>=11)+(FlurryLVL>=15)+(FlurryLVL>=16) -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FAB|-1+(FlurryLVL>=5)+(FlurryLVL>=9)+(FlurryLVL>=13)+(FlurryLVL>=17)+FlurryDiff -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FAB_1|FAB -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FAB_2|FAB -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FAB_3|FAB-5 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FAB_4|FAB-5 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FAB_5|FAB-10 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FAB_6|FAB-10 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FAB_7|FAB-15 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD SOURCEPAGE:p.57 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FlurryBABRaw|MonkLVL -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FlurryDiff|FlurryBAB-BAB -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FlurryLVL|0 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FlurryExtraAttacks|0 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FlurryBABBonus|0 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FlurryBAB|0 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FlurryAttackBonus|0 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FlurryAttacks|0 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FAB|0 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FAB_1|0 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FAB_2|0 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FAB_3|0 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FAB_4|0 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FAB_5|0 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FAB_6|0 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FAB_7|0 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FlurryBABRaw|0 -CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FlurryDiff|0 - +# Ability Name Category of Ability Type Var. Must Be Grater Define Ability Bonus Ability Pool Modify VAR Source Page +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FlurryExtraAttacks|min((FlurryLVL+6)/7,3)|TYPE=Base +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FlurryBABBonus|FlurryLVL-MonkBAB|TYPE=Base +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FlurryLVL|FlurryBABRaw|TYPE=Base +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|MonkBAB|MonkLVL*3/4|TYPE=Base +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FlurryAttacks|2+(FlurryLVL>=6)+(FlurryLVL>=8)+(FlurryLVL>=11)+(FlurryLVL>=15)+(FlurryLVL>=16)|TYPE=Base +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FAB|FlurryBABBonus-2|TYPE=Base +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FAB_1|FAB +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FAB_2|FAB +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FAB_3|FAB-5 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FAB_4|FAB-5 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FAB_5|FAB-10 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FAB_6|FAB-10 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FAB_7|FAB-15 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FlurryBABRaw|MonkLVL|TYPE=Base +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD BONUS:VAR|FlurryDiff|BAB-MonkBAB|TYPE=Base -# +###Block: +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FlurryLVL|0 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FlurryExtraAttacks|0 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FlurryBABBonus|0 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FlurryBAB|0 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FlurryAttackBonus|0 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FlurryAttacks|0 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FAB|0 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FAB_1|0 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FAB_2|0 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FAB_3|0 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FAB_4|0 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FAB_5|0 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FAB_6|0 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FAB_7|0 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FlurryBABRaw|0 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:FlurryDiff|0 +CATEGORY=Special Ability|Monk ~ Flurry of Blows.MOD DEFINE:MonkBAB|0 + + +####Block: +# Ability Name Category of Ability Type Var. Must Be Grater Define Ability Bonus Ability Pool Modify VAR Source Page Ki Pool Tracker CATEGORY:Internal DEFINE:KiPoints|0 DEFINE:KiPoolLVL|0 ABILITY:Internal|AUTOMATIC|Ki Stat Choice ~ Wisdom|PREVAREQ:KiPool,1,KiPoolWis,1 ABILITY:Internal|AUTOMATIC|Ki Stat Choice ~ Charisma|PREVAREQ:KiPool,1,KiPoolCha,1 ABILITY:Internal|AUTOMATIC|Ki Stat Choice ~ Intelligence|PREVAREQ:KiPool,1,KiPoolInt,1 BONUS:ABILITYPOOL|Ki Pool Stat Choice|1|PREVARGTEQ:KiPool,2 BONUS:VAR|KiPoints|KiPoolLVL/2 CATEGORY=Internal|Default.MOD DEFINE:KiPool|0 diff --git a/system/gameModes/Pathfinder/base.xml.ftl b/system/gameModes/Pathfinder/base.xml.ftl index 4233b840463..950fb48c5ff 100644 --- a/system/gameModes/Pathfinder/base.xml.ftl +++ b/system/gameModes/Pathfinder/base.xml.ftl @@ -797,17 +797,17 @@ <#if (gamemodename = "3e")> - <#if (pcvar('VAR.Unarmed') > 0)> - (subdual or normal) - <#else> - (subdual only) - - <#else> - <#if (pcvar('VAR.UnarmedLethal') > 0)> - (lethal or nonlethal) + <#if (pcvar('VAR.Unarmed') > 0)> + (subdual or normal) + <#else> + (subdual only) + <#else> - (nonlethal only) - + <#if (pcvar('VAR.UnarmedLethal') > 0)> + (lethal or nonlethal) + <#else> + (nonlethal only) + From c5069f0bb1ad7608f80a7730ce8295e744e5aa4a Mon Sep 17 00:00:00 2001 From: LegacyKing Date: Sat, 7 Sep 2024 15:42:20 -0700 Subject: [PATCH 130/142] Misc updates - Begin MSRD conversion to Abilities Bug fix - Harrow PCC file has wrong file type Bug fix - Cold Iron not respecting Cost add of 2000 when enchanted Feature - Imp Unarmed Strike should display Lethal or Non-Lethal --- .../modernbasics_abilities_class.lst | 14 +- .../modernbasics_abilities_racial.lst | 764 +++++++++--------- .../harrow_handbook/_harrow_handbook.pcc | 2 +- .../core_rulebook/cr_equipmods.lst | 2 +- .../core_rulebook/cr_feats.lst | 2 +- 5 files changed, 392 insertions(+), 392 deletions(-) diff --git a/data/modern/wizards_of_the_coast/msrd/basics/modern_basics/modernbasics_abilities_class.lst b/data/modern/wizards_of_the_coast/msrd/basics/modern_basics/modernbasics_abilities_class.lst index 26c419cc4d6..b10afad0fe7 100644 --- a/data/modern/wizards_of_the_coast/msrd/basics/modern_basics/modernbasics_abilities_class.lst +++ b/data/modern/wizards_of_the_coast/msrd/basics/modern_basics/modernbasics_abilities_class.lst @@ -33,13 +33,13 @@ Turn/Rebuke Outsiders CATEGORY:Special Ability TYPE:Special.Turning.Outsiders V ###Block: FX Class Abilities # Ability Name Category of Ability Type Visible Special ABility Define Description Add Spell Lvl Modify VAR Allow Follower Allowed Companions Source Page -Brew Potion CATEGORY:Special Ability VISIBLE:NO DEFINE:BrewLevel|0 DESC:Brew a potion, level is set at time of creation... BONUS:VAR|BrewLevel|3 SOURCEPAGE:msrdadvancedclassesII -Maximize Spell CATEGORY:Special Ability VISIBLE:NO DESC:All variable,numeric effects of a spell automatically achieve their maximum values; treat any spell this is a pplied to as three higher for memorization purposes ADDSPELLLEVEL:3 SOURCEPAGE:msrdadvancedclassesII -Quicken Spell CATEGORY:Special Ability TYPE:Special VISIBLE:NO ADDSPELLLEVEL:4 -Scribe Scroll CATEGORY:Special Ability VISIBLE:NO DESC:Create a scroll, level is set at time of creation... SOURCEPAGE:msrdadvancedclassesII -Scribe Tattoo CATEGORY:Special Ability VISIBLE:NO DESC:Create a tattoo, level is set at time of creation... SOURCEPAGE:msrdadvancedclassesII -Summon Familiar CATEGORY:Special Ability VISIBLE:NO SAB:Summon Familiar DEFINE:FamiliarLVL|0 FOLLOWERS:Familiar|1 COMPANIONLIST:Familiar|Bat,Cat,Ferret,Hawk,Owl,Rat,Snake (Tiny/Viper),Toad -Web Access Spells CATEGORY:Special Ability TYPE:VirtualPossession VISIBLE:NO SAB:Can use Web Access as spellbook +Brew Potion CATEGORY:Special Ability TYPE:SpecialQuality DEFINE:BrewLevel|0 DESC:Brew a potion, level is set at time of creation... BONUS:VAR|BrewLevel|3 SOURCEPAGE:msrdadvancedclassesII +Maximize Spell CATEGORY:Special Ability TYPE:SpecialQuality DESC:All variable,numeric effects of a spell automatically achieve their maximum values; treat any spell this is a pplied to as three higher for memorization purposes ADDSPELLLEVEL:3 SOURCEPAGE:msrdadvancedclassesII +Quicken Spell CATEGORY:Special Ability TYPE:SpecialQuality.Special ADDSPELLLEVEL:4 +Scribe Scroll CATEGORY:Special Ability TYPE:SpecialQuality DESC:Create a scroll, level is set at time of creation... SOURCEPAGE:msrdadvancedclassesII +Scribe Tattoo CATEGORY:Special Ability TYPE:SpecialQuality DESC:Create a tattoo, level is set at time of creation... SOURCEPAGE:msrdadvancedclassesII +Summon Familiar CATEGORY:Special Ability TYPE:SpecialQuality DEFINE:FamiliarLVL|0 FOLLOWERS:Familiar|1 COMPANIONLIST:Familiar|Bat,Cat,Ferret,Hawk,Owl,Rat,Snake (Tiny/Viper),Toad +Web Access Spells CATEGORY:Special Ability TYPE:SpecialQuality.VirtualPossession DESC:Can use Web Access as spellbook ###Block: Artificer Craft Artifice Abilities # Ability Name Category of Ability Type Visible Required Skill Special ABility diff --git a/data/modern/wizards_of_the_coast/msrd/basics/modern_basics/modernbasics_abilities_racial.lst b/data/modern/wizards_of_the_coast/msrd/basics/modern_basics/modernbasics_abilities_racial.lst index 926b379b48b..b1eaaac4294 100644 --- a/data/modern/wizards_of_the_coast/msrd/basics/modern_basics/modernbasics_abilities_racial.lst +++ b/data/modern/wizards_of_the_coast/msrd/basics/modern_basics/modernbasics_abilities_racial.lst @@ -4,346 +4,346 @@ SOURCELONG:Modern System Reference Document - Basics SOURCESHORT:MSRD SOURCEWEB: Default CATEGORY:Internal # Ability Name Output Name Category of Ability Type Visible Special ABility Define -Ability Surge CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Ability Surge (Ex)|PREVAREQ:AbilitySurge,0 SAB:Ability Surge %/day|AbilitySurge|PREVARGT:AbilitySurge,0 DEFINE:AbilitySurge|0 -Absrobe CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Absrobe (Ex) -Acid CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Acid (Ex) -Acid Spit CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Acid Spit (Ex) -Acid Spittle CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Acid Spittle (Ex) -Acid Spray CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Acid Spray (Ex) -Acid Touch CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Acid Touch (Ex) -Acidic Blood CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Acidic Blood (Ex) -Acidic Enzymes CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Acidic Enzymes (Ex) -Actinic Light CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike VISIBLE:NO SAB:Actinic Light (Sp) -Alien Physiolgoy CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Alien Physiolgoy (Ex) -All-Around Vision CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:All-Around Vision (Ex) -Alternate Form CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Alternate Form (Su) -Amphibious CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Amphibious (Ex) -Anesthetic Bite CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Anesthetic Bite (Ex) -Animate Dead CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike VISIBLE:NO SAB:Animate Dead (Sp) -Anyspeak CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike VISIBLE:NO SAB:Anyspeak (Sp) -Aquatic CATEGORY:Special Ability VISIBLE:NO SAB:Aquatic -Attach CATEGORY:Special Ability TYPE:Extraordinary VISIBLE:NO SAB:Attach (Ex) -Attach Head CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Attach Head (Ex) -Audio/Visual Sensor CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:Audio/Visual Sensor -Aura of Menace CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Aura of Menace (Su) -Ballistic Path CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Ballistic Path (Ex) -Berserk CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Berserk (Ex) -Blind CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Blind (Ex) -Blood Drain CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Blood Drain (Ex) -Blood Drink CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Blood Drink (Ex) -Body Blindsight CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Body Blindsight (Ex) -Body Glow CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Body Glow (Su) -Body Thief CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike VISIBLE:NO SAB:Body Thief (Sp) -Boost Host CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Boost Host (Ex) -Burning Touch CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Burning Touch (Ex) -Camouflage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Camouflage (Ex) -Call/Dismiss Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Call/Dismiss Weapon (Su) -Can't Run CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Can't Run (Ex) -Captivating Song CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Captivating Song (Su) -Cast Web CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Cast Web (Ex) 8/day maximum range 50' -Chain Reaction CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Chain Reaction (Su) ~ 400 points of damage to everything within 400 ft and 100 points of damage to everything within a mile, Ref save (DC %) for half|10+(TL/2)+DEX -Charge CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Charge (Ex) -Chemical Healing CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Chemical Healing (Ex) -Children of the Night CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Children of the Night (Su) -Chosen Victim CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Chosen Victim (Ex) -Clawing Smoke CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Clawing Smoke (Su) -Cold Susceptibility CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:Cold Susceptibility -Constrict CATEGORY:Special Ability TYPE:Extraordinary VISIBLE:NO SAB:Constrict (Ex) -Convert CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Convert (Ex) -Create Spawn CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Create Spawn (Su) -Creature Meld CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Creature Meld (Su) -Corrupt the Mind CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Corrupt the Mind (Su) -Corrupting Touch CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Corrupting Touch (Su) -Curse of Lycanthropy CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Curse of Lycanthropy (Su) -Dance of Ruin CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Dance of Ruin (Su) -Daylight Powerlessness CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Daylight Powerlessness (Ex) -Death Cloud CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Death Cloud (Ex) -Death Explosion CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Death Explosion (Su) -Death Gaze CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Death Gaze (Su) -Death Hunger CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Death Hunger (Ex) -Death Touch CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Death Touch (Su) -Death's Door CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Death's Door (Su) -Despair CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Despair (Su) -Detach Head CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Detach Head (Ex) -Detect Dreams CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike VISIBLE:NO SAB:Detect Dreams (Sp) -Detonate CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Detonate (Ex) -Device Operation CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Device Operation (Ex) -Devour Dreams CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Devour Dreams (Su) -Dimension Door CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike VISIBLE:NO SAB:Dimension Door (Sp) -Dimensional Jaunt CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Dimensional Jaunt (Su) -Disassemble Device CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Disassemble Device (Ex) -Disease CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Disease (Ex) -Disease Sense CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Disease Sense (Ex) -Disguise Self CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Disguise Self (Su) -Distraction CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Distraction (Ex) -Domination CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Domination (Su) -Double Damage against Objects CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Double Damage against Objects (Ex) -Draining Touch CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Draining Touch (Su) -Easy Breathing CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Easy Breathing (Ex) -Eat Thoughts CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Eat Thoughts (Su) -Electric Shock CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Electric Shock (Ex) -Electrical Rejuvenation CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Electrical Rejuvenation (Ex) -Electronic Interface CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Electronic Interface (Ex) -Elven Blood CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:Elven Blood -Enchanting Music CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Enchanting Music (Su) -Energy Claw CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Energy Claw (Ex) -Energy Drain CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Energy Drain (Su) -Energy Form CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Energy Form (Ex) -Engulf CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Engulf (Ex) -Enslave CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Enslave (Su) -Expansion CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Expansion (Ex) -Extradimensional Storage CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Extradimensional Storage (Su) -Eye Rays CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Eye Rays (Su) -Fascinate CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike VISIBLE:NO SAB:Fascinate (Sp) -Fast Healing CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Fast Healing (Ex)|PREVAREQ:FastHealingRate,0 SAB:Fast Healing % (Ex)|FastHealingRate|PREVARGT:FastHealingRate,0 DEFINE:FastHealingRate|0 -Fear Aura ~Su OUTPUTNAME:Fear Aura CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Fear Aura (Su) -Fear of Daylight CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Fear of Daylight (Ex) -Feline Aversion CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Feline Aversion (Ex) -Ferocity CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Ferocity (Ex) -Fey Rod CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike VISIBLE:NO SAB:Fey Rod (Sp) -Fiery Leap CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Fiery Leap (Ex) -Find Target CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike VISIBLE:NO SAB:Find Target (Sp) -Fire Form CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Fire Form (Ex) -Flame Shield CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Flame Shield (Su) -Flame Sword CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Flame Sword (Su) -Flashbacks CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Flashbacks (Ex) -Flesh Weakness CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Flesh Weakness (Ex) -Fling CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Fling (Ex) -Fortification CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Fortification (Ex) -Freeze CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Freeze (Ex) -Frightful Moan CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Frightful Moan (Su) -Frightful Presense CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Frightful Presense (Ex) -Fugue CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Fugue (Ex) -Fuse CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Fuse (Ex) -Fuse ~Su OUTPUTNAME:Fuse CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Fuse (Su) -Garbage Growth CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Garbage Growth (Ex) -Gaseous CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Gaseous (Ex) -Gaseous Form CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Gaseous Form (Su) -Gear Grind CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Gear Grind (Ex) -Glide CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike VISIBLE:NO SAB:Glide (Sp) -Greater Incarnation CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Greater Incarnation (Su) -Grind CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Grind (Ex) -Hardness CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Hardness (Ex) -Hazy Outline CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Hazy Outline (Su) -Heat CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Heat (Su) -Heat Susceptibility CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:Heat Susceptibility -Hibernate CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Hibernate (Ex) -Hive Mind CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Hive Mind (Su) -Hold Breath CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Hold Breath (Ex) -Horrific Appearance CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Horrific Appearance (Su) -Host Protection CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Host Protection (Ex) -Hot Running CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Hot Running (Ex) -Human Host CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:Human Host -Ignite CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Ignite (Ex) -Immolation CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Immolation (Su) -Impale CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Impale (Ex) -Imprinsonment CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Imprinsonment (Ex) -Improved Grab CATEGORY:Special Ability TYPE:Extraordinary VISIBLE:NO SAB:Improved Grab (Ex) -Improved Speed CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Improved Speed (Ex) -Improved Tracking CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Improved Tracking (Ex) -Indestructable Body CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Indestructable Body (Su) -Infestation CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Infestation (Ex) -Ink Cloud CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Ink Cloud (Ex) -Intoxicating Fruit CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Intoxicating Fruit (Ex) -Invisibility CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike VISIBLE:NO SAB:Invisibility (Sp) -Invisibility ~Su OUTPUTNAME:Invisibility CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Invisibility (Su) -Jet CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Jet (Ex) -Jury-Rigged Repair CATEGORY:Special Ability TYPE:SpecialQualitySAB:Keen Vision VISIBLE:NO SAB:Jury-Rigged Repair -Keen Scent CATEGORY:Special Ability TYPE:Extraordinary VISIBLE:NO SAB:Keen Scent (Ex) -Keen Vision CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:Keen Vision -Light Blindness CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Light Blindness (Ex) -Light Sensitivity CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Light Sensitivity (Ex) -Liquefaction CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Liquefaction (Ex) -Liquefied Spew CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Liquefied Spew (Ex) -Locate Killer CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Locate Killer (Su) -Machine Possession CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:Machine Possession -Malleable Form CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Malleable Form (Ex) -Manipulator Arms CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:Manipulator Arms -Mechanical Healing CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Mechanical Healing (Ex) -Memory Loss CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Memory Loss (Su) -Mesmerizing Gaze CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Mesmerizing Gaze (Su) -Mimic CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Mimic (Ex) -Mimicry CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Mimicry (Ex) -Mind Feed CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Mind Feed (Ex) -Monstrous Spider Minions CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:Monstrous Spider Minions -Multiple Limbs CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:Multiple Limbs -Mummy Rot CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Mummy Rot (Su) -Mystic Aid CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Mystic Aid (Su) -Nannite Infection CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Nannite Infection (Ex) -Natural Cunning CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Natural Cunning (Ex) -Natural Invisibility CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Natural Invisibility (Su) -Necrotizing Touch CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Necrotizing Touch (Su) -Network Mind CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Network Mind (Ex) -No limbs CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:No limbs -Orc blood CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:Orc blood -Paralysis CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Paralysis (Ex) -Peripheral Invisibility CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Peripheral Invisibility (Su) -Petrifying Gaze CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Petrifying gaze (Su) -Poison CATEGORY:Special Ability TYPE:Extraordinary VISIBLE:NO SAB:Poison (Ex) -Poison Spray CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Poison Spray (Ex) -Polymorph CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike VISIBLE:NO SAB:Polymorph (Sp) -Pounce CATEGORY:Special Ability TYPE:Extraordinary VISIBLE:NO SAB:Pounce (Ex) -Possession CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Possession (Su) -Prodigious Leap CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Prodigious Leap (Ex) -Radiation CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Radiation (Ex) -Rake CATEGORY:Special Ability TYPE:Extraordinary VISIBLE:NO SAB:Rake (Ex) -Rat Empathy CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Rat Empathy (Ex) -Regeneration CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Regeneration (Ex)|PREVAREQ:RegenerationRate,0 SAB:Regeneration % (Ex)|RegenerationRate|PREVARGT:RegenerationRate,0 DEFINE:RegenerationRate|0 -Rejuvenation CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Rejuvenation (Su) -Rend CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Rend (Ex) -Rending Claws CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Rending Claws (Ex) -Repairable CATEGORY:Special Ability TYPE:SpecialQuality.RobotTraits VISIBLE:NO SAB:Repairable -Revenant Regeneration CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Revenant Regeneration (Ex) -Rupture CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Rupture (Ex) -Scent CATEGORY:Special Ability TYPE:Extraordinary VISIBLE:NO SAB:Scent (Ex) -Selective Invisibility CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Selective Invisibility (Su) -Self-Destruct CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Self-Destruct (Ex) -Sentience CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Sentience (Ex) -Shared Host CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Shared Host (Ex) -Sharp Implements CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:Sharp Implements -Shift Dimension CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Shift Dimension (Su) -Shock Touch CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Shock Touch (Ex) -Short Circuit CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Short Circuit (Su) -Siphon Fluids CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Siphon Fluids (Ex) -Skin Regrowth CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Skin Regrowth (Su) -Sleepless CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Sleepless (Ex) -Slow Fall CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Slow Fall (Ex) -Smash CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Smash (Ex) -Smite Fallen CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Smite Fallen (Ex) -Snatch Breath CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Snatch Breath (Su) -Spawn CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Spawn (Su) -Spider Climb CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Spider Climb (Ex) -Spit Poison CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Spit Poison (Ex) -Split CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Split (Ex) -Spores CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Spores (Ex) -Stability CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Stability (Ex) -Stampede CATEGORY:Special Ability TYPE:Extraordinary VISIBLE:NO SAB:Stampede (Ex) -Stasis CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Stasis (Ex) -Steal Essence CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Steal Essence (Su) -Stealthy Pounce CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Stealthy Pounce (Ex) -Stench CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Stench (Ex) -Strands CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Strands (Ex) -Stunning Screech CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Stunning Screech (Su) -Swallow Whole CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Swallow Whole (Ex) -Summon Vrock CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike VISIBLE:NO SAB:Summon Vrock (Sp) -Telekinesis CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Telekinesis (Su) -Telepathy CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Telepathy (Ex) -Telepathy ~Su OUTPUTNAME:Telepathy CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Telepathy (Su) -Teleport CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike VISIBLE:NO SAB:Teleport (Sp) -Thrall CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike VISIBLE:NO SAB:Thrall (Sp) -Tongues CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:Tongues -Toxic Fumes CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Toxic Fumes (Ex) - Fort save (DC %) or take 1d4 points of Str damage|10+(TL/2)+CON -Trample CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Trample (Ex) -Tree Dependent CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Tree Dependent (Su) -Trip CATEGORY:Special Ability TYPE:Extraordinary VISIBLE:NO SAB:Trip (Ex) -Turn Resistance CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Turn Resistance (Ex)|PREVAREQ:TurnResistanceBonus,0 SAB:Turn Resistance % (Ex)|TurnResistanceBonus|PREVARGT:TurnResistanceBonus,0 DEFINE:TurnResistanceBonus|0 -Unnatural Aura CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Unnatural Aura (Su) -Vacuum Survival CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Vacuum Survival (Ex) -Vessel of Flesh CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Vessel of Flesh (Su) -Vulnerability CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Vulnerability (Ex) -Wall Smash CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Wall Smash (Ex) -Wavesense CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Wavesense (Ex) -Weakness CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Weakness (Ex) -Web CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Web (Ex)|PREVAREQ:WebEscapeDC,0 SAB:Web (Ex) - Escape DC % Break DC % Hit Points %|WebEscapeDC|WebBreakDC|WebHitPoints|PREVARGT:WebEscapeDC,0 DEFINE:WebEscapeDC|0 DEFINE:WebBreakDC|0 DEFINE:WebHitPoints|0 -Web Cocoon CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Web Cocoon (Ex) -Wheels CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:Wheels -Wild Empathy CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Wild Empathy (Ex) (1d20+%)|6+CHA -Whistle CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Whistle (Su) -Wolf Empathy CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Wolf Empathy (Ex) -Woodland Stride CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Woodland Stride (Ex) -Wounding CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Wounding (Ex) -Wounding Gaze CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Wounding Gaze (Su) -Wounding Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Wounding Weapon (Su) +Ability Surge CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Ability Surge (Ex)|PREVAREQ:AbilitySurge,0 DESC:Ability Surge %1/day|AbilitySurge|PREVARGT:AbilitySurge,0 DEFINE:AbilitySurge|0 +Absrobe CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Absrobe (Ex) +Acid CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Acid (Ex) +Acid Spit CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Acid Spit (Ex) +Acid Spittle CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Acid Spittle (Ex) +Acid Spray CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Acid Spray (Ex) +Acid Touch CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Acid Touch (Ex) +Acidic Blood CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Acidic Blood (Ex) +Acidic Enzymes CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Acidic Enzymes (Ex) +Actinic Light CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike DESC:Actinic Light (Sp) +Alien Physiolgoy CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Alien Physiolgoy (Ex) +All-Around Vision CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:All-Around Vision (Ex) +Alternate Form CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Alternate Form (Su) +Amphibious CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Amphibious (Ex) +Anesthetic Bite CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Anesthetic Bite (Ex) +Animate Dead CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike DESC:Animate Dead (Sp) +Anyspeak CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike DESC:Anyspeak (Sp) +Aquatic CATEGORY:Special Ability TYPE:SpecialQuality SAB:Aquatic +Attach CATEGORY:Special Ability TYPE:TYPE:SpecialQuality.Extraordinary SAB:Attach (Ex) +Attach Head CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Attach Head (Ex) +Audio/Visual Sensor CATEGORY:Special Ability TYPE:SpecialQuality DESC:Audio/Visual Sensor +Aura of Menace CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Aura of Menace (Su) +Ballistic Path CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Ballistic Path (Ex) +Berserk CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Berserk (Ex) +Blind CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Blind (Ex) +Blood Drain CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Blood Drain (Ex) +Blood Drink CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Blood Drink (Ex) +Body Blindsight CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Body Blindsight (Ex) +Body Glow CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Body Glow (Su) +Body Thief CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike DESC:Body Thief (Sp) +Boost Host CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Boost Host (Ex) +Burning Touch CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Burning Touch (Ex) +Camouflage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Camouflage (Ex) +Call/Dismiss Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Call/Dismiss Weapon (Su) +Can't Run CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Can't Run (Ex) +Captivating Song CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Captivating Song (Su) +Cast Web CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Cast Web (Ex) 8/day maximum range 50' +Chain Reaction CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Chain Reaction (Su) ~ 400 points of damage to everything within 400 ft and 100 points of damage to everything within a mile, Ref save (DC %1) for half|10+(TL/2)+DEX +Charge CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Charge (Ex) +Chemical Healing CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Chemical Healing (Ex) +Children of the Night CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Children of the Night (Su) +Chosen Victim CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Chosen Victim (Ex) +Clawing Smoke CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Clawing Smoke (Su) +Cold Susceptibility CATEGORY:Special Ability TYPE:SpecialQuality DESC:Cold Susceptibility +Constrict CATEGORY:Special Ability TYPE:Extraordinary DESC:Constrict (Ex) +Convert CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Convert (Ex) +Create Spawn CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Create Spawn (Su) +Creature Meld CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Creature Meld (Su) +Corrupt the Mind CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Corrupt the Mind (Su) +Corrupting Touch CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Corrupting Touch (Su) +Curse of Lycanthropy CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Curse of Lycanthropy (Su) +Dance of Ruin CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Dance of Ruin (Su) +Daylight Powerlessness CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Daylight Powerlessness (Ex) +Death Cloud CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Death Cloud (Ex) +Death Explosion CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Death Explosion (Su) +Death Gaze CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Death Gaze (Su) +Death Hunger CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Death Hunger (Ex) +Death Touch CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Death Touch (Su) +Death's Door CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Death's Door (Su) +Despair CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Despair (Su) +Detach Head CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Detach Head (Ex) +Detect Dreams CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike DESC:Detect Dreams (Sp) +Detonate CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Detonate (Ex) +Device Operation CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Device Operation (Ex) +Devour Dreams CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Devour Dreams (Su) +Dimension Door CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike DESC:Dimension Door (Sp) +Dimensional Jaunt CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Dimensional Jaunt (Su) +Disassemble Device CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Disassemble Device (Ex) +Disease CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Disease (Ex) +Disease Sense CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Disease Sense (Ex) +Disguise Self CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Disguise Self (Su) +Distraction CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Distraction (Ex) +Domination CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Domination (Su) +Double Damage against Objects CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Double Damage against Objects (Ex) +Draining Touch CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Draining Touch (Su) +Easy Breathing CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Easy Breathing (Ex) +Eat Thoughts CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Eat Thoughts (Su) +Electric Shock CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Electric Shock (Ex) +Electrical Rejuvenation CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Electrical Rejuvenation (Ex) +Electronic Interface CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Electronic Interface (Ex) +Elven Blood CATEGORY:Special Ability TYPE:SpecialQuality DESC:Elven Blood +Enchanting Music CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Enchanting Music (Su) +Energy Claw CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Energy Claw (Ex) +Energy Drain CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Energy Drain (Su) +Energy Form CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Energy Form (Ex) +Engulf CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Engulf (Ex) +Enslave CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Enslave (Su) +Expansion CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Expansion (Ex) +Extradimensional Storage CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Extradimensional Storage (Su) +Eye Rays CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Eye Rays (Su) +Fascinate CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike DESC:Fascinate (Sp) +Fast Healing CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Fast Healing (Ex)|PREVAREQ:FastHealingRate,0 SAB:Fast Healing %1 (Ex)|FastHealingRate|PREVARGT:FastHealingRate,0 DEFINE:FastHealingRate|0 +Fear Aura ~Su OUTPUTNAME:Fear Aura CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Fear Aura (Su) +Fear of Daylight CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Fear of Daylight (Ex) +Feline Aversion CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Feline Aversion (Ex) +Ferocity CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Ferocity (Ex) +Fey Rod CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike DESC:Fey Rod (Sp) +Fiery Leap CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Fiery Leap (Ex) +Find Target CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike DESC:Find Target (Sp) +Fire Form CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Fire Form (Ex) +Flame Shield CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Flame Shield (Su) +Flame Sword CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Flame Sword (Su) +Flashbacks CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Flashbacks (Ex) +Flesh Weakness CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Flesh Weakness (Ex) +Fling CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Fling (Ex) +Fortification CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Fortification (Ex) +Freeze CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Freeze (Ex) +Frightful Moan CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Frightful Moan (Su) +Frightful Presense CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Frightful Presense (Ex) +Fugue CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Fugue (Ex) +Fuse CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Fuse (Ex) +Fuse ~Su OUTPUTNAME:Fuse CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Fuse (Su) +Garbage Growth CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Garbage Growth (Ex) +Gaseous CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Gaseous (Ex) +Gaseous Form CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Gaseous Form (Su) +Gear Grind CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Gear Grind (Ex) +Glide CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike DESC:Glide (Sp) +Greater Incarnation CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Greater Incarnation (Su) +Grind CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Grind (Ex) +Hardness CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Hardness (Ex) +Hazy Outline CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Hazy Outline (Su) +Heat CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Heat (Su) +Heat Susceptibility CATEGORY:Special Ability TYPE:SpecialQuality DESC:Heat Susceptibility +Hibernate CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Hibernate (Ex) +Hive Mind CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Hive Mind (Su) +Hold Breath CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Hold Breath (Ex) +Horrific Appearance CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Horrific Appearance (Su) +Host Protection CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Host Protection (Ex) +Hot Running CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Hot Running (Ex) +Human Host CATEGORY:Special Ability TYPE:SpecialQuality DESC:Human Host +Ignite CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Ignite (Ex) +Immolation CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Immolation (Su) +Impale CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Impale (Ex) +Imprinsonment CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Imprinsonment (Ex) +Improved Grab CATEGORY:Special Ability TYPE:Extraordinary DESC:Improved Grab (Ex) +Improved Speed CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Improved Speed (Ex) +Improved Tracking CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Improved Tracking (Ex) +Indestructable Body CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Indestructable Body (Su) +Infestation CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Infestation (Ex) +Ink Cloud CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Ink Cloud (Ex) +Intoxicating Fruit CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Intoxicating Fruit (Ex) +Invisibility CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike DESC:Invisibility (Sp) +Invisibility ~Su OUTPUTNAME:Invisibility CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Invisibility (Su) +Jet CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Jet (Ex) +Jury-Rigged Repair CATEGORY:Special Ability TYPE:SpecialQualitySAB:Keen Vision DESC:Jury-Rigged Repair +Keen Scent CATEGORY:Special Ability TYPE:Extraordinary DESC:Keen Scent (Ex) +Keen Vision CATEGORY:Special Ability TYPE:SpecialQuality DESC:Keen Vision +Light Blindness CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Light Blindness (Ex) +Light Sensitivity CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Light Sensitivity (Ex) +Liquefaction CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Liquefaction (Ex) +Liquefied Spew CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Liquefied Spew (Ex) +Locate Killer CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Locate Killer (Su) +Machine Possession CATEGORY:Special Ability TYPE:SpecialQuality DESC:Machine Possession +Malleable Form CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Malleable Form (Ex) +Manipulator Arms CATEGORY:Special Ability TYPE:SpecialQuality DESC:Manipulator Arms +Mechanical Healing CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Mechanical Healing (Ex) +Memory Loss CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Memory Loss (Su) +Mesmerizing Gaze CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Mesmerizing Gaze (Su) +Mimic CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Mimic (Ex) +Mimicry CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Mimicry (Ex) +Mind Feed CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Mind Feed (Ex) +Monstrous Spider Minions CATEGORY:Special Ability TYPE:SpecialQuality DESC:Monstrous Spider Minions +Multiple Limbs CATEGORY:Special Ability TYPE:SpecialQuality DESC:Multiple Limbs +Mummy Rot CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Mummy Rot (Su) +Mystic Aid CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Mystic Aid (Su) +Nannite Infection CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Nannite Infection (Ex) +Natural Cunning CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Natural Cunning (Ex) +Natural Invisibility CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Natural Invisibility (Su) +Necrotizing Touch CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Necrotizing Touch (Su) +Network Mind CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Network Mind (Ex) +No limbs CATEGORY:Special Ability TYPE:SpecialQuality DESC:No limbs +Orc blood CATEGORY:Special Ability TYPE:SpecialQuality DESC:Orc blood +Paralysis CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Paralysis (Ex) +Peripheral Invisibility CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Peripheral Invisibility (Su) +Petrifying Gaze CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Petrifying gaze (Su) +Poison CATEGORY:Special Ability TYPE:Extraordinary DESC:Poison (Ex) +Poison Spray CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Poison Spray (Ex) +Polymorph CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike DESC:Polymorph (Sp) +Pounce CATEGORY:Special Ability TYPE:Extraordinary DESC:Pounce (Ex) +Possession CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Possession (Su) +Prodigious Leap CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Prodigious Leap (Ex) +Radiation CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Radiation (Ex) +Rake CATEGORY:Special Ability TYPE:Extraordinary DESC:Rake (Ex) +Rat Empathy CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Rat Empathy (Ex) +Regeneration CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Regeneration (Ex)|PREVAREQ:RegenerationRate,0 SAB:Regeneration %1 (Ex)|RegenerationRate|PREVARGT:RegenerationRate,0 DEFINE:RegenerationRate|0 +Rejuvenation CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Rejuvenation (Su) +Rend CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Rend (Ex) +Rending Claws CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Rending Claws (Ex) +Repairable CATEGORY:Special Ability TYPE:SpecialQuality.RobotTraits DESC:Repairable +Revenant Regeneration CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Revenant Regeneration (Ex) +Rupture CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Rupture (Ex) +Scent CATEGORY:Special Ability TYPE:Extraordinary DESC:Scent (Ex) +Selective Invisibility CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Selective Invisibility (Su) +Self-Destruct CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Self-Destruct (Ex) +Sentience CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Sentience (Ex) +Shared Host CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Shared Host (Ex) +Sharp Implements CATEGORY:Special Ability TYPE:SpecialQuality DESC:Sharp Implements +Shift Dimension CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Shift Dimension (Su) +Shock Touch CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Shock Touch (Ex) +Short Circuit CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Short Circuit (Su) +Siphon Fluids CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Siphon Fluids (Ex) +Skin Regrowth CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Skin Regrowth (Su) +Sleepless CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Sleepless (Ex) +Slow Fall CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Slow Fall (Ex) +Smash CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Smash (Ex) +Smite Fallen CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Smite Fallen (Ex) +Snatch Breath CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Snatch Breath (Su) +Spawn CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Spawn (Su) +Spider Climb CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Spider Climb (Ex) +Spit Poison CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Spit Poison (Ex) +Split CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Split (Ex) +Spores CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Spores (Ex) +Stability CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Stability (Ex) +Stampede CATEGORY:Special Ability TYPE:Extraordinary DESC:Stampede (Ex) +Stasis CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Stasis (Ex) +Steal Essence CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Steal Essence (Su) +Stealthy Pounce CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Stealthy Pounce (Ex) +Stench CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Stench (Ex) +Strands CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Strands (Ex) +Stunning Screech CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Stunning Screech (Su) +Swallow Whole CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Swallow Whole (Ex) +Summon Vrock CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike DESC:Summon Vrock (Sp) +Telekinesis CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Telekinesis (Su) +Telepathy CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Telepathy (Ex) +Telepathy ~Su OUTPUTNAME:Telepathy CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Telepathy (Su) +Teleport CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike DESC:Teleport (Sp) +Thrall CATEGORY:Special Ability TYPE:SpecialQuality.SpellLike DESC:Thrall (Sp) +Tongues CATEGORY:Special Ability TYPE:SpecialQuality DESC:Tongues +Toxic Fumes CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Toxic Fumes (Ex) - Fort save (DC %1) or take 1d4 points of Str damage|10+(TL/2)+CON +Trample CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Trample (Ex) +Tree Dependent CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Tree Dependent (Su) +Trip CATEGORY:Special Ability TYPE:Extraordinary DESC:Trip (Ex) +Turn Resistance CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Turn Resistance (Ex)|PREVAREQ:TurnResistanceBonus,0 SAB:Turn Resistance %1 (Ex)|TurnResistanceBonus|PREVARGT:TurnResistanceBonus,0 DEFINE:TurnResistanceBonus|0 +Unnatural Aura CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Unnatural Aura (Su) +Vacuum Survival CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Vacuum Survival (Ex) +Vessel of Flesh CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Vessel of Flesh (Su) +Vulnerability CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Vulnerability (Ex) +Wall Smash CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Wall Smash (Ex) +Wavesense CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Wavesense (Ex) +Weakness CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Weakness (Ex) +Web CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Web (Ex)|PREVAREQ:WebEscapeDC,0 DDESC:Web (Ex) - Escape DC %1 Break DC %2 Hit Points %3|WebEscapeDC|WebBreakDC|WebHitPoints|PREVARGT:WebEscapeDC,0 DEFINE:WebEscapeDC|0 DEFINE:WebBreakDC|0 DEFINE:WebHitPoints|0 +Web Cocoon CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Web Cocoon (Ex) +Wheels CATEGORY:Special Ability TYPE:SpecialQuality DESC:Wheels +Wild Empathy CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Wild Empathy (Ex) (1d20+%1)|6+CHA +Whistle CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Whistle (Su) +Wolf Empathy CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Wolf Empathy (Ex) +Woodland Stride CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Woodland Stride (Ex) +Wounding CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Wounding (Ex) +Wounding Gaze CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Wounding Gaze (Su) +Wounding Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Wounding Weapon (Su) ###Block: Unnamed special abilities # Ability Name Output Name Category of Ability Type Visible Special ABility Define -Bonus on Bluff Checks OUTPUTNAME:+5 species bonus on Bluff checks when attempting to pass itself off as its human host CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+5 species bonus on Bluff checks when attempting to pass itself off as its human host -Bonus vs Enchantment OUTPUTNAME:+2 species bonus against Enchantment spells or effects CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+2 species bonus against Enchantment spells or effects -Bonus vs Illusions OUTPUTNAME:+2 species bonus on saving throws against illusions CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+2 species bonus on saving throws against illusions -Bonus vs Poisons Spells and SLA OUTPUTNAME:+2 species bonus on saving throws against poisons, spells, and spell-like abilities. CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+2 species bonus on saving throws against poisons, spells, and spell-like abilities. -Bonus vs Sleep and Paralysis OUTPUTNAME:+4 species bonus on saves against sleep and paralysis CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+4 species bonus on saves against sleep and paralysis -Bonus vs Spells and SPA OUTPUTNAME:+2 species bonus on Will saves against spells and spell-like abilities CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+2 species bonus on Will saves against spells and spell-like abilities -Cannot be Raised OUTPUTNAME:Cannot be raised from dead CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:Cannot be raised from dead -Cannot Heal OUTPUTNAME:Cannot heal but can be reparied CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:Cannot heal but can be reparied -Concussion Damage OUTPUTNAME:Double damage from Sonic/Concussion damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Double damage from Sonic/Concussion damage (Ex) -Dodge Giants OUTPUTNAME:+4 dodge bonus to Defense against creatures of the giant type CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+4 dodge bonus to Defense against creatures of the giant type -Dwarf Attacks OUTPUTNAME:+1 species bonus on attack rolls against bugbears, goblins, orcs, and other goblinoids. CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+1 species bonus on attack rolls against bugbears, goblins, orcs, and other goblinoids. -Gnome Attacks OUTPUTNAME:+1 species bonus on attack rolls against bugbears, goblins (and other goblinoids), and kobolds CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+1 species bonus on attack rolls against bugbears, goblins (and other goblinoids), and kobolds -Half Actions OUTPUTNAME:Move or Attack Action Only CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Move or Attack Action Only (Ex) -Hide in Forest OUTPUTNAME:+16 to Hide in forested areas CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+16 to Hide in forested areas -Hide in Lair OUTPUTNAME:+8 species bonus to Hide in its lair CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+8 species bonus to Hide in its lair -Hide in Snow OUTPUTNAME:+15 species bonus on Hide in snowy conditions CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+15 species bonus on Hide in snowy conditions -Hide in Stone OUTPUTNAME:+8 to Hide in Stone background CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:+8 to Hide in Stone background -Hide in Subterranean OUTPUTNAME:+4 Hide in Rocky/subterranean areas CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:+4 Hide in Rocky/subterranean areas -Hide in Undergrowth OUTPUTNAME:+4 to hide in tall grass or heavy undergrowth CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+4 to hide in tall grass or heavy undergrowth -Hide in Water OUTPUTNAME:+10 to Hide while in water CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+10 to Hide while in water -Hide when Submerged OUTPUTNAME:+12 to Hide when Submerged CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+12 to Hide when Submerged -Notice Secret Doors OUTPUTNAME:Merely passing within 5 feet of a secret or concealed door entitles you to a Search check to notice it as if you were actively looking for it CATEGORY:Special Ability TYPE:SpecialQuality.RacialTrait VISIBLE:NO SAB:An elf who merely passes within 5 feet of a secret or concealed door is entitled to a Search check to notice it as if she were actively looking for it. -Notice Unusual Stonework OUTPUTNAME:+2 species bonus on Search checks to notice unusual stonework, new construction, unsafe surfaces, ceilings, and the like. A dwarf who merely passes within 10 feet of such exceptional construction can, as a free action, make a Search check (DC 15) as though he were actively searching for such. CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+2 species bonus on Search checks to notice unusual stonework, new construction, unsafe surfaces, ceilings, and the like. A dwarf who merely passes within 10 feet of such exceptional construction can, as a free action, make a Search check (DC 15) as though he were actively searching for such. -Potent Venom OUTPUTNAME:Potent Venom bonus to save CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:Potent Venom bonus to save +DC %|PotentVenom DEFINE:PotentVenom|0 -Quarter Damage OUTPUTNAME:1/4 damage from ballistic, piercing or slashing CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:1/4 damage from ballistic, piercing or slashing -Skills at Night OUTPUTNAME:+4 on Intimidate and Sense Motive during the night CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+4 on Intimidate and Sense Motive during the night -Spot in Darkness OUTPUTNAME:+8 Spot in dusk/darkness CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+8 Spot in dusk/darkness -Spot in Daylight OUTPUTNAME:+8 species bonus on Spot checks during daylight CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+8 species bonus on Spot checks during daylight -Sunlight Damage OUTPUTNAME:Direct sunlight causes 50 points damage per round CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Direct sunlight causes 50 points damage per round (Ex) -Tracking by Scent OUTPUTNAME:+4 Survival checks when Tracking by Scent CATEGORY:Special Ability TYPE:RacialTrait VISIBLE:NO SAB:+4 Survival checks when Tracking by Scent +Bonus on Bluff Checks OUTPUTNAME:+5 species bonus on Bluff checks when attempting to pass itself off as its human host CATEGORY:Special Ability TYPE:RacialTrait DESC:+5 species bonus on Bluff checks when attempting to pass itself off as its human host +Bonus vs Enchantment OUTPUTNAME:+2 species bonus against Enchantment spells or effects CATEGORY:Special Ability TYPE:RacialTrait DESC:+2 species bonus against Enchantment spells or effects +Bonus vs Illusions OUTPUTNAME:+2 species bonus on saving throws against illusions CATEGORY:Special Ability TYPE:RacialTrait DESC:+2 species bonus on saving throws against illusions +Bonus vs Poisons Spells and SLA OUTPUTNAME:+2 species bonus on saving throws against poisons, spells, and spell-like abilities. CATEGORY:Special Ability TYPE:RacialTrait DESC:+2 species bonus on saving throws against poisons, spells, and spell-like abilities. +Bonus vs Sleep and Paralysis OUTPUTNAME:+4 species bonus on saves against sleep and paralysis CATEGORY:Special Ability TYPE:RacialTrait DESC:+4 species bonus on saves against sleep and paralysis +Bonus vs Spells and SPA OUTPUTNAME:+2 species bonus on Will saves against spells and spell-like abilities CATEGORY:Special Ability TYPE:RacialTrait DESC:+2 species bonus on Will saves against spells and spell-like abilities +Cannot be Raised OUTPUTNAME:Cannot be raised from dead CATEGORY:Special Ability TYPE:RacialTrait DESC:Cannot be raised from dead +Cannot Heal OUTPUTNAME:Cannot heal but can be reparied CATEGORY:Special Ability TYPE:RacialTrait DESC:Cannot heal but can be reparied +Concussion Damage OUTPUTNAME:Double damage from Sonic/Concussion damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Double damage from Sonic/Concussion damage (Ex) +Dodge Giants OUTPUTNAME:+4 dodge bonus to Defense against creatures of the giant type CATEGORY:Special Ability TYPE:RacialTrait DESC:+4 dodge bonus to Defense against creatures of the giant type +Dwarf Attacks OUTPUTNAME:+1 species bonus on attack rolls against bugbears, goblins, orcs, and other goblinoids. CATEGORY:Special Ability TYPE:RacialTrait DESC:+1 species bonus on attack rolls against bugbears, goblins, orcs, and other goblinoids. +Gnome Attacks OUTPUTNAME:+1 species bonus on attack rolls against bugbears, goblins (and other goblinoids), and kobolds CATEGORY:Special Ability TYPE:RacialTrait DESC:+1 species bonus on attack rolls against bugbears, goblins (and other goblinoids), and kobolds +Half Actions OUTPUTNAME:Move or Attack Action Only CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Move or Attack Action Only (Ex) +Hide in Forest OUTPUTNAME:+16 to Hide in forested areas CATEGORY:Special Ability TYPE:RacialTrait DESC:+16 to Hide in forested areas +Hide in Lair OUTPUTNAME:+8 species bonus to Hide in its lair CATEGORY:Special Ability TYPE:RacialTrait DESC:+8 species bonus to Hide in its lair +Hide in Snow OUTPUTNAME:+15 species bonus on Hide in snowy conditions CATEGORY:Special Ability TYPE:RacialTrait DESC:+15 species bonus on Hide in snowy conditions +Hide in Stone OUTPUTNAME:+8 to Hide in Stone background CATEGORY:Special Ability TYPE:SpecialQuality DESC:+8 to Hide in Stone background +Hide in Subterranean OUTPUTNAME:+4 Hide in Rocky/subterranean areas CATEGORY:Special Ability TYPE:SpecialQuality DESC:+4 Hide in Rocky/subterranean areas +Hide in Undergrowth OUTPUTNAME:+4 to hide in tall grass or heavy undergrowth CATEGORY:Special Ability TYPE:RacialTrait DESC:+4 to hide in tall grass or heavy undergrowth +Hide in Water OUTPUTNAME:+10 to Hide while in water CATEGORY:Special Ability TYPE:RacialTrait DESC:+10 to Hide while in water +Hide when Submerged OUTPUTNAME:+12 to Hide when Submerged CATEGORY:Special Ability TYPE:RacialTrait DESC:+12 to Hide when Submerged +Notice Secret Doors OUTPUTNAME:Merely passing within 5 feet of a secret or concealed door entitles you to a Search check to notice it as if you were actively looking for it CATEGORY:Special Ability TYPE:SpecialQuality.RacialTrait DESC:An elf who merely passes within 5 feet of a secret or concealed door is entitled to a Search check to notice it as if she were actively looking for it. +Notice Unusual Stonework OUTPUTNAME:+2 species bonus on Search checks to notice unusual stonework, new construction, unsafe surfaces, ceilings, and the like. A dwarf who merely passes within 10 feet of such exceptional construction can, as a free action, make a Search check (DC 15) as though he were actively searching for such. CATEGORY:Special Ability TYPE:RacialTrait DESC:+2 species bonus on Search checks to notice unusual stonework, new construction, unsafe surfaces, ceilings, and the like. A dwarf who merely passes within 10 feet of such exceptional construction can, as a free action, make a Search check (DC 15) as though he were actively searching for such. +Potent Venom OUTPUTNAME:Potent Venom bonus to save CATEGORY:Special Ability TYPE:RacialTrait DESC:Potent Venom bonus to save +DC %1|PotentVenom DEFINE:PotentVenom|0 +Quarter Damage OUTPUTNAME:1/4 damage from ballistic, piercing or slashing CATEGORY:Special Ability TYPE:RacialTrait DESC:1/4 damage from ballistic, piercing or slashing +Skills at Night OUTPUTNAME:+4 on Intimidate and Sense Motive during the night CATEGORY:Special Ability TYPE:RacialTrait DESC:+4 on Intimidate and Sense Motive during the night +Spot in Darkness OUTPUTNAME:+8 Spot in dusk/darkness CATEGORY:Special Ability TYPE:RacialTrait DESC:+8 Spot in dusk/darkness +Spot in Daylight OUTPUTNAME:+8 species bonus on Spot checks during daylight CATEGORY:Special Ability TYPE:RacialTrait DESC:+8 species bonus on Spot checks during daylight +Sunlight Damage OUTPUTNAME:Direct sunlight causes 50 points damage per round CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Direct sunlight causes 50 points damage per round (Ex) +Tracking by Scent OUTPUTNAME:+4 Survival checks when Tracking by Scent CATEGORY:Special Ability TYPE:RacialTrait DESC:+4 Survival checks when Tracking by Scent ###Block: Creature Type and Subtype Traits # Ability Name Category of Ability Visible Special ABility Description -Aquatic Traits CATEGORY:Special Ability VISIBLE:NO SAB:Can move in water without making Swim checks, and cannot drown in water -Incorporeal Traits CATEGORY:Special Ability VISIBLE:NO SAB:Can be harmed only by other incorporeal creatures/+1 or better weapons/magic SAB:50% chance to ignore any damage from a corporeal source SAB:Can pass through solid objects at will SAB:Attacks pass through armor SAB:Always moves silently -Aberration Traits CATEGORY:Special Ability VISIBLE:NO SAB:Aberrations eat, sleeps, and breathes -Animal Traits CATEGORY:Special Ability VISIBLE:NO SAB:Animals eat, sleeps, and breathes -Fey Traits CATEGORY:Special Ability VISIBLE:NO SAB:Fey eat, sleeps, and breathes -Giant Traits CATEGORY:Special Ability VISIBLE:NO SAB:Giants eat, sleeps, and breathes -Humanoid Traits CATEGORY:Special Ability VISIBLE:NO SAB:Humanoids eat, sleeps, and breathes -Magical Beast Traits CATEGORY:Special Ability VISIBLE:NO SAB:Magical Beasts eat, sleeps, and breathes -Monstrous Humanoid Traits CATEGORY:Special Ability VISIBLE:NO SAB:Monstrous Humanoids eat, sleeps, and breathes -Swarm Traits CATEGORY:Special Ability VISIBLE:NO SAB:Immune to any spell or effect that targets a specific number of creatures, unless the swarm is susceptible to mind-affecting effects SAB:-10 penalty on saving throws against spells or effects that affect an area, or double damage if no save -Shadowkind CATEGORY:Special Ability VISIBLE:NO SAB:Shadowkind SAB:Can only be resurrected within 1d4 hours after death|PRETYPE:1,Humanoid,Dragon DESC:Can only be resurrected within 1d4 hours after death|PRETYPE:1,Humanoid,Dragon +Aquatic Traits CATEGORY:Special Ability DESC:Can move in water without making Swim checks, and cannot drown in water +Incorporeal Traits CATEGORY:Special Ability DESC:Can be harmed only by other incorporeal creatures/+1 or better weapons/magic DESC:&nl;50%% chance to ignore any damage from a corporeal source DESC:&nl;Can pass through solid objects at will DESC:&nl;Attacks pass through armor DESC:&nl;Always moves silently +Aberration Traits CATEGORY:Special Ability DESC:Aberrations eat, sleeps, and breathes +Animal Traits CATEGORY:Special Ability DESC:Animals eat, sleeps, and breathes +Fey Traits CATEGORY:Special Ability DESC:Fey eat, sleeps, and breathes +Giant Traits CATEGORY:Special Ability DESC:Giants eat, sleeps, and breathes +Humanoid Traits CATEGORY:Special Ability DESC:Humanoids eat, sleeps, and breathes +Magical Beast Traits CATEGORY:Special Ability DESC:Magical Beasts eat, sleeps, and breathes +Monstrous Humanoid Traits CATEGORY:Special Ability DESC:Monstrous Humanoids eat, sleeps, and breathes +Swarm Traits CATEGORY:Special Ability DESC:Immune to any spell or effect that targets a specific number of creatures, unless the swarm is susceptible to mind-affecting effects SAB:-10 penalty on saving throws against spells or effects that affect an area, or double damage if no save +Shadowkind CATEGORY:Special Ability DESC:Shadowkind SAB:Can only be resurrected within 1d4 hours after death|PRETYPE:1,Humanoid,Dragon DESC:Can only be resurrected within 1d4 hours after death|PRETYPE:1,Humanoid,Dragon ###Block: Negative Levels # Ability Name Category of Ability Visible Special ABility Define Combat bonus Save bonus Bonus to skill Source Page -Negative Levels CATEGORY:Special Ability VISIBLE:NO SAB:% negative level(s) (-% effective level(s) and loses access to % spell(s) from the highest spell level castable)|NegLevels|NegLevels|NegLevels DEFINE:NegLevels|0 BONUS:COMBAT|TOHIT|-1*NegLevels BONUS:SAVE|Fortitude,Reflex,Will|-1*NegLevels BONUS:SKILL|TYPE=Strength,TYPE=Dexterity,TYPE=Constitution,TYPE=Intelligence,TYPE=Wisdom,TYPE=Charisma|-1*NegLevels SOURCEPAGE:msrdspecialabilities +Negative Levels CATEGORY:Special Ability DESC:%1 negative level(s) (-%1 effective level(s) and loses access to %1 spell(s) from the highest spell level castable)|NegLevels DEFINE:NegLevels|0 BONUS:COMBAT|TOHIT|-1*NegLevels BONUS:SAVE|Fortitude,Reflex,Will|-1*NegLevels BONUS:SKILL|TYPE=Strength,TYPE=Dexterity,TYPE=Constitution,TYPE=Intelligence,TYPE=Wisdom,TYPE=Charisma|-1*NegLevels SOURCEPAGE:msrdspecialabilities ###Block: Standard Immunities # Ability Name Category of Ability Type Visible Special ABility Description -Immunity To Acid CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Acid (Ex) DESC:You never take Acid damage -Immunity To Cold CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Cold (Ex) DESC:You never take Cold damage -Immunity To Fire CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Fire (Ex) DESC:You never take Fire damage -Immunity To Electricity CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Electricity (Ex) DESC:You never take Electricity damage -Immunity To Sonic CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Sonic (Ex) DESC:You never take Sonic damage +Immunity To Acid CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Acid (Ex) DESC:You never take Acid damage +Immunity To Cold CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Cold (Ex) DESC:You never take Cold damage +Immunity To Fire CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Fire (Ex) DESC:You never take Fire damage +Immunity To Electricity CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Electricity (Ex) DESC:You never take Electricity damage +Immunity To Sonic CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Sonic (Ex) DESC:You never take Sonic damage ###Block: Other Immunities # Ability Name Category of Ability Type Visible Special ABility Description -Immunity To Ability Damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Ability Damage (Ex) -Immunity To Affects that Require Fortitude Saves CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to any affect that requires a fortitude save unless it affects objects or is harmless (Ex) -Immunity To Ballistic CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Ballistic (Ex) DESC:You never take ballistic damage -Immunity To Bludgeoning CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Bludgeoning (Ex) DESC:You never take bludgeoning damage -Immunity To Critical Hits CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Critical Hits (Ex) -Immunity To Disease CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Disease (Ex) -Immunity To Energy Drain CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Energy Drain (Ex) -Immunity To Feat CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Feat (Ex) -Immunity To Flanking CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Flanking (Ex) -Immunity To Force Effects CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Force Effects (Ex) -Immunity To Gaze Attacks CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Gaze Attacks (Ex) -Immunity To Hold CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Hold (Ex) DESC:You are never effected by Hold effects -Immunity To Magic CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Magic (Ex) DESC:You are never effected by magic -Immunity To Massive Damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Massive Damage (Ex) -Immunity To Mind-Affecting CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Mind-Affecting (Ex) DESC:You are never subject to mind-affecting effects -Immunity To Mind-Influencing Effects CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Mind-Influencing Effects (Ex) -Immunity To Necromantic Effects CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Necromantic Effects (Ex) -Immunity To Nonlethal Damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Nonlethal Damage (Ex) -Immunity To Paralysis CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Paralysis (Ex) -Immunity To Piercing CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Piercing (Ex) DESC:You never take piercing damage -Immunity To Petrification CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Petrification (Ex) -Immunity To Poison CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Poison (Ex) DESC:You never take poison damage -Immunity To Radiation CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Radiation (Ex) -Immunity To Slashing CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Slashing (Ex) DESC:You never take slashing damage -Immunity To Sleep CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Sleep (Ex) -Immunity To Stunning CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Stunning (Ex) -Immunity To Subdual Damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to Subdual Damage (Ex) -Immunity To Visual Illusions CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity VISIBLE:NO SAB:Immunity to visual illusions, and other attacks that rely on sight (Ex) +Immunity To Ability Damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Ability Damage (Ex) +Immunity To Affects that Require Fortitude Saves CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to any affect that requires a fortitude save unless it affects objects or is harmless (Ex) +Immunity To Ballistic CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Ballistic (Ex) DESC:You never take ballistic damage +Immunity To Bludgeoning CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Bludgeoning (Ex) DESC:You never take bludgeoning damage +Immunity To Critical Hits CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Critical Hits (Ex) +Immunity To Disease CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Disease (Ex) +Immunity To Energy Drain CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Energy Drain (Ex) +Immunity To Feat CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Feat (Ex) +Immunity To Flanking CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Flanking (Ex) +Immunity To Force Effects CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Force Effects (Ex) +Immunity To Gaze Attacks CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Gaze Attacks (Ex) +Immunity To Hold CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Hold (Ex) DESC:You are never effected by Hold effects +Immunity To Magic CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Magic (Ex) DESC:You are never effected by magic +Immunity To Massive Damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Massive Damage (Ex) +Immunity To Mind-Affecting CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Mind-Affecting (Ex) DESC:You are never subject to mind-affecting effects +Immunity To Mind-Influencing Effects CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Mind-Influencing Effects (Ex) +Immunity To Necromantic Effects CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Necromantic Effects (Ex) +Immunity To Nonlethal Damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Nonlethal Damage (Ex) +Immunity To Paralysis CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Paralysis (Ex) +Immunity To Piercing CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Piercing (Ex) DESC:You never take piercing damage +Immunity To Petrification CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Petrification (Ex) +Immunity To Poison CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Poison (Ex) DESC:You never take poison damage +Immunity To Radiation CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Radiation (Ex) +Immunity To Slashing CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Slashing (Ex) DESC:You never take slashing damage +Immunity To Sleep CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Sleep (Ex) +Immunity To Stunning CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Stunning (Ex) +Immunity To Subdual Damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to Subdual Damage (Ex) +Immunity To Visual Illusions CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Immunity DESC:Immunity to visual illusions, and other attacks that rely on sight (Ex) ###Block: Standard Resistances # Ability Name Category of Ability Visible Define Ability @@ -355,85 +355,85 @@ Resistance To Sonic CATEGORY:Special Ability VISIBLE:NO DEFINE:SonicResistanceB ###Block: Resistances Output # Ability Name Output Name Category of Ability Type Visible Special ABility Description -Resistance To Acid Output OUTPUTNAME:Resistance To Acid CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance VISIBLE:NO SAB:Resistance To Acid %|AcidResistanceBonus DESC:You may ignore %1 points of Acid damage each time you take Acid damage|AcidResistanceBonus -Resistance To Cold Output OUTPUTNAME:Resistance To Cold CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance VISIBLE:NO SAB:Resistance To Cold %|ColdResistanceBonus DESC:You may ignore %1 points of Cold damage each time you take Cold damage|ColdResistanceBonus -Resistance To Fire Output OUTPUTNAME:Resistance To Fire CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance VISIBLE:NO SAB:Resistance To Fire %|FireResistanceBonus DESC:You may ignore %1 points of Fire damage each time you take Fire damage|FireResistanceBonus -Resistance To Electricity Output OUTPUTNAME:Resistance To Electricity CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance VISIBLE:NO SAB:Resistance To Electricity %|ElectricityResistanceBonus DESC:You may ignore %1 points of Electricity damage each time you take Electricity damage|ElectricityResistanceBonus -Resistance To Sonic Output OUTPUTNAME:Resistance To Sonic CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance VISIBLE:NO SAB:Resistance To Sonic %|SonicResistanceBonus DESC:You may ignore %1 points of Sonic damage each time you take Sonic damage|SonicResistanceBonus +Resistance To Acid Output OUTPUTNAME:Resistance To Acid CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance DESC:Resistance To Acid %1|AcidResistanceBonus DESC:You may ignore %1 points of Acid damage each time you take Acid damage|AcidResistanceBonus +Resistance To Cold Output OUTPUTNAME:Resistance To Cold CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance DESC:Resistance To Cold %1|ColdResistanceBonus DESC:You may ignore %1 points of Cold damage each time you take Cold damage|ColdResistanceBonus +Resistance To Fire Output OUTPUTNAME:Resistance To Fire CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance DESC:Resistance To Fire %1|FireResistanceBonus DESC:You may ignore %1 points of Fire damage each time you take Fire damage|FireResistanceBonus +Resistance To Electricity Output OUTPUTNAME:Resistance To Electricity CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance DESC:Resistance To Electricity %1|ElectricityResistanceBonus DESC:You may ignore %1 points of Electricity damage each time you take Electricity damage|ElectricityResistanceBonus +Resistance To Sonic Output OUTPUTNAME:Resistance To Sonic CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance DESC:Resistance To Sonic %1|SonicResistanceBonus DESC:You may ignore %1 points of Sonic damage each time you take Sonic damage|SonicResistanceBonus ###Block: Other Resistances # Ability Name Category of Ability Type Visible Special ABility -Resistance To Massive Damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance VISIBLE:NO SAB:Resistance to Massive Damage -Resistance To Blows CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance VISIBLE:NO SAB:Resistance to Blows -Resistance To Ballistic Damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance VISIBLE:NO SAB:Resistance to Ballistic Damage -Resistance To Piercing Damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance VISIBLE:NO SAB:Resistance to Piercing Damage -Resistance To Slashing Damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance VISIBLE:NO SAB:Resistance to Slashing Damage -Resistance To Radiation CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance VISIBLE:NO SAB:Resistance to Radiation +Resistance To Massive Damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance DESC:Resistance to Massive Damage +Resistance To Blows CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance DESC:Resistance to Blows +Resistance To Ballistic Damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance DESC:Resistance to Ballistic Damage +Resistance To Piercing Damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance DESC:Resistance to Piercing Damage +Resistance To Slashing Damage CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance DESC:Resistance to Slashing Damage +Resistance To Radiation CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Resistance DESC:Resistance to Radiation ###Block: Standard Vulnerabilities # Ability Name Category of Ability Type Visible Special ABility Description -Vulnerability To Acid CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Weakness VISIBLE:NO SAB:Vulnerability To Acid DESC:You take half again as much (+50%%) damage as normal from Acid, regardless of whether a saving throw is allowed, or if the save is a success or failure -Vulnerability To Cold CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Weakness VISIBLE:NO SAB:Vulnerability To Cold DESC:You take half again as much (+50%%) damage as normal from Cold, regardless of whether a saving throw is allowed, or if the save is a success or failure -Vulnerability To Fire CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Weakness VISIBLE:NO SAB:Vulnerability To Fire DESC:You take half again as much (+50%%) damage as normal from Fire, regardless of whether a saving throw is allowed, or if the save is a success or failure -Vulnerability To Electricity CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Weakness VISIBLE:NO SAB:Vulnerability To Electricity DESC:You take half again as much (+50%%) damage as normal from Electricity, regardless of whether a saving throw is allowed, or if the save is a success or failure -Vulnerability To Sonic CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Weakness VISIBLE:NO SAB:Vulnerability To Sonic DESC:You take half again as much (+50%%) damage as normal from Sonic, regardless of whether a saving throw is allowed, or if the save is a success or failure +Vulnerability To Acid CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Weakness DESC:Vulnerability To Acid DESC:You take half again as much (+50%%) damage as normal from Acid, regardless of whether a saving throw is allowed, or if the save is a success or failure +Vulnerability To Cold CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Weakness DESC:Vulnerability To Cold DESC:You take half again as much (+50%%) damage as normal from Cold, regardless of whether a saving throw is allowed, or if the save is a success or failure +Vulnerability To Fire CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Weakness DESC:Vulnerability To Fire DESC:You take half again as much (+50%%) damage as normal from Fire, regardless of whether a saving throw is allowed, or if the save is a success or failure +Vulnerability To Electricity CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Weakness DESC:Vulnerability To Electricity DESC:You take half again as much (+50%%) damage as normal from Electricity, regardless of whether a saving throw is allowed, or if the save is a success or failure +Vulnerability To Sonic CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Weakness DESC:Vulnerability To Sonic DESC:You take half again as much (+50%%) damage as normal from Sonic, regardless of whether a saving throw is allowed, or if the save is a success or failure ###Block: Other Vulnerabilities # Ability Name Category of Ability Type Visible Special ABility -Vulnerability To Sunlight CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Weakness VISIBLE:NO SAB:Vulnerability To Sunlight (Ex) -Vulnerability To Fear CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Weakness VISIBLE:NO SAB:Vulnerability To Fear (Ex) +Vulnerability To Sunlight CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Weakness DESC:Vulnerability To Sunlight (Ex) +Vulnerability To Fear CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary.Weakness DESC:Vulnerability To Fear (Ex) ###Block: Dragon Abilities # Ability Name Category of Ability Type Visible Special ABility Define -Breath Weapon ~ Cone of Acid CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Breath Weapon (Su) - Cone of Acid (% ft long, %d% pts of damage, Ref save (DC %) for half)|BreathWeaponRange|BreathWeaponDice|BreathWeaponDamageDie|BreathWeaponDC DEFINE:BreathWeaponRange|0 DEFINE:BreathWeaponDice|0 DEFINE:BreathWeaponDamageDie|0 DEFINE:BreathWeaponDC|0 -Breath Weapon ~ Cone of Cold CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Breath Weapon (Su) - Cone of Cold (% ft long, %d% pts of damage, Ref save (DC %) for half)|BreathWeaponRange|BreathWeaponDice|BreathWeaponDamageDie|BreathWeaponDC DEFINE:BreathWeaponRange|0 DEFINE:BreathWeaponDice|0 DEFINE:BreathWeaponDamageDie|0 DEFINE:BreathWeaponDC|0 -Breath Weapon ~ Cone of Fire CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Breath Weapon (Su) - Cone of Fire (% ft long, %d% pts of damage, Ref save (DC %) for half)|BreathWeaponRange|BreathWeaponDice|BreathWeaponDamageDie|BreathWeaponDC DEFINE:BreathWeaponRange|0 DEFINE:BreathWeaponDice|0 DEFINE:BreathWeaponDamageDie|0 DEFINE:BreathWeaponDC|0 -Breath Weapon ~ Cone of Paralysis Gas CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Breath Weapon (Su) - Cone of Paralysis Gas (% ft long, Fort save (DC %) or be paralyzed for %d%+% rounds)|BreathWeaponGasRange|BreathWeaponGasDC|BreathWeaponGasDice|BreathWeaponGasDamageDie|BreathWeaponGasBonusDamage DEFINE:BreathWeaponGasRange|0 DEFINE:BreathWeaponGasDice|0 DEFINE:BreathWeaponGasDamageDie|0 DEFINE:BreathWeaponGasDC|0 DEFINE:BreathWeaponGasBonusDamage|0 -Breath Weapon ~ Cone of Repulsion Gas CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Breath Weapon (Su) - Cone of Repulsion Gas (% ft long, Will save (DC %) or move away for %d%+% rounds)|BreathWeaponGasRange|BreathWeaponGasDC|BreathWeaponGasDice|BreathWeaponGasDamageDie|BreathWeaponGasBonusDamage DEFINE:BreathWeaponGasRange|0 DEFINE:BreathWeaponGasDice|0 DEFINE:BreathWeaponGasDamageDie|0 DEFINE:BreathWeaponGasDC|0 DEFINE:BreathWeaponGasBonusDamage|0 -Breath Weapon ~ Cone of Sleep Gas CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Breath Weapon (Su) - Cone of Sleep Gas (% ft long, Will save (DC %) or fall asleep for %d%+% rounds)|BreathWeaponGasRange|BreathWeaponGasDC|BreathWeaponGasDice|BreathWeaponGasDamageDie|BreathWeaponGasBonusDamage DEFINE:BreathWeaponGasRange|0 DEFINE:BreathWeaponGasDice|0 DEFINE:BreathWeaponGasDamageDie|0 DEFINE:BreathWeaponGasDC|0 DEFINE:BreathWeaponGasBonusDamage|0 -Breath Weapon ~ Cone of Slow Gas CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Breath Weapon (Su) - Cone of Slow Gas (% ft long, Fort save (DC %) or be slowed for %d%+% rounds)|BreathWeaponGasRange|BreathWeaponGasDC|BreathWeaponGasDice|BreathWeaponGasDamageDie|BreathWeaponGasBonusDamage DEFINE:BreathWeaponGasRange|0 DEFINE:BreathWeaponGasDice|0 DEFINE:BreathWeaponGasDamageDie|0 DEFINE:BreathWeaponGasDC|0 DEFINE:BreathWeaponGasBonusDamage|0 -Breath Weapon ~ Cone of Weakening Gas CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Breath Weapon (Su) - Cone of Weakening Gas (% ft long, Fort save (DC %) or take % points of temporary Strength damage)|BreathWeaponGasRange|BreathWeaponGasDC|BreathWeaponStrengthDamage DEFINE:BreathWeaponGasRange|0 DEFINE:BreathWeaponGasDC|0 DEFINE:BreathWeaponStrengthDamage|0 -Breath Weapon ~ Line of Acid CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Breath Weapon (Su) - Line of Acid (% ft long, %d% pts of damage, Ref save (DC %) for half)|BreathWeaponRange|BreathWeaponDice|BreathWeaponDamageDie|BreathWeaponDC DEFINE:BreathWeaponRange|0 DEFINE:BreathWeaponDice|0 DEFINE:BreathWeaponDamageDie|0 DEFINE:BreathWeaponDC|0 -Breath Weapon ~ Line of Electricity CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Breath Weapon (Su) - Line of Electricity (% ft long, %d% pts of damage, Ref save (DC %) for half)|BreathWeaponRange|BreathWeaponDice|BreathWeaponDamageDie|BreathWeaponDC DEFINE:BreathWeaponRange|0 DEFINE:BreathWeaponDice|0 DEFINE:BreathWeaponDamageDie|0 DEFINE:BreathWeaponDC|0 +Breath Weapon ~ Cone of Acid CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Breath Weapon (Su) - Cone of Acid (%1 ft long, %2d%3 pts of damage, Ref save (DC %4) for half)|BreathWeaponRange|BreathWeaponDice|BreathWeaponDamageDie|BreathWeaponDC DEFINE:BreathWeaponRange|0 DEFINE:BreathWeaponDice|0 DEFINE:BreathWeaponDamageDie|0 DEFINE:BreathWeaponDC|0 +Breath Weapon ~ Cone of Cold CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Breath Weapon (Su) - Cone of Cold (%1 ft long, %2d%3 pts of damage, Ref save (DC %4) for half)|BreathWeaponRange|BreathWeaponDice|BreathWeaponDamageDie|BreathWeaponDC DEFINE:BreathWeaponRange|0 DEFINE:BreathWeaponDice|0 DEFINE:BreathWeaponDamageDie|0 DEFINE:BreathWeaponDC|0 +Breath Weapon ~ Cone of Fire CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Breath Weapon (Su) - Cone of Fire (%1 ft long, %2d%3 pts of damage, Ref save (DC %4) for half)|BreathWeaponRange|BreathWeaponDice|BreathWeaponDamageDie|BreathWeaponDC DEFINE:BreathWeaponRange|0 DEFINE:BreathWeaponDice|0 DEFINE:BreathWeaponDamageDie|0 DEFINE:BreathWeaponDC|0 +Breath Weapon ~ Cone of Paralysis Gas CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Breath Weapon (Su) - Cone of Paralysis Gas (%1 ft long, Fort save (DC %2) or be paralyzed for %3d%4+%5 rounds)|BreathWeaponGasRange|BreathWeaponGasDC|BreathWeaponGasDice|BreathWeaponGasDamageDie|BreathWeaponGasBonusDamage DEFINE:BreathWeaponGasRange|0 DEFINE:BreathWeaponGasDice|0 DEFINE:BreathWeaponGasDamageDie|0 DEFINE:BreathWeaponGasDC|0 DEFINE:BreathWeaponGasBonusDamage|0 +Breath Weapon ~ Cone of Repulsion Gas CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Breath Weapon (Su) - Cone of Repulsion Gas (%1 ft long, Will save (DC %2) or move away for %3d%4+%5 rounds)|BreathWeaponGasRange|BreathWeaponGasDC|BreathWeaponGasDice|BreathWeaponGasDamageDie|BreathWeaponGasBonusDamage DEFINE:BreathWeaponGasRange|0 DEFINE:BreathWeaponGasDice|0 DEFINE:BreathWeaponGasDamageDie|0 DEFINE:BreathWeaponGasDC|0 DEFINE:BreathWeaponGasBonusDamage|0 +Breath Weapon ~ Cone of Sleep Gas CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Breath Weapon (Su) - Cone of Sleep Gas (%1 ft long, Will save (DC %2) or fall asleep for %3d%4+%5 rounds)|BreathWeaponGasRange|BreathWeaponGasDC|BreathWeaponGasDice|BreathWeaponGasDamageDie|BreathWeaponGasBonusDamage DEFINE:BreathWeaponGasRange|0 DEFINE:BreathWeaponGasDice|0 DEFINE:BreathWeaponGasDamageDie|0 DEFINE:BreathWeaponGasDC|0 DEFINE:BreathWeaponGasBonusDamage|0 +Breath Weapon ~ Cone of Slow Gas CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Breath Weapon (Su) - Cone of Slow Gas (%1 ft long, Fort save (DC %2) or be slowed for %3d%4+%5 rounds)|BreathWeaponGasRange|BreathWeaponGasDC|BreathWeaponGasDice|BreathWeaponGasDamageDie|BreathWeaponGasBonusDamage DEFINE:BreathWeaponGasRange|0 DEFINE:BreathWeaponGasDice|0 DEFINE:BreathWeaponGasDamageDie|0 DEFINE:BreathWeaponGasDC|0 DEFINE:BreathWeaponGasBonusDamage|0 +Breath Weapon ~ Cone of Weakening Gas CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Breath Weapon (Su) - Cone of Weakening Gas (%1 ft long, Fort save (DC %2) or take %3 points of temporary Strength damage)|BreathWeaponGasRange|BreathWeaponGasDC|BreathWeaponStrengthDamage DEFINE:BreathWeaponGasRange|0 DEFINE:BreathWeaponGasDC|0 DEFINE:BreathWeaponStrengthDamage|0 +Breath Weapon ~ Line of Acid CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Breath Weapon (Su) - Line of Acid (%1 ft long, %2d%3 pts of damage, Ref save (DC %4) for half)|BreathWeaponRange|BreathWeaponDice|BreathWeaponDamageDie|BreathWeaponDC DEFINE:BreathWeaponRange|0 DEFINE:BreathWeaponDice|0 DEFINE:BreathWeaponDamageDie|0 DEFINE:BreathWeaponDC|0 +Breath Weapon ~ Line of Electricity CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Breath Weapon (Su) - Line of Electricity (%1 ft long, %2d%3 pts of damage, Ref save (DC %4) for half)|BreathWeaponRange|BreathWeaponDice|BreathWeaponDamageDie|BreathWeaponDC DEFINE:BreathWeaponRange|0 DEFINE:BreathWeaponDice|0 DEFINE:BreathWeaponDamageDie|0 DEFINE:BreathWeaponDC|0 -Tail Sweep CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Tail Sweep (Ex) (% ft radius, %d%+%, Ref Save (DC %) for half)|TailSweepRadius|TailSweepDice|TailSweepDamageDie|TailSweepBonusDamage|TailSweepDC DEFINE:TailSweepRadius|0 DEFINE:TailSweepDice|0 DEFINE:TailSweepDamageDie|0 DEFINE:TailSweepBonusDamage|0 DEFINE:TailSweepDC|0 -Fear Aura CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Fear Aura % ft (Ex) (Will save DC %)|FearAuraRange|FearAuraDC DEFINE:FearAuraRange|0 DEFINE:FearAuraDC|0 -Crush CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Crush %d%+% (Ex) (Ref save DC %)|CrushDice|CrushDamageDie|CrushBonusDamage|CrushDC DEFINE:CrushDice|0 DEFINE:CrushDamageDie|0 DEFINE:CrushBonusDamage|0 DEFINE:CrushDC|0 +Tail Sweep CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Tail Sweep (Ex) (%1 ft radius, %2d%3+%4, Ref Save (DC %5) for half)|TailSweepRadius|TailSweepDice|TailSweepDamageDie|TailSweepBonusDamage|TailSweepDC DEFINE:TailSweepRadius|0 DEFINE:TailSweepDice|0 DEFINE:TailSweepDamageDie|0 DEFINE:TailSweepBonusDamage|0 DEFINE:TailSweepDC|0 +Fear Aura CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Fear Aura %1 ft (Ex) (Will save DC %2)|FearAuraRange|FearAuraDC DEFINE:FearAuraRange|0 DEFINE:FearAuraDC|0 +Crush CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Crush %1d%2+%3 (Ex) (Ref save DC %4)|CrushDice|CrushDamageDie|CrushBonusDamage|CrushDC DEFINE:CrushDice|0 DEFINE:CrushDamageDie|0 DEFINE:CrushBonusDamage|0 DEFINE:CrushDC|0 ###Block: Specific Creature Abilities # Ability Name Output Name Category of Ability Type Visible Special ABility Define Modify VAR -Alien Probe Shock OUTPUTNAME:Shock CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Shock (Ex) - +2d6 points of electricity damage on successful ranged touch attack -Alien Probe Speed OUTPUTNAME:Supersonic Speed CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Supersonic Speed (Ex) - can fly at 4000 ft for up to 6 hours/day -Blood Fiend Breath Weapon OUTPUTNAME:Breath Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Breath Weapon (Su) - every 1d4 rounds, 15 ft cone of fire, 2d6 points of fire damage, Ref save (DC %) for half|10+HD/2+CON -Chemical Golem Breath Weapon OUTPUTNAME:Breath Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Breath Weapon (Ex) - every 1d4 rounds, 30 ft cone of acid and toxic fumes, 5d6 points of acid damage and 1d4 ponits of Con damage, Fort save (DC %) negates|10+(HD/2) -Mothfolk Fear Aura OUTPUTNAME:Fear Aura CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Fear Aura (Su) - Will save (DC %) or be affected by a fear spell|10+HD/2+CHA -Neothelid Breath Weapon OUTPUTNAME:Breath Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Breath weapon (Su) - every 1d4 rounds, 50 ft cone, 14d10 points of acid damage, Ref save (DC %) for half|10+(HD/2)+CON -Night Terror Fear Aura OUTPUTNAME:Fear Aura CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Fear Aura (Su) - Will save (DC %) or be shaken|10+HD/2|CHA -Night Terror Terrify OUTPUTNAME:Terrify CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Terrify (Su) - Will save (DC %) or lose 1d4 points of Wis damage|10+(HD/2)+CHA -Satanic Ichor Immunities OUTPUTNAME:Immune to all weapons except ones that deal energy damage, such as stun guns and kroath dark plasma rifles CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Immune to all weapons except ones that deal energy damage, such as stun guns and kroath dark plasma rifles -Star Doppelganger Fear Aura OUTPUTNAME:Fear Aura CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Fear Aura (Su) - Will save (DC %) or be stunned for 1d4 rounds|10+TL/2+CHA -Star Doppelganger Flesh Transfer OUTPUTNAME:Flesh Transfer CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Flesh Transfer (Ex) - Fort save (DC %) or begin to become a star doppelganger|10+TL/2+CON -Star Doppelganger Immunities OUTPUTNAME:Immunities CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Immunities (Ex) - suffocation, inhaled poisons, and other detrimental atmospheric effects -Thunderbird Breath Weapon OUTPUTNAME:Breath Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Breath Weapon (Su) - Every 1d4 rounds, 60' cone of sonic energy that deals %d10 points of damage, Ref save (DC %) for half|TL/2|10+TL/2+CON -Thunderbird Fear Aura OUTPUTNAME:Fear Aura CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Fear Aura (Su) - Will save (DC %) or be shaken for 1d4 rounds|10+TL/2+CHA -Urban Wendigo Rage OUTPUTNAME:Enters rage when wounded, and can not end it voluntarily CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:Enters rage when wounded, and can not end it voluntarily -Wyrm Breath Weapon OUTPUTNAME:Breath Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural VISIBLE:NO SAB:Breath Weapon (Su) -Line of Fire every 1d4 rounds %d10 fire (Reflex DC %)|WyrmBreathDice|WyrmBreathDC DEFINE:WyrmBreathDice|0 DEFINE:WyrmBreathDC|0 BONUS:VAR|WyrmBreathDice|3 -Roach Thrall Disguise Checks OUTPUTNAME:+10 species bonus on Disguise checks in human host CATEGORY:Special Ability TYPE:SpecialQuality VISIBLE:NO SAB:+10 species bonus on Disguise checks in human host +Alien Probe Shock OUTPUTNAME:Shock CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Shock (Ex) - +2d6 points of electricity damage on successful ranged touch attack +Alien Probe Speed OUTPUTNAME:Supersonic Speed CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Supersonic Speed (Ex) - can fly at 4000 ft for up to 6 hours/day +Blood Fiend Breath Weapon OUTPUTNAME:Breath Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Breath Weapon (Su) - every 1d4 rounds, 15 ft cone of fire, 2d6 points of fire damage, Ref save (DC %1) for half|10+HD/2+CON +Chemical Golem Breath Weapon OUTPUTNAME:Breath Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Breath Weapon (Ex) - every 1d4 rounds, 30 ft cone of acid and toxic fumes, 5d6 points of acid damage and 1d4 ponits of Con damage, Fort save (DC %1) negates|10+(HD/2) +Mothfolk Fear Aura OUTPUTNAME:Fear Aura CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Fear Aura (Su) - Will save (DC %1) or be affected by a fear spell|10+HD/2+CHA +Neothelid Breath Weapon OUTPUTNAME:Breath Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Breath weapon (Su) - every 1d4 rounds, 50 ft cone, 14d10 points of acid damage, Ref save (DC %1) for half|10+(HD/2)+CON +Night Terror Fear Aura OUTPUTNAME:Fear Aura CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Fear Aura (Su) - Will save (DC %1) or be shaken|10+HD/2|CHA +Night Terror Terrify OUTPUTNAME:Terrify CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Terrify (Su) - Will save (DC %1) or lose 1d4 points of Wis damage|10+(HD/2)+CHA +Satanic Ichor Immunities OUTPUTNAME:Immune to all weapons except ones that deal energy damage, such as stun guns and kroath dark plasma rifles CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Immune to all weapons except ones that deal energy damage, such as stun guns and kroath dark plasma rifles +Star Doppelganger Fear Aura OUTPUTNAME:Fear Aura CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Fear Aura (Su) - Will save (DC %1) or be stunned for 1d4 rounds|10+TL/2+CHA +Star Doppelganger Flesh Transfer OUTPUTNAME:Flesh Transfer CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Flesh Transfer (Ex) - Fort save (DC %1) or begin to become a star doppelganger|10+TL/2+CON +Star Doppelganger Immunities OUTPUTNAME:Immunities CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Immunities (Ex) - suffocation, inhaled poisons, and other detrimental atmospheric effects +Thunderbird Breath Weapon OUTPUTNAME:Breath Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Breath Weapon (Su) - Every 1d4 rounds, 60' cone of sonic energy that deals %1d10 points of damage, Ref save (DC %2) for half|TL/2|10+TL/2+CON +Thunderbird Fear Aura OUTPUTNAME:Fear Aura CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Fear Aura (Su) - Will save (DC %1) or be shaken for 1d4 rounds|10+TL/2+CHA +Urban Wendigo Rage OUTPUTNAME:Enters rage when wounded, and can not end it voluntarily CATEGORY:Special Ability TYPE:SpecialQuality DESC:Enters rage when wounded, and can not end it voluntarily +Wyrm Breath Weapon OUTPUTNAME:Breath Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Supernatural DESC:Breath Weapon (Su) -Line of Fire every 1d4 rounds %1d10 fire (Reflex DC %2)|WyrmBreathDice|WyrmBreathDC DEFINE:WyrmBreathDice|0 DEFINE:WyrmBreathDC|0 BONUS:VAR|WyrmBreathDice|3 +Roach Thrall Disguise Checks OUTPUTNAME:+10 species bonus on Disguise checks in human host CATEGORY:Special Ability TYPE:SpecialQuality DESC:+10 species bonus on Disguise checks in human host ###Block: Toxyderm Breath Weapons # Ability Name Output Name Category of Ability Type Visible Special ABility -Chemical Toxyderm Breath Weapon OUTPUTNAME:Breath Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Breath Weapon (Ex) ~ 50 ft cone, 15d6 points of damage, Ref save (DC %) for half|10+TL/2+CON -Garbage Toxyderm Breath Weapon OUTPUTNAME:Breath Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Breath Weapon (Ex) ~ 50 ft cone, 10d6 points of bludgeoning damage, Ref save (DC %) for half|10+TL/2+CON -Nuclear Toxyderm Breath Weapon OUTPUTNAME:Breath Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Breath Weapon (Ex) 100 ft cone of white-hot nuclear slag and full spectrum radiation ,20d6 points of damage to all in its path, Ref save (DC %) for half|10+TL/2+CON +Chemical Toxyderm Breath Weapon OUTPUTNAME:Breath Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Breath Weapon (Ex) ~ 50 ft cone, 15d6 points of damage, Ref save (DC %1) for half|10+TL/2+CON +Garbage Toxyderm Breath Weapon OUTPUTNAME:Breath Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Breath Weapon (Ex) ~ 50 ft cone, 10d6 points of bludgeoning damage, Ref save (DC %1) for half|10+TL/2+CON +Nuclear Toxyderm Breath Weapon OUTPUTNAME:Breath Weapon CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Breath Weapon (Ex) 100 ft cone of white-hot nuclear slag and full spectrum radiation ,20d6 points of damage to all in its path, Ref save (DC %1) for half|10+TL/2+CON ###Block: Extraterrestial Poisonous Bite # Ability Name Output Name Category of Ability Type Visible Special ABility Description -Extraterrestial Poisonous Bite ~ Cha OUTPUTNAME:Poisonous Bite CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Poisonous Bite, Cha damage (Ex) - 2d4 initial, 2d4 secondary, Fort save (DC %) to negate|10+TL/2+CON DESC:Cha damage - 2d4 initial, 2d4 secondary, Fort save (DC %1) to negate|10+(TL/2)+CON -Extraterrestial Poisonous Bite ~ Con OUTPUTNAME:Poisonous Bite CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Poisonous Bite, Con damage (Ex) - 1d4 initial, 1d4 secondary, Fort save (DC %) to negate|10+TL/2+CON DESC:Con damage - 1d4 initial, 1d4 secondary, Fort save (DC %1) to negate|10+(TL/2)+CON -Extraterrestial Poisonous Bite ~ Dex OUTPUTNAME:Poisonous Bite CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Poisonous Bite, Dex damage (Ex) - 1d6 initial, 1d6 secondary, Fort save (DC %) to negate|10+TL/2+CON DESC:Dex damage - 1d6 initial, 1d6 secondary, Fort save (DC %1) to negate|10+(TL/2)+CON -Extraterrestial Poisonous Bite ~ Paralysis OUTPUTNAME:Poisonous Bite CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Poisonous Bite, Paralysis (Ex) - no initial, 1d6 hours secondary, Fort save (DC %) to negate|10+TL/2+CON DESC:Paralysis - no initial, 1d6 hours secondary, Fort save (DC %1) to negate|10+(TL/2)+CON -Extraterrestial Poisonous Bite ~ Str OUTPUTNAME:Poisonous Bite CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Poisonous Bite, Str damage (Ex) - 1d6 initial, 1d6 secondary, Fort save (DC %) to negate|10+TL/2+CON DESC:Str damage - 1d6 initial, 1d6 secondary, Fort save (DC %1) to negate|10+(TL/2)+CON -Extraterrestial Poisonous Bite ~ Wis OUTPUTNAME:Poisonous Bite CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary VISIBLE:NO SAB:Poisonous Bite, Wis damage (Ex) - 2d4 initial, 2d4 secondary, Fort save (DC %) to negate|10+TL/2+CON DESC:Wis damage - 2d4 initial, 2d4 secondary, Fort save (DC %1) to negate|10+(TL/2)+CON +Extraterrestial Poisonous Bite ~ Cha OUTPUTNAME:Poisonous Bite CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Cha damage - 2d4 initial, 2d4 secondary, Fort save (DC %1) to negate|10+(TL/2)+CON +Extraterrestial Poisonous Bite ~ Con OUTPUTNAME:Poisonous Bite CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Con damage - 1d4 initial, 1d4 secondary, Fort save (DC %1) to negate|10+(TL/2)+CON +Extraterrestial Poisonous Bite ~ Dex OUTPUTNAME:Poisonous Bite CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Dex damage - 1d6 initial, 1d6 secondary, Fort save (DC %1) to negate|10+(TL/2)+CON +Extraterrestial Poisonous Bite ~ Paralysis OUTPUTNAME:Poisonous Bite CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Paralysis - no initial, 1d6 hours secondary, Fort save (DC %1) to negate|10+(TL/2)+CON +Extraterrestial Poisonous Bite ~ Str OUTPUTNAME:Poisonous Bite CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Str damage - 1d6 initial, 1d6 secondary, Fort save (DC %1) to negate|10+(TL/2)+CON +Extraterrestial Poisonous Bite ~ Wis OUTPUTNAME:Poisonous Bite CATEGORY:Special Ability TYPE:SpecialQuality.Extraordinary DESC:Wis damage - 2d4 initial, 2d4 secondary, Fort save (DC %1) to negate|10+(TL/2)+CON # # End diff --git a/data/pathfinder/paizo/player_companion/harrow_handbook/_harrow_handbook.pcc b/data/pathfinder/paizo/player_companion/harrow_handbook/_harrow_handbook.pcc index 1509b61164f..c8ee583f2b0 100644 --- a/data/pathfinder/paizo/player_companion/harrow_handbook/_harrow_handbook.pcc +++ b/data/pathfinder/paizo/player_companion/harrow_handbook/_harrow_handbook.pcc @@ -43,7 +43,7 @@ SPELL:hh_spells.lst TEMPLATE:hh_templates.lst CLASS:support/hh_classes_acg.lst|PRECAMPAIGN:1,INCLUDES=Advanced Class Guide -CLASS:support/hh_abilities_um.lst|PRECAMPAIGN:1,INCLUDES=Ultimate Magic +ABILITY:support/hh_abilities_um.lst|PRECAMPAIGN:1,INCLUDES=Ultimate Magic # ENTRY DATE: 2018-09 # LST MONKEY: Gwen T. (evilpixie87) diff --git a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_equipmods.lst b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_equipmods.lst index 602135c93a5..9a8a33a764a 100644 --- a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_equipmods.lst +++ b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_equipmods.lst @@ -106,7 +106,7 @@ Mithral KEY:Material ~ Mithril ~ Shield FORMATCAT:FRONT NAMEOPT:NORMAL TYPE: Mithral KEY:Material ~ Mithril ~ Weapon / Item FORMATCAT:FRONT NAMEOPT:NORMAL TYPE:BaseMaterial.MasterworkQuality.Ammunition.Weapon.Instruments.Tools.Goods COST:WT*500 VISIBLE:QUALIFY ITYPE:Metal.Mithral.Masterwork REPLACES:Special Quality ~ Masterwork ~ Weapon,Special Quality ~ Masterwork ~ Item SOURCEPAGE:p.154 PRETYPE:1,Metal BONUS:EQM|WEIGHTDIV|2|TYPE=Enhancement.REPLACE BONUS:WEAPON|TOHIT|1|TYPE=Enhancement|PRETYPE:1,WEAPON BONUS:WEAPON|TOHIT|1|TYPE=Enhancement|PRETYPE:1,AMMUNITION SPROP:mithral ASSIGNTOALL:NO INFO:hp|30 hp/inch INFO:Hardness|hardness 15 Darkwood KEY:Material ~ Darkwood FORMATCAT:FRONT NAMEOPT:NORMAL TYPE:BaseMaterial.MasterworkQuality.Ammunition.Weapon.Shield COST:WT*10 VISIBLE:QUALIFY ITYPE:Wooden.Darkwood.Masterwork REPLACES:Special Quality ~ Masterwork ~ Armor,Special Quality ~ Masterwork ~ Weapon SOURCEPAGE:p.154 PRETYPE:1,Wooden BONUS:VAR|ArmorCheckPenalty|-2|TYPE=Enhancement BONUS:EQM|WEIGHTDIV|2 BONUS:EQMARMOR|ACCHECK|2|TYPE=Enhancement|PRETYPE:1,SHIELD BONUS:ITEMCOST|TYPE.AMMUNITION|6 BONUS:ITEMCOST|TYPE.WEAPON|300|!PRETYPE:1,Shield BONUS:ITEMCOST|TYPE.SHIELD|150 BONUS:WEAPON|TOHIT|1|TYPE=Enhancement|PRETYPE:1,WEAPON|!PRETYPE:1,Shield SPROP:darkwood ASSIGNTOALL:YES INFO:hp|10 hp/inch INFO:Hardness|hardness 5 Dragonhide KEY:Material ~ Dragonhide FORMATCAT:FRONT NAMEOPT:NORMAL TYPE:BaseMaterial.MasterworkQuality.Armor.Shield COST:BASECOST+300 VISIBLE:QUALIFY ITYPE:Dragonhide.Nonmetal.Masterwork REPLACES:Special Quality ~ Masterwork ~ Armor SOURCEPAGE:p.154 BONUS:VAR|ArmorCheckPenalty|-1|TYPE=Enhancement BONUS:EQMARMOR|ACCHECK|1|TYPE=Enhancement SPROP:dragonhide ASSIGNTOALL:NO INFO:hp|10 hp/inch INFO:Hardness|hardness 10 -Cold Iron KEY:Material ~ Cold Iron FORMATCAT:FRONT NAMEOPT:NORMAL TYPE:BaseMaterial.Ammunition.Weapon COST:0 VISIBLE:QUALIFY ITYPE:Metal.ColdIron SOURCEPAGE:p.154 PRETYPE:1,Weapon,Ammunition PRETYPE:1,Metal BONUS:ITEMCOST|TYPE.WEAPON|(BASECOST)|!PRETYPE:1,Double BONUS:ITEMCOST|TYPE.WEAPON|(BASECOST)/2|PRETYPE:1,Double BONUS:ITEMCOST|TYPE.Enhancement.AMMUNITION|40 BONUS:ITEMCOST|TYPE.Enhancement.WEAPON|2000 SPROP:cold iron ASSIGNTOALL:NO INFO:hp|30 hp/inch INFO:Hardness|hardness 10 +Cold Iron KEY:Material ~ Cold Iron FORMATCAT:FRONT NAMEOPT:NORMAL TYPE:BaseMaterial.Ammunition.Weapon COST:0 VISIBLE:QUALIFY ITYPE:Metal.ColdIron SOURCEPAGE:p.154 PRETYPE:1,Weapon,Ammunition PRETYPE:1,Metal BONUS:ITEMCOST|TYPE.WEAPON|(BASECOST)|!PRETYPE:1,Double BONUS:ITEMCOST|TYPE.WEAPON|(BASECOST)/2|PRETYPE:1,Double BONUS:ITEMCOST|TYPE.Enhancement.AMMUNITION|40 BONUS:ITEMCOST|TYPE.WEAPON|2000|PRETYPE:1,WeaponEnhancement SPROP:cold iron ASSIGNTOALL:NO INFO:hp|30 hp/inch INFO:Hardness|hardness 10 Alchemical Silver KEY:Material ~ Alchemical Silver FORMATCAT:FRONT NAMEOPT:TEXT=Silver TYPE:BaseMaterial.Ammunition.Weapon COST:0 VISIBLE:QUALIFY ITYPE:Metal.Silver SOURCEPAGE:p.155 PRETYPE:1,Weapon,Ammunition PRETYPE:1,Metal !PRETYPE:1,Mithral,Adamantine,ColdIron,Silver BONUS:ITEMCOST|TYPE.AMMUNITION|2 BONUS:ITEMCOST|TYPE.WEAPON|20|PREMULT:2,[PREWIELD:1,LIGHT],[!PRETYPE:1,Double] BONUS:ITEMCOST|TYPE.WEAPON|90|PREMULT:2,[PREWIELD:1,ONEHANDED],[!PRETYPE:1,Double] BONUS:ITEMCOST|TYPE.WEAPON|180|PREMULT:2,[PREWIELD:1,TWOHANDED],[!PRETYPE:1,Double] BONUS:ITEMCOST|TYPE.WEAPON|90|PRETYPE:1,Double BONUS:WEAPON|DAMAGE|-1|TYPE=Enhancement.STACK|PRETYPE:1,PIERCING,SLASHING SPROP:silver ASSIGNTOALL:NO INFO:hp|10 hp/inch INFO:Hardness|hardness 8 ###Block: Charged items diff --git a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_feats.lst b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_feats.lst index 03aab42e1b6..790c44356de 100644 --- a/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_feats.lst +++ b/data/pathfinder/paizo/roleplaying_game/core_rulebook/cr_feats.lst @@ -106,7 +106,7 @@ Improved Shield Bash CATEGORY:FEAT TYPE:Combat.AttackOption Improved Sunder CATEGORY:FEAT TYPE:Combat.AttackOption PREABILITY:1,CATEGORY=FEAT,Power Attack PRETOTALAB:1 PREVARGTEQ:PreStatScore_STR,13 DESC:You are skilled at damaging your foes' weapons and armor. BONUS:VAR|CMB_Sunder,CMD_Sunder|2 SOURCEPAGE:p.128 BENEFIT:You do not provoke an attack of opportunity when performing a sunder combat maneuver. In addition, you receive a +2 bonus on checks made to sunder an item. You also receive a +2 bonus to your Combat Maneuver Defense whenever an opponent tries to sunder your gear. Improved Trip CATEGORY:FEAT TYPE:Combat.AttackOption PREABILITY:1,CATEGORY=FEAT,Combat Expertise PREMULT:1,[PREVARGTEQ:PreStatScore_INT,13],[PREVARGTEQ:CombatFeatIntRequirement,13] DESC:You are skilled at sending your opponents to the ground. BONUS:VAR|CMB_Trip,CMD_Trip|2 SOURCEPAGE:p.128 BENEFIT:You do not provoke an attack of opportunity when performing a trip combat maneuver. In addition, you receive a +2 bonus on checks made to trip a foe. You also receive a +2 bonus to your Combat Maneuver Defense whenever an opponent tries to trip you. Improved Two-Weapon Fighting CATEGORY:FEAT TYPE:Combat PREABILITY:1,CATEGORY=FEAT,Two-Weapon Fighting PREMULT:1,[PREVARGTEQ:PreStatScore_DEX,17],[PREVARGTEQ:FeatDexRequirement,17] PRETOTALAB:6 DESC:You are skilled at fighting with two weapons. BONUS:COMBAT|SECONDARYATTACKS|1 SOURCEPAGE:p.128 BENEFIT:In addition to the standard single extra attack you get with an off-hand weapon, you get a second attack with it, albeit at a -5 penalty. -Improved Unarmed Strike CATEGORY:FEAT TYPE:Combat DESC:You are skilled while fighting unarmed. SOURCEPAGE:p.128 BENEFIT:You are considered to be armed even when unarmed-you do not provoke attacks of opportunity when you attack foes while unarmed. Your unarmed strikes can deal lethal or nonlethal damage, at your choice. +Improved Unarmed Strike CATEGORY:FEAT TYPE:Combat DESC:You are skilled while fighting unarmed. BONUS:VAR|UnarmedLethal|1|TYPE=Boolean SOURCEPAGE:p.128 BENEFIT:You are considered to be armed even when unarmed-you do not provoke attacks of opportunity when you attack foes while unarmed. Your unarmed strikes can deal lethal or nonlethal damage, at your choice. Improved Vital Strike CATEGORY:FEAT TYPE:Combat PREABILITY:1,CATEGORY=FEAT,Vital Strike PRETOTALAB:11 DESC:You can make a single attack that deals a large amount of damage. SOURCEPAGE:p.128 BENEFIT:When you use the attack action, you can make one attack at your highest base attack bonus that deals additional damage. Roll the weapon's damage dice for the attack three times and add the results together before adding bonuses from Strength, weapon abilities (such as flaming), precision-based damage, and other damage bonuses. These extra damage dice are not multiplied on a critical hit, but are added to the total. Improvised Weapon Mastery CATEGORY:FEAT TYPE:Combat PREABILITY:1,CATEGORY=FEAT,Catch Off-Guard,Throw Anything PRETOTALAB:8 DESC:You can turn nearly any object into a deadly weapon, from a razor sharp chair leg to a sack of flour. SOURCEPAGE:p.128 BENEFIT:You do not suffer any penalties for using an improvised weapon. Increase the amount of damage dealt by the improvised weapon by one step (for example, 1d4 becomes 1d6) to a maximum of 1d8 (2d6 if the improvised weapon is two-handed). The improvised weapon has a critical threat range of 19-20, with a critical multiplier of W2. Intimidating Prowess CATEGORY:FEAT TYPE:Combat DESC:Your physical might is intimidating to others. BONUS:SKILL|Intimidate|STR SOURCEPAGE:p.128 BENEFIT:Add your Strength modifier to Intimidate skill checks in addition to your Charisma modifier. From 006939a61f63cf3ebb92124803b9eadd89431727 Mon Sep 17 00:00:00 2001 From: LegacyKing Date: Sat, 7 Sep 2024 15:46:16 -0700 Subject: [PATCH 131/142] DATA-4353 *Fix Included* Ward Speaker Kami Fortune showing for all characters in Class Features --- .../disciples_doctrine/dd_abilitycategories.lst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/pathfinder/paizo/player_companion/disciples_doctrine/dd_abilitycategories.lst b/data/pathfinder/paizo/player_companion/disciples_doctrine/dd_abilitycategories.lst index eb535695d37..f01006b6979 100644 --- a/data/pathfinder/paizo/player_companion/disciples_doctrine/dd_abilitycategories.lst +++ b/data/pathfinder/paizo/player_companion/disciples_doctrine/dd_abilitycategories.lst @@ -4,4 +4,4 @@ # Ability Category Visible Editable? Change Pool? Fractional values? Category of Object Type of Object Specific choices list Plural description for UI Display Location ABILITYCATEGORY:Weapon Familiarity Choice VISIBLE:QUALIFY EDITABLE:YES EDITPOOL:YES FRACTIONALPOOL:NO CATEGORY:Special Ability TYPE:WeaponFamiliarityChoice PLURAL:Weapon Familiarity Choices DISPLAYLOCATION:Class Features -ABILITYCATEGORY:Ward Speaker Kami Fortune VISIBLE:YES EDITABLE:YES EDITPOOL:YES FRACTIONALPOOL:NO CATEGORY:Special Ability TYPE:WardSpeakerKami PLURAL:Ward Speaker Kami Fortunes DISPLAYLOCATION:Class Features \ No newline at end of file +ABILITYCATEGORY:Ward Speaker Kami Fortune VISIBLE:QUALIFY EDITABLE:YES EDITPOOL:YES FRACTIONALPOOL:NO CATEGORY:Special Ability TYPE:WardSpeakerKami PLURAL:Ward Speaker Kami Fortunes DISPLAYLOCATION:Class Features \ No newline at end of file From 414641cd153fd6e85c331132f16df779511a6cf2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 21:23:37 +1200 Subject: [PATCH 132/142] Bump org.springframework:spring-core from 6.1.12 to 6.1.13 (#7166) Bumps [org.springframework:spring-core](https://github.com/spring-projects/spring-framework) from 6.1.12 to 6.1.13. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.12...v6.1.13) --- updated-dependencies: - dependency-name: org.springframework:spring-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 03cd04a9b51..ea8aa08ce52 100644 --- a/build.gradle +++ b/build.gradle @@ -226,7 +226,7 @@ dependencies { implementation group: 'org.springframework', name: 'spring-web', version:'6.1.12' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.12' - implementation group: 'org.springframework', name: 'spring-core', version:'6.1.12' + implementation group: 'org.springframework', name: 'spring-core', version:'6.1.13' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.17.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' implementation('org.apache.xmlgraphics:fop:2.9') From ee27f114f18e2df8b525e9818616f28f1bc81127 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 21:24:05 +1200 Subject: [PATCH 133/142] Bump org.springframework:spring-web from 6.1.12 to 6.1.13 (#7167) Bumps [org.springframework:spring-web](https://github.com/spring-projects/spring-framework) from 6.1.12 to 6.1.13. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.12...v6.1.13) --- updated-dependencies: - dependency-name: org.springframework:spring-web dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ea8aa08ce52..ad8f1321897 100644 --- a/build.gradle +++ b/build.gradle @@ -224,7 +224,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' - implementation group: 'org.springframework', name: 'spring-web', version:'6.1.12' + implementation group: 'org.springframework', name: 'spring-web', version:'6.1.13' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.12' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.13' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.17.0' From 8dc14052b335809313451b602f2925d61a49ef49 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Sep 2024 07:44:12 +1200 Subject: [PATCH 134/142] Bump org.springframework:spring-beans from 6.1.12 to 6.1.13 (#7165) Bumps [org.springframework:spring-beans](https://github.com/spring-projects/spring-framework) from 6.1.12 to 6.1.13. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.1.12...v6.1.13) --- updated-dependencies: - dependency-name: org.springframework:spring-beans dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ad8f1321897..28f45457a99 100644 --- a/build.gradle +++ b/build.gradle @@ -225,7 +225,7 @@ dependencies { implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' implementation group: 'org.springframework', name: 'spring-web', version:'6.1.13' - implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.12' + implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.13' implementation group: 'org.springframework', name: 'spring-core', version:'6.1.13' implementation group: 'org.apache.commons', name: 'commons-lang3', version:'3.17.0' implementation group: 'xalan', name: 'serializer', version: '2.7.3' From 698ff38a85a0eeba35674fb77eb5365108b4bafb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 17:27:55 +1200 Subject: [PATCH 135/142] Bump commons-io:commons-io from 2.16.0 to 2.17.0 (#7171) Bumps commons-io:commons-io from 2.16.0 to 2.17.0. --- updated-dependencies: - dependency-name: commons-io:commons-io dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 28f45457a99..c2441072765 100644 --- a/build.gradle +++ b/build.gradle @@ -222,7 +222,7 @@ compileJava { */ dependencies { - implementation group: 'commons-io', name: 'commons-io', version:'2.16.0' + implementation group: 'commons-io', name: 'commons-io', version:'2.17.0' implementation group: 'org.springframework', name: 'spring-web', version:'6.1.13' implementation group: 'org.springframework', name: 'spring-beans', version:'6.1.13' From fc37451b2a89f3c035d62ab6d54567fbb184793f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 21:01:56 +1200 Subject: [PATCH 136/142] Bump org.junit.jupiter:junit-jupiter-engine from 5.11.0 to 5.11.1 (#7173) Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.11.0 to 5.11.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.0...r5.11.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c2441072765..9088388788f 100644 --- a/build.gradle +++ b/build.gradle @@ -265,7 +265,7 @@ dependencies { testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.11.0' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.11.0' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.11.0' - testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.11.0' + testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.11.1' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '3.0' testImplementation group: 'org.testfx', name: 'testfx-junit5', version: '4.0.18' // TODO openjfx-monocle is no longer updated and chances are openjfx-monocle doesn't work with latest OpenJFX From cc1b59ff2090a963f2a4e6dc3f00945f09ae6f96 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 21:02:22 +1200 Subject: [PATCH 137/142] Bump org.junit.jupiter:junit-jupiter-api from 5.11.0 to 5.11.1 (#7175) Bumps [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit5) from 5.11.0 to 5.11.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.0...r5.11.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9088388788f..e4ecbea531d 100644 --- a/build.gradle +++ b/build.gradle @@ -263,7 +263,7 @@ dependencies { testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.11.0' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.11.0' - testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.11.0' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.11.1' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.11.0' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.11.1' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '3.0' From 81dd8be92b7883c94849dc521086c43d4d3de51d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 21:05:11 +1200 Subject: [PATCH 138/142] Bump org.junit.platform:junit-platform-runner from 1.11.0 to 1.11.1 (#7178) Bumps [org.junit.platform:junit-platform-runner](https://github.com/junit-team/junit5) from 1.11.0 to 1.11.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/commits) --- updated-dependencies: - dependency-name: org.junit.platform:junit-platform-runner dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index e4ecbea531d..71c72c94b95 100644 --- a/build.gradle +++ b/build.gradle @@ -261,7 +261,7 @@ dependencies { compileOnly group: 'com.yuvimasory', name: 'orange-extensions', version: '1.3.0' compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.6' - testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.11.0' + testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.11.1' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.11.0' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.11.1' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.11.0' From 42722f7f8d342e79a5dddc8e68307b2f3c04f489 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 21:05:53 +1200 Subject: [PATCH 139/142] Bump org.jetbrains:annotations from 24.1.0 to 25.0.0 (#7174) Bumps [org.jetbrains:annotations](https://github.com/JetBrains/java-annotations) from 24.1.0 to 25.0.0. - [Release notes](https://github.com/JetBrains/java-annotations/releases) - [Changelog](https://github.com/JetBrains/java-annotations/blob/master/CHANGELOG.md) - [Commits](https://github.com/JetBrains/java-annotations/compare/24.1.0...25.0.0) --- updated-dependencies: - dependency-name: org.jetbrains:annotations dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 71c72c94b95..69ffd70ec43 100644 --- a/build.gradle +++ b/build.gradle @@ -257,7 +257,7 @@ dependencies { // Use if you're working from your local PCGen Formula //implementation files("../pcgen-formula/PCGen-formula/build/libs/PCgen-formula-1.0.jar") - compileOnly group: 'org.jetbrains', name: 'annotations', version:'24.1.0' + compileOnly group: 'org.jetbrains', name: 'annotations', version:'25.0.0' compileOnly group: 'com.yuvimasory', name: 'orange-extensions', version: '1.3.0' compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.6' From 8df81bff283e39e9ba9d92455fb2d46917c7bbaa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 21:08:33 +1200 Subject: [PATCH 140/142] Bump org.junit.jupiter:junit-jupiter-params from 5.11.0 to 5.11.1 (#7176) Bumps [org.junit.jupiter:junit-jupiter-params](https://github.com/junit-team/junit5) from 5.11.0 to 5.11.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.0...r5.11.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-params dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 69ffd70ec43..1613c71c1f5 100644 --- a/build.gradle +++ b/build.gradle @@ -264,7 +264,7 @@ dependencies { testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.11.1' testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.11.0' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.11.1' - testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.11.0' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.11.1' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.11.1' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '3.0' testImplementation group: 'org.testfx', name: 'testfx-junit5', version: '4.0.18' From 816c09f53aef669fe72d504a28cc4855b9cdd0bf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 21:12:35 +1200 Subject: [PATCH 141/142] Bump org.junit.platform:junit-platform-launcher from 1.11.0 to 1.11.1 (#7177) Bumps [org.junit.platform:junit-platform-launcher](https://github.com/junit-team/junit5) from 1.11.0 to 1.11.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/commits) --- updated-dependencies: - dependency-name: org.junit.platform:junit-platform-launcher dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 1613c71c1f5..bf82ce93d83 100644 --- a/build.gradle +++ b/build.gradle @@ -262,7 +262,7 @@ dependencies { compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.8.6' testImplementation group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.11.1' - testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.11.0' + testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.11.1' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.11.1' testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.11.1' testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.11.1' From b85d15dc8aa19145ee861cde310dc24ff9ce09d3 Mon Sep 17 00:00:00 2001 From: Martijn Verburg Date: Mon, 30 Sep 2024 16:56:14 +1300 Subject: [PATCH 142/142] Move to Java 21 (#7077) * Initial cut for Java 21 support + lots of debug * Update PMD to 7.0.0-rc4 * PMD now passes * Checkstyle now passes * grdle 8.5 for full Java 21 support * Use official monocole * Initial cut for Java 21 support + lots of debug * Update PMD to 7.0.0-rc4 * PMD now passes * Checkstyle now passes * grdle 8.5 for full Java 21 support * Updates to reflect latest 17 and 21 releases * Tidy-up after 1st successful build * Tidy-up after 1st successful build * Tidy-up after 1st successful build * Updated: pmd to 7.0.0 gradle to 8.7 checkstyle to 10.15.0 spotbugs to 4.8.3 * PMD updates * Formatted output for downloadJRE and downloadJavaFXModules a little. Refactored code a little Removed few warnings detected by IDEA. * Removed an unnecessary empty line. * Use Linux 21.0.1 for aarch64 JavaFX Removed trailing spaces (IDEA) Applied few recommendations from Spotbugs (just to test it) * Updated Spotbugs Plugin to 6.0.9 (the solution was taken from https://github.com/spotbugs/spotbugs-gradle-plugin/issues/972#issuecomment-1769247750) * Update deps * Initial cut for Java 21 support + lots of debug * Update PMD to 7.0.0-rc4 * PMD now passes * Checkstyle now passes * grdle 8.5 for full Java 21 support * Initial cut for Java 21 support + lots of debug * Update PMD to 7.0.0-rc4 * PMD now passes * Updates to reflect latest 17 and 21 releases * Tidy-up after 1st successful build * Tidy-up after 1st successful build * Tidy-up after 1st successful build * Updated: pmd to 7.0.0 gradle to 8.7 checkstyle to 10.15.0 spotbugs to 4.8.3 * PMD updates * Formatted output for downloadJRE and downloadJavaFXModules a little. Refactored code a little Removed few warnings detected by IDEA. * Removed an unnecessary empty line. * Use Linux 21.0.1 for aarch64 JavaFX Removed trailing spaces (IDEA) Applied few recommendations from Spotbugs (just to test it) * Updated Spotbugs Plugin to 6.0.9 (the solution was taken from https://github.com/spotbugs/spotbugs-gradle-plugin/issues/972#issuecomment-1769247750) * Update deps * Last fixes for full pre release build to work * Add comments for removal of SecurityManager * * updated com.github.spotbugs to 6.0.15 * updated checkstyle to 10.17.0 * updated pmd to 7.1.0 * updated spotbugs to 4.8.5 * Corrected the distTar failure on Windows (#152) * Corrected the error UncheckedIOException related to the buildDirectory. It was resolved by Gradle to `C:...\pcgen\property(org.gradle.api.file.Directory, fixed(class org.gradle.api.internal.file.DefaultFilePropertyFactorySFixedDirectory, C:...\pcgen\build))\launch4j` Updated few dependencies as well. Signed-off-by: Vest * Formatted build.gradle, by putting a space character after "version:" Signed-off-by: Vest --------- Signed-off-by: Vest * Removed explicit "buildDirectory" variable. Replaced it with the lazy layout.buildDirectory Replaces projectDir with layout.projectDirectory, because the variable projectDir hides the property Project.projectDir Replaced "new File" with "file" Replaced many "eager" tasks with lazy tasks.register. Reconfigured many tasks in a lazy way Updated task-tree to v4.0.0 Renamed task all to allTasks, because it was confusing what it does. Formatted few lines in build scripts. Signed-off-by: Vest * Added an explicit dependency between tasks -> this should be changed to input/output files instead (because the Jar task creates an *output* file, that will be an *input* file for the copyToOutput task). Corrected a wrong code of genProjectNsis Signed-off-by: Vest * converted genProjectNsis to the "lazy" API. Removed buildDirectory as a variable, replaced it with layout.buildDirectory Signed-off-by: Vest * converted buildNsis to the "lazy" API. Signed-off-by: Vest * Removed 32-bit version from pcgen.nsi (NSIS installer) Replaced few tasks creation calls with the "register". Added /WX key (fail with warnings) for NSIS Corrected few "delete" calls Signed-off-by: Vest * Upgrade Grade wrapper from 8.7 to 8.8 Signed-off-by: Vest * Formatted code a little, replaced $projectDir with layout.projectDirectory Fixed failed :prepareRelease task. Formatted the description, so it will not have a long line in source code. Signed-off-by: Vest * Fixed a typo in the property name (build.gradle) * Corrected an issue with JavaFX modules (a wrong relative folder was used). Simplified the :idea task using "fileTree" * Corrected the :genDataList task * Refactored release.gradle, this reduced the number of lines. * Refactored release.gradle, this reduced the number of lines. * Replaced eager tasks with lazy Replaced projectDir with layout.projectDirectory Moved :downloadJRE and :downloadJavaFXModules to the "lazy" (doLast) section. Now, JRE and JavaFX modules are downloaded only, when the task is required/called. Slightly improved the logging for :downloadJRE Detached :downloadJRE from :downloadJavaFXModules (they are independent). Removed codes, where the modules and JDK were extracted. It seems that the new JDK doesn't have files that we omitted in the past. Adjusted dependencies, because :downloadJRE is an independent task now. Formatted pcgen.nsi * Corrected the broken tasks: :jpackageImage, :buildNsis Removed :clean from :prepareRelease. * Corrected types of Files in :checksum Signed-off-by: Vest * Refactored build.gradle: * renamed :all to :allTasks in comments * :downloadJavaFXModules is lazy, tries to reuse the downloaded files, removes empty folders (Window JRE still contains empty folders - this is TODO) * :downloadJavaFXModules remove local "mods/" from the task. This task is used to download modules for all supported platforms only * :downloadJavaFXLocal added for local builds only (used for different tests, for :run). It isn't used for packaging, but for compilation only * :extractJavaFXLocal extracts downloaded JavaFX binaries into mods/. * :compileJava - we don't download all JREs and JavaFX artifacts anymore. Added a dependency to :extractJavaFXLocal * :test - removes dependencies to :downloadJRE, :downloadJavaFXModules Corrected a typo in build-gradle.xml Ant Now we add :compileJava as a direct dependency to all ant tasks, where plugins are built. * Removed unhelpful println calls from some tasks such as :copyToLibs or :downloadJRE Corrected a bug in :downloadJRE, now we delete the JDK folder, if it contains an old JDK. Previously, we couldn't extract JDK into it (unfortunately, the deletion removes JavaFX, if it has been downloaded previously). :downloadJavaFXLocal - OS_NAME isn't used, because it is "private" :clean moved to the bottom, and it deletes probably everything. :run doesn't require all JDKs and all JavaFX modules. It simply depends on :extractJavaFXLocal now. Two dependencies were removed. Slightly improved the logging of :buildNsis, but this steps requires more testing. * Fixed a broken plugin, caused by 187f6c2 * Removed println in PlayerCharacter.java, that was added in #7056 * Updated dependencies in build.gradle and reporting.gradle * Upgraded pmd found several issues in source code that were corrected: * This collection could be an EnumMap * Unnecessary explicit array creation for varargs method call * Lambda expression could be written as a method reference: xxxxxx::yyyyyyy * Mistakenly collapsed imports in a previous commit, and violated :checkstyleMain * Upgraded gradlew to 8.9 Refactored :downloadJavaFXModules, :downloadJRE, :genDataList, :genProjectNsis to support "up-to-date" (kind of a caching) feature from gradle Added more logging to :buildNsis * Moved the creation of the nsisRelease folder from :genProjectNsis to :buildNsis * Fixed *.xsl templates: they were using a function str:substring-after-last from xsltsl (https://www.w3.org/TR/xslt11/). The second parameter has the name "chars", but the code was using "char". * Refactored :jpackage, and made is shorter. * :clean - delete files/folders that are generated during the build. * :clean - delete files/folders that are generated during the build: outputsheets/d20/western/htmlxml/psheet_fantasy_std.htm * Refactored :copyMasterSheets * Attempt to resolve the bug, when the JRE is packaged before JavaFX modules are downloaded. * Upgraded JDK and JavaFX to 21.0.4 * Language bundle date updates * Refactored Gradle scripts to support Mac builds (#175) * Upgraded Gradle wrapper to 8.10.2 * Updated com.github.spotbugs to 6.0.23 Updated checkstyle to 10.18.1 Updated pmd to 7.6.0 Reffactored Main.java -> use streams, now it has a "draft" branch that is executed, when the application is launched from Mac's bundle * Fixed an error in ConfigurationSettings.java detected by Checkstyle. * Corrected a logical error in ConfigurationSettings.java --------- Signed-off-by: Vest Co-authored-by: Vest --- build-gradle.xml | 3 +- build.gradle | 837 +++++++++--------- code/gradle/autobuild.gradle | 28 +- code/gradle/distribution.gradle | 56 +- code/gradle/release.gradle | 553 ++++++------ code/gradle/releaseUtils.groovy | 13 +- code/gradle/reporting.gradle | 19 +- code/pluginbuild.xml | 9 +- code/src/java/pcgen/cdom/base/CDOMObject.java | 84 +- .../cdom/facet/CategorizedAbilityFacet.java | 49 +- .../java/pcgen/cdom/facet/EquipSetFacet.java | 2 + .../java/pcgen/cdom/facet/fact/FactFacet.java | 30 +- .../pcgen/cdom/facet/fact/RegionFacet.java | 56 +- .../pcgen/cdom/facet/model/ClassFacet.java | 64 +- .../cdom/formula/PluginFunctionLibrary.java | 8 +- code/src/java/pcgen/core/Equipment.java | 2 +- code/src/java/pcgen/core/PlayerCharacter.java | 1 - .../java/pcgen/core/analysis/EqModCost.java | 2 +- .../core/chooser/AbilityChooseController.java | 2 +- .../gui2/converter/panel/RunConvertPanel.java | 4 +- .../pcgen/gui2/equip/EquipCustomPanel.java | 14 +- .../facade/EquipmentBuilderFacadeImpl.java | 18 +- .../pcgen/gui2/facade/Gui2InfoFactory.java | 18 +- .../pcgen/io/exporttoken/WeaponToken.java | 12 +- .../pcgen/persistence/lst/LstFileLoader.java | 14 +- .../persistence/lst/LstObjectFileLoader.java | 1 + .../token/AbstractPreEqualConvertPlugin.java | 1 + .../pcgen/system/ConfigurationSettings.java | 16 +- code/src/java/pcgen/system/FacadeFactory.java | 12 +- code/src/java/pcgen/system/Main.java | 49 +- .../java/pcgen/system/PluginClassLoader.java | 18 +- ...SkillPts.java => MinClassSkillPoints.java} | 2 +- .../converter/PreVisionConvertPlugin.java | 7 +- .../PreVisionInvertedConvertPlugin.java | 1 + .../plugin/exporttokens/HitDiceToken.java | 3 +- .../test/pcgen/core/prereq/PreClassTest.java | 15 - .../test/pcgen/inttest/PcgenFtlTestCase.java | 5 + .../pcgen/lang/cleaned.properties | 2 +- .../pcgen/lang/unused.properties | 2 +- .../base/solver/SetSolverManagerTest.java | 12 +- .../testsupport/TrackingVariableCache.java | 13 +- .../pcgen/cdom/helper/BridgeListenerTest.java | 20 +- .../pcgen/gui3/dialog/AboutDialogTest.java | 2 + .../gui3/preloader/PCGenPreloaderTest.java | 1 + .../system/CommandLineArgumentsTest.java | 6 +- code/standards/checkstyle.xml | 2 +- code/standards/ruleset.xml | 51 +- gradle/wrapper/gradle-wrapper.jar | Bin 43453 -> 43583 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 5 +- gradlew.bat | 2 + installers/win-installer/pcgen.nsi | 89 +- outputsheets/d20/5e/pdf/fantasy_common.xsl | 5 +- .../d20/fantasy/pdf/fantasy_common.xsl | 3 +- .../d20/fantasy_craft/pdf/fantasy_common.xsl | 3 +- .../d20/pathfinder_2/pdf/fantasy_common.xsl | 3 +- .../d20/sagaborn/pdf/fantasy_common.xsl | 3 +- .../d20/starfinder/pdf/fantasy_common.xsl | 3 +- outputsheets/killshot/pdf/killshot_common.xsl | 3 +- 59 files changed, 1166 insertions(+), 1094 deletions(-) rename code/src/java/plugin/bonustokens/{MinClassSkillPts.java => MinClassSkillPoints.java} (96%) diff --git a/build-gradle.xml b/build-gradle.xml index e324ce21c5f..ef523e76e59 100644 --- a/build-gradle.xml +++ b/build-gradle.xml @@ -1,7 +1,6 @@ diff --git a/build.gradle b/build.gradle index bf82ce93d83..a07df647a97 100644 --- a/build.gradle +++ b/build.gradle @@ -5,35 +5,37 @@ * * Developer build: gradle * Incremental dev build: gradle build - * Full build: gradle all + * Full build: gradle allTasks * Build and run all tests: gradle clean build slowtest * Run the data tests: gradle datatest * Run the character integration tests: gradle inttest */ // import Ant helper static values to differ system families + +import org.apache.commons.lang3.StringUtils import org.apache.tools.ant.filters.FixCrLfFilter import org.apache.tools.ant.taskdefs.condition.Os import org.gradle.plugins.ide.idea.model.ProjectLibrary /** * Plugins without versions are ones that are bundled with Gradle at the version - * being used (should be through gradlew. + * being used (should be through gradlew). */ plugins { id 'application' // Creating application bundles id 'build-dashboard' // Produces a build report id 'checkstyle' // Checkstyle for Java, configured further below - id "com.github.spotbugs" version '5.2.5' // Spotbugs for Java + id 'com.github.spotbugs' version '6.0.23' // Spotbugs for Java id 'java' // Core java / javac id 'maven-publish' // Publishing to Maven Central id 'pmd' // PMD for Java, configured further below id 'idea' // For IntelliJ IDEA users - id "de.undercouch.download" version '5.6.0' // Shows download percentage + id 'de.undercouch.download' version '5.6.0' // Shows download percentage id 'edu.sc.seis.launch4j' version '3.0.6' // Creates launch4j id 'com.github.ben-manes.versions' version '0.51.0' // Checks versions for plugins and dependencies - id "com.dorongold.task-tree" version '4.0.0' // Prints the task dependency tree - id 'org.openjfx.javafxplugin' version '0.1.0' // JavaFX support + id 'com.dorongold.task-tree' version '4.0.0' // Prints the task dependency tree + id 'org.openjfx.javafxplugin' version '0.1.0' // JavaFX support id 'org.beryx.runtime' version '1.13.1' // Creates custom runtimes } @@ -41,20 +43,8 @@ plugins { * Set the version and the modules we want from JavaFX (not everything) */ javafx { - version = "17" + version = "21" modules = [ 'javafx.controls', 'javafx.web', 'javafx.swing', 'javafx.fxml', 'javafx.graphics' ] - - /* - * Check if running in intellij ide. If so bundles javafx in to jar. If not only - * compiles so that runtime can add different platform javafx later. - * - * Also allows for gradle property which if true will force the single - * platforms javafx to be bundled to create local build. Can be added in - * command line with "-PlocalOnly=true." - */ - if (!System.getProperty('idea.active') && !(localOnly.toBoolean())) { - configuration = "compileOnly" - } } // Set the groupId as it helps with Maven @@ -69,7 +59,7 @@ defaultTasks 'build' // Configure Java, in particular the version to test/compile/run with java { toolchain { - languageVersion = JavaLanguageVersion.of(17) + languageVersion = JavaLanguageVersion.of(21) } } @@ -78,20 +68,20 @@ ext { // Where code gets compiled to binDir = "code/bin" - // Folder where build output is primarily stored - String buildDir = "$projectDir/build" - // Folder where exe / jar files are placed. - outputDir = "$projectDir/output" + outputDir = layout.projectDirectory.dir("output") - // Folder where the jres are downloaded for building releases - jresDir = "$projectDir/jre" + // Folder where the JREs are downloaded for building releases + jresDir = layout.projectDirectory.dir("jre") // Folder where the JavaFX mods are downloaded for building releases - modsDir = "$projectDir/mods" + modsDir = layout.projectDirectory.dir("mods") // Installers are placed here - releaseDir = "${buildDir}/release" + releaseDir = layout.projectDirectory.dir("build/release") + + // JavaFX version + javaFXVersion = "21.0.4" } application { @@ -121,7 +111,8 @@ repositories { url 'http://pc-gen.org/librepo/' allowInsecureProtocol = true } - // Use Maven plugin to reference jboss repository as well + // Use Maven plugin to reference freehep (https://java.freehep.org/) artifact repository + // TODO Which libs do we pull from here? maven { name = 'free' url = 'https://java.freehep.org/maven2' @@ -130,7 +121,10 @@ repositories { name = 'local' url = 'installers' } + // Use Maven plugin to reference JBoss artifact repository + // TODO Which libs do we pull from here? maven { + name = 'jboss' url "https://repository.jboss.org/nexus/content/repositories/thirdparty-releases/" } } @@ -184,28 +178,30 @@ sourceSets { } /* Copy 'master' outputsheets into different genre folders */ -task copyMasterSheets(type: Copy) { - outputs.upToDateWhen { false } - - include 'eqsheet_fantasy_std.htm' - include 'psheet_fantasy_std.htm' - from 'outputsheets/d20/fantasy/htmlxml' - into 'outputsheets/d20/historical/htmlxml' - - into ('../../horror/htmlxml') { - from 'outputsheets/d20/fantasy/htmlxml' - } - into ('../../sciencefiction/htmlxml') { - from 'outputsheets/d20/fantasy/htmlxml' - } - into ('../../western/htmlxml') { +tasks.register("copyMasterSheets", Copy) { + def filesToCopy = copySpec { + include 'eqsheet_fantasy_std.htm', 'psheet_fantasy_std.htm' from 'outputsheets/d20/fantasy/htmlxml' } + + into(layout.projectDirectory.dir('outputsheets/d20')) + + into('historical/htmlxml') { with filesToCopy } + into('horror/htmlxml') { with filesToCopy } + into('sciencefiction/htmlxml') { with filesToCopy } + into('western/htmlxml') { with filesToCopy } } -// TODO Possibly misnamed task -compileJava { - it.dependsOn 'copyMasterSheets' +/* Delete 'master' outputsheets from different genre folders */ +tasks.register("cleanMasterSheets", Delete) { + delete layout.projectDirectory.file("outputsheets/d20/historical/htmlxml/eqsheet_fantasy_std.htm"), + layout.projectDirectory.file("outputsheets/d20/historical/htmlxml/psheet_fantasy_std.htm"), + layout.projectDirectory.file("outputsheets/d20/horror/htmlxml/eqsheet_fantasy_std.htm"), + layout.projectDirectory.file("outputsheets/d20/horror/htmlxml/psheet_fantasy_std.htm"), + layout.projectDirectory.file("outputsheets/d20/sciencefiction/htmlxml/eqsheet_fantasy_std.htm"), + layout.projectDirectory.file("outputsheets/d20/sciencefiction/htmlxml/psheet_fantasy_std.htm"), + layout.projectDirectory.file("outputsheets/d20/western/htmlxml/eqsheet_fantasy_std.htm"), + layout.projectDirectory.file("outputsheets/d20/western/htmlxml/psheet_fantasy_std.htm") } /* @@ -221,6 +217,7 @@ compileJava { * https://docs.gradle.org/current/userguide/dependency_downgrade_and_exclude.html */ dependencies { + implementation group: 'commons-io', name: 'commons-io', version: '2.16.1' implementation group: 'commons-io', name: 'commons-io', version:'2.17.0' @@ -233,25 +230,25 @@ dependencies { { exclude group: 'xml-apis', module: 'xml-apis' } - implementation group: 'org.apache.commons', name: 'commons-collections4', version: '4.4' - implementation group: 'org.scijava', name: 'jep', version:'2.4.2' - implementation group: 'org.freemarker', name: 'freemarker', version:'2.3.33' - implementation group: 'org.jdom', name: 'jdom2', version:'2.0.6.1' + implementation group: 'org.apache.commons', name: 'commons-collections4', version: '4.5.0-M2' + implementation group: 'org.scijava', name: 'jep', version: '2.4.2' + implementation group: 'org.freemarker', name: 'freemarker', version: '2.3.33' + implementation group: 'org.jdom', name: 'jdom2', version: '2.0.6.1' implementation('xalan:xalan:2.7.3') { exclude group: 'xml-apis', module: 'xml-apis' } implementation group: 'net.sourceforge.argparse4j', name: 'argparse4j', version: '0.9.0' - implementation group: 'org.xmlunit', name: 'xmlunit-core', version:'2.10.0' - implementation group: 'org.controlsfx', name: 'controlsfx', version:'11.2.1' + implementation group: 'org.xmlunit', name: 'xmlunit-core', version: '2.10.0' + implementation group: 'org.controlsfx', name: 'controlsfx', version: '11.2.1' - implementation group: 'net.sourceforge.pcgen', name: 'PCGen-base', version:'1.0.170' + implementation group: 'net.sourceforge.pcgen', name: 'PCGen-base', version: '1.0.170' // The latest Base, but pcgen core would need refactoring to support it. //implementation group: 'net.sourceforge.pcgen', name: 'PCGen-base', version:'1.0.237' // Use this if you're working from your local PCGen Base //implementation files("../pcgen-base/PCGen-base/build/libs/PCgen-base-1.0.jar") - implementation group: 'net.sourceforge.pcgen', name: 'PCGen-Formula', version:'1.0.200' + implementation group: 'net.sourceforge.pcgen', name: 'PCGen-Formula', version: '1.0.200' // The latest Formula, but pcgen core would need refactoring to support it. //implementation group: 'net.sourceforge.pcgen', name: 'PCGen-Formula', version:'1.0.266' // Use if you're working from your local PCGen Formula @@ -268,26 +265,36 @@ dependencies { testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.11.1' testImplementation group: 'org.hamcrest', name: 'hamcrest', version: '3.0' testImplementation group: 'org.testfx', name: 'testfx-junit5', version: '4.0.18' - // TODO openjfx-monocle is no longer updated and chances are openjfx-monocle doesn't work with latest OpenJFX - // https://github.com/TestFX/Monocle/issues/79 - testImplementation group: 'org.testfx', name: 'openjfx-monocle', version: 'jdk-12.0.1+2' - constraints { - implementation('org.openjfx:javafx-base:22.0.2') - implementation('org.openjfx:javafx-controls:22.0.2') - implementation('org.openjfx:javafx-graphics:22.0.2') { - because 'Monocle uses 12.0.1+2 that does not support Mac`s ARM' - } - } + testImplementation group: 'org.testfx', name: 'openjfx-monocle', version: '21.0.2' - testImplementation group: 'org.xmlunit', name: 'xmlunit-matchers', version:'2.10.0' + testImplementation group: 'org.xmlunit', name: 'xmlunit-matchers', version: '2.10.0' spotbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.13.0' + + pmd 'net.sourceforge.pmd:pmd-ant:7.3.0' + pmd 'net.sourceforge.pmd:pmd-java:7.3.0' } // Properties to support Ant builds -ant.importBuild 'build-gradle.xml' +def antPluginTasks = [] +ant.importBuild('build-gradle.xml') { + def (projectName, taskName) = it.tokenize('.') + + if (taskName == null && projectName.startsWith("jar") && + (projectName.endsWith("plugins") || projectName.endsWith("plugin"))) { + antPluginTasks.push(projectName) + } + return it +} ant.properties['src.java.dir']="code/src/java" ant.properties['build.classes.dir']="build/classes/java/main" +// All plugins depend on compiled .class files +antPluginTasks.each { + tasks.named(it) { + dependsOn tasks.named("compileJava") + } +} + // Configuration for creating JARs from all of the plugins configure('jar-all-plugins') { group = BasePlugin.BUILD_GROUP // Or use 'build' @@ -313,7 +320,9 @@ jar { } from { - configurations.runtimeClasspath.collect { it.directory ? it : zipTree(it) } + configurations.runtimeClasspath.collect { + it.directory ? it : zipTree(it) + } } } @@ -321,9 +330,10 @@ jar { * Create a Java runtime built from Java modules */ runtime { - options = ['--compress', '2'] + options = ['--compress', 'zip-6'] // Equivalent to the old '2' value pre Java 21 modules = [ 'jdk.httpserver', + 'java.management', 'java.rmi', 'java.desktop', 'java.xml', @@ -345,42 +355,36 @@ runtime { 'javafx.graphics' ] - // We support Mac/Win/Linux x86-64, Mac/Linux aarch64, and Win x86-32 - targetPlatform('linux-x64', "$projectDir/jre/linux/jre_x64") - targetPlatform('linux-aarch64', "$projectDir/jre/linux/jre_aarch64") - targetPlatform('windows-x64', "$projectDir/jre/windows/jre_x64") - targetPlatform('windows-x32', "$projectDir/jre/windows/jre_x32") - targetPlatform('mac-x64', "$projectDir/jre/mac/jre_x64/Contents/Home") - targetPlatform('mac-aarch64', "$projectDir/jre/mac/jre_aarch64/Contents/Home") + // We support Mac/Win/Linux x86-64, Mac/Linux aarch64 + targetPlatform('linux-x64', layout.projectDirectory.dir("jre/linux/jre_x64").asFile.absolutePath) + targetPlatform('linux-aarch64', layout.projectDirectory.dir("jre/linux/jre_aarch64").asFile.absolutePath) + targetPlatform('windows-x64', layout.projectDirectory.dir("jre/windows/jre_x64").asFile.absolutePath) + targetPlatform('mac-x64', layout.projectDirectory.dir("jre/mac/jre_x64/Contents/Home").asFile.absolutePath) + targetPlatform('mac-aarch64', layout.projectDirectory.dir("jre/mac/jre_aarch64/Contents/Home").asFile.absolutePath) // Use the jpackage tool that comes with Java to build native installers - jpackage{ - installerOptions = ["--app-version", "${version.replaceAll('-SNAPSHOT', '')}", "--license-file", "${projectDir}/code/LICENSE"] + jpackage { + def licenseFile = layout.projectDirectory.file("code/LICENSE") + installerOptions = ["--app-version", "${version.replaceAll('-SNAPSHOT', '')}", "--license-file", licenseFile.asFile.absolutePath] - // Get the host architecture def hostArchitecture = System.getProperty("os.arch") - - if (Os.isFamily(Os.FAMILY_MAC)) - { - if (hostArchitecture == "x86_64" || hostArchitecture == "amd64") { - targetPlatformName = 'mac-x64' - } else if (hostArchitecture == "aarch64") { - targetPlatformName = 'mac-aarch64' - } else { - targetPlatformName = 'NOT SUPPORTED' - } + def osFamily = (Os.isFamily(Os.FAMILY_MAC) + ? "mac" + : (Os.isFamily(Os.FAMILY_UNIX) + ? "linux" + : (Os.isFamily(Os.FAMILY_WINDOWS) ? "win" : "unknown"))) + def targetPlatform = ["x86_64" : "x64", + "amd64" : "x64", + "aarch64" : "aarch64"] + // formats a string such as "mac-aarch64", or "linux-x64" + targetPlatformName = "${osFamily}-${targetPlatform.get(hostArchitecture, "NOT SUPPORTED")}" + + if (osFamily == "mac") { installerOptions += ["--mac-package-identifier", "PcGen", "--mac-package-name", "PcGen"] - resourceDir = file("${projectDir}/installers/mac-installer") + resourceDir = layout.projectDirectory.dir("installers/mac-installer").asFile } // This may seem weird but there's no LINUX family detection in the OS lib - else if (Os.isFamily(Os.FAMILY_UNIX)) { - if (hostArchitecture == "x86_64" || hostArchitecture == "amd64") { - targetPlatformName = 'linux-x64' - } else if (hostArchitecture == "aarch64") { - targetPlatformName = 'linux-aarch64' - } else { - targetPlatformName = 'NOT SUPPORTED' - } + else if (osFamily == "linux") { installerOptions += ['--linux-shortcut'] } imageName = "PcGen" @@ -388,36 +392,41 @@ runtime { } // Package up other files with the main program -tasks.jpackageImage.doLast { - copy { - includeEmptyDirs = false - from "${buildDir}/install/pcgen/" - exclude "**/*.exe" - exclude "**/*.bat" - exclude "pcgen" - exclude "**/lib/**" - if (Os.isFamily(Os.FAMILY_MAC)){ - into "build/jpackage/PcGen.app/Contents/MacOS" - } - else { - into "build/jpackage/PcGen/bin" +tasks.named("jpackageImage") { + dependsOn tasks.named("runtime") + doLast { + copy { + includeEmptyDirs = false + from layout.buildDirectory.dir("install/pcgen") + exclude "**/*.exe" + exclude "**/*.bat" + exclude "pcgen" + exclude "**/lib/**" + if (Os.isFamily(Os.FAMILY_MAC)) { + into layout.buildDirectory.dir("jpackage/PcGen.app/Contents/app") + } else { + into layout.buildDirectory.dir("jpackage/PcGen/bin") + } } - } - // Mac specific - if (Os.isFamily(Os.FAMILY_MAC)){ - copy { - from "${projectDir}/installers/mac-installer" - include "MacDirLauncher" - fileMode 0755 - into "${buildDir}/jpackage/PcGen.app/Contents/MacOS" + // Mac OS X specific config for jpackage + if (Os.isFamily(Os.FAMILY_MAC)) { + copy { + from layout.projectDirectory.dir("installers/mac-installer") + include "MacDirLauncher" + fileMode 0755 + into layout.buildDirectory.dir("jpackage/PcGen.app/Contents/MacOS") + } + ant.replace(file: layout.buildDirectory.file("jpackage/PcGen.app/Contents/Info.plist").get(), + token: "CFBundleExecutable\n PcGen", + value: "CFBundleExecutable\n MacDirLauncher") } - ant.replace(file: "${buildDir}/jpackage/PcGen.app/Contents/Info.plist", token: "CFBundleExecutable\n PcGen", value: "CFBundleExecutable\n MacDirLauncher") } } // Create the Data Convertor JAR -task converterJar(type: Jar, dependsOn: jar) { +tasks.register("converterJar", Jar) { + dependsOn jar manifest { attributes 'Implementation-Title': 'PCGen Data Converter', 'Implementation-Version': archiveVersion, 'Main-Class': 'pcgen.gui2.converter.PCGenDataConvert', 'Class-Path': 'pcgen.jar' + classpath @@ -436,29 +445,44 @@ artifacts { archives converterJar } -task copyToLibs(type: Copy, dependsOn:[startScripts,distTar,distZip,installDist]) { +tasks.register("copyToLibs", Copy) { + dependsOn startScripts, distTar, distZip, installDist mustRunAfter createExe - into "$buildDir/libs" + + doFirst { + println("IN copyToLibs") + } + + into layout.buildDirectory.dir("libs") from configurations.runtimeClasspath } -task copyToOutput(type: Copy, dependsOn: [createExe, copyToLibs, jar, converterJar]) { - from "$buildDir/libs/pcgen-${version}.jar" - from "$buildDir/libs/pcgen-${version}-batch-convert.jar" - from "$buildDir/launch4j/pcgen.exe" - from "$projectDir/code/pcgen.bat" - from("$projectDir/code/pcgen.sh") { +tasks.register("copyToOutput", Copy) { + dependsOn copyToLibs, createExe, converterJar, jar + + doFirst { + println("IN copyToOutput") + } + + from layout.buildDirectory.file("libs/pcgen-${version}.jar"), + layout.buildDirectory.file("libs/pcgen-${version}-batch-convert.jar"), + layout.buildDirectory.file("launch4j/pcgen.exe"), + layout.projectDirectory.file("code/pcgen.bat") + from(layout.projectDirectory.file("code/pcgen.sh")) { filter(FixCrLfFilter, eol:FixCrLfFilter.CrLf.newInstance("lf")) - fileMode 0755 + filePermissions { + unix(0755) + } } into outputDir rename "(.+)-$version(.+)", '$1$2' } -task qbuild(type: Copy, dependsOn: [copyToOutput, jar]) { - description="Copy the executable file into 'output' to create a working environment" - from "$buildDir/libs/pcgen-${version}.jar" +tasks.register("qbuild", Copy) { + dependsOn copyToOutput, jar + description = "Copy the executable file into 'output' to create a working environment" + from layout.buildDirectory.file("libs/pcgen-${version}.jar") into outputDir @@ -466,301 +490,279 @@ task qbuild(type: Copy, dependsOn: [copyToOutput, jar]) { mustRunAfter clean } -task cleanOutput(type: Delete) { - description="Clean up things copied to the output folder by the build" +tasks.register("cleanOutput", Delete) { + description = "Clean up things copied to the output folder by the build" delete outputDir } // TODO - Hook this into a clean phase properly -task cleanJre(type: Delete) { - description="Clean up things copied to the jre folder by the build" +tasks.register("cleanJre", Delete) { + description = "Clean up things copied to the jre folder by the build" delete jresDir } // TODO - Hook this into a clean phase properly -task cleanMods(type: Delete) { +tasks.register("cleanMods", Delete) { description="Clean up things copied to the mods folder by the build" delete modsDir } // Alias tasks tasks.register("buildonly") { - dependsOn 'copyToOutput' + doFirst { + println("IN buildonly") + } + dependsOn copyToOutput } tasks.register("quickbuild") { - dependsOn 'copyToOutput', 'test' + dependsOn copyToOutput, test } -build { - it.dependsOn 'copyToOutput' -} +tasks.named("build") { + // TODO reverts the commit f00f99c, because we don't have to generate all artifacts during the build + // dependsOn copyToOutput -// TODO This clean is not as nuclear as it perhaps should be. -// For jlink and friends to work when you get odd Zip errors -// you will also need to clean out output/ bin/ jre/ and mods/ -clean { - it.dependsOn 'clean-plugins' - it.dependsOn 'cleanOutput' + // Ensures that clean is never run after build and when clean is called it is + // run before build so it doesn't delete the new build folder. + mustRunAfter clean } -// Ensures that clean is never run after build and when clean is called it is -// run before build so it doesn't delete the new build folder. -build.mustRunAfter clean - -task downloadJRE { - def major = 17 - def archs = ['x64', 'x32', 'aarch64'] +tasks.register("downloadJRE") { + def major = 21 + def archs = ['x64', 'aarch64'] def osList = ['windows', 'mac', 'linux'] - def extension = 'zip' - println("Downloading JDKS for use in creating the runtime bundles.") + doLast { + println("Downloading JDKs for use in creating the runtime bundles.") + + osList.each { + def os = "${it}" + def extension = (os == "windows" ? "zip" : "tar.gz") + + archs.each { + def arch = "${it}" + // TODO We don't currently support Windows aarch64, but once Eclipse Adoptium does we should remove this line + if (arch == "aarch64" && os == "windows") return + + def url = "https://api.adoptium.net/v3/binary/latest/${major}/ga/${os}/${arch}/jdk/hotspot/normal/eclipse" + def jreDownloadDest = layout.projectDirectory.file("jre/${os}/jre_${arch}.${extension}") + def jreDir = layout.projectDirectory.dir("jre/${os}/jre_${arch}").asFile + def jreRelease = (os == "mac" + ? layout.projectDirectory.dir("jre/${os}/jre_${arch}/Contents/Home/release").asFile + : layout.projectDirectory.dir("jre/${os}/jre_${arch}/release").asFile) + def outputDir = layout.projectDirectory.dir("jre/${os}/jre_${arch}") + def shouldDownloadJDK = true; + + try { + if (jreRelease.exists()) { + def props = new Properties() + jreRelease.withInputStream { props.load(it) } + def javaVersion = StringUtils.strip((String)props.get("JAVA_VERSION"), "\"") + shouldDownloadJDK = !javaVersion.startsWith(major.toString()) + println "JDK ${major} ${arch.padLeft(7)} for ${os.padLeft(7)} found with version ${javaVersion} at ${jreDir}, ${shouldDownloadJDK ? "starting" : "skipping"} downloading" + } + } catch (e) { + throw new GradleException("There was an error in :downloadJRE", e) + } + + if (!shouldDownloadJDK) { + return + } else if (jreDir.exists()) { + println "Delete the previously downloaded JDK at ${jreDir} as outdated. JavaFX modules will be deleted from jdkDir/jmods." + project.delete(jreDir) + } - osList.each{ - def os = "${it}" - if(os != "windows") { - extension = 'tar.gz' - } - archs.each { - def arch = "${it}" - if (arch == "x32" && os != "windows") return - if (arch == "aarch64" && os == "windows") return - - def url = "https://api.adoptium.net/v3/binary/latest/${major}/ga/${os}/${arch}/jdk/hotspot/normal/eclipse" - def jreDir = new File("${projectDir}/jre/${os}/jre_${arch}") - if(!jreDir.exists()){ println("Downloading Java ${major} ${arch} for ${os} from ${url}") download.run { src url - dest new File("${projectDir}/jre/${os}/", "jre_${arch}.${extension}") + dest jreDownloadDest.asFile.absolutePath overwrite false } - // Now unzip them - if(extension == "zip"){ - fileTree(dir: "${projectDir}/jre/${os}/").include("*.${extension}").each { simLib -> - copy { - println "Unzip $simLib.name" - def zipFile = file("${projectDir}/jre/${os}/${simLib.name}") - def outputDir = "${projectDir}/jre/${os}/jre_${arch}/" - - from zipTree(zipFile) - into outputDir - eachFile { fcd -> - def relPath = fcd.relativePath - if(relPath.lastName.startsWith("jdk-") && fcd.isDirectory()) { - fcd.exclude() + layout.projectDirectory.dir("jre/${os}") + .asFileTree + .matching { include "*.${extension}" } + .each { simLib -> + def archFile = layout.projectDirectory.file("jre/${os}/${simLib.name}") + + copy { + println "* Unpack $simLib.name to ${outputDir}" + + if (extension == "zip") { + from zipTree(archFile) } else { - def segments = relPath.segments - fcd.relativePath = new RelativePath( !fcd.isDirectory() ,(segments[1..-1]) as String[] ) + from tarTree(archFile) } - } - } - new File("${projectDir}/jre/${os}/${simLib.name}").delete() - } - } else { - fileTree(dir: "${projectDir}/jre/${os}/").include("*.${extension}").each { simLib -> - copy { - println "Unzip $simLib.name" - def name = simLib.name - '.$extension' - def zipFile = file("${projectDir}/jre/${os}/${simLib.name}") - def outputDir = "${projectDir}/jre/${os}/jre_${arch}/" - - from tarTree(zipFile) - into outputDir - eachFile { fcd -> - def relPath = fcd.relativePath - if(relPath.lastName.startsWith("jdk-") && fcd.isDirectory()) { - fcd.exclude() - } else { + into outputDir + eachFile { FileCopyDetails fcd -> + def relPath = fcd.relativePath def segments = relPath.segments - fcd.relativePath = new RelativePath( !fcd.isDirectory() ,(segments[1..-1]) as String[] ) + fcd.relativePath = new RelativePath(!fcd.isDirectory(), segments[1..-1] as String[]) } } + + project.delete(archFile) } - new File("${projectDir}/jre/${os}/${simLib.name}").delete() - } - } - file("${projectDir}/jre/${os}/jre_${arch}").list().each { f-> - if(f.startsWith("jdk")) { - file("${projectDir}/jre/${os}/jre_${arch}/"+f).deleteDir() + + file("${projectDir}/jre/${os}/jre_${arch}").list().each { f -> + if (f.startsWith("jdk")) { + file("${projectDir}/jre/${os}/jre_${arch}/" + f).deleteDir() } } } - else { - println("Java ${major} ${arch} for ${os} already exists at ${jreDir}") - } } } } -task downloadJavaFXModules(dependsOn: downloadJRE) { - // We support Windows/Mac/Linux - x64, Mac/Linux - aarch64, and Windows x86 (32-bit) - def major = "17.0.8" - def archs = ['x64', 'x86', 'aarch64'] - def osList = ["windows", "mac", "linux"] - - println("Downloading JavaFX modules (.mods) for use in the runtime bundles.") - // Downloads javafx .mods for custom runtime image. All platforms downloaded - osList.each { - def os = "${it}" +tasks.register("downloadJavaFXModules") { + mustRunAfter downloadJRE - archs.each { - def arch = "$it" + // We support Windows/Mac/Linux - x64, and Mac/Linux - aarch64 + // (JavaFX doesn't support Linux/aarch64 in 21 LTS, use 21.0.1 instead) + def major = project.ext.javaFXVersion + def archs = ['x64', 'aarch64'] + def osList = ["windows", "mac", "linux"] - // build the architecture part of the download filename string - def archAppend - if (arch == "x86") { - // Only Windows for x86-32 bit - if (os == "windows") { - archAppend = "-x86" - } else { - return - } - } else if (arch == "x64") { - archAppend = "-x64" - } else if (arch == "aarch64") { - // Only Linux and Mac for aarch64 - if (os != "windows") { + inputs.property("major", major) + + doLast { + println("Downloading JavaFX modules (.mods) for use in the runtime bundles.") + // Downloads javafx .mods for custom runtime image. All platforms downloaded + osList.each { os -> + // Build the os part of the filename string. Gluon renamed the mac package to osx + def osPackage = (os == "mac") ? "osx" : os + + archs.each { arch -> + // build the architecture part of the download filename string + def archAppend + if (arch == "x64") { + archAppend = "-x64" + } else if (arch == "aarch64" && os != "windows") { archAppend = "-aarch64" + if (os == "linux") { + major = "21.0.1" // TODO other versions don't supply aarch64 for Linux, use 21.0.1 instead + } } else { return } - } else { - archAppend = "-UNSUPPORTED-ARCHITECTURE" - } - - // Build the os part of the filename string. - // Gluon renamed the mac package to osx - def osPackage = os - if (os == "mac") { - osPackage = "osx" - } - // URLs look like this: https://download2.gluonhq.com/openjfx/17.0.6/openjfx-17.0.6_osx-aarch64_bin-jmods.zip - def url = "https://download2.gluonhq.com/openjfx/${major}/openjfx-${major}_${osPackage}${archAppend}_bin-jmods.zip" + // URLs look like this: https://download2.gluonhq.com/openjfx/21.0.2/openjfx-21.0.2_osx-aarch64_bin-jmods.zip + def url = "https://download2.gluonhq.com/openjfx/${major}/openjfx-${major}_${osPackage}${archAppend}_bin-jmods.zip" + def jmodsZip = layout.projectDirectory.file("jre/${os}/jmods${arch}.zip") - def jmodsZip = new File("${projectDir}/jre/${os}/jmods${arch}.zip") - // If we don't already have the jmods, download them and unzip them - // to the correct place. - if (!jmodsZip.exists()) { - println("Downloading Javafx mods ${major} ${arch} for ${os} from ${url}") - download.run { - src url - dest new File("${projectDir}/jre/${os}/", "jmods${arch}.zip") - overwrite false - } + // If we don't already have the jmods, download them and unzip them to the correct place. + if (!jmodsZip.asFile.exists()) { + println("Downloading JavaFX mods ${major} ${arch} for ${os} from ${url} to ${projectDir}/jre/${os}/") - copy { - def zipFile = file("${projectDir}/jre/${os}/jmods${arch}.zip") - def outputDir = "${projectDir}/jre/${os}/jre_${arch}/jmods" - if (os == "mac") - { - outputDir = "${projectDir}/jre/${os}/jre_${arch}/Contents/Home/jmods" - } - else if(os == "windows" && arch == "x86") - { - outputDir = "${projectDir}/jre/${os}/jre_x32/jmods" + download.run { + src url + dest jmodsZip + overwrite false } - println "Unzipping ${zipFile} to ${outputDir}" - from zipTree(zipFile) - into outputDir - eachFile { fcd -> - def relPath = fcd.relativePath - def segments = relPath.segments - fcd.relativePath = new RelativePath(!fcd.isDirectory(), (segments[1..-1]) as String[]) + + copy { + def zipFile = jmodsZip + def outputDir = (os == "mac") + ? "${projectDir}/jre/${os}/jre_${arch}/Contents/Home/jmods" + : "${projectDir}/jre/${os}/jre_${arch}/jmods" + + println "Unzipping ${zipFile} to ${outputDir}" + from zipTree(zipFile) + into outputDir + eachFile { fcd -> + def relPath = fcd.relativePath + def segments = relPath.segments + fcd.relativePath = new RelativePath(!fcd.isDirectory(), (segments[1..-1]) as String[]) + } + includeEmptyDirs = false } + } else { + println("* ${jmodsZip} already exists") } - } else { - println("${jmodsZip} already exists") } } } +} - // TODO extract this into its own function - // Downloads javafx sdk for local platform. Used for running tests. - println("Downloading JavaFX SDK for use in local testing.") - def sdkDir = new File("${projectDir}/mods") - if (!sdkDir.exists() || sdkDir.list().length == 0) { - - // TODO I'll confess much of this seems redundant, but I'm not touching it - def os="" - if (Os.isFamily(Os.FAMILY_WINDOWS)) { - os = "windows" - } else if (Os.isFamily(Os.FAMILY_MAC)) { - os = "mac" - } else { - os = "linux" - } - - def hostArchitecture = System.getProperty("os.arch") +tasks.register("downloadJavaFXLocal", Download) { + description = "Downloads the JavaFX modules for the current platform to the 'mods' directory for local testing" + def supportedOS = [(Os.FAMILY_WINDOWS): "windows", + (Os.FAMILY_MAC) : "osx", + (Os.FAMILY_UNIX) : "linux"] + def osName = System.getProperty("os.name").toLowerCase(Locale.ENGLISH) + def currentOS = supportedOS + .entrySet() + .stream() + .filter(i -> Os.isFamily(i.key)) + .map { it.value } + .findFirst() + .orElseThrow { new GradleException("Unsupported OS detected: '${osName}'. Supported families are: ${Os.FAMILY_WINDOWS}, ${Os.FAMILY_MAC} and ${Os.FAMILY_UNIX}") } - // We default to x86_64 as default - def archAppend= "" - if (hostArchitecture == "x86_64" || hostArchitecture == "amd64") { - archAppend= "-x64" - } else if (hostArchitecture == "i386") { - archAppend= "-x86" // TODO Not sure if this is supported. - } else if (hostArchitecture == "aarch64") { - archAppend= "-aarch64" - } else { - archAppend = "-UNSUPPORTED-ARCH" - } + def supportedArch = ["x86_64" : "-x64", + "amd64" : "-x64", + "aarch64": "-aarch64"]; - println("Host arch is ${hostArchitecture}") - - // Gluon renamed the mac package so we deal with that but leave the - // the rest of the naming / packing as 'mac'. - def osPackage = os - if (os == "mac") { - osPackage = "osx" - } + def hostArchitecture = System.getProperty("os.arch") + def archAppend = supportedArch[hostArchitecture] + if (archAppend == null) { + throw new GradleException("Unsupported arch detected: '${hostArchitecture}'. Supported architectures are: x86_64, amd64 and aarch64") + } - def url = "https://download2.gluonhq.com/openjfx/${major}/openjfx-${major}_${osPackage}${archAppend}_bin-sdk.zip" + doFirst { + println("Downloading JavaFX SDK for use in local testing.") + } - println("Downloading JavaFX SDK for ${os} from ${url}") + def fileName = "openjfx-${project.ext.javaFXVersion}_${currentOS}${archAppend}_bin-sdk.zip" - download.run { - src url - dest new File("${projectDir}/mods", "javaFXSdk-${os}.zip") - overwrite false - } + src "https://download2.gluonhq.com/openjfx/${project.ext.javaFXVersion}/${fileName}" + dest layout.projectDirectory.file("mods/${fileName}") + overwrite false + useETag true + tempAndMove true +} - copy { +tasks.register("extractJavaFXLocal", Copy) { + description = "Extracts the JavaFX modules for the current platform to the 'mods' directory for local testing" + dependsOn downloadJavaFXLocal - def zipFile = file("${projectDir}/mods/javaFXSdk-${os}.zip") - def outputDir = "${projectDir}/mods" - println "Unzipping ${zipFile} to ${outputDir}" + doFirst { + println "Extracting JavaFX SDK for use in local testing." + } - from zipTree(zipFile) - into outputDir - eachFile { fcd -> - def relPath = fcd.relativePath - def segments = relPath.segments - fcd.relativePath = new RelativePath(!fcd.isDirectory(), (segments[1..-1]) as String[]) - } - } - } else { - println("JavaFX SDK already exists at ${sdkDir}") + from zipTree(downloadJavaFXLocal.dest) + into layout.projectDirectory.dir("mods") + eachFile { fcd -> + def relPath = fcd.relativePath + def segments = relPath.segments + fcd.relativePath = new RelativePath(!fcd.isDirectory(), (segments[1..-1]) as String[]) } + includeEmptyDirs = false } -compileJava.dependsOn(downloadJavaFXModules) -tasks.runtime.dependsOn(downloadJavaFXModules) +tasks.named("compileJava") { + dependsOn copyMasterSheets +} + +tasks.named("jre") { + dependsOn downloadJRE, downloadJavaFXModules +} -test { +tasks.named("test", Test) { exclude 'pcgen/testsupport/**' useJUnitPlatform() } -task itest(type: Test, dependsOn: [jar]) { +tasks.register("itest", Test) { + dependsOn jar useJUnitPlatform() testClassesDirs = sourceSets.itest.output.classesDirs classpath = sourceSets.itest.runtimeClasspath systemProperties['jar.path'] = jar.getArchiveFile().get().getAsFile() } -task slowtest(type: Test, dependsOn: ['jar', 'itest']) { +tasks.register("slowtest", Test) { + dependsOn jar, itest useJUnitPlatform() testClassesDirs = sourceSets.slowtest.output.classesDirs classpath = sourceSets.slowtest.runtimeClasspath @@ -771,68 +773,67 @@ task slowtest(type: Test, dependsOn: ['jar', 'itest']) { exclude 'pcgen/core/AllJUnitTests.class' } -task datatest(type: Test, dependsOn: 'jar') { +tasks.register("datatest", Test) { + dependsOn jar testClassesDirs = sourceSets.slowtest.output.classesDirs classpath = sourceSets.slowtest.runtimeClasspath include 'pcgen/persistence/lst/DataTest.class' include 'pcgen/persistence/lst/DataLoadTest.class' } -task inttest(type: Test, dependsOn: 'jar') { +tasks.register("inttest", Test) { + dependsOn jar testClassesDirs = sourceSets.slowtest.output.classesDirs classpath = sourceSets.slowtest.runtimeClasspath forkEvery = 1 include 'pcgen/inttest/**/*Test.class' } -task sfinttest(type: Test, dependsOn: 'jar') { +tasks.register("sfinttest", Test) { + dependsOn jar testClassesDirs = sourceSets.slowtest.output.classesDirs classpath = sourceSets.slowtest.runtimeClasspath forkEvery = 1 include 'pcgen/inttest/game_starfinder/*Test.class' } -task pfinttest(type: Test, dependsOn: 'jar') { +tasks.register("pfinttest", Test) { + dependsOn jar testClassesDirs = sourceSets.slowtest.output.classesDirs classpath = sourceSets.slowtest.runtimeClasspath forkEvery = 1 include 'pcgen/inttest/game_pathfinder/*Test.class' } -task rsrdinttest(type: Test, dependsOn: 'jar') { +tasks.register("rsrdinttest", Test) { + dependsOn jar testClassesDirs = sourceSets.slowtest.output.classesDirs classpath = sourceSets.slowtest.runtimeClasspath forkEvery = 1 include 'pcgen/inttest/game_35e/*Test.class' } -task srdinttest(type: Test, dependsOn: 'jar') { +tasks.register("srdinttest", Test) { + dependsOn jar testClassesDirs = sourceSets.slowtest.output.classesDirs classpath = sourceSets.slowtest.runtimeClasspath forkEvery = 1 include 'pcgen/inttest/game_3e/*Test.class' } -task msrdinttest(type: Test, dependsOn: 'jar') { +tasks.register("msrdinttest", Test) { + dependsOn jar testClassesDirs = sourceSets.slowtest.output.classesDirs classpath = sourceSets.slowtest.runtimeClasspath forkEvery = 1 include 'pcgen/inttest/game_modern/*Test.class' } -// Do the lot! TODO reenable slowtest -task all(dependsOn: ['build', 'slowtest', 'javadoc', 'buildNsis', 'allReports']) { -//task all(dependsOn: ['build', 'javadoc', 'buildNsis', 'allReports']) { -} - allprojects { - tasks.withType(JavaCompile).configureEach { - options.fork = true - } - tasks.withType(Javadoc) { + tasks.withType(Javadoc).configureEach { options.addBooleanOption('Xdoclint:none', true) } - tasks.withType(Test) { + tasks.withType(Test).configureEach { maxHeapSize = "1024m" maxParallelForks = 1 enableAssertions = true @@ -848,59 +849,65 @@ allprojects { '-Dprism.verbose=true', '-Djavafx.macosx.embedded=true', - "--module-path", "${projectDir}/mods/lib/", - "--add-modules", "javafx.controls,javafx.web,javafx.swing,javafx.fxml", + "--module-path", layout.projectDirectory.dir("mods/lib"), + "--add-modules", "javafx.controls,javafx.web,javafx.swing,javafx.fxml,javafx.graphics", // Needed to fix issue with testfx test crashing due to issue with modularity of whole program. Slightly related issue. https://github.com/TestFX/TestFX/issues/638 '--add-exports', 'javafx.graphics/com.sun.javafx.application=ALL-UNNAMED', + // Next two needed to support monocle testing + '--add-exports', 'javafx.graphics/com.sun.javafx.util=ALL-UNNAMED', + '--add-exports', 'javafx.base/com.sun.javafx.logging=ALL-UNNAMED', '--add-opens', 'javafx.graphics/com.sun.glass.ui=ALL-UNNAMED', ] } - tasks.withType(JavaCompile) { - doFirst { + tasks.withType(JavaCompile).configureEach { + dependsOn extractJavaFXLocal + options.fork = true + doFirst { if (name.toLowerCase().contains("test")) { - options.compilerArgs << "--module-path" << "${projectDir}/mods/lib/" - options.compilerArgs << "--add-modules" << "javafx.controls,javafx.web,javafx.swing,javafx.fxml" + options.compilerArgs << "--module-path" << layout.projectDirectory.dir("mods/lib").asFile.absolutePath + //options.compilerArgs << "--add-modules" << "javafx.controls,javafx.web,javafx.swing,javafx.fxml" // Not sure why no javafx.graphics here + options.compilerArgs << "--add-modules" << "javafx.controls,javafx.web,javafx.swing,javafx.fxml,javafx.graphics" } println "Args for for $name are $options.allCompilerArgs" } } // https://youtrack.jetbrains.com/issue/KT-46165 - tasks.withType(org.gradle.jvm.tasks.Jar) { + tasks.withType(Jar).configureEach { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } - tasks.withType(JavaExec) { + tasks.withType(JavaExec).configureEach { maxHeapSize = "2048m" } } -dependencyUpdates { - revision='release' -} +tasks.named("dependencyUpdates") { + revision = 'release' -dependencyUpdates.resolutionStrategy { - componentSelection { rules -> - rules.all { ComponentSelection selection -> - if (['atlassian'].any { qualifier -> + resolutionStrategy { + componentSelection { rules -> + rules.all { ComponentSelection selection -> + if (['atlassian'].any { qualifier -> selection.candidate.version ==~ /(?i).*[.-]${qualifier}[.\d-]*/ }) { - selection.reject('unofficial release') - } - boolean rejected = ['alpha', 'beta', 'rc', 'cr', 'm', 'preview', 'b', 'ea'].any { qualifier -> - selection.candidate.version ==~ /(?i).*[.-]$qualifier[.\d-+]*/ - } - if (rejected) { - selection.reject('Release candidate') - } - if (selection.candidate.version == '2.0.2' && selection.candidate.name == 'xml-apis') { - selection.reject('older than current') - } - if (selection.candidate.version == '2.24' && selection.candidate.name == 'jep') { - selection.reject('older than current') - } - if (selection.candidate.version == '1.8.0_20' && selection.candidate.name == 'openjfx-monocle') { - selection.reject('older than current') + selection.reject('unofficial release') + } + boolean rejected = ['alpha', 'beta', 'rc', 'cr', 'm', 'preview', 'b', 'ea'].any { qualifier -> + selection.candidate.version ==~ /(?i).*[.-]$qualifier[.\d-+]*/ + } + if (rejected) { + selection.reject('Release candidate') + } + if (selection.candidate.version == '2.0.2' && selection.candidate.name == 'xml-apis') { + selection.reject('older than current') + } + if (selection.candidate.version == '2.24' && selection.candidate.name == 'jep') { + selection.reject('older than current') + } + if (selection.candidate.version == '1.8.0_20' && selection.candidate.name == 'openjfx-monocle') { + selection.reject('older than current') + } } } } @@ -909,14 +916,13 @@ dependencyUpdates.resolutionStrategy { // Support for creating IntelliJ IDEA files. idea { project { - def javafxLib = file("$projectDir/mods/lib") - def files = javafxLib.listFiles( { _, name -> name.contains(".jar") } as FilenameFilter) - .toList() // no direct way to convert from Array to Set - .toSet() + def javafxLib = layout.projectDirectory.dir("mods/lib") + .asFileTree.matching { include "*.jar" } + .files def projectLibrary = new ProjectLibrary() projectLibrary.name = "lib" - projectLibrary.classes += files + projectLibrary.classes += javafxLib projectLibraries += [ projectLibrary ] } @@ -934,12 +940,41 @@ idea { } // Use the gradle wrapper -wrapper { +tasks.named("wrapper") { distributionType = Wrapper.DistributionType.ALL } // Bring in the rest of the gradle build config -apply from: 'code/gradle/autobuild.gradle' apply from: 'code/gradle/distribution.gradle' +apply from: 'code/gradle/autobuild.gradle' // depends on distribution.gradle apply from: 'code/gradle/reporting.gradle' apply from: 'code/gradle/release.gradle' + +tasks.register("allTasks") { + dependsOn build, slowtest, javadoc, buildNsis, allReports + description = "Runs tasks build, slowtest, javadoc, buildNsis and allReports" +} + +// TODO This clean is not as nuclear as it perhaps should be. +// For jlink and friends to work when you get odd Zip errors +// you will also need to clean out output/ bin/ +// This task is in the end, because other scripts contribute to the building process +tasks.named("clean") { + dependsOn tasks.named("clean-plugins"), cleanOutput, cleanJre, cleanMods, cleanNsis, cleanMasterSheets + + doLast { + // Delete a file generated by pluginbuild.xml + project.delete(layout.projectDirectory.file("code/manifest")) + + // Delete plugin folders + project.delete( + layout.projectDirectory.dir("plugins/bonusplugins"), + layout.projectDirectory.dir("plugins/converterplugins"), + layout.projectDirectory.dir("plugins/jepplugins"), + layout.projectDirectory.dir("plugins/lstplugins"), + layout.projectDirectory.dir("plugins/outputplugins"), + layout.projectDirectory.dir("plugins/preplugins"), + layout.projectDirectory.dir("plugins/systemlstplugins") + ) + } +} diff --git a/code/gradle/autobuild.gradle b/code/gradle/autobuild.gradle index 94a759a029a..cf58f8f7107 100644 --- a/code/gradle/autobuild.gradle +++ b/code/gradle/autobuild.gradle @@ -9,40 +9,42 @@ import java.time.LocalDateTime */ ext { if (System.env.BUILD_NUMBER) { - destAutobuildDir = '/home/pcgen1/public_html/autobuilds/' + destAutobuildDir = file('/home/pcgen1/public_html/autobuilds/') } else { - destAutobuildDir = "${buildDir}/autobuilds/" + destAutobuildDir = layout.buildDirectory.dir("autobuilds").get() } buildTimestamp = LocalDateTime.now(Clock.systemUTC()) } -task copyDocs(type: Sync) { +tasks.register("copyDocs", Sync) { from 'docs' - into "${destAutobuildDir}/pcgen-docs/" + into destAutobuildDir.dir("pcgen-docs/") } -task copyDist(type: Sync, dependsOn: 'buildDist') { - from "${buildDir}/distributions" - into "${destAutobuildDir}/downloads/" +tasks.register("copyDist", Sync) { + dependsOn buildDist + from layout.buildDirectory.dir("distributions") + into destAutobuildDir.dir("downloads") } -task copySite(type: Copy) { +tasks.register("copySite", Copy) { // Ensure this always runs - we don't want an incorrect date outputs.upToDateWhen { false } - from "${projectDir}/code/gradle/site" - into "${destAutobuildDir}" + from layout.projectDirectory.dir("code/gradle/site") + into destAutobuildDir expand(copyright: Calendar.instance.get(Calendar.YEAR), version: version, timestamp: buildTimestamp, simpleVersion: version.replaceAll('-SNAPSHOT', '').replaceAll(/\./, '')) } -task copyInstaller(type: Copy) { +tasks.register("copyInstaller", Copy) { // Ensure this always runs - we don't want an outdated installer outputs.upToDateWhen { false } from "${releaseDir}" - into "${destAutobuildDir}/downloads/" + into destAutobuildDir.dir("downloads") } // The Main Task -task deployAutobuild (dependsOn: ['copyDocs', 'copyDist', 'copySite', 'copyInstaller']) { +tasks.register("deployAutobuild") { + dependsOn copyDocs, copyDist, copySite, copyInstaller } diff --git a/code/gradle/distribution.gradle b/code/gradle/distribution.gradle index 7e9483b7e8d..182e5ea4ea4 100644 --- a/code/gradle/distribution.gradle +++ b/code/gradle/distribution.gradle @@ -41,7 +41,7 @@ ext { } programDistsImage = copySpec { - from("$buildDir/launch4j") { + from(layout.buildDirectory.dir("launch4j")) { include 'pcgen.exe' } } @@ -55,7 +55,7 @@ ext { from('code') { include 'LICENSE' - eachFile{ file -> + eachFile { file -> if(file.getName().endsWith(".sh")) { file.setMode(0755) } @@ -64,7 +64,7 @@ ext { } libsDistsImage = copySpec { - from("$buildDir/libs") { + from(layout.buildDirectory.dir("libs")) { into 'libs' exclude 'pcgen-*.jar' } @@ -83,7 +83,7 @@ ext { } } -application{ +application { // Output the startScripts (.bat and .sh) in main distribute folder rather than .bin executableDir = "" applicationDefaultJvmArgs = ["-Dsun.java2d.d3d=false"] @@ -96,33 +96,39 @@ application{ applicationDistribution.with(programDistsImage) } -run { +tasks.named("run") { + dependsOn assemble, extractJavaFXLocal // Required to fixed incorrectly added "--module-path" and adds correct modules. doFirst { - jvmArgs = ["-ea", // -ea enables assertions "--enable-preview", // enable Java preview features - "--module-path", - "${projectDir}/mods/lib/", - "--add-modules", "javafx.controls,javafx.web,javafx.swing,javafx.fxml" + "--module-path", layout.projectDirectory.dir("mods/lib").asFile.absolutePath, + "--add-modules", "javafx.controls,javafx.web,javafx.swing,javafx.fxml,javafx.graphics" ] - } } -tasks.run.dependsOn(assemble) -tasks.run.dependsOn(downloadJavaFXModules) -installDist.doLast{ - delete { - delete fileTree("${buildDir}/install/pcgen/lib") { - include 'javafx-*' +tasks.named("installDist") { + dependsOn createExe + doLast{ + delete { + delete fileTree(layout.buildDirectory.dir("install/pcgen/lib")) { + include 'javafx-*' + } } } } -[distZip, distTar, installDist]*.dependsOn createExe +tasks.named("distTar") { + dependsOn createExe +} + +tasks.named("distZip") { + dependsOn createExe +} -task testZip(type: Zip, dependsOn: ['converterJar', 'copyToLibs', 'copyToOutput']) { +tasks.register("testZip", Zip) { + dependsOn converterJar, copyToLibs, copyToOutput archiveClassifier.set('test') into(zipRootFolder) { with dataDistsImage @@ -134,7 +140,8 @@ task testZip(type: Zip, dependsOn: ['converterJar', 'copyToLibs', 'copyToOutput' } } -task dataZip(type: Zip, dependsOn: ['copyMasterSheets']) { +tasks.register("dataZip", Zip) { + dependsOn copyMasterSheets archiveClassifier.set('data') into(zipRootFolder) { with dataDistsImage @@ -142,7 +149,7 @@ task dataZip(type: Zip, dependsOn: ['copyMasterSheets']) { } } -task docsZip(type: Zip) { +tasks.register("docsZip", Zip) { archiveClassifier.set('docs') into(zipRootFolder) { with docsDistsImage @@ -150,7 +157,8 @@ task docsZip(type: Zip) { } } -task programZip(type: Zip, dependsOn: ['converterJar', 'createExe']) { +tasks.register("programZip", Zip) { + dependsOn converterJar, createExe archiveClassifier.set('program') into(zipRootFolder) { with programDistsImage @@ -159,7 +167,8 @@ task programZip(type: Zip, dependsOn: ['converterJar', 'createExe']) { } } -task libsZip(type: Zip, dependsOn: 'copyToLibs') { +tasks.register("libsZip", Zip) { + dependsOn copyToLibs archiveClassifier.set('libs') into(zipRootFolder) { with libsDistsImage @@ -167,6 +176,7 @@ task libsZip(type: Zip, dependsOn: 'copyToLibs') { } } -task buildDist(dependsOn: ['dataZip', 'docsZip', 'programZip', 'libsZip', 'runtimeZip']) { +tasks.register("buildDist") { + dependsOn dataZip, docsZip, programZip, libsZip, runtimeZip description = "Build the five zip files (docs, data, program, libs and full) which comprise the autobuild distribution." } diff --git a/code/gradle/release.gradle b/code/gradle/release.gradle index 9596aeac36d..768dc842053 100644 --- a/code/gradle/release.gradle +++ b/code/gradle/release.gradle @@ -33,12 +33,12 @@ ext { shortVerNum = plainVerNum.replaceAll(/\./, '') releaseNotes = "${projectDir}/installers/release-notes/pcgen-release-notes-${shortVerNum}.html" - nsisBaseFolder = "${buildDir}/nsis/PCGen_${shortVerNum}_base" - nsisOptionFolder = "${buildDir}/nsis/PCGen_${shortVerNum}_opt" + nsisBaseFolder = layout.buildDirectory.dir("nsis/PCGen_${shortVerNum}_base") + nsisOptionFolder = layout.buildDirectory.dir("nsis/PCGen_${shortVerNum}_opt") // specifications for what to copy to the NSIS base and optional folders baseLibs = copySpec { - from("${buildDir}/libs") { + from(layout.buildDirectory.dir("libs")) { exclude 'pcgen-*.jar' exclude 'fop*.jar' exclude 'batik*.jar' @@ -47,7 +47,7 @@ ext { } as DefaultCopySpec lib32 = copySpec { - from("${buildDir}/image/pcgen-windows-x32/lib") { + from(layout.buildDirectory.dir("image/pcgen-windows-x32/lib")) { exclude 'fop*.jar' exclude 'batik*.jar' } @@ -55,7 +55,7 @@ ext { } as DefaultCopySpec lib64 = copySpec { - from("${buildDir}/image/pcgen-windows-x64/lib") { + from(layout.buildDirectory.dir("image/pcgen-windows-x64/lib")) { exclude 'fop*.jar' exclude 'batik*.jar' exclude 'javafx*.jar' @@ -64,7 +64,7 @@ ext { } as DefaultCopySpec pdfLibs = copySpec { - from("${buildDir}/libs") { + from(layout.buildDirectory.dir("libs")) { include 'fop*.jar' include 'batik*.jar' } @@ -72,7 +72,7 @@ ext { } as DefaultCopySpec basePlugins = copySpec { - from("${projectDir}/plugins") { + from(layout.projectDirectory.dir("plugins")) { include '*plugins/**' include 'Random Names/**' include 'DoomsdayBook.jar' @@ -81,7 +81,7 @@ ext { } as DefaultCopySpec gmgenPlugins = copySpec { - from("${projectDir}/plugins") { + from(layout.projectDirectory.dir("plugins")) { exclude '*plugins/**' exclude 'Random Names/**' exclude 'DoomsdayBook.jar' @@ -90,21 +90,21 @@ ext { } as DefaultCopySpec nonPdfOutput = copySpec { - from("${projectDir}/outputsheets") { + from(layout.projectDirectory.dir("outputsheets")) { exclude '**/pdf/**' } into ('/outputsheets') } as DefaultCopySpec pdfOutput = copySpec { - from("${projectDir}/outputsheets") { + from(layout.projectDirectory.dir("outputsheets")) { include '**/pdf/**' } into ('/plugin/pdf/outputsheets') } as DefaultCopySpec baseData = copySpec { - from("${projectDir}/data") { + from(layout.projectDirectory.dir("data")) { include 'customsources/**' include 'homebrew/**' } @@ -112,7 +112,7 @@ ext { } as DefaultCopySpec optionalData = copySpec { - from("${projectDir}/data") { + from(layout.projectDirectory.dir("data")) { exclude 'customsources/**' exclude 'homebrew/**' } @@ -123,7 +123,8 @@ ext { installerVerNum = result[0].toInteger() + "." + result[1].toInteger() + "." + result[2].take(2).toInteger() + ".0" } -task layoutNsisBase(type: Copy, dependsOn: [runtimeZip, createExe, copyToLibs, jar, converterJar]) { +tasks.register("layoutNsisBase", Copy) { + dependsOn runtimeZip, createExe, copyToLibs, jar, converterJar description="Assemble the required files for all PCGen installations" @@ -133,28 +134,30 @@ task layoutNsisBase(type: Copy, dependsOn: [runtimeZip, createExe, copyToLibs, j //} into nsisBaseFolder - from ("${projectDir}/installers/win-installer/Local") { + from(layout.projectDirectory.dir("installers/win-installer/Local")) { into "../Local" } - from ("${projectDir}/installers/win-installer/") { + from(layout.projectDirectory.dir("installers/win-installer")) { into "/docs/acknowledgments/" include "PCGenLicense.txt" } - from ("${projectDir}") { + from(layout.projectDirectory) { include 'logging.properties' include 'system/**' // Later we want to split out the game modes to optional include 'docs/**' include 'preview/**' include 'characters/*.pcg' } - from ("${buildDir}/launch4j") { + from(layout.buildDirectory.dir("launch4j")) { include 'pcgen.exe' } - from ("${buildDir}/install/pcgen") { + from(layout.buildDirectory.dir("install/pcgen")) { include 'pcgen.bat' include 'pcgen' filter(FixCrLfFilter, eol:FixCrLfFilter.CrLf.newInstance("lf")) - fileMode 0755 + filePermissions { + unix(0755) + } } with basePlugins with nonPdfOutput @@ -164,14 +167,14 @@ task layoutNsisBase(type: Copy, dependsOn: [runtimeZip, createExe, copyToLibs, j // See: https://github.com/TheBoegl/gradle-launch4j launch4j { mainClassName = 'pcgen.system.Main' - icon = "${projectDir}/installers/win-installer/Local/pcgen.ico" + icon = layout.projectDirectory.file("installers/win-installer/Local/pcgen.ico").asFile.absolutePath requiresJdk = false // false means it'll grab a JRE first if available maxHeapPercent = 80 stayAlive = false requires64Bit = false // false means it auto-selects 64 or 32 bit as required. bundledJrePath = '.' dontWrapJar = true - splashFileName = "${projectDir}/installers/win-installer/Local/splash.bmp" + splashFileName = layout.projectDirectory.file("installers/win-installer/Local/splash.bmp").asFile.absolutePath splashWaitForWindows = true splashTimeout = 60 splashTimeoutError = true @@ -182,183 +185,173 @@ launch4j { downloadUrl = "http://pcgen.org/download/" } -task layoutNsisOptional(type: Copy, dependsOn: ['copyToOutput', 'runtime']) { - description="Assemble the optional files for PCGen installations" +tasks.register("layoutNsisOptional", Copy) { + dependsOn copyToOutput, tasks.named("runtime") + description = "Assemble the optional files for PCGen installations" into nsisOptionFolder - with pdfLibs - with gmgenPlugins - with pdfOutput - with optionalData - with lib32 - with lib64 + with pdfLibs, gmgenPlugins, pdfOutput, optionalData, lib32, lib64 } // Generate the publisher/data list for the Windows installer script -task genDataList doLast { - //TODO: find a way to move it to ext section. +tasks.register("genDataList") { + inputs.dir layout.projectDirectory.dir("data") + + def dataNsh = layout.projectDirectory.file("installers/win-installer/includes/data.nsh") + outputs.file dataNsh + + // TODO: find a way to move it to ext section. // The list of publishers - add an entry here to correct a reported missing publisher - Map publisherMap = new TreeMap(); - publisherMap.put("12_to_midnight","12 to Midnight"); - publisherMap.put("4_winds_fantasy_gaming","4 Winds Fantasy Gaming"); - publisherMap.put("alderac_entertainment_group","Alderac Entertainment Group"); - publisherMap.put("alderac_ent_group","Alderac Entertainment Group"); - publisherMap.put("alea_publishing_group","Alea Publishing Group"); - publisherMap.put("alluria_publishing","Alluria Publishing"); - publisherMap.put("ascension_games","Ascension Games"); - publisherMap.put("atlas_games","Atlas Games"); - publisherMap.put("auran_d20","Auran d20"); - publisherMap.put("avalanche_press","Avalanche Press"); - publisherMap.put("badaxe_games","Bad Axe Games"); - publisherMap.put("bards_and_sages","Bards and Sages"); - publisherMap.put("bastion_press","Bastion Press"); - publisherMap.put("battlefield_press","Battlefield Press"); - publisherMap.put("behemoth3","Behemoth3"); - publisherMap.put("big_finger_games","Big Finger Games"); - publisherMap.put("bloodstone_press","Bloodstone Press"); - publisherMap.put("blue_devil_games","Blue Devil Games"); - publisherMap.put("broken_ruler_games","Broken Ruler Games"); - publisherMap.put("crafty_games","Crafty Games"); - publisherMap.put("creativemountaingames","Creative Mountain Games"); - publisherMap.put("distant_horizons_games","Distant Horizons Games"); - publisherMap.put("doghouse_rules","Dog House Rules"); - publisherMap.put("dragonwing_games","DragonWing Games"); - publisherMap.put("dreamscarred_press","Dreamscarred Press"); - publisherMap.put("en_publishing","EN Publishing"); - publisherMap.put("everyman_gaming","Everyman Gaming"); - publisherMap.put("fantasy_community_council","Fantasy Community Council"); - publisherMap.put("fantasy_flight_games","Fantasy Flight Games"); - publisherMap.put("gallantry_productions","Gallantry Productions"); - publisherMap.put("goodman_games","Goodman Games"); - publisherMap.put("green_ronin","Green Ronin"); - publisherMap.put("kobold_press","Kobold Press"); - publisherMap.put("legendary_games","Legendary Games"); - publisherMap.put("lions_den_press","Lions Den Press"); - publisherMap.put("lone_wanderer_entertainment","Lone Wanderer Entertainment"); - publisherMap.put("malhavoc_press","Malhavoc Press"); - publisherMap.put("minotaur_games","Minotaur Games"); - publisherMap.put("mongoose","Mongoose"); - publisherMap.put("mongoose_publishing","Mongoose Publishing"); - publisherMap.put("msrd","MSRD"); - publisherMap.put("mythic_dream_studios","Mythic Dreams Studios"); - publisherMap.put("necromancer_games","Necromancer Games"); - publisherMap.put("nitehawk_interactive","Nitehawk Interactive Games"); - publisherMap.put("pandahead","Pandahead"); - publisherMap.put("paradigm_concepts","Paradigm Concepts Inc"); - publisherMap.put("paizo","Paizo Publishing"); - publisherMap.put("parents_basement_games","Parents Basement Games"); - publisherMap.put("pcgen","PCGen OGL"); - publisherMap.put("pfsrd_publishing","Open Game Network (d20pfsrd)"); - publisherMap.put("pinnacle_entertainment","Pinnacle Entertainment"); - publisherMap.put("reality_deviant","Reality Deviant Publications"); - publisherMap.put("rite","Rite Publishing"); - publisherMap.put("rite_publishing","Rite Publishing"); - publisherMap.put("rpg_objects","RPG Objects"); - publisherMap.put("sagaborn","Sagaborn"); - publisherMap.put("secular_games","Secular Games"); - publisherMap.put("silven_publishing","Silven Publishing"); - publisherMap.put("silverthorne_games","Silverthorne Games"); - publisherMap.put("skirmisher_publishing","Skirmisher Publishing LLC"); - publisherMap.put("sovereign_press","Sovereign Press"); - publisherMap.put("srd","SRD"); - publisherMap.put("srd35","SRD35"); - publisherMap.put("st_cooley_publishing","S T Cooley Publishing"); - publisherMap.put("storm_bunny_studios","Storm Bunny Studios"); - publisherMap.put("super_genius_games","Super Genius Games"); - publisherMap.put("sword_and_sorcery_studios","Sword and Sorcery Studios"); - publisherMap.put("swords_edge_publishing","Swords Edge Publishing"); - publisherMap.put("the_game_mechanics","The Game Mechanics Inc"); - publisherMap.put("vigilance_press","Vigilance Press"); - publisherMap.put("wizards_of_the_coast","Wizards of the Coast"); - publisherMap.put("lpj_design","Louis Porter Jr. Design"); - publisherMap.put("tripod_machine","Tripod Machine"); - publisherMap.put("total_party_kill_games","Total Party Kill Games"); - publisherMap.put("starfinder","Starfinder"); - File out = new File("$projectDir/installers/win-installer/includes/data.nsh") - out.delete() - // List of folder names to ignore. - List ignoreList = new ArrayList(); - ignoreList.add("homebrew"); - ignoreList.add("zen_test"); - ignoreList.add("customsources"); - ignoreList.add("_universal"); - ignoreList.add("_images"); - ignoreList.add("publisher_logos"); - new File("${projectDir}/data").eachDir{ - if (ignoreList.contains(it.name)) - { - return - } - out.append("SubSection \"$it.name\"\n") - String dir = it.name - int subFolders=0 - it.eachDir { + def publisherMap = ["12_to_midnight" : "12 to Midnight", + "4_winds_fantasy_gaming" : "4 Winds Fantasy Gaming", + "alderac_entertainment_group": "Alderac Entertainment Group", + "alderac_ent_group" : "Alderac Entertainment Group", + "alea_publishing_group" : "Alea Publishing Group", + "alluria_publishing" : "Alluria Publishing", + "ascension_games" : "Ascension Games", + "atlas_games" : "Atlas Games", + "auran_d20" : "Auran d20", + "avalanche_press" : "Avalanche Press", + "badaxe_games" : "Bad Axe Games", + "bards_and_sages" : "Bards and Sages", + "bastion_press" : "Bastion Press", + "battlefield_press" : "Battlefield Press", + "behemoth3" : "Behemoth3", + "big_finger_games" : "Big Finger Games", + "bloodstone_press" : "Bloodstone Press", + "blue_devil_games" : "Blue Devil Games", + "broken_ruler_games" : "Broken Ruler Games", + "crafty_games" : "Crafty Games", + "creativemountaingames" : "Creative Mountain Games", + "distant_horizons_games" : "Distant Horizons Games", + "doghouse_rules" : "Dog House Rules", + "dragonwing_games" : "DragonWing Games", + "dreamscarred_press" : "Dreamscarred Press", + "en_publishing" : "EN Publishing", + "everyman_gaming" : "Everyman Gaming", + "fantasy_community_council" : "Fantasy Community Council", + "fantasy_flight_games" : "Fantasy Flight Games", + "gallantry_productions" : "Gallantry Productions", + "goodman_games" : "Goodman Games", + "green_ronin" : "Green Ronin", + "kobold_press" : "Kobold Press", + "legendary_games" : "Legendary Games", + "lions_den_press" : "Lions Den Press", + "lone_wanderer_entertainment": "Lone Wanderer Entertainment", + "malhavoc_press" : "Malhavoc Press", + "minotaur_games" : "Minotaur Games", + "mongoose" : "Mongoose", + "mongoose_publishing" : "Mongoose Publishing", + "msrd" : "MSRD", + "mythic_dream_studios" : "Mythic Dreams Studios", + "necromancer_games" : "Necromancer Games", + "nitehawk_interactive" : "Nitehawk Interactive Games", + "pandahead" : "Pandahead", + "paradigm_concepts" : "Paradigm Concepts Inc", + "paizo" : "Paizo Publishing", + "parents_basement_games" : "Parents Basement Games", + "pcgen" : "PCGen OGL", + "pfsrd_publishing" : "Open Game Network (d20pfsrd,", + "pinnacle_entertainment" : "Pinnacle Entertainment", + "reality_deviant" : "Reality Deviant Publications", + "rite" : "Rite Publishing", + "rite_publishing" : "Rite Publishing", + "rpg_objects" : "RPG Objects", + "sagaborn" : "Sagaborn", + "secular_games" : "Secular Games", + "silven_publishing" : "Silven Publishing", + "silverthorne_games" : "Silverthorne Games", + "skirmisher_publishing" : "Skirmisher Publishing LLC", + "sovereign_press" : "Sovereign Press", + "srd" : "SRD", + "srd35" : "SRD35", + "st_cooley_publishing" : "S T Cooley Publishing", + "storm_bunny_studios" : "Storm Bunny Studios", + "super_genius_games" : "Super Genius Games", + "sword_and_sorcery_studios" : "Sword and Sorcery Studios", + "swords_edge_publishing" : "Swords Edge Publishing", + "the_game_mechanics" : "The Game Mechanics Inc", + "vigilance_press" : "Vigilance Press", + "wizards_of_the_coast" : "Wizards of the Coast", + "lpj_design" : "Louis Porter Jr. Design", + "tripod_machine" : "Tripod Machine", + "total_party_kill_games" : "Total Party Kill Games", + "starfinder" : "Starfinder"] + + doLast { + project.delete(dataNsh) + def out = new StringBuilder() + + // List of folder names to ignore. + def ignoreList = ["homebrew", "zen_test", "customsources", "_universal", "_images", "publisher_logos"] + + // List of sections + def sectionsIn = [msrd: "3 6", pcgen: "3 4 5", srd: "3 4", srd35: "3 5", necromancergames: "3 5", paizo: "3"] + + layout.projectDirectory.dir("data").asFile.eachDir { if (ignoreList.contains(it.name)) { return } - String pubname - if(publisherMap.get(it.name) != null){ - pubname = publisherMap.get(it.name) - }else{ - pubname = it.name - } - out.append("\tSection \"$pubname\"\n") - out.append("\tSectionIn 1 2") - if (it.name == 'msrd') - { - out.append(" 3 6"); - } - if (it.name == 'pcgen') - { - out.append(" 3 4 5"); - } - if (it.name == 'srd') - { - out.append(" 3 4"); - } - if (it.name == 'srd35' || it.name == 'necromancergames') - { - out.append(" 3 5"); - } - if (it.name == 'paizo') - { - out.append(" 3"); + out.append("SubSection \"$it.name\"\n") + def dir = it.name + def subFolders = 0 + it.eachDir { + if (ignoreList.contains(it.name)) + { + return + } + def pubname = publisherMap.getOrDefault(it.name, it.name) + def sectionIn = sectionsIn.getOrDefault(it.name, "") + + out.append("""\tSection "$pubname" +\t\tSectionIn 1 2 ${sectionIn} +\t\tSetOutPath "\$INSTDIR\\\${APPDIR}\\data\\${dir}\\${it.name}" +\t\tFile /r "\${SrcDir}\\PCGen_\${SIMPVER}_opt\\data\\${dir}\\${it.name}\\*.*" +\tSectionEnd + +""") + subFolders++ } - out.append("\n"); - out.append("\tSetOutPath \"\$INSTDIR\\\${APPDIR}\\data\\${dir}\\${it.name}\"\n"); - out.append("\tFile /r \"\${SrcDir}\\PCGen_\${SIMPVER}_opt\\data\\${dir}\\${it.name}\\*.*\"\n"); + if (subFolders == 0){ + def pubname = publisherMap.getOrDefault(it.name, it.name) + out.append("""\tSection "$pubname" +\t\tSectionIn 1 2 +\t\tSetOutPath "\$INSTDIR\\\${APPDIR}\\data\\${dir}" +\t\tFile /r "\${SrcDir}\\PCGen_\${SIMPVER}_opt\\data\\${dir}\\*.*" +\tSectionEnd - out.append("\tSectionEnd\n\n"); - subFolders++ - } - if(subFolders == 0){ - String pubname - if(publisherMap.get(it.name) != null){ - pubname = publisherMap.get(it.name) - }else{ - pubname = it.name +""") } - out.append("\tSection \"$pubname\"\n") - out.append("\tSectionIn 1 2") - out.append("\n"); - out.append("\tSetOutPath \"\$INSTDIR\\\${APPDIR}\\data\\${dir}\"\n"); - out.append("\tFile /r \"\${SrcDir}\\PCGen_\${SIMPVER}_opt\\data\\${dir}\\*.*\"\n"); - out.append("\tSectionEnd\n\n"); + out.append("SubSectionEnd\n\n") } - out.append("SubSectionEnd\n\n"); + + println("Writing data to: ${outputs.files.singleFile}") + outputs.files.singleFile.text = out } } // Create the version specific config files for NSIS -task genProjectNsis doLast { - new File("${projectDir}/installers/win-installer/project.nsh").write(""" +tasks.register("genProjectNsis") { + def licenseFile = layout.projectDirectory.file("code/LICENSE") + inputs.file licenseFile + inputs.property("plainVerNum", plainVerNum) + inputs.property("installerVerNum", installerVerNum) + + def projectNsh = layout.projectDirectory.file("installers/win-installer/project.nsh") + def constantsNsh = layout.projectDirectory.file("installers/win-installer/includes/constants.nsh") + + outputs.files projectNsh, constantsNsh + + doLast { + projectNsh.asFile + .text = """ ; Projects file generated by release.gradle -!define PROJECT_BUILD_DIR "${buildDir}" -!define PROJECT_DIST_BIN_DIR "${buildDir}\\nsis" -!define PROJECT_DIST_DIR "${buildDir}" +!define PROJECT_BUILD_DIR "${layout.buildDirectory.dir(".").get()}" +!define PROJECT_DIST_BIN_DIR "${layout.buildDirectory.dir("nsis").get()}" +!define PROJECT_DIST_DIR "${layout.buildDirectory.dir(".").get()}" !define PROJECT_FINAL_NAME "pcgen" -!define PROJECT_LICENSE_FILE "${projectDir}\\code\\LICENSE" +!define PROJECT_LICENSE_FILE "${licenseFile.asFile.absolutePath}" !define PROJECT_LICENSE_TEXT "This program is Licensed under The GNU Lesser General Public License, Version 2.1." !define PROJECT_NAME "PCGen" !define PROJECT_ORGANIZATION "SourceForge" @@ -368,136 +361,176 @@ task genProjectNsis doLast { !define PROJECT_URL "http://pcgen.sourceforge.net/" !define PROJECT_VERSION "${plainVerNum}" !define INSTALLER_VERSION "${installerVerNum}" -""") +""" - new File("${projectDir}/installers/win-installer/includes/constants.nsh").write(""" + constantsNsh.asFile + .text = """ ; Constants file generated by release.gradle !define SIMPVER "${shortVerNum}" !define LONGVER "${plainVerNum}" -!define OutDir "${buildDir}\\nsisRelease" -!define SrcDir "${buildDir}\\nsis" -""") - - mkdir "${buildDir}\\nsisRelease" +!define OutDir "${layout.buildDirectory.dir("nsisRelease").get()}" +!define SrcDir "${layout.buildDirectory.dir("nsis").get()}" +""" + } } // Call NSIS to generate windows installer - Removed "genDataList" -task buildNsis(dependsOn: [layoutNsisBase, layoutNsisOptional, - genProjectNsis, downloadJRE , genDataList]) doLast { - if (System.properties['os.name'].toLowerCase(Locale.ROOT).contains('windows')) { - new ByteArrayOutputStream().withStream { os -> - def result = exec { - workingDir = "${buildDir}/nsis" - executable = 'C:/Program Files (x86)/NSIS/makensis.exe' - args = ["/V3", "${projectDir}/installers/win-installer/pcgen.nsi"] - } - } +tasks.register("buildNsis", Exec) { + dependsOn layoutNsisBase, layoutNsisOptional, genProjectNsis, downloadJRE, genDataList + mustRunAfter createExe + + def makensisPaths = [windows: "C:/Program Files (x86)/NSIS/makensis.exe"] + def currentOs = System.getProperty('os.name').toLowerCase(Locale.ROOT); + def makensis = makensisPaths.getOrDefault(currentOs, "makensis") + def pcgenNsi = layout.projectDirectory.file("installers/win-installer/pcgen.nsi").asFile.absolutePath + def stdout = new ByteArrayOutputStream() + + doFirst { + println("Running makensis from the path '${makensis}':") + mkdir layout.buildDirectory.dir("nsis") + mkdir layout.buildDirectory.dir("nsisRelease") + } + workingDir layout.buildDirectory.dir("nsis") + + standardOutput = stdout; + errorOutput = stdout; + + if (currentOs == "windows") { + commandLine makensis, "/V4", "/WX", "/Onsis.output", pcgenNsi } else { - new ByteArrayOutputStream().withStream { os -> - def result = exec { - workingDir = "${buildDir}/nsis" - executable = 'makensis' - args = ["-V3", "${projectDir}/installers/win-installer/pcgen.nsi"] - } - } + commandLine makensis, "-V4", "-WX", "-Onsis.output", pcgenNsi + } + + doLast { + def nsisOutput = layout.buildDirectory.file("nsis/nsis.output").get() + println "NSIS output is located in : ${nsisOutput.asFile.absolutePath}" } } -buildNsis.mustRunAfter createExe -task cleanNsis(type: Delete) { - delete nsisBaseFolder, nsisOptionFolder, "${buildDir}/nsis/Local" +tasks.register("cleanNsis", Delete) { + delete nsisBaseFolder, nsisOptionFolder, layout.buildDirectory.dir("nsis/Local") } -task sourcesJar(type: Jar, dependsOn: ['classes', 'copyToOutput', 'createExe', 'distTar', 'distZip', - 'layoutNsisBase', 'startScripts']) { +tasks.register("sourcesJar", Jar) { + dependsOn classes, copyToOutput, createExe, distTar, distZip, layoutNsisBase, startScripts duplicatesStrategy DuplicatesStrategy.INCLUDE description = "build source jar file" archiveClassifier.set('sources') from sourceSets.main.allSource } -task assembleArtifacts(type: Copy, dependsOn: ['build', 'runtimeZip', 'sourcesJar', 'buildNsis']) { +tasks.register("assembleArtifacts", Copy) { + dependsOn build, runtimeZip, sourcesJar, buildNsis + + if (Os.isFamily(Os.FAMILY_MAC) || Os.isFamily(Os.FAMILY_UNIX)) + { + dependsOn jpackage + } + description = "Create the release artifacts and get them into the release folder." into releaseDir // buildNsis puts the exe into the release folder directly - from("$buildDir/nsisRelease"){ + from(layout.buildDirectory.dir("nsisRelease")){ include '*.exe' } - from("${buildDir}/libs") { + from(layout.buildDirectory.dir("libs")){ include 'pcgen*-sources.jar' } - from("${buildDir}") { + from(layout.buildDirectory){ include 'image*.zip' } - delete fileTree(buildDir).matching { + delete fileTree(layout.buildDirectory).matching { include "image*.zip" } - from ("${buildDir}/jpackage/"){ + from(layout.buildDirectory.dir("jpackage")){ include 'pcgen-*.*' } } -if (Os.isFamily(Os.FAMILY_MAC) || Os.isFamily(Os.FAMILY_UNIX)) -{ - assembleArtifacts.dependsOn jpackage -} - // Produce SHA-256 checksums for each release artifact -task checksum(dependsOn: assembleArtifacts) doLast { - File zipChecksumsFile = new File("${buildDir}/release/SHA256-digests-zip-${version}.txt") - zipChecksumsFile.delete() - file(releaseDir).listFiles().each {File file -> - ant.checksum(file: file, property: "cs_$file.name", algorithm: "sha-256") - def cs = ant.properties["cs_$file.name"] - if (file.name.endsWith("zip")) { - zipChecksumsFile.append("SHA-256 digest for $file.name:\r\n$cs\r\n\r\n") - } - else if (file.name.endsWith(".exe")){ - File exeChecksumsFile = new File("${buildDir}/release/SHA256-digests-exe-${version}.txt") - exeChecksumsFile.append("SHA-256 digest for $file.name:\r\n$cs\r\n\r\n") - } - else if (file.name.endsWith(".pkg")|| file.name.endsWith(".dmg")){ - File macChecksumsFile = new File("${buildDir}/release/SHA256-digests-mac-${version}.txt") - macChecksumsFile.append("SHA-256 digest for $file.name:\r\n$cs\r\n\r\n") - } - else if (file.name.endsWith(".deb")|| file.name.endsWith(".rpm")){ - File linuxChecksumsFile = new File("${buildDir}/release/SHA256-digests-linux-${version}.txt") - linuxChecksumsFile.append("SHA-256 digest for $file.name:\r\n$cs\r\n\r\n") - } - else if (file.name.endsWith(".jar")){ - File jarChecksumsFile = new File("${buildDir}/release/SHA256-digests-jar-${version}.txt") - jarChecksumsFile.append("SHA-256 digest for $file.name:\r\n$cs\r\n\r\n") - } - else if (file.name.endsWith(".txt")) {} - else { - throw new GradleException("Checksums should account for all file.") +tasks.register("checksum") { + dependsOn assembleArtifacts + doLast { + def zipChecksumsFile = layout.buildDirectory + .file("release/SHA256-digests-zip-${version}.txt") + .get() + .asFile + project.delete(zipChecksumsFile) + file(releaseDir).listFiles().each {File file -> + ant.checksum(file: file, property: "cs_$file.name", algorithm: "sha-256") + def cs = ant.properties["cs_$file.name"] + if (file.name.endsWith("zip")) { + zipChecksumsFile << "SHA-256 digest for $file.name:\r\n$cs\r\n\r\n" + } + else if (file.name.endsWith(".exe")){ + def exeChecksumsFile = layout.buildDirectory + .file("release/SHA256-digests-exe-${version}.txt") + .get() + .asFile + exeChecksumsFile << "SHA-256 digest for $file.name:\r\n$cs\r\n\r\n" + } + else if (file.name.endsWith(".pkg")|| file.name.endsWith(".dmg")){ + def macChecksumsFile = layout.buildDirectory + .file("release/SHA256-digests-mac-${version}.txt") + .get() + .asFile + macChecksumsFile << "SHA-256 digest for $file.name:\r\n$cs\r\n\r\n" + } + else if (file.name.endsWith(".deb")|| file.name.endsWith(".rpm")){ + def linuxChecksumsFile = layout.buildDirectory + .file("release/SHA256-digests-linux-${version}.txt") + .get() + .asFile + linuxChecksumsFile << "SHA-256 digest for $file.name:\r\n$cs\r\n\r\n" + } + else if (file.name.endsWith(".jar")){ + def jarChecksumsFile = layout.buildDirectory + .file("release/SHA256-digests-jar-${version}.txt") + .get() + .asFile + jarChecksumsFile << "SHA-256 digest for $file.name:\r\n$cs\r\n\r\n" + } + else if (file.name.endsWith(".txt")) { + // does nothing + } + else { + throw new GradleException("Checksums should account for all file.") + } } } } // genDataList removed as it causes release errors, 'genDataList' -task prepareRelease (dependsOn: ['clean', 'build', 'runtime']) { - description="Prepare PCGen for release. This will update and commit the version, do a clean build including the unit tests and generate the data list for the installer." +tasks.register("prepareRelease") { + dependsOn build + description = """Prepare PCGen for release. This will update and commit the version, \ +do a build including the unit tests and generate the data list for the installer.""" } -task pcgenRelease (dependsOn: ['prepareRelease', 'assembleArtifacts', 'checksum']) { - description="Release a new version of PCGen. This will build PCGen and produce the release artifacts." - //Installer is placed in outputDir +tasks.register("pcgenRelease") { + dependsOn prepareRelease, assembleArtifacts, checksum + description = "Release a new version of PCGen. This will build PCGen and produce the release artifacts." + // Installer is placed in outputDir } -task pcgenReleaseOfficial (dependsOn: ['pcgenRelease', 'updateVersionRelease']) { - description="Release a new offical version of PCGen." +// Update the PCGen version to indicate a release, then commit the new version +tasks.register("updateVersionRelease") { + doLast { + unSnapshotVersion() + commitFile(file("gradle.properties"), "Update version for release ${project.version}") + } } -// Update the PCGen version to indicate a release, then commit the new version -task updateVersionRelease doLast { - unSnapshotVersion() - commitFile(new File("gradle.properties"), "Update version for release ${project.version}") +tasks.register("pcgenReleaseOfficial") { + dependsOn pcgenRelease, updateVersionRelease + description = "Release a new official version of PCGen." } // Update the PCGen version for development of the next release, then commit the new version -task updateVersionToNext doLast { - updateVersion() - commitFile(new File("gradle.properties"), "Update version for dev work ${project.version}") +tasks.register("updateVersionToNext") { + doLast { + updateVersion() + commitFile(file("gradle.properties"), "Update version for dev work ${project.version}") + } } diff --git a/code/gradle/releaseUtils.groovy b/code/gradle/releaseUtils.groovy index 79ebe2452a8..c6ebe0e468c 100644 --- a/code/gradle/releaseUtils.groovy +++ b/code/gradle/releaseUtils.groovy @@ -1,11 +1,9 @@ import java.util.regex.Matcher - - void unSnapshotVersion() { def version = project.version.toString() def origVersion = version - + if (version.contains('-SNAPSHOT')) { project.ext.set('usesSnapshot', true) project.ext.set('snapshotVersion', version) @@ -24,22 +22,22 @@ void updateVersion() { //noinspection GroovyUnusedAssignment Closure handler = { Matcher m, Project p -> m.replaceAll("${ String.format( '%02d', (m[0][1] as int) + 1 )}${ m[0][2] }") } Matcher matcher = version =~ pattern - + if (matcher.find()) { String nextVersion = handler(matcher, project) //if (project.properties['usesSnapshot']) { nextVersion += '-SNAPSHOT' //} - + nextVersion = getNextVersion(nextVersion); println "nextVersion is " + nextVersion - + project.ext.set("release.oldVersion", project.version) project.ext.set("release.newVersion", nextVersion) updateVersionProperty(nextVersion) return } - + throw new GradleException("Failed to increase version [$version] - unknown pattern") } @@ -98,4 +96,3 @@ File findPropertiesFile() { } propertiesFile } - diff --git a/code/gradle/reporting.gradle b/code/gradle/reporting.gradle index 749b6f56c19..bb0265d4bd1 100644 --- a/code/gradle/reporting.gradle +++ b/code/gradle/reporting.gradle @@ -9,7 +9,7 @@ checkstyle { configFile = new File('code/standards/checkstyle.xml') configProperties = [samedir: "${rootDir}/code/standards"] showViolations = true - toolVersion = '10.7.0' + toolVersion = '10.18.1' sourceSets = [] } @@ -19,27 +19,30 @@ pmd { ruleSetFiles = files('code/standards/ruleset.xml') consoleOutput = true sourceSets = [] - toolVersion = "6.54.0" + toolVersion = "7.6.0" incrementalAnalysis = true } // TODO fix the outstanding bugs and then remove the ignoreFailures spotbugs { - toolVersion = '4.7.3' + def classLoader = plugins["com.github.spotbugs"].class.classLoader + def SpotBugsConfidence = classLoader.findLoadedClass("com.github.spotbugs.snom.Confidence") + + toolVersion = '4.8.6' excludeFilter = file("$rootProject.projectDir/code/standards/spotbugs_ignore.xml") omitVisitors = ['Naming', 'CrossSiteScripting', 'DontUseEnum', 'DoInsideDoPrivileged'] - reportLevel = 'low' + reportLevel = SpotBugsConfidence.LOW ignoreFailures = true } spotbugsMain { reports { - xml.enabled = false - html.enabled = true + xml.required = false + html.required = true html.stylesheet resources.text.fromFile('code/standards/fancy-hist.xsl') } } -task allReports { - dependsOn = ['checkstyleMain', 'pmdMain', 'spotbugsMain'] +tasks.register('allReports') { + dependsOn checkstyleMain, pmdMain, spotbugsMain } diff --git a/code/pluginbuild.xml b/code/pluginbuild.xml index ef1388eaa36..f7905f0ecd9 100644 --- a/code/pluginbuild.xml +++ b/code/pluginbuild.xml @@ -21,8 +21,9 @@ jar-all-plugins - Generate the plugin jar files - - + @@ -1267,7 +1268,7 @@ jar-all-plugins - Generate the plugin jar files - + @@ -7639,7 +7640,7 @@ Class-Path: ${manifest.extra.jars} - + diff --git a/code/src/java/pcgen/cdom/base/CDOMObject.java b/code/src/java/pcgen/cdom/base/CDOMObject.java index a9bbf1b8fe9..580082415e9 100644 --- a/code/src/java/pcgen/cdom/base/CDOMObject.java +++ b/code/src/java/pcgen/cdom/base/CDOMObject.java @@ -1,16 +1,16 @@ /* * Copyright (c) 2007-18 Tom Parker - * + * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. - * + * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA @@ -23,6 +23,8 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; +import java.util.EnumMap; +import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -104,7 +106,7 @@ public abstract class CDOMObject extends ConcretePrereqObject * The display name for this CDOMObject. */ private String displayName = Constants.EMPTY_STRING; - + /** * Support object to store the variable information on an object. */ @@ -219,7 +221,7 @@ public final String put(StringKey key, String value) { if (stringChar == null) { - stringChar = new HashMap<>(); + stringChar = new EnumMap<>(StringKey.class); } return stringChar.put(key, value); } @@ -236,7 +238,9 @@ public final String remove(StringKey key) public final Set getStringKeys() { - return stringChar == null ? Collections.emptySet() : new HashSet<>(stringChar.keySet()); + return stringChar == null + ? EnumSet.noneOf(StringKey.class) + : EnumSet.copyOf(stringChar.keySet()); } public final boolean containsKey(FormulaKey key) @@ -524,15 +528,15 @@ public final void addAllToListFor(ListKey key, Collection elementColle /** * Returns a copy of the list of objects stored in this CDOMObject for the * given ListKey. - * + * * No order is guaranteed, and the returned List may contain duplicates. * There is no guarantee that duplicate items are sequential items in the * returned List. - * + * * This method is value-semantic in that no changes are made to the key * passed into the method and ownership of the returned List is transferred * to the class calling this method. - * + * * @param key * The ListKey for which a copy of the list should be returned. * @return A copy of the List contained in this CDOMObject for the given @@ -546,15 +550,15 @@ public final List getListFor(ListKey key) /** * Returns a non-null copy of the list of objects stored in this CDOMObject * for the given ListKey. - * + * * No order is guaranteed, and the returned List may contain duplicates. * There is no guarantee that duplicate items are sequential items in the * returned List. - * + * * This method is value-semantic in that no changes are made to the key * passed into the method and ownership of the returned List is transferred * to the class calling this method. - * + * * @param key * The ListKey for which a copy of the list should be returned. * @return A copy of the List contained in this CDOMObject for the given @@ -569,17 +573,17 @@ public final List getSafeListFor(ListKey key) * Returns a non-null Set of the objects stored in this CDOMObject for the * given ListKey. The List is converted to a Set to ensure that each entry * in the List is only occurs once. - * + * * This is used because the loading system cannot guarantee "Set" behavior * (cannot guarantee uniqueness), and a specific infrastructure for a Set * (vs a List) is considered overkill for the few use cases that require it. - * + * * No order of the objects is guaranteed. - * + * * This method is value-semantic in that no changes are made to the key * passed into the method and ownership of the returned Set is transferred * to the class calling this method. - * + * * @param key * The ListKey for which a Set of the objects stored in this * CDOMObject for the given ListKey should be returned. @@ -660,7 +664,7 @@ public final Set> getListKeys() /** * Add a value to the map of maps. - * + * * @param mapKey The MapKey we are adding an entry to * @param key The key to assign against * @param value The value to be stored. @@ -676,7 +680,7 @@ public final V addToMapFor(MapKey mapKey, K key, V value) /** * Remove a value from the map of maps. - * + * * @param mapKey The MapKey we are removing an entry from * @param key The key to eject */ @@ -694,7 +698,7 @@ public final void removeFromMapFor(MapKey mapKey, K key) /** * Remove a map from the map of maps. - * + * * @param mapKey The MapKey we are removing */ public final void removeMapFor(MapKey mapKey) @@ -711,7 +715,7 @@ public final void removeMapFor(MapKey mapKey) /** * Retrieve the map of keys and values for the MapKey. - * + * * @param mapKey The MapKey we are retrieving * @return The map of keys and values. */ @@ -724,7 +728,7 @@ public final Map getMapFor(MapKey mapKey) /** * Retrieve the set of keys for the MapKey. - * + * * @param mapKey The MapKey we are retrieving * @return The set of keys. */ @@ -735,9 +739,9 @@ public final Set getKeysFor(MapKey mapKey) } /** - * Get the value for the given MapKey and secondary key. If there is + * Get the value for the given MapKey and secondary key. If there is * not a mapping for the given keys, null is returned. - * + * * @param mapKey * The MapKey for retrieving the given value * @param key2 @@ -750,12 +754,12 @@ public final V get(MapKey mapKey, K key2) } /** - * Remove the value associated with the primary and secondary keys + * Remove the value associated with the primary and secondary keys * from the map. - * + * * @param mapKey The MapKey of the entry we are removing * @param key2 The secondary key of the entry we are removing - * @return true if the key and its associated value were successfully removed + * @return true if the key and its associated value were successfully removed * from the map; false otherwise */ public final boolean removeFromMap(MapKey mapKey, K key2) @@ -770,7 +774,7 @@ public final boolean removeFromMap(MapKey mapKey, K key2) /** * Retrieve the set of mapkeys held. - * + * * @return The set of mapkeys. */ public final Set> getMapKeys() @@ -957,7 +961,7 @@ public final void overlayCDOMObject(CDOMObject cdo) { if (stringChar == null) { - stringChar = new HashMap<>(); + stringChar = new EnumMap<>(StringKey.class); } stringChar.putAll(cdo.stringChar); } @@ -1032,7 +1036,7 @@ public CDOMObject clone() throws CloneNotSupportedException { CDOMObject clone = (CDOMObject) super.clone(); clone.integerChar = integerChar == null ? null : new HashMap<>(integerChar); - clone.stringChar = stringChar == null ? null : new HashMap<>(stringChar); + clone.stringChar = stringChar == null ? null : new EnumMap<>(stringChar); clone.formulaChar = formulaChar == null ? null : new HashMap<>(formulaChar); clone.variableChar = variableChar == null ? null : new HashMap<>(variableChar); clone.objectChar = objectChar == null ? null : new HashMap<>(objectChar); @@ -1097,9 +1101,9 @@ public ListKey getDescriptionKey() /** * Set's all the BonusObj's to this creator - * + * * Hopefully this is a temporary import - thpr Oct 9, 2008 - * @throws CloneNotSupportedException + * @throws CloneNotSupportedException */ public void ownBonuses(Object owner) throws CloneNotSupportedException { @@ -1117,11 +1121,11 @@ public void ownBonuses(Object owner) throws CloneNotSupportedException /** * Hopefully this is a temporary import - thpr Oct 11, 2008 - * - * Return the qualified key, ususally used as the source in a - * getVariableValue call. Always returns an empty string, but + * + * Return the qualified key, ususally used as the source in a + * getVariableValue call. Always returns an empty string, but * may be overridden by subclasses to return a required value. - * + * * @return The qualified name of the object */ public String getQualifiedKey() @@ -1329,7 +1333,7 @@ public String[] getGrantedVariableArray() /** * Returns the local child of the given child type and child name. Returns null if no * such type or no child of that type with the given name exists. - * + * * @param childType * The child type for which the child should be returned * @param childName @@ -1346,10 +1350,10 @@ public PCGenScoped getLocalChild(String childType, String childName) /** * Returns the List of child types that this CDOMObject contains. - * + * * Contract for implementations of this method: Will not return null (return an empty * list instead). - * + * * @return The List of child types that this CDOMObject contains */ @Override @@ -1362,7 +1366,7 @@ public List getChildTypes() /** * Returns the List of children of the given child type. Returns null if this * CDOMObject has no children of the given type. - * + * * @param childType * The child type for which the list of children should be returned * @return The List of children of the given child type @@ -1377,7 +1381,7 @@ public List getChildren(String childType) /** * Indicates if this is the "UNSELECTED" item an object type for the loaded GameMode. - * + * * @return true if this is the "Unselected" item; false otherwise */ public final boolean isUnselected() diff --git a/code/src/java/pcgen/cdom/facet/CategorizedAbilityFacet.java b/code/src/java/pcgen/cdom/facet/CategorizedAbilityFacet.java index 90c6a7af6af..3bf2d01e576 100644 --- a/code/src/java/pcgen/cdom/facet/CategorizedAbilityFacet.java +++ b/code/src/java/pcgen/cdom/facet/CategorizedAbilityFacet.java @@ -1,16 +1,16 @@ /* * Copyright (c) Thomas Parker, 2009. - * + * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. - * + * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA @@ -19,6 +19,7 @@ import java.util.Collection; import java.util.Collections; +import java.util.EnumMap; import java.util.HashMap; import java.util.IdentityHashMap; import java.util.Map; @@ -35,7 +36,7 @@ /** * A CategorizedAbilityFacet is a DataFacet that contains information about * Ability objects that are contained in a PlayerCharacter - * + * */ public class CategorizedAbilityFacet extends AbstractDataFacet { @@ -44,7 +45,7 @@ public class CategorizedAbilityFacet extends AbstractDataFacet * Add the given Ability to the list of Abilities defined by the given * Category and Nature, which is stored in this CategorizedAbilityFacet for * the Player Character represented by the given CharID - * + * * @param id * The CharID representing the Player Character for which the * given Ability should be added @@ -74,7 +75,7 @@ public void add(CharID id, Category cat, Nature nat, Ability obj) * Abilities defined by the given Category and Nature, which is stored in * this CategorizedAbilityFacet for the Player Character represented by the * given CharID - * + * * @param id * The CharID representing the Player Character for which the * given Abilities should be added @@ -104,7 +105,7 @@ public void addAll(CharID id, Category cat, Nature nature, Collection cat, Nature nat, Ability obj) * given CharID. This method returns an empty set if no objects are in this * CategorizedAbilityFacet for the Player Character identified by the given * CharID. - * + * * This method is value-semantic in that ownership of the returned Set is * transferred to the class calling this method. Modification of the * returned Set will not modify this CategorizedAbilityFacet and @@ -145,7 +146,7 @@ public void remove(CharID id, Category cat, Nature nat, Ability obj) * CategorizedAbilityFacet. If you wish to modify the information stored in * this CategorizedAbilityFacet, you must use the add*() and remove*() * methods of CategorizedAbilityFacet. - * + * * @param id * The CharID representing the Player Character for which the * items in this CategorizedAbilityFacet should be returned. @@ -172,7 +173,7 @@ public Set get(CharID id, Category cat, Nature nat) * Returns true if this CategorizedAbilityFacet contains the given Ability * in the list of items for the Player Character represented by the given * CharID. - * + * * @param id * The CharID representing the Player Character used for testing * @param cat @@ -227,7 +228,7 @@ private boolean ensureCachedSet(CharID id, Category cat, Nature nat) if (natureMap == null) { isNew = true; - natureMap = new HashMap<>(); + natureMap = new EnumMap<>(Nature.class); catMap.put(cat, natureMap); } Set abilitySet = natureMap.get(nat); @@ -245,12 +246,12 @@ private boolean ensureCachedSet(CharID id, Category cat, Nature nat) * Returns the type-safe Set for this CategorizedAbilityFacet and the given * CharID. May return null if no information has been set in this * CategorizedAbilityFacet for the given CharID. - * + * * Note that this method SHOULD NOT be public. The Set is owned by * CategorizedAbilityFacet, and since it can be modified, a reference to * that Set should not be exposed to any object other than * CategorizedAbilityFacet. - * + * * @param id * The CharID for which the Set should be returned * @param cat @@ -282,12 +283,12 @@ private Set getCachedSet(CharID id, Category cat, Nature nat) * Returns the type-safe Map for this CategorizedAbilityFacet and the given * CharID. May return null if no information has been set in this * CategorizedAbilityFacet for the given CharID. - * + * * Note that this method SHOULD NOT be public. The Map is owned by * CategorizedAbilityFacet, and since it can be modified, a reference to * that Map should not be exposed to any object other than * CategorizedAbilityFacet. - * + * * @param id * The CharID for which the Map should be returned * @return The Map for the Player Character represented by the given CharID; @@ -303,7 +304,7 @@ private Map, Map>> getCachedMap(CharID id * Removes all Abilities from the list of Abilities stored in this * CategorizedAbilityFacet for the Player Character represented by the given * CharID - * + * * @param id * The CharID representing the Player Character from which all * Abilities should be removed @@ -327,7 +328,7 @@ public void removeAll(CharID id) * Removes all of the Ability objects in the given Category from the lists * of Abilities stored in this CategorizedAbilityFacet for the Player * Character represented by the given CharID - * + * * @param id * The CharID representing the Player Character from which the * given Abilities should be removed @@ -356,7 +357,7 @@ public void removeAll(CharID id, Category cat) * Removes all of the objects of the given Category and Nature from the list * of Abilities stored in this CategorizedAbilityFacet for the Player * Character represented by the given CharID - * + * * @param id * The CharID representing the Player Character from which the * given Abilities should be removed @@ -403,7 +404,7 @@ private void processRemoveNatureMap(CharID id, Map> natMap) * Removes all of the Ability objects in the given Nature from the lists of * Abilities stored in this CategorizedAbilityFacet for the Player Character * represented by the given CharID - * + * * @param id * The CharID representing the Player Character from which the * given Abilities should be removed @@ -446,7 +447,7 @@ private void processRemoveAbilityMap(CharID id, Set abilitySet) * CharID. This method returns an empty set if no objects are in this * CategorizedAbilityFacet for the Player Character identified by the given * CharID. - * + * * This method is value-semantic in that ownership of the returned Set is * transferred to the class calling this method. Modification of the * returned Set will not modify this CategorizedAbilityFacet and @@ -456,7 +457,7 @@ private void processRemoveAbilityMap(CharID id, Set abilitySet) * CategorizedAbilityFacet. If you wish to modify the information stored in * this CategorizedAbilityFacet, you must use the add*() and remove*() * methods of CategorizedAbilityFacet. - * + * * @param id * The CharID representing the Player Character for which the * items in this CategorizedAbilityFacet should be returned. @@ -478,18 +479,18 @@ public Set> getCategories(CharID id) * Copies the contents of the CategorizedAbilityFacet from one Player * Character to another Player Character, based on the given CharIDs * representing those Player Characters. - * + * * This is a method in CategorizedAbilityFacet in order to avoid exposing * the mutable Map object to other classes. This should not be inlined, as * the Map is internal information to CategorizedAbilityFacet and should not * be exposed to other classes. - * + * * Note also the copy is a one-time event and no references are maintained * between the Player Characters represented by the given CharIDs (meaning * once this copy takes place, any change to the CategorizedAbilityFacet of * one Player Character will only impact the Player Character where the * CategorizedAbilityFacet was changed). - * + * * @param source * The CharID representing the Player Character from which the * information should be copied diff --git a/code/src/java/pcgen/cdom/facet/EquipSetFacet.java b/code/src/java/pcgen/cdom/facet/EquipSetFacet.java index 2247ac7ab35..a33dedb3098 100644 --- a/code/src/java/pcgen/cdom/facet/EquipSetFacet.java +++ b/code/src/java/pcgen/cdom/facet/EquipSetFacet.java @@ -79,6 +79,7 @@ public boolean delEquipSet(CharID id, EquipSet eSet) * @param oldItem the item to search for. * @param newItem The replacement item */ + @SuppressWarnings("PMD.UnusedNullCheckInEquals") public void updateEquipSetItem(CharID id, Equipment oldItem, Equipment newItem) { if (isEmpty(id)) @@ -111,6 +112,7 @@ public void updateEquipSetItem(CharID id, Equipment oldItem, Equipment newItem) * @param id The ID of the PC * @param eq The equipment to delete. */ + @SuppressWarnings("PMD.UnusedNullCheckInEquals") public void delEquipSetItem(CharID id, Equipment eq) { if (isEmpty(id)) diff --git a/code/src/java/pcgen/cdom/facet/fact/FactFacet.java b/code/src/java/pcgen/cdom/facet/fact/FactFacet.java index 0ac2d47cf83..4b78d7a5261 100644 --- a/code/src/java/pcgen/cdom/facet/fact/FactFacet.java +++ b/code/src/java/pcgen/cdom/facet/fact/FactFacet.java @@ -1,23 +1,23 @@ /* * Copyright (c) Thomas Parker, 2009. - * + * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. - * + * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package pcgen.cdom.facet.fact; -import java.util.HashMap; +import java.util.EnumMap; import java.util.Map; import pcgen.cdom.enumeration.CharID; @@ -26,7 +26,7 @@ /** * FactFacet stores basic String information about a Player Character. - * + * */ public class FactFacet extends AbstractStorageFacet { @@ -35,11 +35,11 @@ public class FactFacet extends AbstractStorageFacet * Returns the type-safe Map for this FactFacet and the given CharID. Will * return a new, empty Map if no information has been set in this FactFacet * for the given CharID. Will not return null. - * + * * Note that this method SHOULD NOT be public. The Map object is owned by * FactFacet, and since it can be modified, a reference to that object * should not be exposed to any object other than FactFacet. - * + * * @param id * The CharID for which the Map should be returned * @return The Map for the Player Character represented by the given CharID. @@ -49,7 +49,7 @@ private Map getConstructingInfo(CharID id) Map rci = getInfo(id); if (rci == null) { - rci = new HashMap<>(); + rci = new EnumMap<>(PCStringKey.class); setCache(id, rci); } return rci; @@ -59,11 +59,11 @@ private Map getConstructingInfo(CharID id) * Returns the type-safe Map for this FactFacet and the given CharID. May * return null if no information has been set in this FactFacet for the * given CharID. - * + * * Note that this method SHOULD NOT be public. The Map is owned by * FactFacet, and since it can be modified, a reference to that object * should not be exposed to any object other than FactFacet. - * + * * @param id * The CharID for which the Set should be returned * @return The Map for the Player Character represented by the given CharID; @@ -80,7 +80,7 @@ private Map getInfo(CharID id) * Sets a String to be contained in the FactFacet for the given StringKey * and Player Character identified by the given CharID. null is a legal * value in order to "unset" a String. - * + * * @param id * The CharID identifying the Player Character for which the * String should be set @@ -101,7 +101,7 @@ public void set(CharID id, PCStringKey key, String s) * Player Character identified by the given CharID. May return null if no * String is contained in the FactFacet for the StringKey and the Player * Character identified by the given CharID. - * + * * @param id * The CharID identifying the Player Character for which the * String should be returned @@ -125,18 +125,18 @@ public String get(CharID id, PCStringKey key) * Copies the contents of the FactFacet from one Player Character to another * Player Character, based on the given CharIDs representing those Player * Characters. - * + * * This is a method in FactFacet in order to avoid exposing the mutable Map * object to other classes. This should not be inlined, as the Map is * internal information to FactFacet and should not be exposed to other * classes. - * + * * Note also the copy is a one-time event and no references are maintained * between the Player Characters represented by the given CharIDs (meaning * once this copy takes place, any change to the FactFacet of one Player * Character will only impact the Player Character where the FactFacet was * changed). - * + * * @param source * The CharID representing the Player Character from which the * information should be copied diff --git a/code/src/java/pcgen/cdom/facet/fact/RegionFacet.java b/code/src/java/pcgen/cdom/facet/fact/RegionFacet.java index 15f39cef747..aea6960963b 100644 --- a/code/src/java/pcgen/cdom/facet/fact/RegionFacet.java +++ b/code/src/java/pcgen/cdom/facet/fact/RegionFacet.java @@ -1,16 +1,16 @@ /* * Copyright (c) Thomas Parker, 2009. - * + * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. - * + * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA @@ -34,7 +34,7 @@ * RegionFacet is a Facet that tracks the Region and SubRegion of a Player * Character. The Region and SubRegion can be set explicitly or inferred from * the PCTemplate objects possessed by the PlayerCharacter. - * + * */ public class RegionFacet extends AbstractDataFacet implements DataFacetChangeListener @@ -46,11 +46,11 @@ public class RegionFacet extends AbstractDataFacet * Returns the type-safe RegionCacheInfo for this RegionFacet and the given * CharID. Will return a new, empty RegionCacheInfo if no Region information * has been set for the given CharID. Will not return null. - * + * * Note that this method SHOULD NOT be public. The RegionCacheInfo object is * owned by RegionFacet, and since it can be modified, a reference to that * object should not be exposed to any object other than RegionFacet. - * + * * @param id * The CharID for which the RegionCacheInfo should be returned * @return The RegionCacheInfo for the Player Character represented by the @@ -71,11 +71,11 @@ private RegionCacheInfo getConstructingInfo(CharID id) * Returns the type-safe RegionCacheInfo for this RegionFacet and the given * CharID. May return null if no Region information has been set for the * given CharID. - * + * * Note that this method SHOULD NOT be public. The RegionCacheInfo object is * owned by RegionFacet, and since it can be modified, a reference to that * object should not be exposed to any object other than RegionFacet. - * + * * @param id * The CharID for which the RegionCacheInfo should be returned * @return The RegionCacheInfo for the Player Character represented by the @@ -91,7 +91,7 @@ private RegionCacheInfo getInfo(CharID id) * Sets the character Region for the Player Character represented by the * given CharID to the given Region. This set Region will override any * Region provided by a PCTemplate. - * + * * @param id * The CharID representing the Player Character for which the * Region will be set @@ -109,7 +109,7 @@ public void setRegion(CharID id, Region region) * Sets the character SubRegion for the Player Character represented by the * given CharID to the given SubRegion. This set SubRegion will override any * SubRegion provided by a PCTemplate. - * + * * @param id * The CharID representing the Player Character for which the * SubRegion will be set @@ -126,11 +126,11 @@ public void setSubRegion(CharID id, String subregion) * Returns a String representation of the character Region for the Player * Character represented by the given CharID. Returns "NONE" if no character * Region is set for the Player Character - * + * * **NOTE** Unless you are analyzing (or storing) raw values for a Player * Character, it is unlikely that you want this method. It is more likely * that you should be using getRegion(CharID id) - * + * * @param id * The CharID representing the Player Character for which the * character Region should be returned. @@ -151,7 +151,7 @@ public Optional getCharacterRegion(CharID id) /** * Returns an Optional Region for the Player Character represented by the given * CharID. - * + * * @param id * The CharID representing the Player Character for which the Region should * be returned. @@ -167,7 +167,7 @@ public Optional getRegion(CharID id) * Returns a String representation of the Region for the Player Character * represented by the given CharID. Returns "NONE" if no Region is set for * the Player Character. - * + * * @param id * The CharID representing the Player Character for which the * Region should be returned. @@ -195,7 +195,7 @@ private Optional getTemplateRegion(CharID id) * given CharID matches the given Region. This method tests the Region * (which includes Region as set by PCTemplate objects), not solely the * character Region. This does not compare the SubRegion. - * + * * @param id * The CharID representing the Player Character for which the * given Region will be tested to see if it matches the Player @@ -216,13 +216,13 @@ public boolean matchesRegion(CharID id, Region r) * Returns a String representation of the character SubRegion for the Player * Character represented by the given CharID. Returns "NONE" if no character * SubRegion is set for the Player Character - * + * * **NOTE** Unless you are analyzing (or storing) raw values for a Player * Character, it is unlikely that you want this method. It is more likely * that you should be using getSubRegion(CharID id) - * + * * @see RegionFacet#getSubRegion(CharID) - * + * * @param id * The CharID representing the Player Character for which the * character SubRegion should be returned. @@ -245,7 +245,7 @@ public Optional getCharacterSubRegion(CharID id) * Returns a String representation of the SubRegion for the Player Character * represented by the given CharID. Returns "NONE" if no SubRegion is set * for the Player Character. - * + * * @param id * The CharID representing the Player Character for which the * Region should be returned. @@ -273,7 +273,7 @@ public Optional getSubRegion(CharID id) * Returns a String representation of the full Region (Region and SubRegion) * for the Player Character represented by the given CharID. Returns "NONE" * if no Region is set for the Player Character. - * + * * @param id * The CharID representing the Player Character for which the * full Region should be returned. @@ -286,7 +286,7 @@ public String getFullRegion(CharID id) Optional sub = getSubRegion(id); StringBuilder tempRegName = new StringBuilder(40).append(getRegionString(id)); - sub.ifPresent(subRegion -> tempRegName.append(" (").append(subRegion.toString()).append(')')); + sub.ifPresent(subRegion -> tempRegName.append(" (").append(subRegion).append(')')); return tempRegName.toString(); } @@ -333,17 +333,17 @@ public boolean equals(Object o) * Copies the contents of the RegionFacet from one Player Character to * another Player Character, based on the given CharIDs representing those * Player Characters. - * + * * This is a method in RegionFacet in order to avoid exposing the mutable * RegionCacheInfo object to other classes. This should not be inlined, as * RegionCacheInfo is internal information to RegionFacet and should not be * exposed to other classes. - * + * * Note also the copy is a one-time event and no Region references are * maintained between the Player Characters represented by the given CharIDs * (meaning once this copy takes place, any change to the Region will only * impact the Player Character where the Region was changed). - * + * * @param source * The CharID representing the Player Character from which the * Region information should be copied @@ -366,11 +366,11 @@ public void copyContents(CharID source, CharID destination) /** * Drives an update of the Region and SubRegion for a Player Character when * a CDOMObject is added to a Player Character. - * + * * Triggered when one of the Facets to which RegionFacet listens fires a * DataFacetChangeEvent to indicate a CDOMObject was added to a Player * Character. - * + * * @param dfce * The DataFacetChangeEvent containing the information about the * change @@ -397,11 +397,11 @@ private void updateRegion(CharID id) /** * Drives an update of the Region and SubRegion for a Player Character when * a CDOMObject is removed from a Player Character. - * + * * Triggered when one of the Facets to which RegionFacet listens fires a * DataFacetChangeEvent to indicate a CDOMObject was removed from a Player * Character. - * + * * @param dfce * The DataFacetChangeEvent containing the information about the * change diff --git a/code/src/java/pcgen/cdom/facet/model/ClassFacet.java b/code/src/java/pcgen/cdom/facet/model/ClassFacet.java index 22dede1dd04..111fa11a6d6 100644 --- a/code/src/java/pcgen/cdom/facet/model/ClassFacet.java +++ b/code/src/java/pcgen/cdom/facet/model/ClassFacet.java @@ -1,16 +1,16 @@ /* * Copyright (c) Thomas Parker, 2009. - * + * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. - * + * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA @@ -41,7 +41,7 @@ /** * ClassFacet is a Facet that tracks the PCClass objects possessed by a Player * Character. - * + * */ public class ClassFacet extends AbstractDataFacet implements SetFacet { @@ -50,7 +50,7 @@ public class ClassFacet extends AbstractDataFacet implements Se /** * Add the given PCClass to the list of PCClass objects stored in this * ClassFacet for the Player Character represented by the given CharID. - * + * * @param id * The CharID representing the Player Character for which the * given PCClass should be added @@ -73,10 +73,10 @@ public void addClass(CharID id, PCClass obj) * Character represented by the given CharID. Returns true if the set is successful. * The set will be successful if the given PCClass is possessed by the given * PlayerCharacter; false otherwise. - * + * * The (numeric) class level for which the given PCClassLevel should be applied is * determined by the level value set in the PCClassLevel. - * + * * @param id * The CharID representing the Player Character for which the given * PCClassLevel should be set @@ -109,7 +109,7 @@ public boolean setClassLevel(CharID id, PCClass pcc, PCClassLevel pcl) throws Cl * Returns the PCClassLevel object associated with the Player Character * represented by the given CharID, the given PCClass, and the given * (numeric) class level. - * + * * @param id * The CharID representing the Player Character for which the * associated PCClassLevel will be returned @@ -136,7 +136,7 @@ public PCClassLevel getClassLevel(CharID id, PCClass obj, int level) /** * Remove the given PCClass from the list of PCClass objects stored in this * ClassFacet for the Player Character represented by the given CharID. - * + * * @param id * The CharID representing the Player Character from which the * given PCClass should be removed @@ -167,7 +167,7 @@ public void removeClass(CharID id, PCClass obj) /** * Removes all PCClass objects from the list of PCClass objects stored in * this ClassFacet for the Player Character represented by the given CharID. - * + * * @param id * The CharID representing the Player Character from which all * PCClass objects should be removed @@ -190,7 +190,7 @@ public ClassInfo removeAllClasses(CharID id) /** * Replaces the given old PCClass stored in this ClassFacet with the given * new PCClass for the Player Character represented by the given CharID. - * + * * @param id * The CharID representing the Player Character from which the * given old PCClass should be replaced @@ -217,7 +217,7 @@ public void replaceClass(CharID id, PCClass oldClass, PCClass newClass) * for the Player Character represented by the given CharID. This method * returns an empty Set if no objects are in this ClassFacet for the Player * Character identified by the given CharID. - * + * * This method is value-semantic in that ownership of the returned List is * transferred to the class calling this method. Modification of the * returned List will not modify this ClassFacet and modification of this @@ -226,7 +226,7 @@ public void replaceClass(CharID id, PCClass oldClass, PCClass newClass) * returned by this (or other) methods on ClassFacet. If you wish to modify * the information stored in this ClassFacet, you must use the add*() and * remove*() methods of ClassFacet. - * + * * @param id * The CharID representing the Player Character for which the * items in this ClassFacet should be returned. @@ -247,7 +247,7 @@ public Set getSet(CharID id) /** * Returns the count of PCClass objects in this ClassFacet for the Player * Character represented by the given CharID. - * + * * @param id * The CharID representing the Player Character for which the * count of PCClass objects should be returned @@ -268,7 +268,7 @@ public int getCount(CharID id) /** * Returns true if this ClassFacet does not contain any PCClass objects for * the Player Character represented by the given CharID. - * + * * @param id * The CharId representing the PlayerCharacter to test if any * PCClass objects are contained by this AbstractListFacet @@ -285,7 +285,7 @@ public boolean isEmpty(CharID id) /** * Returns true if this ClassFacet contains the given PCClass in the list of * PCClass objects for the Player Character represented by the given CharID. - * + * * @param id * The CharID representing the Player Character used for testing * @param obj @@ -303,7 +303,7 @@ public boolean contains(CharID id, PCClass obj) /** * Sets the level for the given PCClass and the Player Character identified * by the given CharID to the given value. - * + * * @param id * The CharID identifying the Player Character for which a level * value is being set @@ -322,7 +322,7 @@ public void setLevel(CharID id, PCClass pcc, int level) /** * Returns the current (numerical) level for the given PCClass in the Player * Character identified by the given CharID. - * + * * @param id * The CharID identifying the Player Character for which the * level of the given PCClass should be returned @@ -342,11 +342,11 @@ public int getLevel(CharID id, PCClass pcc) * Returns the ClassInfo for this ClassFacet and the given CharID. May * return null if no information has been set in this ClassFacet for the * given CharID. - * + * * Note that this method SHOULD NOT be public. The ClassInfo is owned by * ClassFacet, and since it can be modified, a reference to that object * should not be exposed to any object other than ClassFacet. - * + * * @param id * The CharID for which the ClassInfo should be returned * @return The ClassInfo for the Player Character represented by the given @@ -362,11 +362,11 @@ private ClassInfo getClassInfo(CharID id) * Returns a ClassInfo for this ClassFacet and the given CharID. Will return * a new, empty ClassInfo if no information has been set in this ClassFacet * for the given CharID. Will not return null. - * + * * Note that this method SHOULD NOT be public. The ClassInfo object is owned * by ClassFacet, and since it can be modified, a reference to that object * should not be exposed to any object other than ClassFacet. - * + * * @param id * The CharID for which the ClassInfo should be returned * @return The ClassInfo for the Player Character represented by the given @@ -388,7 +388,7 @@ private ClassInfo getConstructingClassInfo(CharID id) * global character cache. This stores both the PCClassLevel objects active * for a PCClass and Player Character, as well as the levels of the * PCClasses for a Player Character. - * + * */ public static class ClassInfo { @@ -430,7 +430,7 @@ public Integer setLevel(PCClass pcc, int level) "Cannot set level for PCClass " + pcc.getKeyName() + " which is not added"); } Integer oldlvl = levelmap.put(pcc, level); - return (oldlvl == null) ? 0 : oldlvl; + return (oldlvl == null) ? Integer.valueOf(0) : oldlvl; } public int getLevel(PCClass pcc) @@ -619,7 +619,7 @@ public ClassLevelChangeEvent(CharID source, PCClass pcc, int oldLevel, int newLe /** * Returns an identifier indicating the PlayerCharacter on which this * event occurred. - * + * * @return A identifier indicating the PlayerCharacter on which this * event occurred. */ @@ -671,7 +671,7 @@ public ClassLevelObjectChangeEvent(CharID source, PCClass pcc, PCClassLevel oldL /** * Returns an identifier indicating the PlayerCharacter on which this * event occurred. - * + * * @return A identifier indicating the PlayerCharacter on which this * event occurred. */ @@ -707,7 +707,7 @@ public static class ClassLevelChangeSupport /** * Adds a new ClassLevelChangeListener to receive LevelChangeEvents * (EdgeChangeEvent and NodeChangeEvent) from the source ClassFacet. - * + * * @param listener * The LevelChangeListener to receive LevelChangeEvents */ @@ -719,13 +719,13 @@ public void addLevelChangeListener(ClassLevelChangeListener listener) /** * Returns an Array of LevelChangeListeners receiving LevelChangeEvents * from the source ClassFacet. - * + * * Ownership of the returned Array is transferred to the calling Object. * No reference to the Array is maintained by ClassLevelChangeSupport. * However, the LevelChangeListeners contained in the Array are * (obviously!) returned BY REFERENCE, and care should be taken with * modifying those LevelChangeListeners.* - * + * * @return An Array of LevelChangeListeners receiving LevelChangeEvents * from the source ClassFacet */ @@ -737,7 +737,7 @@ public synchronized ClassLevelChangeListener[] getLevelChangeListeners() /** * Removes a LevelChangeListener so that it will no longer receive * LevelChangeEvents from the source ClassFacet. - * + * * @param listener * The LevelChangeListener to be removed */ @@ -749,7 +749,7 @@ public void removeLevelChangeListener(ClassLevelChangeListener listener) /** * Sends a NodeChangeEvent to the LevelChangeListeners that are * receiving LevelChangeEvents from the source ClassFacet. - * + * * @param id * The CharID that has beed added to or removed from the source * ClassFacet @@ -759,7 +759,7 @@ public void removeLevelChangeListener(ClassLevelChangeListener listener) * by the given CharID * @param oldLevel * The chracter's previous level - * + * * @param newLevel * The new level specified by the user. */ diff --git a/code/src/java/pcgen/cdom/formula/PluginFunctionLibrary.java b/code/src/java/pcgen/cdom/formula/PluginFunctionLibrary.java index e09e0a67bd4..b3921f79c28 100644 --- a/code/src/java/pcgen/cdom/formula/PluginFunctionLibrary.java +++ b/code/src/java/pcgen/cdom/formula/PluginFunctionLibrary.java @@ -1,16 +1,16 @@ /* * Copyright 2016 (C) Tom Parker - * + * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. - * + * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. - * + * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -30,7 +30,7 @@ public final class PluginFunctionLibrary implements PluginLoader private static PluginFunctionLibrary instance = null; - private ArrayList list = new ArrayList<>(); + private List list = new ArrayList<>(); private PluginFunctionLibrary() { diff --git a/code/src/java/pcgen/core/Equipment.java b/code/src/java/pcgen/core/Equipment.java index 88fe8c11f41..6327e28b65e 100644 --- a/code/src/java/pcgen/core/Equipment.java +++ b/code/src/java/pcgen/core/Equipment.java @@ -727,7 +727,7 @@ public BigDecimal getCost(final PlayerCharacter aPC) // if (!ignoresCostDouble()) { - c1 = c1.subtract(nonDoubleCost).multiply(new BigDecimal("2")); + c1 = c1.subtract(nonDoubleCost).multiply(BigDecimal.TWO); c1 = c1.add(nonDoubleCost); // c = c.multiply(new BigDecimal("2")); diff --git a/code/src/java/pcgen/core/PlayerCharacter.java b/code/src/java/pcgen/core/PlayerCharacter.java index 0f3f5f5cacc..9f3e3a7c749 100644 --- a/code/src/java/pcgen/core/PlayerCharacter.java +++ b/code/src/java/pcgen/core/PlayerCharacter.java @@ -5408,7 +5408,6 @@ public int minXPForNextECL() */ private Load getHouseRuledLoadType() { - System.out.println("getHouseRuledLoadType"); if (Globals.checkRule(RuleConstants.SYS_LDPACSK)) { return getLoadType(); diff --git a/code/src/java/pcgen/core/analysis/EqModCost.java b/code/src/java/pcgen/core/analysis/EqModCost.java index cb01ce6e426..c50d2390a9f 100644 --- a/code/src/java/pcgen/core/analysis/EqModCost.java +++ b/code/src/java/pcgen/core/analysis/EqModCost.java @@ -90,7 +90,7 @@ public static BigDecimal addItemCosts(EquipmentModifier eqMod, final PlayerChara val += eqMod.bonusTo(aPC, bonusType, typeString, parent); } - return new BigDecimal(val * qty); + return BigDecimal.valueOf(val * qty); } public static boolean getCostDouble(EquipmentModifier eqMod) diff --git a/code/src/java/pcgen/core/chooser/AbilityChooseController.java b/code/src/java/pcgen/core/chooser/AbilityChooseController.java index 8059c0618e1..2c793930a00 100644 --- a/code/src/java/pcgen/core/chooser/AbilityChooseController.java +++ b/code/src/java/pcgen/core/chooser/AbilityChooseController.java @@ -89,7 +89,7 @@ public void adjustPool(List selected) int choicesPerUnitCost = ccm.getChoicesPerUnitCost(); int basePriorCost = ((preChooserChoices + (choicesPerUnitCost - 1)) / choicesPerUnitCost); int baseTotalCost = ((selected.size() + (choicesPerUnitCost - 1)) / choicesPerUnitCost); - pc.adjustAbilities(AbilityCategory.FEAT, new BigDecimal(cost * (basePriorCost - baseTotalCost))); + pc.adjustAbilities(AbilityCategory.FEAT, BigDecimal.valueOf(cost * (basePriorCost - baseTotalCost))); } } } diff --git a/code/src/java/pcgen/gui2/converter/panel/RunConvertPanel.java b/code/src/java/pcgen/gui2/converter/panel/RunConvertPanel.java index 96658108089..d3db6508de2 100644 --- a/code/src/java/pcgen/gui2/converter/panel/RunConvertPanel.java +++ b/code/src/java/pcgen/gui2/converter/panel/RunConvertPanel.java @@ -123,7 +123,7 @@ public boolean performAnalysis(final CDOMObject pc) .filter(PCGFile::isPCGenCampaignFile) .map(uri -> Globals.getCampaignByURI(uri, false)) .filter(Objects::nonNull) - .forEach(subcampaign -> totalCampaigns.add(subcampaign)); + .forEach(totalCampaigns::add); } sortCampaignsByRank(totalCampaigns); @@ -336,7 +336,7 @@ private void setCurrentFileCount(int curr) } /** - * A log handler to capture load errors and warnings and + * A log handler to capture load errors and warnings and * display them in the message section of the panel. */ private final class LoadHandler extends Handler diff --git a/code/src/java/pcgen/gui2/equip/EquipCustomPanel.java b/code/src/java/pcgen/gui2/equip/EquipCustomPanel.java index 021e98b8f5a..80fee779ac1 100644 --- a/code/src/java/pcgen/gui2/equip/EquipCustomPanel.java +++ b/code/src/java/pcgen/gui2/equip/EquipCustomPanel.java @@ -22,7 +22,7 @@ import java.awt.event.ActionEvent; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; +import java.util.EnumMap; import java.util.List; import java.util.Map; @@ -74,9 +74,9 @@ /** * The Class {@code EquipCustomPanel} displays an available/selected table - * pair to allow the creation of a custom piece of equipment.. + * pair to allow the creation of a custom piece of equipment.. + * * - * */ public final class EquipCustomPanel extends FlippingSplitPane { @@ -153,12 +153,12 @@ public EquipCustomPanel(CharacterFacade character, EquipmentBuilderFacade builde } /** - * Setup any data related to multiple equipment heads. + * Setup any data related to multiple equipment heads. */ private void initHeadMaps() { - availEqmodModelMap = new HashMap<>(); - selectedEqmodModelMap = new HashMap<>(); + availEqmodModelMap = new EnumMap<>(EquipmentBuilderFacade.EquipmentHead.class); + selectedEqmodModelMap = new EnumMap<>(EquipmentBuilderFacade.EquipmentHead.class); for (EquipmentHead head : validHeads) { @@ -679,7 +679,7 @@ public List> getPaths(EquipmentModifier pobj) } /** - * Create a TreeViewPath for the equipment modifier and paths. + * Create a TreeViewPath for the equipment modifier and paths. * @param pobj The equipment modifier * @param path The paths under which the equipment modifier should be shown. * @return The TreeViewPath. diff --git a/code/src/java/pcgen/gui2/facade/EquipmentBuilderFacadeImpl.java b/code/src/java/pcgen/gui2/facade/EquipmentBuilderFacadeImpl.java index b532fc5106b..bf9cf2941b7 100644 --- a/code/src/java/pcgen/gui2/facade/EquipmentBuilderFacadeImpl.java +++ b/code/src/java/pcgen/gui2/facade/EquipmentBuilderFacadeImpl.java @@ -20,8 +20,8 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; +import java.util.EnumMap; import java.util.EnumSet; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -56,12 +56,12 @@ import org.apache.commons.lang3.StringUtils; /** - * EquipmentBuilderFacadeImpl is an implementation of the - * {@link EquipmentBuilderFacade} interface for the new user interface. It is - * intended to allow the ui to control the creation of a custom item of + * EquipmentBuilderFacadeImpl is an implementation of the + * {@link EquipmentBuilderFacade} interface for the new user interface. It is + * intended to allow the ui to control the creation of a custom item of * equipment without direct interaction with the core. - * - * + * + * */ public class EquipmentBuilderFacadeImpl implements EquipmentBuilderFacade { @@ -76,7 +76,7 @@ public class EquipmentBuilderFacadeImpl implements EquipmentBuilderFacade private final DefaultReferenceFacade sizeRef; /** - * Create a new EquipmentBuilderFacadeImpl instance for the customization of + * Create a new EquipmentBuilderFacadeImpl instance for the customization of * a particular item of equipment for the character. * @param equip The equipment item being customized (must not be the base item). * @param character The character the equipment will be for. @@ -97,8 +97,8 @@ public class EquipmentBuilderFacadeImpl implements EquipmentBuilderFacade equipHeads = equip.isDouble() ? EnumSet.range(EquipmentHead.PRIMARY, EquipmentHead.SECONDARY) : EnumSet.of(EquipmentHead.PRIMARY); - availListMap = new HashMap<>(); - selectedListMap = new HashMap<>(); + availListMap = new EnumMap<>(EquipmentBuilderFacade.EquipmentHead.class); + selectedListMap = new EnumMap<>(EquipmentBuilderFacade.EquipmentHead.class); for (EquipmentHead head : equipHeads) { availListMap.put(head, new DefaultListFacade<>()); diff --git a/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java b/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java index c9d108d12b3..90bf6346875 100644 --- a/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java +++ b/code/src/java/pcgen/gui2/facade/Gui2InfoFactory.java @@ -123,10 +123,10 @@ /** * The Class {@code Gui2InfoFactory} provides character related information - * on various facade objects. The information is displayed to the user via the - * new user interface. + * on various facade objects. The information is displayed to the user via the + * new user interface. + * * - * */ public class Gui2InfoFactory implements InfoFactory { @@ -194,7 +194,7 @@ public String getHTMLInfo(Race race) infoText.appendLineBreak(); String size = getSize(race); - + if (StringUtils.isNotEmpty(size)) { infoText.appendI18nElement("in_size", size); //$NON-NLS-1$ @@ -1745,7 +1745,7 @@ private String produceSpellBookInfo(SpellBook book) b.appendLineBreak(); b.append(LanguageBundle.getFormattedString("InfoSpells.html.spellbook.details", //$NON-NLS-1$ - new Object[]{book.getNumPages(), book.getNumPagesUsed(), book.getPageFormula(), book.getNumSpells()})); + book.getNumPages(), book.getNumPagesUsed(), book.getPageFormula(), book.getNumSpells())); if (book.getDescription() != null) { @@ -1980,11 +1980,11 @@ else if (originObj instanceof Ability ab) } /** - * Retrieve a wrapped instance of the provided ability, whether the - * character has the ability or not. This will either be a list of the - * specific occurrences of the ability the character, or a list of a new + * Retrieve a wrapped instance of the provided ability, whether the + * character has the ability or not. This will either be a list of the + * specific occurrences of the ability the character, or a list of a new * CNAbility if the character does not possess the ability. - * + * * @param a The ability to be wrapped. * @return The list of wrapped abilities. */ diff --git a/code/src/java/pcgen/io/exporttoken/WeaponToken.java b/code/src/java/pcgen/io/exporttoken/WeaponToken.java index 299b32b681b..898964de62d 100644 --- a/code/src/java/pcgen/io/exporttoken/WeaponToken.java +++ b/code/src/java/pcgen/io/exporttoken/WeaponToken.java @@ -196,10 +196,10 @@ else if (eh != null && eh.getExistsOnly()) /** * Get the Weapon Token output - * + * * @param pc The character being exported * @param eq The weapon being exported - * @param aTok The exporttoken split by . and up to the weapon property + * @param aTok The exporttoken split by . and up to the weapon property * @param tokenSource The original source of the export token (for error reporting.) * @return The output for the token for the weapon and character. */ @@ -719,8 +719,8 @@ public static String getNewCritMultString(PlayerCharacter pc, Equipment eq, Stri /** * Retrieve the proficiency name for the provided item of equipment. That is - * the name of the weapon proficiency that is required to correctly use the - * item. + * the name of the weapon proficiency that is required to correctly use the + * item. * @param eq The equipment item. * @return The name of the proficiency, or empty string if no proficiency is defined. */ @@ -2541,8 +2541,8 @@ private static String weaponTypes(Equipment eq, boolean primary) GameMode game = SettingsHandler.getGameAsProperty().get(); TreeSet set = game.getWeaponTypes().stream() .filter(type -> eq.isType(type, primary)) - .map(type -> game.getWeaponTypeAbbrev(type)) - .collect(Collectors.toCollection(() -> new TreeSet<>())); + .map(game::getWeaponTypeAbbrev) + .collect(Collectors.toCollection(TreeSet::new)); return StringUtil.join(set, ""); } diff --git a/code/src/java/pcgen/persistence/lst/LstFileLoader.java b/code/src/java/pcgen/persistence/lst/LstFileLoader.java index d44a9058f05..0396d470f96 100644 --- a/code/src/java/pcgen/persistence/lst/LstFileLoader.java +++ b/code/src/java/pcgen/persistence/lst/LstFileLoader.java @@ -102,12 +102,14 @@ public static String readFromURI(URI uri) throws PersistenceLayerException } else if (SettingsHandler.isLoadURLs()) // load from remote URIs { - HttpClient client = HttpClient.newHttpClient(); - HttpRequest request = HttpRequest.newBuilder() - .uri(uri) - .build(); - HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); - return response.body(); + try (HttpClient client = HttpClient.newHttpClient()) + { + HttpRequest request = HttpRequest.newBuilder() + .uri(uri) + .build(); + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + return response.body(); + } } else { diff --git a/code/src/java/pcgen/persistence/lst/LstObjectFileLoader.java b/code/src/java/pcgen/persistence/lst/LstObjectFileLoader.java index 207671dbd7e..0d7e6eaffea 100644 --- a/code/src/java/pcgen/persistence/lst/LstObjectFileLoader.java +++ b/code/src/java/pcgen/persistence/lst/LstObjectFileLoader.java @@ -165,6 +165,7 @@ public void completeObject(LoadContext context, SourceEntry source, final T pObj } } + @SuppressWarnings("PMD.UnusedNullCheckInEquals") private void storeObject(LoadContext context, T pObj) { final T currentObj = getMatchingObject(context, pObj); diff --git a/code/src/java/pcgen/rules/persistence/token/AbstractPreEqualConvertPlugin.java b/code/src/java/pcgen/rules/persistence/token/AbstractPreEqualConvertPlugin.java index 874a85e99a2..3c400fd728f 100644 --- a/code/src/java/pcgen/rules/persistence/token/AbstractPreEqualConvertPlugin.java +++ b/code/src/java/pcgen/rules/persistence/token/AbstractPreEqualConvertPlugin.java @@ -34,6 +34,7 @@ public abstract class AbstractPreEqualConvertPlugin implements TokenProcessorPlu public static final String SET_ONE = "Set unspecified values to one (identify as 'present')"; // Just process over these magical tokens for now + @SuppressWarnings("PMD.UseArraysAsList") @Override public String process(TokenProcessEvent tpe) { diff --git a/code/src/java/pcgen/system/ConfigurationSettings.java b/code/src/java/pcgen/system/ConfigurationSettings.java index 853686dd7d8..7caaa45f672 100644 --- a/code/src/java/pcgen/system/ConfigurationSettings.java +++ b/code/src/java/pcgen/system/ConfigurationSettings.java @@ -1,20 +1,20 @@ /* * Copyright 2009 Connor Petty - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ package pcgen.system; @@ -24,7 +24,6 @@ public final class ConfigurationSettings extends PropertyContext { - private static final String USER_LANGUAGE = "language"; private static final String USER_COUNTRY = "country"; public static final String SETTINGS_FILES_PATH = "settingsPath"; @@ -164,7 +163,12 @@ private static String getDirectory(String key) private static String expandRelativePath(String path) { - if (path.startsWith("@")) + // TODO: a dirty hack for Mac bundles only + if (SystemUtils.USER_DIR.endsWith("MacOS") && path.startsWith("@")) + { + path = SystemUtils.USER_DIR + File.separator + ".." + File.separator + "app" + File.separator + path.substring(1); + } + else if (path.startsWith("@")) { path = SystemUtils.USER_DIR + File.separator + path.substring(1); } diff --git a/code/src/java/pcgen/system/FacadeFactory.java b/code/src/java/pcgen/system/FacadeFactory.java index 470431be0b5..ad127234a48 100644 --- a/code/src/java/pcgen/system/FacadeFactory.java +++ b/code/src/java/pcgen/system/FacadeFactory.java @@ -1,20 +1,20 @@ /* * Copyright 2010 Connor Petty - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * */ package pcgen.system; @@ -159,8 +159,8 @@ private static void initGameModes(List modes) private static void initDisplayedSources() { IntStream.range(0, quickSources.getSize()) - .mapToObj(i -> quickSources.getElementAt(i)) - .forEach(selection -> displayedSources.addElement(selection)); + .mapToObj(quickSources::getElementAt) + .forEach(displayedSources::addElement); } private static void initCustomSourceSelections() diff --git a/code/src/java/pcgen/system/Main.java b/code/src/java/pcgen/system/Main.java index 879dd248e68..5e528ac22bb 100644 --- a/code/src/java/pcgen/system/Main.java +++ b/code/src/java/pcgen/system/Main.java @@ -24,9 +24,12 @@ import java.awt.GraphicsEnvironment; import java.io.File; import java.io.IOException; +import java.util.Arrays; import java.util.Locale; import java.util.Optional; +import java.util.function.Predicate; import java.util.logging.Level; +import java.util.stream.Collectors; import javax.swing.JOptionPane; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.SystemUtils; @@ -215,31 +218,31 @@ private static void configureUI() private static void validateEnvironment(boolean useGui) { // Check our main folders are present - String[] neededDirs = {ConfigurationSettings.getSystemsDir(), ConfigurationSettings.getPccFilesDir(), - ConfigurationSettings.getPluginsDir(), ConfigurationSettings.getPreviewDir(), - ConfigurationSettings.getOutputSheetsDir()}; - StringBuilder missingDirs = new StringBuilder(); - for (final String dirPath : neededDirs) - { - File dir = new File(dirPath); - if (!dir.exists()) - { - String path = dirPath; - try - { - path = dir.getCanonicalPath(); - } - catch (IOException e) - { - Logging.errorPrint("Unable to find canonical path for " + dir); - } - missingDirs.append(" ").append(path).append('\n'); - } - } + String[] neededDirs = { + ConfigurationSettings.getSystemsDir(), ConfigurationSettings.getPccFilesDir(), + ConfigurationSettings.getPluginsDir(), ConfigurationSettings.getPreviewDir(), + ConfigurationSettings.getOutputSheetsDir() + }; + String missingDirs = Arrays.stream(neededDirs) + .map(File::new) + .filter(Predicate.not(File::exists)) + .map(dir -> { + try + { + return dir.getCanonicalPath(); + } + catch (IOException e) + { + Logging.errorPrint("Unable to find canonical path for " + dir); + return dir.getPath(); + } + }) + .map(path -> " " + path) + .collect(Collectors.joining("\n")); + if (!missingDirs.isEmpty()) { - String message; - message = "This installation of PCGen is missing the following required folders:\n" + missingDirs; + String message = "This installation of PCGen is missing the following required folders:\n" + missingDirs; Logging.errorPrint(message); if (useGui) { diff --git a/code/src/java/pcgen/system/PluginClassLoader.java b/code/src/java/pcgen/system/PluginClassLoader.java index 6a8abd7529f..7c5ce16a984 100644 --- a/code/src/java/pcgen/system/PluginClassLoader.java +++ b/code/src/java/pcgen/system/PluginClassLoader.java @@ -178,8 +178,7 @@ public void loadPlugins() Future future = dispatcher.submit(dispatcher::shutdown); try { - //This is done to cause this thread to wait until the shutdown task - //has been executed. + // This is done to cause this thread to wait until the shutdown task has been executed. future.get(); } catch (ExecutionException | InterruptedException ex) @@ -188,6 +187,7 @@ public void loadPlugins() } } + @SuppressWarnings("PMD.UseArraysAsList") private void findJarFiles(File pluginDir) { if (!pluginDir.isDirectory()) @@ -199,18 +199,18 @@ private void findJarFiles(File pluginDir) { for (final File file : pluginFiles) { - if (file.isDirectory()) - { - findJarFiles(file); - continue; - } - jarFiles.add(file); + if (file.isDirectory()) + { + findJarFiles(file); + continue; + } + jarFiles.add(file); } } else { Logging.errorPrint("pluginFiles array was NULL after trying to load the plugins from the plugin class loader"); - } + } } private void loadClasses() diff --git a/code/src/java/plugin/bonustokens/MinClassSkillPts.java b/code/src/java/plugin/bonustokens/MinClassSkillPoints.java similarity index 96% rename from code/src/java/plugin/bonustokens/MinClassSkillPts.java rename to code/src/java/plugin/bonustokens/MinClassSkillPoints.java index ab7d52ba85d..c6b0d64046d 100644 --- a/code/src/java/plugin/bonustokens/MinClassSkillPts.java +++ b/code/src/java/plugin/bonustokens/MinClassSkillPoints.java @@ -22,7 +22,7 @@ /** * Handles the BONUS:MINCLASSSKILLPOINTS token. */ -public final class MinClassSkillPts extends MultiTagBonusObj +public final class MinClassSkillPoints extends MultiTagBonusObj { private static final String[] BONUS_TAGS = {"NUMBER", "LOCKNUMBER"}; diff --git a/code/src/java/plugin/converter/PreVisionConvertPlugin.java b/code/src/java/plugin/converter/PreVisionConvertPlugin.java index fd920326946..7de43acee2e 100644 --- a/code/src/java/plugin/converter/PreVisionConvertPlugin.java +++ b/code/src/java/plugin/converter/PreVisionConvertPlugin.java @@ -33,6 +33,7 @@ public class PreVisionConvertPlugin implements TokenProcessorPlugin public static final String SET_ZERO_ANY = "Set zero values to ANY (identify as 'present')"; public static final String SET_ZERO_ONE = "Set zero values to 1 (identify as 'possessing distance')"; + @SuppressWarnings("PMD.UseArraysAsList") @Override public String process(TokenProcessEvent tpe) { @@ -84,9 +85,9 @@ public String process(TokenProcessEvent tpe) boolean withoutEquals = false; boolean lastWithEquals = false; List list = new ArrayList<>(); - for (String tok : strings) + for (String token : strings) { - int equalLoc = tok.indexOf('='); + int equalLoc = token.indexOf('='); if (equalLoc == -1) { withoutEquals = true; @@ -97,7 +98,7 @@ public String process(TokenProcessEvent tpe) withEquals++; lastWithEquals = true; } - list.add(tok); + list.add(token); } if (withEquals == 1 && lastWithEquals) { diff --git a/code/src/java/plugin/converter/PreVisionInvertedConvertPlugin.java b/code/src/java/plugin/converter/PreVisionInvertedConvertPlugin.java index e6b7bb6232a..7a09249a5a6 100644 --- a/code/src/java/plugin/converter/PreVisionInvertedConvertPlugin.java +++ b/code/src/java/plugin/converter/PreVisionInvertedConvertPlugin.java @@ -33,6 +33,7 @@ public class PreVisionInvertedConvertPlugin implements TokenProcessorPlugin public static final String SET_ZERO_ANY = "Set zero values to ANY (identify as 'present')"; public static final String SET_ZERO_ONE = "Set zero values to 1 (identify as 'possessing distance')"; + @SuppressWarnings("PMD.UseArraysAsList") @Override public String process(TokenProcessEvent tpe) { diff --git a/code/src/java/plugin/exporttokens/HitDiceToken.java b/code/src/java/plugin/exporttokens/HitDiceToken.java index 4907ee80387..fe96b5b5689 100644 --- a/code/src/java/plugin/exporttokens/HitDiceToken.java +++ b/code/src/java/plugin/exporttokens/HitDiceToken.java @@ -122,7 +122,6 @@ public static String getMediumToken(PlayerCharacter pc) { StringBuilder ret = new StringBuilder(); String del = ""; - Integer total = 0; HashMap hdMap = new LinkedHashMap<>(); @@ -138,12 +137,12 @@ public static String getMediumToken(PlayerCharacter pc) ret.append(getShortToken(display)); ret.append(" HD; "); } + for (final Map.Entry entry : hdMap.entrySet()) { Integer value = entry.getValue(); ret.append(del); ret.append(value).append('d').append((int) entry.getKey()); - total += value; del = "+"; } diff --git a/code/src/test/pcgen/core/prereq/PreClassTest.java b/code/src/test/pcgen/core/prereq/PreClassTest.java index 919dd7ab0a0..fb7a753d8d1 100644 --- a/code/src/test/pcgen/core/prereq/PreClassTest.java +++ b/code/src/test/pcgen/core/prereq/PreClassTest.java @@ -508,21 +508,6 @@ public void testPreClassLevelMax() throws PersistenceLayerException singlePrereq, character, null)); } - @Test - public void testOldPreClassLevelMax() - { - final PreClassLevelMaxParser parser = new PreClassLevelMaxParser(); - try - { - parser.parse("CLASSLEVELMAX", "Fighter=2", false, false); - fail(); - } - catch (PersistenceLayerException e) - { - // Do Nothing, we should catch an exception here - } - } - /** * Test to ensure that a character will fail a test * if it does not have the correct number of levels diff --git a/code/src/test/pcgen/inttest/PcgenFtlTestCase.java b/code/src/test/pcgen/inttest/PcgenFtlTestCase.java index 7ee23f86d67..def41e10a0e 100644 --- a/code/src/test/pcgen/inttest/PcgenFtlTestCase.java +++ b/code/src/test/pcgen/inttest/PcgenFtlTestCase.java @@ -94,6 +94,10 @@ public static void runTest(String character, String mode) throws IOException String outputFile = outputFileFile.getCanonicalPath(); + // The code below had to be commented out as in Java 21+ there's no more SecurityManager + // At time of writing there is no replacement, see JDK-8199704 + // The tests seem to pass regardless. + /* Runnable revertSystemExitInterceptor = SystemExitInterceptor.startInterceptor(); assertEquals(0, @@ -106,6 +110,7 @@ public static void runTest(String character, String mode) throws IOException "Export of " + character + " failed."); revertSystemExitInterceptor.run(); + */ // Read in the actual XML produced by PCGen actual = Files.readString(outputFileFile.toPath()); diff --git a/code/src/testResources/pcgen/lang/cleaned.properties b/code/src/testResources/pcgen/lang/cleaned.properties index 9bbb762c29a..33d9b932463 100644 --- a/code/src/testResources/pcgen/lang/cleaned.properties +++ b/code/src/testResources/pcgen/lang/cleaned.properties @@ -1,4 +1,4 @@ -# LanguageBundle.properties with all unused keys removed as at 2023-06-24T21:54:51.875365 +# LanguageBundle.properties with all unused keys removed as at 2024-07-14T02:16:38.869033 # LanguageBundle.properties with all unused keys removed as at 2012-08-27T07:34:45+10:00 # Note: Trailing spaces are used in a number of places in this file. Please do diff --git a/code/src/testResources/pcgen/lang/unused.properties b/code/src/testResources/pcgen/lang/unused.properties index e260f61aef9..b40e6ee5c03 100644 --- a/code/src/testResources/pcgen/lang/unused.properties +++ b/code/src/testResources/pcgen/lang/unused.properties @@ -1,4 +1,4 @@ -# LanguageBundle.properties with all used keys removed as at 2023-06-24T21:54:51.916633 +# LanguageBundle.properties with all used keys removed as at 2024-07-14T02:16:38.941708 # LanguageBundle.properties with all unused keys removed as at 2012-08-27T07:34:45+10:00 # Note: Trailing spaces are used in a number of places in this file. Please do diff --git a/code/src/utest/pcgen/base/solver/SetSolverManagerTest.java b/code/src/utest/pcgen/base/solver/SetSolverManagerTest.java index 0ce4d61d5f5..57030f2722c 100644 --- a/code/src/utest/pcgen/base/solver/SetSolverManagerTest.java +++ b/code/src/utest/pcgen/base/solver/SetSolverManagerTest.java @@ -134,8 +134,8 @@ public void testProcessDependentSet() Object[] array = vc.get(regions); List list; assertEquals(0, array.length); - assertTrue(vc.set.contains(regions)); - assertEquals(1, vc.set.size()); + assertTrue(vc.contains(regions)); + assertEquals(1, vc.size()); vc.reset(); ModifierFactory am1 = new plugin.modifier.set.AddModifierFactory<>(); @@ -147,8 +147,8 @@ public void testProcessDependentSet() list = Arrays.asList(array); assertTrue(list.contains("England")); assertTrue(list.contains("France")); - assertTrue(vc.set.contains(regions)); - assertEquals(1, vc.set.size()); + assertTrue(vc.contains(regions)); + assertEquals(1, vc.size()); vc.reset(); ModifierFactory am2 = new plugin.modifier.set.AddModifierFactory<>(); @@ -161,8 +161,8 @@ public void testProcessDependentSet() assertTrue(list.contains("England")); assertTrue(list.contains("France")); assertTrue(list.contains("Greece")); - assertTrue(vc.set.contains(regions)); - assertEquals(1, vc.set.size()); + assertTrue(vc.contains(regions)); + assertEquals(1, vc.size()); vc.reset(); } diff --git a/code/src/utest/pcgen/base/solver/testsupport/TrackingVariableCache.java b/code/src/utest/pcgen/base/solver/testsupport/TrackingVariableCache.java index a066cc7d085..2a06e43e31f 100644 --- a/code/src/utest/pcgen/base/solver/testsupport/TrackingVariableCache.java +++ b/code/src/utest/pcgen/base/solver/testsupport/TrackingVariableCache.java @@ -25,7 +25,7 @@ public final class TrackingVariableCache extends SimpleVariableStore { - public final Set set = new HashSet<>(); + private final Set set = new HashSet<>(); @Override public T put(VariableID id, T process) @@ -38,4 +38,15 @@ public void reset() { set.clear(); } + + public boolean contains(Object o) + { + return set.contains(o); + } + + public int size() + { + return set.size(); + } + } diff --git a/code/src/utest/pcgen/cdom/helper/BridgeListenerTest.java b/code/src/utest/pcgen/cdom/helper/BridgeListenerTest.java index 850a73801fa..476f6c53952 100644 --- a/code/src/utest/pcgen/cdom/helper/BridgeListenerTest.java +++ b/code/src/utest/pcgen/cdom/helper/BridgeListenerTest.java @@ -48,7 +48,7 @@ public class BridgeListenerTest @Test void testBadConstructionFirstArg() { - AbstractSourcedListFacet target = new Target(); + AbstractSourcedListFacet target = new Target1(); assertThrows(NullPointerException.class, () -> new BridgeListener(null, target, this)); } @@ -66,19 +66,19 @@ void testEqualsHash() { DataSetID dsID = DataSetID.getID(); CharID id = CharID.getID(dsID); - AbstractSourcedListFacet target = new Target(); + AbstractSourcedListFacet target = new Target1(); BridgeListener bridge1 = new BridgeListener(id, target, this); BridgeListener bridge2 = new BridgeListener(id, target, this); assertEquals(bridge1.hashCode(), bridge2.hashCode()); assertTrue(bridge1.equals(bridge2)); assertTrue(bridge2.equals(bridge1)); - //Not + // Not CharID altID = CharID.getID(dsID); BridgeListener bridge3 = new BridgeListener(altID, target, this); assertNotEquals(bridge1.hashCode(), bridge3.hashCode()); assertFalse(bridge1.equals(bridge3)); assertFalse(bridge3.equals(bridge1)); - //Should not fail with an exception (should check before casting) + // Should not fail with an exception (should check before casting) assertFalse(bridge3.equals(1)); } @@ -89,7 +89,7 @@ void testVariableBasic() owner.setName("Race"); DataSetID dsID = DataSetID.getID(); CharID id = CharID.getID(dsID); - AbstractSourcedListFacet target = new Target(); + AbstractSourcedListFacet target = new Target1(); BridgeListener bridge = new BridgeListener(id, target, this); GlobalPCScope scope = new GlobalPCScope(); ScopeInstance instance = @@ -122,7 +122,7 @@ void testVariableArray() owner.setName("Race"); DataSetID dsID = DataSetID.getID(); CharID id = CharID.getID(dsID); - AbstractSourcedListFacet target = new Target(); + AbstractSourcedListFacet target = new Target1(); BridgeListener bridge = new BridgeListener(id, target, this); GlobalPCScope scope = new GlobalPCScope(); ScopeInstance instance = @@ -164,7 +164,7 @@ void testReferenceBasic() owner.setName("Race"); DataSetID dsID = DataSetID.getID(); CharID id = CharID.getID(dsID); - AbstractSourcedListFacet target = new Target(); + AbstractSourcedListFacet target = new Target1(); BridgeListener bridge = new BridgeListener(id, target, this); PCTemplate t1 = new PCTemplate(); t1.setName("Template1"); @@ -189,7 +189,7 @@ void testReferenceArray() owner.setName("Race"); DataSetID dsID = DataSetID.getID(); CharID id = CharID.getID(dsID); - AbstractSourcedListFacet target = new Target(); + AbstractSourcedListFacet target = new Target1(); BridgeListener bridge = new BridgeListener(id, target, this); PCTemplate t1 = new PCTemplate(); t1.setName("Template1"); @@ -216,8 +216,8 @@ void testReferenceArray() assertTrue(target.getSet(id).contains(t2)); } - private static class Target extends AbstractSourcedListFacet + private static class Target1 extends AbstractSourcedListFacet { - + } } diff --git a/code/src/utest/pcgen/gui3/dialog/AboutDialogTest.java b/code/src/utest/pcgen/gui3/dialog/AboutDialogTest.java index 8125b47c9cb..2e8a1056738 100644 --- a/code/src/utest/pcgen/gui3/dialog/AboutDialogTest.java +++ b/code/src/utest/pcgen/gui3/dialog/AboutDialogTest.java @@ -22,6 +22,7 @@ import java.net.URL; import java.util.ResourceBundle; +import org.junit.jupiter.api.Disabled; import pcgen.system.LanguageBundle; import javafx.fxml.FXMLLoader; @@ -35,6 +36,7 @@ import org.testfx.framework.junit5.Start; import org.testfx.matcher.base.NodeMatchers; +// @Disabled // Receiver class com.sun.glass.ui.monocle.MonocleWindow does not define or inherit an implementation of the resolved method 'abstract void _updateViewSize(long)' of abstract class com.sun.glass.ui.Window. @ExtendWith(ApplicationExtension.class) class AboutDialogTest { diff --git a/code/src/utest/pcgen/gui3/preloader/PCGenPreloaderTest.java b/code/src/utest/pcgen/gui3/preloader/PCGenPreloaderTest.java index f2e773f82f8..2a5711241d3 100644 --- a/code/src/utest/pcgen/gui3/preloader/PCGenPreloaderTest.java +++ b/code/src/utest/pcgen/gui3/preloader/PCGenPreloaderTest.java @@ -20,6 +20,7 @@ import java.io.IOException; +import org.junit.jupiter.api.Disabled; import pcgen.system.LanguageBundle; import javafx.fxml.FXMLLoader; diff --git a/code/src/utest/pcgen/system/CommandLineArgumentsTest.java b/code/src/utest/pcgen/system/CommandLineArgumentsTest.java index 54ddd23dae9..ef1cabecf51 100644 --- a/code/src/utest/pcgen/system/CommandLineArgumentsTest.java +++ b/code/src/utest/pcgen/system/CommandLineArgumentsTest.java @@ -1,9 +1,6 @@ package pcgen.system; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.*; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.converter.ArgumentConversionException; import org.junit.jupiter.params.converter.ConvertWith; @@ -15,6 +12,7 @@ import java.io.File; import java.util.Optional; +@Disabled class CommandLineArgumentsTest { private static Runnable revertSystemExitInterceptor; diff --git a/code/standards/checkstyle.xml b/code/standards/checkstyle.xml index db7d2e3810b..13b757ebd61 100644 --- a/code/standards/checkstyle.xml +++ b/code/standards/checkstyle.xml @@ -41,7 +41,7 @@ - + diff --git a/code/standards/ruleset.xml b/code/standards/ruleset.xml index 6df821ef06a..b36a5ff2814 100644 --- a/code/standards/ruleset.xml +++ b/code/standards/ruleset.xml @@ -26,8 +26,8 @@ - - + + @@ -39,21 +39,13 @@ - - - + - - - - - - @@ -63,10 +55,10 @@ - - + + @@ -82,22 +74,26 @@ - - + + + + + + + + - - @@ -111,14 +107,17 @@ + + - - + + + @@ -155,24 +154,20 @@ - - - - + + + - - - @@ -197,13 +192,9 @@ - - - diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e6441136f3d4ba8a0da8d277868979cfbc8ad796..a4b76b9530d66f5e68d973ea569d8e19de379189 100644 GIT binary patch delta 12612 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 HJ4oML2Lo<@i8BwbL^1~GkG`E7C$SEa_ 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 6f7a6eb33e8..79eb9d003fe 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index b740cf13397..f5feea6d6b1 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 25da30dbdee..9d21a21834d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## diff --git a/installers/win-installer/pcgen.nsi b/installers/win-installer/pcgen.nsi index e68ca91579e..436dec49177 100644 --- a/installers/win-installer/pcgen.nsi +++ b/installers/win-installer/pcgen.nsi @@ -5,7 +5,7 @@ !include ${INCLUDES_DIR}\constants.nsh ;File association !include ${INCLUDES_DIR}\FileAssociation.nsh -;Windows 32 or 64 bit version +;Windows 64 bit version !include "x64.nsh" ;Used for installation size calculation !include "FileFunc.nsh" @@ -26,7 +26,7 @@ !define MUI_HEADERIMAGE_BITMAP "${PROJECT_BUILD_DIR}\..\installers\win-installer\Local\splash.bmp" !define MUI_HEADERIMAGE_RIGHT ;Uncomment when a better images is available. -;!define MUI_WELCOMEFINISHPAGE_BITMAP "${PROJECT_BUILD_DIR}\..\installers\win-installer\Local\splash.bmp" +;!define MUI_WELCOMEFINISHPAGE_BITMAP "${PROJECT_BUILD_DIR}\..\installers\win-installer\Local\splash.bmp" ; Main Install settings Name "${APPNAMEANDVERSION}" @@ -163,22 +163,22 @@ Section "-Local" Section4 # We no longer provide the .bat file. # CreateShortCut "$SMPROGRAMS\PCGen\${APPDIR}\${APPNAMEANDVERSION}-Low.lnk" "$INSTDIR\${APPDIR}\pcgen_low_mem.bat" "" \ # "$INSTDIR\${APPDIR}\Local\PCGen.ico" 0 SW_SHOWMINIMIZED - CreateShortCut "$SMPROGRAMS\PCGen\${APPDIR}\${APPNAMEANDVERSION}-Bat.lnk" "$INSTDIR\${APPDIR}\pcgen.bat" "" \ + CreateShortCut "$SMPROGRAMS\PCGen\${APPDIR}\${APPNAMEANDVERSION}-Bat.lnk" "$INSTDIR\${APPDIR}\pcgen.bat" "" \ "$INSTDIR\${APPDIR}\Local\PCGen.ico" 0 SW_SHOWMINIMIZED CreateShortCut "$SMPROGRAMS\PCGen\${APPDIR}\${APPNAMEANDVERSION}.lnk" "$INSTDIR\${APPDIR}\pcgen.exe" "" \ "$INSTDIR\${APPDIR}\Local\pcgen2.ico" 0 SW_SHOWMINIMIZED - CreateShortCut "$SMPROGRAMS\PCGen\${APPDIR}\Convert Data.lnk" "$INSTDIR\${APPDIR}\jre\bin\javaw.exe" \ - "-Xmx256M -jar pcgen-batch-convert.jar" \ + CreateShortCut "$SMPROGRAMS\PCGen\${APPDIR}\Convert Data.lnk" "$INSTDIR\${APPDIR}\jre\bin\javaw.exe" \ + "-Xmx256M -jar pcgen-batch-convert.jar" \ "$INSTDIR\${APPDIR}\Local\convert.ico" - CreateShortCut "$SMPROGRAMS\PCGen\${APPDIR}\Release Notes.lnk" \ - "$INSTDIR\${APPDIR}\pcgen-release-notes-${SIMPVER}.html" "" \ - "$INSTDIR\${APPDIR}\Local\knight.ico" - CreateShortCut "$SMPROGRAMS\PCGen\${APPDIR}\News.lnk" "http://pcgen.sourceforge.net/02_news.php" "" \ - "$INSTDIR\${APPDIR}\Local\queen.ico" - CreateShortCut "$SMPROGRAMS\PCGen\${APPDIR}\uninstall-${LONGVER}.lnk" \ - "$INSTDIR\uninstall-${LONGVER}.exe" - CreateShortCut "$SMPROGRAMS\PCGen\${APPDIR}\Manual.lnk" "$INSTDIR\${APPDIR}\docs\index.html" "" \ - "$INSTDIR\${APPDIR}\Local\castle.ico" + CreateShortCut "$SMPROGRAMS\PCGen\${APPDIR}\Release Notes.lnk" \ + "$INSTDIR\${APPDIR}\pcgen-release-notes-${SIMPVER}.html" "" \ + "$INSTDIR\${APPDIR}\Local\knight.ico" + CreateShortCut "$SMPROGRAMS\PCGen\${APPDIR}\News.lnk" "http://pcgen.sourceforge.net/02_news.php" "" \ + "$INSTDIR\${APPDIR}\Local\queen.ico" + CreateShortCut "$SMPROGRAMS\PCGen\${APPDIR}\uninstall-${LONGVER}.lnk" \ + "$INSTDIR\uninstall-${LONGVER}.exe" + CreateShortCut "$SMPROGRAMS\PCGen\${APPDIR}\Manual.lnk" "$INSTDIR\${APPDIR}\docs\index.html" "" \ + "$INSTDIR\${APPDIR}\Local\castle.ico" ;Add file extension registration ;File association. See: http://nsis.sourceforge.net/FileAssoc !insertmacro APP_ASSOCIATE "pcg" "PCGen.File" "PCGen Character file" \ @@ -188,32 +188,19 @@ Section "-Local" Section4 SectionEnd Section "Java 64 Bit" Section5 - SectionIn RO + SectionIn RO - ;Use the right java version - DetailPrint "Java extraction..." - SetOutPath "$INSTDIR\${APPDIR}\bin" - File /r "${SrcDir}\..\image\pcgen-windows-x64\bin\*.*" + ;Use the right java version + DetailPrint "Java extraction..." + SetOutPath "$INSTDIR\${APPDIR}\bin" + File /r "${SrcDir}\..\image\pcgen-windows-x64\bin\*.*" - SetOutPath "$INSTDIR\${APPDIR}\lib" - File /r "${SrcDir}\PCGen_${SIMPVER}_opt\lib64\*.*" - DetailPrint "Java extraction complete!" -SectionEnd - -Section "Java 32 Bit" Section6 - SectionIn RO - - ;Use the right java version - DetailPrint "Java extraction..." - SetOutPath "$INSTDIR\${APPDIR}\bin" - File /r "${SrcDir}\..\image\pcgen-windows-x32\bin\*.*" - SetOutPath "$INSTDIR\${APPDIR}\lib" - File /r "${SrcDir}\PCGen_${SIMPVER}_opt\lib32\*.*" - DetailPrint "Java extraction complete!" + SetOutPath "$INSTDIR\${APPDIR}\lib" + File /r "${SrcDir}\PCGen_${SIMPVER}_opt\lib64\*.*" + DetailPrint "Java extraction complete!" SectionEnd Section -FinishSection - WriteRegStr HKLM "Software\${APPNAME}\${APPDIR}" "" "$INSTDIR\${APPDIR}" WriteRegStr HKLM "${ARP}" "DisplayName" "${APPNAMEANDVERSION}" WriteRegStr HKLM "${ARP}" "UninstallString" "$INSTDIR\uninstall-${APPDIR}.exe" @@ -224,7 +211,6 @@ Section -FinishSection IntFmt $0 "0x%08X" $0 WriteRegDWORD HKLM "${ARP}" "EstimatedSize" "$0" DetailPrint "Done!" - SectionEnd ; Modern install component descriptions @@ -288,14 +274,13 @@ Section Uninstall Delete /REBOOTOK "$INSTDIR\${APPDIR}\pcgen" # Delete /REBOOTOK "$INSTDIR\${APPDIR}\pcgen_low_mem.bat" Delete /REBOOTOK "$INSTDIR\${APPDIR}\pcgen.bat" - Delete /REBOOTOK "$INSTDIR\${APPDIR}\pcgen_JREx32.bat" Delete /REBOOTOK "$INSTDIR\${APPDIR}\pcgen_JREx64.bat" Delete /REBOOTOK "$INSTDIR\${APPDIR}\pcgen-batch-convert.jar" Delete /REBOOTOK "$INSTDIR\${APPDIR}\filepaths.ini" Delete /REBOOTOK "$INSTDIR\${APPDIR}\config.ini" Delete /REBOOTOK "$INSTDIR\${APPDIR}\logging.properties" Delete /REBOOTOK "$INSTDIR\${APPDIR}\pcgen.log" - + RMDir "$INSTDIR\${APPDIR}" # Always delete uninstaller as the last action @@ -312,13 +297,13 @@ Section Uninstall ;Run the uninstaller ClearErrors ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file - + IfErrors no_remove_uninstaller done ;You can either use Delete /REBOOTOK in the uninstaller or add some code ;here to remove the uninstaller. Use a registry key to check ;whether the user has chosen to uninstall. If you are using an uninstaller ;components page, make sure all sections are uninstalled. - + no_remove_uninstaller: done: @@ -329,7 +314,7 @@ Function .onInit "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPDIR}" \ "UninstallString" StrCmp $R0 "" done - + MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \ "${APPNAME} is already installed. $\n$\nClick `OK` to remove the \ previous version or `Cancel` to cancel this upgrade." \ @@ -340,7 +325,7 @@ Function .onInit uninst: ClearErrors ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file - + IfErrors no_remove_uninstaller done ;You can either use Delete /REBOOTOK in the uninstaller or add some code ;here to remove the uninstaller. Use a registry key to check @@ -348,17 +333,15 @@ Function .onInit ;components page, make sure all sections are uninstalled. no_remove_uninstaller: - done: - - #Determine the bitness of the OS and enable the correct section - IntOp $0 ${SF_SELECTED} | ${SF_RO} - ${If} ${RunningX64} - SectionSetFlags ${Section5} $0 - SectionSetFlags ${Section6} ${SECTION_OFF} - ${Else} - SectionSetFlags ${Section5} ${SECTION_OFF} - SectionSetFlags ${Section6} $0 - ${EndIf} + done: + # Check the bitness of the OS and fail, if 32-bit OS is used + IntOp $0 ${SF_SELECTED} | ${SF_RO} + ${If} ${RunningX64} + SectionSetFlags ${Section5} $0 + ${Else} + DetailPrint "Error: 32-bit OS is not supported" + Abort + ${EndIf} FunctionEnd ; eof diff --git a/outputsheets/d20/5e/pdf/fantasy_common.xsl b/outputsheets/d20/5e/pdf/fantasy_common.xsl index d360c39643b..499f9ac8b44 100644 --- a/outputsheets/d20/5e/pdf/fantasy_common.xsl +++ b/outputsheets/d20/5e/pdf/fantasy_common.xsl @@ -339,7 +339,7 @@ - + @@ -1005,7 +1005,7 @@ - + @@ -1093,4 +1093,3 @@ - diff --git a/outputsheets/d20/fantasy/pdf/fantasy_common.xsl b/outputsheets/d20/fantasy/pdf/fantasy_common.xsl index d82d7df1795..e48d2ce6545 100644 --- a/outputsheets/d20/fantasy/pdf/fantasy_common.xsl +++ b/outputsheets/d20/fantasy/pdf/fantasy_common.xsl @@ -953,7 +953,7 @@ - + @@ -1041,4 +1041,3 @@ - diff --git a/outputsheets/d20/fantasy_craft/pdf/fantasy_common.xsl b/outputsheets/d20/fantasy_craft/pdf/fantasy_common.xsl index d82d7df1795..e48d2ce6545 100644 --- a/outputsheets/d20/fantasy_craft/pdf/fantasy_common.xsl +++ b/outputsheets/d20/fantasy_craft/pdf/fantasy_common.xsl @@ -953,7 +953,7 @@ - + @@ -1041,4 +1041,3 @@ - diff --git a/outputsheets/d20/pathfinder_2/pdf/fantasy_common.xsl b/outputsheets/d20/pathfinder_2/pdf/fantasy_common.xsl index d82d7df1795..e48d2ce6545 100644 --- a/outputsheets/d20/pathfinder_2/pdf/fantasy_common.xsl +++ b/outputsheets/d20/pathfinder_2/pdf/fantasy_common.xsl @@ -953,7 +953,7 @@ - + @@ -1041,4 +1041,3 @@ - diff --git a/outputsheets/d20/sagaborn/pdf/fantasy_common.xsl b/outputsheets/d20/sagaborn/pdf/fantasy_common.xsl index b154f8ebda9..723dbf19ca6 100644 --- a/outputsheets/d20/sagaborn/pdf/fantasy_common.xsl +++ b/outputsheets/d20/sagaborn/pdf/fantasy_common.xsl @@ -1004,7 +1004,7 @@ - + @@ -1092,4 +1092,3 @@ - diff --git a/outputsheets/d20/starfinder/pdf/fantasy_common.xsl b/outputsheets/d20/starfinder/pdf/fantasy_common.xsl index cdd197b000c..dfa00f2b211 100644 --- a/outputsheets/d20/starfinder/pdf/fantasy_common.xsl +++ b/outputsheets/d20/starfinder/pdf/fantasy_common.xsl @@ -738,7 +738,7 @@ - + @@ -826,4 +826,3 @@ - diff --git a/outputsheets/killshot/pdf/killshot_common.xsl b/outputsheets/killshot/pdf/killshot_common.xsl index 9a7bb062659..8668dd1abc1 100644 --- a/outputsheets/killshot/pdf/killshot_common.xsl +++ b/outputsheets/killshot/pdf/killshot_common.xsl @@ -640,7 +640,7 @@ - + @@ -728,4 +728,3 @@ -