# Feat Files

- 6.05.04 (July 2015): JIRA NEWTAG-477 / Github PR #380
- - The feat files described below is deprecated. Use the Ability system instead .
  - To implement a feat, write an ability belonging to the `FEAT` ability category , i.e. `CATEGORY:FEAT` .
  - The feats may still be contained in a file called `feats.lst` (see `/data/35e/wizards_of_the_coast/rsrd/basics/feats.lst` for an example.) However this file must use the `ability.lst` format , not the obsolete format described below.
  - All `FEAT` tags have been deprecated and replaced by the `ABILITY` system, which is more general. The `ABILITY` system can model feats, racial features, class features, traits, flaws, temporary bonuses, and so on, all using a common format

Each feat takes one line and the first field must be the feat's name.

## Building Feats

Naming Feats

When naming feats you should only use parentheses at the end of the name if the name is not duplicated elsewhere. This is because of how PCGen names feats which can be taken multiple times. For example, the Feat Weapon Focus when taken will display as Weapon Focus(Dagger). Another example is Armor Proficiency (Light), there is no feat named Armor Proficiency so this name is fine. What is happening is when PCGen finds a feat with parentheses that duplicates the name of another feat it assumes that feat is an instance of the one without parentheses and does not display the one with parentheses.

`Improved Critical`

The feat named "Improved Critical" is to be created.

`Acrobatic.MOD`

The feat named "Acrobatic" is to be modified.

`Occupation (Emergency Services).FORGET`

The feat named "Occupation (Emergency Services)" is to be forgotten.

When the `POINTPOOLNAME` trigger tag is present in the miscinfo.lst file, the Summary Tab Will display total points/points remaining (i.e. Development Points 160/135) on the same line as the stat total and stat mod total

Skills Tab - Instead of skill points by class/level requirement to spend skill points, it's just a pool this is also populated by the classes STARTSKILLPTS and miscinfo SKILLMULTIPLIER

Feats Tab - Will show total point pool as reported on the skills tab

## Feat Tag List

*** Updated 5.16.0

Tag Name: ADDSPELLLEVEL:x

Variables Used (x): Number (Increase in spell slot level)

What it does:

- This tag is used in metamagic feats to denote how much higher the spell level slot requires.
- .MOD Behavior: When modifying a a feat with the `.MOD` tag, given an existing `ADDSPELLLEVEL` tag, the data included in a new `ADDSPELLLEVEL` tag will overwrite the existing tag data.

Example:

`ADDSPELLLEVEL:2`

A spell with this metamagic feat applied to it takes up a slot two levels higher than the normal spell.

.MOD Example:

Initial Feat: `<feat name> <tab> ADDSPELLLEVEL:1`

Modified By: `<feat name> <tab> ADDSPELLLEVEL:2`

Is Equivalent To: `<feat name> <tab> ADDSPELLLEVEL:2`

Modified feat applied to a spell will causes the spell to take up a slot two levels higher than the normal spell.

*** Added 6.1.4

Tag Name: APPLIEDNAME:x

Variables Used (x): Text (An adjective to be prefixed to a spell modified by this feat)

What it does:

This tag is used in metamagic feat to give an addribute that can modify the spell name./p>

Example:

`APPLIEDNAME:Empowered`

A spell with this metamagic feat applied to it gets the word "Empowered" prefixed to the spell name.

*** New 5.15.2

Tag Name: ASPECT:x|y|z|z

Variables Used (x): Text (Name of Aspect)

Variables Used (y): Text (Value of Aspect)

Variables Used (z): Number or Formula (Optional. Used for substitutions in y)

What it does:

- Identifies an "aspect" (see examples below) that a feat has and sets it's value.
- This tag can be used multiple times within a feat but each time it must identify a new aspect.
- The text in the y variable can use %z for replacing numerical values set by the z variable, %1 is replaced by the first z, %2 is replaced by the second z, etc..
- The y text can also use other special variables, also usable in the `DESC` tag:
  - `%CHOICE` - Will replace the first associated choice in the object.
  - `%LIST` - Will substitute all choices comma separated into that parameter.
  - `%NAME` - The `OUTPUTNAME` or name of the object this `DESC` tag is in.
- .MOD Behavior: When modifying a feat with the `.MOD` tag, given an existing `ASPECT` tag, the data included in a new `ASPECT` tag will selectively overwrite the existing tag data or include the separate tags. Since each aspect name can hold only one value per feat, modifying an existing `ASPECT` tag will overwrite only the value of the aspect by that name in the feat, and will add a separate `ASPECT` tag with a new name.

Example:

`ASPECT:Action Type|Standard Action`

Identifies the "Action Type" of an action performed as part of the associated feat as a "Standard Action".

`ASPECT:Attack Type|Melee weapon`

Identifies the "Attack Type" of an attack performed as part of the associated feat as a "Melee weapon" attack.

`ASPECT:Target|One creature`

Identifies the "Target" of an action performed as part of the associated feat as "One creature".

`ASPECT:Attack|Strength vs. AC`

Identifies an "Attack" performed as part of the associated feat as "Strength vs. AC".

`ASPECT:Attack Type|Ranged %1|PowerRange`

Identifies the "Attack Type" of an attack performed as part of the associated feat as a "Ranged" attack with a range equivalent to the "PowerRange" variable.

`ASPECT:Effect|Double damage to %CHOICE creatures`

Identifies the "Effect" of an action performed as part of the associated feat as "Double damage" to the creature chosen by the associated chooser.

.MOD Example (Overwrite):

Initial Feat: `<feat name> <tab> ASPECT:A1|A2`

Modified By: `<feat name> <tab> ASPECT:A1|A3`

Is Equivalent To: `<feat name> <tab> ASPECT:A1|A3`

.MOD Example (Include Separately):

Initial Feat: `<feat name> <tab> ASPECT:A1|A2`

Modified By: `<feat name> <tab> ASPECT:B1|B2`

Is Equivalent To: `<feat name> <tab> ASPECT:A1|A2 <tab> ASPECT:B1|B2`

Tag Name: BENEFIT:x

Variables Used (x): Text (feat benefit text)

What it does:

- This is the benefit text of the feat from the source material.
- The included text will be displayed in the feat description field if the "Display Feat Description" checkbox in the Appearance/Display Options Preference window is unchecked. Otherwise the text from the DESC tag will be displayed.
- PRExxx tags can be used with the `BENEFIT` tag.
- Multiple `BENEFIT` tags per line are allowed with all qualifying `BENEFIT` tags being concatonated for output and separated by spaces.
- `.CLEAR` will clear all `BENEFIT` tags.
- `.CLEAR.(regular expression match)` will clear specific instances.
- `BENEFIT` tags will take variable substitution.
  - Within the text a % followed by a number will substitute the #th variable from the variable list associated with the `BENEFIT` .
  - Variables are specified after the descriptive text and are pipe-delimited (|).
  - The special parameter %% will insert an actual % character into the text.
  - If the parameter needs to be next to a number the parameter number should be surrounded in curly brackets { }. For example, %{1000}gp.
- The following special variables are allowed within the variable list:
  - `%NAME` - The name of the object this `BENEFIT` tag is in.
  - `%FEAT` - Will substitute the descriptions of feats within the object that match the associated preqrequisites.
  - `%CHOICE` - Will replace the first associated choice in the object.
  - `%LIST` - Will substitute all choices into that parameter as a comma-delimited list.
- Formulas can be parsed and the results replaced in the output by enclosing the variables and formulas within parentheses.
  - CASTERLEVEL , a variable specifically designed for this purpose, is commonly used though other variables can be used as well.
  - Because anything within parentheses is assumed to be a formula to be parsed, text containing parentheses must substitute brackets [ ] in place of parentheses.
- Regular Expressions: Java has a Regular Expression library built in that is very similar to Perl regular expressions. Basically it allows for pattern matching in strings. You can create fairly powerful match structures using things like character groups "[a-zA-Z]" match any alphabetic character or groupings "(bat|super)man" match batman or superman and many many more. So, for example, you could clear all benefits by doing `BENEFIT:.CLEAR..*` , or clear all exceptional abilities by doing `BENEFIT:.CLEAR.\(Ex\)` , or clear everything that's non-numeric with `BENEFIT:.CLEAR.[A-Za-z]` .
- .MOD Behavior: When modifying a feat with the `.MOD` tag, given an existing `BENEFIT` tag, the data included in a new `BENEFIT` tag will be included as a separate tag.

Example:

`BENEFIT:This is sample text for the example purposes`

Adds feat benefit.

.MOD Example (Include Separately):

Initial Feat: `<feat name> <tab> BENEFIT:Initial benefit text.`

Modified By: `<feat name> <tab> BENEFIT:New benefit text.`

Is Equivalent To: `<feat name> <tab> BENEFIT:Initial benefit text. <tab> BENEFIT:New benefit text.`

The output of the modified will show the following: &quotInitial benefit text. New benefit text."

Tag Name: COST:x

Variables Used (x): Number (feat point cost)

What it does:

- This is how many feat points the feat costs. A decimal value, as the example below, would mean that it only costs 1/2 a feat point.
- .MOD Behavior: When modifying a feat with the `.MOD` tag, given an existing `COST` tag, the data included in a new `COST` tag will overwrite the existing tag data.

Example:

`COST:1`

Feat costs one feat point.

`COST:.5`

Feat costs half a feat point.

Default Value:

`1`

.MOD Example:

Initial Feat: `<feat name> <tab> COST:2`

Modified By: `<feat name> <tab> COST:1`

Is Equivalent To: `<ability name> <tab> COST:1`

Modified Feat costs one feat point.

*** New 5.11.x

Tag Name: MODIFYFEATCHOICE:x

Variables Used (x): Text (feat name)

Variables Used (x): TYPE=Text (feat type)

What it does:

- This tag allows for a previous feat choice to be replaced by a new one.
- The feat called must allow choices to be a valid ability.
- .MOD Behavior: When modifying an feat with the `.MOD` tag, given an existing `MODIFYFEATCHOICE` tag, the data included in a new `MODIFYFEATCHOICE` tag will overwrite the existing tag data.

Example:

`MODIFYFEATCHOICE:TYPE=NinjaMonkeySchool`

Allows the selection of a new school from a list of schools of type 'NinjaMonkeySchool' to replace a previously selected one.

`MODIFYFEATCHOICE:Ninja Monkey Primary Weapon Reselection`

Allows a ninja monkey to select a new primary weapon, replacing an earlier selected primary weapon.

.MOD Example:

Initial Feat: `<feat name> <tab> MODIFYFEATCHOICE:TYPE=NinjaMonkeyChimpSchool`

Modified By: `<feat name> <tab> MODIFYFEATCHOICE:TYPE=NinjaMonkeySilverbackSchool`

Is Equivalent To: `<feat name> <tab> MODIFYFEATCHOICE:TYPE=NinjaMonkeySilverbackSchool`

Modified feat allows the selection of a new school from a list of schools of type 'NinjaMonkeySilverbackSchool' to replace a previously selected one.

Tag Name: MULT:x

Variables Used (x): Boolean (YES/NO)

What it does:

- This determines if a feat can be taken multiple times. If the value is set to YES, then you MUST also use a `CHOOSE` tag.
- .MOD Behavior: When modifying an feat with the `.MOD` tag, given an existing `MULT` tag, the data included in a new `MULT` tag will overwrite the existing tag data.

Example:

`MULT:YES`

This Feat can be taken multiple times.

Default Value:

`NO`

.MOD Example:

Initial Feat: `<feat name> <tab> MULT:YES`

Modified By: `<feat name> <tab> MULT:NO`

Is Equivalent To: `<feat name> <tab> MULT:NO`

Modified feat cannot be taken multiple times.

Tag Name: STACK:x

Variables Used (x): Boolean (YES/NO)

What it does:

- This tells PCGen if the feat benefits may be stacked on one another.
- .MOD Behavior: When modifying a feat with the `.MOD` tag, given an existing `STACK` tag, the data included in a new `STACK` tag will overwrite the existing tag data.

Example:

`STACK:YES`

This Feat may be stack on itself.

Default Value:

`NO`

feat.MOD Example:

Initial Feat: `<feat name> <tab> STACK:YES`

Modified By: `<feat name> <tab> STACK:NO`

Is Equivalent To: `<feat name> <tab> STACK:NO`

The benefits for the modified feat will not stack with itself if taken multiple times.

*** Updated 5.17.x

Tag Name: TEMPLATE:x|x

Variables Used (x): Text (Name of template)

What it does:

- This is a pipe-delimited (|) list of templates that are granted by the feat.
- Supports `%LIST` in conjunction with a `CHOOSE` tag.

Example:

`TEMPLATE:Celestial`

Adds the "Celestial" template to the character.

`TEMPLATE:Half Dragon (Red)|Zombie`

Adds the templates "Half Dragon (Red)" and "Zombie" to the character.

Tag Name: TEMPLATE:ADDCHOICE:x|x

Variables Used (x): Text (Template Name)

What it does:

- This is a pipe-delimited list of template choices that are added to the list presented by the original `TEMPLATE:CHOOSE` tag.
- When using the `TEMPLATE:ADDCOICE` tag as part of a `.MOD` of a Feat that containes multiple `TEMPLATE:CHOOSE` tags, all instances of the `TEMPLATE:CHOOSE` tag will be modified.

Example:

`TEMPLATE:ADDCHOICE:Demihuman|Beast`

The feat allows the selection of previously defined templates plus the "Demihuman" or "Beast" templates.

Tag Name: TEMPLATE:CHOOSE:x|x

Variables Used (x): Text (Template Name)

What it does:

- Will present a popup window of the choices provided in the pipe-delimited (|) list, allowing the user to pick ONE from the list.
- Multiple `TEMPLATE:CHOOSE` tags can be used in the same LST object but doing so can cause unintended results.

Example:

`TEMPLATE:CHOOSE:Celestial|Outsider`

The feat allows the selections of either the "Celestial" or "Outsider" template.

Tag Name: VISIBLE:x

Variables Used (x): YES (Default)

Variables Used (x): NO

Variables Used (x): DISPLAY

Variables Used (x): EXPORT

What it does:

- `YES` - Shows the feat name in PCGen and on export to a character sheet.
- `NO` - Hides the feat name in PCGen and on export to a character sheet.
- `DISPLAY` - Displays the feat name in PCGen but not on the character sheet.
- `EXPORT` - Hides the feat name from PCGen but displays it on the character sheet.
- .MOD Behavior: When modifying a feat with the `.MOD` tag, given an existing `VISIBLE` tag, the data included in a new `VISIBLE` tag will overwrite the existing tag data.

Example:

`VISIBLE:YES`

Shows the feat name in PCGen and on the Output sheet.

.MOD Example:

Initial Feat: `<feat name> <tab> VISIBLEE:YES`

Modified By: `<feat name> <tab> VISIBLE:DISPLAY`

Is Equivalent To: `<feat name> <tab> VISIBLE:DISPLAY`

Modified feat will appear in the GUI but will not appear on the output sheet.