Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Legacy weapons #1154

Merged
merged 27 commits into from
Mar 19, 2023
Merged

Legacy weapons #1154

merged 27 commits into from
Mar 19, 2023

Conversation

jonovotny
Copy link
Contributor

Proposed solution for #1146

Includes support for the Legacy Champion class and an ability framework for creating Legacy Items that track personal costs and grant legacy abilities when all requirements are met.

Four legacy items are implemented using the system to demonstrate all different types of personal cost penalties:
Bloodcrier's Hammer (Attack Penalty, Save Penalty, HP Loss)
Infiltrator (Reflex Save Penalty, Skill Check Penalty, HP Loss, Skill Point Loss)
Planeshifter’s Knife (Save Penalty, Skill Check Penalty, Caster Level Penalty, Spell Slot Loss)
Simple Bow (Attack Penalty, Manifester Level Penalty, HP Loss, PP Loss)

A generic template with detailed instructions on how to implement new Legacy Items is included.

jonovotny and others added 27 commits March 7, 2023 19:43
Some problems with caster level penalties remain
All class mechanics should be implemented in the 2 class levels that do not grant class features of another class.
Extra Legacy Ability Use KEY:Legacy Champion ~ Extra Legacy Ability Use CATEGORY:Special Ability TYPE:Supernatural.Class Features.Legacy Champion Class Feature.SpecialQuality DESC:As your bond with your legacy item strengthens, you can draw on its abilities more often than normal. At 3rd level, choose one of your item's least abilities with a daily use limit. You can use that ability one extra time per day. Once you have chosen an ability, you cannot change it later. At 6th level, you can also gain an extra daily use of one of your item's lesser abilities. At 9th level, you can also gain an extra daily use of one of your item's greater abilities. You can instead choose to gain an extra daily use of a lower ability (for example, choosing a second least ability instead of a lesser ability at 6th level), but you can't gain more than one extra daily use of a given ability. If your item has no legacy abilities with a daily use limit, you gain no benefit from this class feature. If you later gain access to an eligible legacy ability, you can immediately choose that ability for an extra daily use. SOURCEPAGE:p.20
Bonus Legacy Feat KEY:Legacy Champion ~ Bonus Legacy Feat CATEGORY:Special Ability TYPE:Class Features.Legacy Champion Class Feature.SpecialQuality DESC:At 4th and 8th level, you gain a bonus feat related to your legacy item, which can be selected from any of the legacy feats in this chapter for which you meet the prerequisites. SOURCEPAGE:p.20
Legacy Champion Class Level KEY:Legacy Champion ~ Class Level CATEGORY:Special Ability TYPE:Class Features.Legacy Champion Class Feature.SpecialQuality DESC:At level 1 and 7 advance the Legacy Champion class, on level 2-6 and 8-10 advance classes in which you had levels before entering the Legacy Champion class. After each levelup, select this stacking ability to increase your Legacy Champion level. SOURCEPAGE:p.19 VISIBLE:DISPLAY COST:0 BONUS:VAR|LegacyChampionLVL|1 PRECLASS:1,Legacy Champion=1 CHOOSE:NUMCHOICES=10|NOCHOICE MULT:YES STACK:YES BONUS:ABILITYPOOL|Legacy Champion Stat Adjustment|1
Class Features KEY:Legacy Champion ~ Class Features CATEGORY:Special Ability TYPE:Class Features.Legacy Champion Class Feature.SpecialQuality DESC:At each level except 1st and 7th, you gain class features and an increase in effective level as if you had also gained a level in a class to which you belonged before adding the prestige class level. The specific class features you gain include spells per day (and spells known, if applicable), improved chance of turning or destroying undead, metamagic or item creation feats, bonus feats, monk special abilities, sneak attack progressions, and so on, depending on the class. You do not, however, gain the benefit of your previous class's Hit Dice, attack progression, skill points, or saving throws. If you had more than one class before becoming a legacy champion, you must decide to which class to add each level for the purpose of determining class abilities. Your effective Legacy Champion class level is %1.|LegacyChampionLVL SOURCEPAGE:p.19 BONUS:ABILITYPOOL|Legacy Champion Class Feature|1|PREVARGTEQ:LegacyChampionLVL,1 COST:100 BONUS:ABILITYPOOL|Legacy Champion Class Feature|1|PREVARGTEQ:LegacyChampionLVL,2 BONUS:ABILITYPOOL|Legacy Champion Class Feature|1|PREVARGTEQ:LegacyChampionLVL,3 BONUS:ABILITYPOOL|Legacy Champion Class Feature|1|PREVARGTEQ:LegacyChampionLVL,5 BONUS:ABILITYPOOL|Legacy Champion Class Feature|1|PREVARGTEQ:LegacyChampionLVL,6 BONUS:ABILITYPOOL|Legacy Champion Class Feature|1|PREVARGTEQ:LegacyChampionLVL,9 BONUS:ABILITYPOOL|Legacy Champion Class Feature|1|PREVARGTEQ:LegacyChampionLVL,10
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This might be better represented as DEFINE:LegacyChampionClassFeatureCount|0
BONUS:VAR|LegacyChampionClassFeatureCount|(LegacyChampionLVL>=2)+(LegacyChampionLVL>=3)+(LegacyChampionLVL>=5)+(LegacyChampionLVL>=6)+(LegacyChampionLVL>=9)+(LegacyChampionLVL>=10)

BONUS:ABILITYPOOL|Legacy Champion Class Feature|LegacyChampionClassFeatureCount

That reduces the number of calculation cycles against a prevar.

CATEGORY=Internal|LegacyItemName ~ Tracker.MOD BONUS:ABILITYPOOL|LegacyItemName Personal Cost|1|PREMULT:2,[PREABILITY:1,CATEGORY=Feat,Least Legacy ~ LegacyItemName],[PREPCLEVEL:MIN=5] BONUS:ABILITYPOOL|LegacyItemName Personal Cost|1|PREMULT:2,[PREABILITY:1,CATEGORY=Feat,Least Legacy ~ LegacyItemName],[PREPCLEVEL:MIN=6] BONUS:ABILITYPOOL|LegacyItemName Personal Cost|1|PREMULT:2,[PREABILITY:1,CATEGORY=Feat,Least Legacy ~ LegacyItemName],[PREPCLEVEL:MIN=7] BONUS:ABILITYPOOL|LegacyItemName Personal Cost|1|PREMULT:2,[PREABILITY:1,CATEGORY=Feat,Least Legacy ~ LegacyItemName],[PREPCLEVEL:MIN=8] BONUS:ABILITYPOOL|LegacyItemName Personal Cost|1|PREMULT:2,[PREABILITY:1,CATEGORY=Feat,Least Legacy ~ LegacyItemName],[PREPCLEVEL:MIN=9] BONUS:ABILITYPOOL|LegacyItemName Personal Cost|1|PREMULT:2,[PREABILITY:1,CATEGORY=Feat,Least Legacy ~ LegacyItemName],[PREPCLEVEL:MIN=10]
CATEGORY=Internal|LegacyItemName ~ Tracker.MOD BONUS:ABILITYPOOL|LegacyItemName Personal Cost|1|PREMULT:2,[PREABILITY:1,CATEGORY=Feat,Lesser Legacy ~ LegacyItemName],[PREPCLEVEL:MIN=11] BONUS:ABILITYPOOL|LegacyItemName Personal Cost|1|PREMULT:2,[PREABILITY:1,CATEGORY=Feat,Lesser Legacy ~ LegacyItemName],[PREPCLEVEL:MIN=12] BONUS:ABILITYPOOL|LegacyItemName Personal Cost|1|PREMULT:2,[PREABILITY:1,CATEGORY=Feat,Lesser Legacy ~ LegacyItemName],[PREPCLEVEL:MIN=13] BONUS:ABILITYPOOL|LegacyItemName Personal Cost|1|PREMULT:2,[PREABILITY:1,CATEGORY=Feat,Lesser Legacy ~ LegacyItemName],[PREPCLEVEL:MIN=14] BONUS:ABILITYPOOL|LegacyItemName Personal Cost|1|PREMULT:2,[PREABILITY:1,CATEGORY=Feat,Lesser Legacy ~ LegacyItemName],[PREPCLEVEL:MIN=15] BONUS:ABILITYPOOL|LegacyItemName Personal Cost|1|PREMULT:2,[PREABILITY:1,CATEGORY=Feat,Lesser Legacy ~ LegacyItemName],[PREPCLEVEL:MIN=16]
CATEGORY=Internal|LegacyItemName ~ Tracker.MOD BONUS:ABILITYPOOL|LegacyItemName Personal Cost|1|PREMULT:2,[PREABILITY:1,CATEGORY=Feat,Greater Legacy ~ LegacyItemName],[PREPCLEVEL:MIN=17] BONUS:ABILITYPOOL|LegacyItemName Personal Cost|1|PREMULT:2,[PREABILITY:1,CATEGORY=Feat,Greater Legacy ~ LegacyItemName],[PREPCLEVEL:MIN=18] BONUS:ABILITYPOOL|LegacyItemName Personal Cost|1|PREMULT:2,[PREABILITY:1,CATEGORY=Feat,Greater Legacy ~ LegacyItemName],[PREPCLEVEL:MIN=19] BONUS:ABILITYPOOL|LegacyItemName Personal Cost|1|PREMULT:2,[PREABILITY:1,CATEGORY=Feat,Greater Legacy ~ LegacyItemName],[PREPCLEVEL:MIN=20]
CATEGORY=Internal|LegacyItemName ~ Tracker.MOD DEFINE:LegacyItemShortNameTotalEnhancement|0 BONUS:VAR|LegacyItemShortNameTotalEnhancement|min(5,(LegacyItemShortNameEnhancementBonus+(count("ABILITIES","CATEGORY=Internal","NAME=LegRepEnh1 (LegacyItemName)")*1)+(count("ABILITIES","CATEGORY=Internal","NAME=LegRepEnh2 (LegacyItemName)")*2)+(count("ABILITIES","CATEGORY=Internal","NAME=LegRepEnh3 (LegacyItemName)")*3)+(count("ABILITIES","CATEGORY=Internal","NAME=LegRepEnh4 (LegacyItemName)")*4)+(count("ABILITIES","CATEGORY=Internal","NAME=LegRepEnh5 (LegacyItemName)")*5)))
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Has this been tested and determined to work?

Copy link
Contributor Author

@jonovotny jonovotny Mar 19, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have built various characters with each item to test that cost pools get points at the correct levels.
However, if it is better to use a single bonus variable rather that multiple bonuses with PREMULT, i could rework that. Each legacy feat could set a "hasLeast/Lesser/Greater" variable to 1 and the grant pool would have to look like ...+((CL>=7)*hasLeastLegacy*PoolBonusAt7)+...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

About the "...LegacyItemShortNameTotalEnhancement|min(5,(LegacyItemShortNameEnhancementBonus+(count(..." part, this is for the very niche case of replacing an item ability in order to increase the enhancement bonus of the item. Doing this reverse lookup was the only way I could think off to include the bonus automatically, but even that has problems, since the user can chose to add an armor/weapon special ability instead of the enhancement bonus.

The sensible way to add the special ability is by making a new custom item that includes it. The same could be done with the enhancement bonus. By adding a short note to the replacement ability that players need to fix their item manually, we could get rid of this calculation.

@BahamutDragon BahamutDragon merged commit 4edf8cf into BahamutDragon:master Mar 19, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants