Difference between revisions of "Race Racial Trait Swapping"

From PCGen Wiki
Jump to: navigation, search
(Filler Object)
Line 36: Line 36:
 
Let's assume we have a Racial Trait "Super" that replaces "Good" and "Lucky".
 
Let's assume we have a Racial Trait "Super" that replaces "Good" and "Lucky".
  
So on our class we had:
+
So on our race we had:
 
<pre>
 
<pre>
MODIFY:Level_3_Feature_Lucky|SET|Default_L3_Feature_Lucky
+
MODIFY:Feature_Lucky|SET|Default_Feature_Lucky
MODIFY:Level_3_Feature_Good|SET|Default_L3_Feature_Good
+
MODIFY:Feature_Good|SET|Default_Feature_Good
 
</pre>
 
</pre>
  
 
On our Trait we can do:
 
On our Trait we can do:
 
<pre>
 
<pre>
MODIFYOTHER:CLASS|Fighter|Level_3_Feature_Good|SET|SuperFeature|PRIORITY=400
+
MODIFYOTHER:RACE|Elf|Feature_Good|SET|SuperFeature|PRIORITY=400
 
</pre>
 
</pre>
  
 
Then we need to remove Default_L3_Feature_Lucky.  I would probably recommend something like:
 
Then we need to remove Default_L3_Feature_Lucky.  I would probably recommend something like:
 
<pre>
 
<pre>
MODIFYOTHER:CLASS|Fighter|Level_3_Feature_Lucky|SET|EmptyFeature|PRIORITY=400
+
MODIFYOTHER:RACE|Elf|Feature_Lucky|SET|EmptyFeature|PRIORITY=400
 
</pre>
 
</pre>
  
Line 56: Line 56:
 
===Justification===
 
===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.
+
Keep in mind if we have a DYNAMIC of RACEFEATURE (which Default_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 RACEFEATURE FORMAT.
  
 
==Array==
 
==Array==

Revision as of 03:18, 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:

  1. "Race Package" where a race is granted specific non-default traits
  2. "Race Package" where a race if granted a choice between two or more additional choices
  3. 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 race we had:

MODIFY:Feature_Lucky|SET|Default_Feature_Lucky
MODIFY:Feature_Good|SET|Default_Feature_Good

On our Trait we can do:

MODIFYOTHER:RACE|Elf|Feature_Good|SET|SuperFeature|PRIORITY=400

Then we need to remove Default_L3_Feature_Lucky. I would probably recommend something like:

MODIFYOTHER:RACE|Elf|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 RACEFEATURE (which Default_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 RACEFEATURE 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:

  1. We have avoided adding an empty shell to the PC
  2. We are making (risky?) assumptions of what we are replacing
  3. 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.