Difference between revisions of "Race Racial Trait Swapping"
LegacyKing (talk | contribs) (Created page with "Concern: Race is granted 'default' traits as a standard. Paizo has introduced two systems of concern: 1) "Race Package" where a race is granted specific non-default traits,...") |
Tom Parker (talk | contribs) |
||
Line 1: | Line 1: | ||
− | + | {| align="right" | |
+ | | __TOC__ | ||
+ | |} | ||
+ | |||
+ | |||
+ | =Background= | ||
+ | |||
+ | Note that the basics for [[Replacing Archetype Controls]] is available | ||
+ | |||
+ | =Challenge= | ||
Race is granted 'default' traits as a standard. Paizo has introduced two systems of concern: | Race is granted 'default' traits as a standard. Paizo has introduced two systems of concern: | ||
+ | # "Race Package" where a race is granted specific non-default traits | ||
+ | # "Race Package" where a race if granted a choice between two or more additional choices | ||
+ | # Racial Trait that is chosen by the player actually removes 2 or more existing default traits | ||
+ | |||
+ | =Potential Solutions Challenge #1= | ||
+ | |||
+ | This seems straight-forward to me. The Race Package can simply have: | ||
+ | <pre> | ||
+ | MODIFYOTHER:RACE|Elf|Feature_Good|SET|DifferentFeature|PRIORITY=400 | ||
+ | </pre> | ||
+ | |||
+ | The variable assignments are very similar to what is shown in [[Replacing Archetype Controls]]. | ||
+ | |||
+ | =Potential Solutions Challenge #2= | ||
+ | |||
+ | This involves a choice, thus interacts with [[SELECTION - A CHOOSE Replacement]]. This section is deferred until some changes and clarifications are made on that page with respect to how instances will work (there are multiple methods of causing instances and that is not currently clear). | ||
+ | |||
+ | =Potential Solutions Challenge #3= | ||
+ | |||
+ | I'm not sure there are multiple possible solutions here. I think this is straightforward. | ||
+ | |||
+ | ==Filler Object== | ||
+ | |||
+ | Let's assume we have a Racial Trait "Super" that replaces "Good" and "Lucky". | ||
+ | |||
+ | So on our class we had: | ||
+ | <pre> | ||
+ | MODIFY:Level_3_Feature_Lucky|SET|Default_L3_Feature_Lucky | ||
+ | MODIFY:Level_3_Feature_Good|SET|Default_L3_Feature_Good | ||
+ | </pre> | ||
+ | |||
+ | On our Trait we can do: | ||
+ | <pre> | ||
+ | MODIFYOTHER:CLASS|Fighter|Level_3_Feature_Good|SET|SuperFeature|PRIORITY=400 | ||
+ | </pre> | ||
+ | |||
+ | Then we need to remove Default_L3_Feature_Lucky. I would probably recommend something like: | ||
+ | <pre> | ||
+ | MODIFYOTHER:CLASS|Fighter|Level_3_Feature_Lucky|SET|EmptyFeature|PRIORITY=400 | ||
+ | </pre> | ||
+ | |||
+ | EmptyFeature would then be an object with nothing in it. | ||
+ | |||
+ | ===Justification=== | ||
+ | |||
+ | Keep in mind if we have a DYNAMIC of CLASSFEATURE (which Default_L3_Feature_Lucky is one implementation) then we need a default value for that object type. So it's already likely that we have an "EmptyFeature" set up to be the default value for a variable of the CLASSFEATURE FORMAT. | ||
+ | |||
+ | ==Array== | ||
+ | |||
+ | One possible alternative would be to have an ARRAY[CLASSFEATURE] that contains all of the traits for a given level. | ||
+ | |||
+ | So on our class we had: | ||
+ | <pre> | ||
+ | MODIFY:Level_3_Features|ADD|Default_L3_Feature_Lucky+Default_L3_Feature_Good | ||
+ | </pre> | ||
+ | |||
+ | On our Trait we can do: | ||
+ | <pre> | ||
+ | MODIFYOTHER:CLASS|Fighter|Level_3_Features|SET|SuperFeature|PRIORITY=400 | ||
+ | </pre> | ||
+ | |||
+ | ===Considerations=== | ||
+ | |||
+ | In this case, we need to look at what it would be like for a class to replace only one of the class features at that level. | ||
+ | |||
+ | On our Trait we can do: | ||
+ | <pre> | ||
+ | MODIFYOTHER:CLASS|Fighter|Level_3_Features|SET|value()-Default_L3_Feature_Good+Default_L3_Feature_Better|PRIORITY=400 | ||
+ | </pre> | ||
+ | |||
+ | or alternatively: | ||
+ | <pre> | ||
+ | MODIFYOTHER:CLASS|Fighter|Level_3_Features|ADD|Default_L3_Feature_Better|PRIORITY=400 | ||
+ | MODIFYOTHER:CLASS|Fighter|Level_3_Features|REMOVE|Default_L3_Feature_Good|PRIORITY=400 | ||
+ | </pre> | ||
− | + | Considerations: | |
+ | # We have avoided adding an empty shell to the PC | ||
+ | # We are making (risky?) assumptions of what we are replacing | ||
+ | # We start to get into order of operations problems between Archetypes that both touch the same level, but different parts, so it increases the cross-data interaction | ||
− | + | In general, I think this is a bad idea due to the built-in assumptions. |
Revision as of 03:15, 9 March 2018
Background
Note that the basics for Replacing Archetype Controls is available
Challenge
Race is granted 'default' traits as a standard. Paizo has introduced two systems of concern:
- "Race Package" where a race is granted specific non-default traits
- "Race Package" where a race if granted a choice between two or more additional choices
- Racial Trait that is chosen by the player actually removes 2 or more existing default traits
Potential Solutions Challenge #1
This seems straight-forward to me. The Race Package can simply have:
MODIFYOTHER:RACE|Elf|Feature_Good|SET|DifferentFeature|PRIORITY=400
The variable assignments are very similar to what is shown in Replacing Archetype Controls.
Potential Solutions Challenge #2
This involves a choice, thus interacts with SELECTION - A CHOOSE Replacement. This section is deferred until some changes and clarifications are made on that page with respect to how instances will work (there are multiple methods of causing instances and that is not currently clear).
Potential Solutions Challenge #3
I'm not sure there are multiple possible solutions here. I think this is straightforward.
Filler Object
Let's assume we have a Racial Trait "Super" that replaces "Good" and "Lucky".
So on our class we had:
MODIFY:Level_3_Feature_Lucky|SET|Default_L3_Feature_Lucky MODIFY:Level_3_Feature_Good|SET|Default_L3_Feature_Good
On our Trait we can do:
MODIFYOTHER:CLASS|Fighter|Level_3_Feature_Good|SET|SuperFeature|PRIORITY=400
Then we need to remove Default_L3_Feature_Lucky. I would probably recommend something like:
MODIFYOTHER:CLASS|Fighter|Level_3_Feature_Lucky|SET|EmptyFeature|PRIORITY=400
EmptyFeature would then be an object with nothing in it.
Justification
Keep in mind if we have a DYNAMIC of CLASSFEATURE (which Default_L3_Feature_Lucky is one implementation) then we need a default value for that object type. So it's already likely that we have an "EmptyFeature" set up to be the default value for a variable of the CLASSFEATURE FORMAT.
Array
One possible alternative would be to have an ARRAY[CLASSFEATURE] that contains all of the traits for a given level.
So on our class we had:
MODIFY:Level_3_Features|ADD|Default_L3_Feature_Lucky+Default_L3_Feature_Good
On our Trait we can do:
MODIFYOTHER:CLASS|Fighter|Level_3_Features|SET|SuperFeature|PRIORITY=400
Considerations
In this case, we need to look at what it would be like for a class to replace only one of the class features at that level.
On our Trait we can do:
MODIFYOTHER:CLASS|Fighter|Level_3_Features|SET|value()-Default_L3_Feature_Good+Default_L3_Feature_Better|PRIORITY=400
or alternatively:
MODIFYOTHER:CLASS|Fighter|Level_3_Features|ADD|Default_L3_Feature_Better|PRIORITY=400 MODIFYOTHER:CLASS|Fighter|Level_3_Features|REMOVE|Default_L3_Feature_Good|PRIORITY=400
Considerations:
- We have avoided adding an empty shell to the PC
- We are making (risky?) assumptions of what we are replacing
- We start to get into order of operations problems between Archetypes that both touch the same level, but different parts, so it increases the cross-data interaction
In general, I think this is a bad idea due to the built-in assumptions.