• Please note: In an effort to ensure that all of our users feel welcome on our forums, we’ve updated our forum rules. You can review the updated rules here: http://forums.wolflair.com/showthread.php?t=5528.

    If a fellow Community member is not following the forum rules, please report the post by clicking the Report button (the red yield sign on the left) located on every post. This will notify the moderators directly. If you have any questions about these new rules, please contact support@wolflair.com.

    - The Lone Wolf Development Team

Community Effort: Feats

daplunk

Well-known member
Hi Everyone,

This is a listing of the scripts required to add the missing 5e feats into Hero Labs 5e SRD. This does not list the feat descriptions. You will need to copy those in from your PHB.

GREEN = Functional
ORANGE = Partially Functional
RED = Yet to be automated.

To complete this WE NEED YOUR HELP.

Please take the time to look over the scripts provided. If you have the required knowledge to resolve some of the Orange and Red entries please post them in the comments below so that the master list can be updated.

See below (post 3) for a tutorial on how to add these in using the Hero Labs. Adding these in requires only your time and no programming knowledge.

CURRENT STATUS
COMPLETE: 87%
PARTIALLY COMPLETE: 4%
PENDING COMPLETION: 0%

OUTSTANDING
Spell Sniper - Currently does not restrict spell choice to only those with attack roles. To be implemented after next official patch.

COMMUNITY FILES
These feats are all currently being added to a Community Pack that will be made available in the near future. We have replaced all known missing functionality from the PHB and are preparing the files for release. Watch the forum boards for an announcement.
 
Last edited:
FEAT LIST

PLAYER HAND BOOK

Actor
ADD Eval Scripts:
hero.child[aCHA].field[aStartMod].value += 1

Alert
ADD Eval Scripts:
#skillbonus[Initiative] = #skillbonus[Initiative] + 5

Athlete
ADD Array-Based Menu?
Row 0: Strength​
Row 1: Dexterity​

ADD Eval Scripts
if (field[usrIndex].value = 0) then
hero.child[aSTR].field[aStartMod].value += 1
elseif (field[usrIndex].value = 1) then
hero.child[aDEX].field[aStartMod].value += 1
endif

Charger
TICK: Show in Activated Abilities List?
Activation Name: Activate Charge (+5 bonus attack / ignore if pushing)
Eval Script:
doneif (field[abilActive].value = 0)
foreach pick in hero from BaseWep where "(wCategory.Melee)"
eachpick.field[atmBonus].value += 5
nexteach

Crossbow Expert
Just Text

Defensive Duelist
Add Expr-reqs:
Message: Dexterity 13 required.​
Pre-requisite Expression:
#attrvalue[aDEX] >= 13
Tick: is Error? and Highlight Panel?​

Add Eval Scripts
Phase: Post-attributes
Script:
doneif (tagis[Helper.ShowSpec] = 0)

doneif (tagis[Helper.Disable] <> 0)

doneif (field[abilActive].value = 0)

hero.childfound[ArmorClass].field[Bonus].value += hero.child[ProfBonus].field[tProfBonus].value

Duel Wielder
ADD Eval-Script:
Phase: Post-Attributes
Script:
doneif (tagis[Helper.ShowSpec] = 0)

doneif (tagis[Helper.Disable] <> 0)

field[abValue].value = 0

foreach pick in hero from BaseWep where "(Hero.OffHand & !wProperty.TwoHanded)"
perform eachpick.assign[wProperty.Light]
field[abValue].value = 1
nexteach

hero.childfound[ArmorClass].field[Bonus].value += field[abValue].value

Dungeon Delver
Just Text

Durable
Add Eval Scripts: hero.child[aCON].field[aStartMod].value += 1

Elemental Adept
Coming in the community pack. Has dependencies on multiple files / things.

Great Weapon Master
TICK: Show in Activated Abilities List?
ADD Activation Name: Activate Great Weapon Master (-5 to hit, +10 dmg)
ADD Eval Script:
doneif (field[abilActive].value = 0)
foreach pick in hero from BaseWep where "(wProperty.Heavy)"
eachpick.field[atmBonus].value -= 5
eachpick.field[dmmBonus].value += 10
nexteach

Healer
Just Text

Heavily Armored
Add Eval Scripts:
hero.child[aSTR].field[Bonus].value += 1
perform hero.assign[ArmProfGrp.ArmorHeavy]

Add Expre-reqs
Message: Proficiency with medium armor required.
Is Error: Ticked
Highlight Panel: Ticket
Pre-requisite Expression:
tagis[ArmProfGrp.ArmorMed] <> 0

Heavy Armor Master
ADD Eval Scripts:
#skillbonus[aSTR] = #skillbonus[aSTR] + 1
ADD Expr-reqs:
Message: Proficiency with heavy armor required.
Is Error: Ticked
Highlight Panel: Ticket
Pre-requisite Expression: tagis[ArmProfGrp.ArmorHeavy] <> 0

Inspiring Leader
Add Expr-reqs:
Message: Charisma 13 required.​
Pre-requisite Expression: #attrvalue[aCHA] >= 13​
Tick: is Error? and Highlight Panel?​

Keen Mind
Add Eval Scripts: #skillbonus[aINT] = #skillbonus[aINT] + 1

Lightly Armored
ADD Array-Based Menu?
Row 0: Strength​
Row 1: Dexterity​

ADD Eval Scripts
if (field[usrIndex].value = 0) then
hero.child[aSTR].field[aStartMod].value += 1
elseif (field[usrIndex].value = 1) then
hero.child[aDEX].field[aStartMod].value += 1
endif

perform hero.assign[ArmProfGrp.ArmorLight]

Linguist
Add Eval Scripts:
#skillbonus[aINT] = #skillbonus[aINT] + 1
hero.child[resLangBck].field[resMax].value += 3

Lucky
Charge Information:
TICK: Show in Tracked Resources List?
Base Charges: 3
Usage period: /long rest​

Mage Slayer
Text Only

Magic Initiate
Complete: Coming in the Community pack

Martial Adept
Implemented as part of the community pack.

Medium Armor Master
ADD Eval-Script:
Phase: Final
Priority: 1000
Script:
field[abValue].value = 0
foreach pick in hero from BaseArmor where "ArmorClass.Medium & Helper.CurrArmor"
field[abValue].value = 1
perform eachpick.delete[Helper.StealthDis]
nexteach
hero.childfound[ArmorClass].field[tACDexMod].value = minimum(hero.childfound[ArmorClass].field[tACDexMod].value + field[abValue].value, hero.childfound[aDEX].field[aModBonus].value)

ADD Expr-reqs
Message: Proficiency with medium armor required.
Is Error: Ticked
Highlight Panel: Ticked
Pre-requisite Expression:
tagis[Hero.ProfMedium] <> 0

Mobile
Add Eval Scripts:
hero.child[Speed].field[tSpeed].value += 10

Moderately Armored
ADD Array-Based Menu?
Row 0: Strength​
Row 1: Dexterity​

ADD Eval Scripts
if (field[usrIndex].value = 0) then
hero.child[aSTR].field[aStartMod].value += 1
elseif (field[usrIndex].value = 1) then
hero.child[aDEX].field[aStartMod].value += 1
endif

perform hero.assign[ArmProfGrp.ArmorMed]
perform hero.assign[ArmProfGrp.Shields]

ADD Expr-reqs:
Message: Proficiency with heavy armor required.
Is Error: Ticked
Highlight Panel: Ticket
Pre-requisite Expression: tagis[ArmProfGrp.ArmorLight] <> 0
TO DO: Add Proficiency with Shields

Mounted Combatant
Text Only

Observant
ADD Array-Based Menu?
Row 0: Intelligence​
Row 1: Wisdom​

ADD Eval Scripts
if (field[usrIndex].value = 0) then
hero.child[aINT].field[aStartMod].value += 1
elseif (field[usrIndex].value = 1) then
hero.child[aWIS].field[aStartMod].value += 1
endif


ADD Eval Script #2
Phase: Post-attributes, Priority: 1000
Note: This makes it so you can hover over the skill and see the passive skill.

var sPPercept as string
var sPInvest as string
var iPPercept as number
var iPInvest as number

iPPercept = hero.child[skPercep].field[skAttrBon].value+10+5
iPInvest = hero.child[skInvestig].field[skAttrBon].value+10+5
sPPercept = "passive Perception (" & iPPercept & ") [+5 bonus to your passive Wisdom (Perception)]"
sPInvest = "passive Investigation ("& iPInvest &") [+5 bonus to your passive Intelligence (Investigation)]"

#situational[hero.child[skPercep], sPPercept,field[thingname].text]
#situational[hero.child[skInvestig], sPInvest,field[thingname].text]

~#situational[hero.child[skPercep], "+5 bonus to your passive Wisdom (Perception)",field[thingname].text]
~#situational[hero.child[skInvestig], "+5 bonus to your passive Intelligence (Investigate)",field[thingname].text]

Polearm Master
Text only

Resilient
ADD Array Based Menu
Row 0: Strength
Row 1: Dexterity
Row 2: Constitution
Row 3: Intelligence
Row 4: Wisdom
Row 5: Charisma

ADD Eval Script
if (field[usrIndex].value = 0) then
hero.child[aSTR].field[aStartMod].value += 1
perform hero.assign[ProfSave.svSTR]

elseif (field[usrIndex].value = 1) then
hero.child[aDEX].field[aStartMod].value += 1
perform hero.assign[ProfSave.svDEX]

elseif (field[usrIndex].value = 2) then
hero.child[aCON].field[aStartMod].value += 1
perform hero.assign[ProfSave.svCON]

elseif (field[usrIndex].value = 3) then
hero.child[aINT].field[aStartMod].value += 1
perform hero.assign[ProfSave.svINT]

elseif (field[usrIndex].value = 4) then
hero.child[aWIS].field[aStartMod].value += 1
perform hero.assign[ProfSave.svWIS]

elseif (field[usrIndex].value = 5) then
hero.child[aCHA].field[aStartMod].value += 1
perform hero.assign[ProfSave.svCHA]

endif

Ritual Caster
We have added the ability to select the 2 ritual spells.

To Do: Once initial spells are selected unlock ability to add higher level spells.

Savage Attacker
Text only

Sentinel
Text only

Sharpshooter
TICK Show in Activated Abilities List?
Activation Name: Activate Sharpshooter (-5 to hit, +10 dmg)
ADD Eval Script:
doneif (field[abilActive].value = 0)
foreach pick in hero from BaseWep where "(wCategory.RangeProj | wCategory.RangeThrow | wCategory.Firearm)"
eachpick.field[atrBonus].value -= 5
eachpick.field[dmrBonus].value += 10
nexteach

Shield Master
Text only

Skilled
Implemented, coming as part of the community pack.

Skulker
Add Expr-reqs:
Message: Dexterity 13 required.​
Pre-requisite Expression: #attrvalue[aDEX] >= 13​
Tick: is Error? and Highlight Panel?​

Spell Sniper
This is now complete and will be included in the community pack. Has a number of dependencies thus not copied here.
Currently does not restrict spell choice to only those with attack roles. To be implemented after next official patch.

Tavern Brawler
This is now complete and will be included in the community pack. Has a number of dependencies thus not copied here.

Tough
ADD Eval Script #1:
Phase: Post-Levels​
Priority: 5000​
Script:
field[abValue].value += maximum(herofield[tHitDice].value, 1)*2

ADD Eval Script #2:
Phase: Post-Levels​
Priority: 15000​
Script:
~if we've been disabled, get out now
doneif (tagis[Helper.Disable] <> 0)

herofield[tBonusHP].value += field[abValue].value

War Caster

ADD Pre-reqs
Message: You must be able to cast at least one spell.
Is Error: Ticked
Highlight Panel: Ticked
Pre-requisite Script:
var iTotal as number

iTotal = iTotal + #levelcount[Bard]
iTotal = iTotal + #levelcount[Cleric]
iTotal = iTotal + #levelcount[Druid]
iTotal = iTotal + #levelcount[Sorcerer]
iTotal = iTotal + #levelcount[Warlock]
iTotal = iTotal + #levelcount[Wizard]

if (#levelcount[Paladin] >1) then
iTotal = iTotal + #levelcount[Paladin]
endif
if (#levelcount[Ranger] >1) then
iTotal = iTotal + #levelcount[Ranger]
endif
if (hero.child[RaceHelper].field[rSpAtk].value >0) then
iTotal = iTotal + 1
endif

@valid = 0
if (iTotal >0) then
@valid = 1
endif

Weapon Master
We have this functioning however it is quite involved. We will release this shortly as part of the community pack.
 
Last edited:
HOW TO ADD A CUSTOM FEAT

1. Open Hero Labs
2. Click Tools > Show Editor
3. Click File > New Data File
4. Select Feat tab.
5. Click New(Blank)
6. Enter Name
7. Enter Unique ID
8. Enter Summary Text
9. Enter Description Text
10. See post above for unique changes that need to be made.
11. Some of the common sections that require changes per above have been highlighted in pink.
12628611_10208335783372772_237814410390912005_o.jpg


12. This is what the Eval Scripts screen looks like.
12646994_10208335793973037_123820705435420487_n.jpg


13. This is what the Expr-reqs screen looks like.
481157_10208335797853134_3052729844839748573_n.jpg
 
Last edited:
Tough - cribbed from Hill Dwarf's Toughness

2 evaluation scripts, both Post-levels phase.
Priority 5000
Code:
field[abValue].value += maximum(herofield[tHitDice].value, 1)*2

Priority 15000
Code:
~if we've been disabled, get out now
doneif (tagis[Helper.Disable] <> 0)

herofield[tBonusHP].value += field[abValue].value
 
Last edited:
I've almost got Sharpshooter (and, by extension, Great Weapon Master) nailed for scripting the mechanics. You will need to check "Show in Activated Ability List" and set an Activation Name.

Code:
doneif (field[abilActive].value = 0)
foreach pick in hero from BaseWep where "(wCategory.RangeProj | wCategory.RangeThrow | wCategory.Firearm)"
eachpick.field[atrBonus].value -= 5
eachpick.field[dmrBonus].value += 10
nexteach

Now, when you have Sharpshooter selected, a check box will appear on the in play tab. Checking the box will change the attack/damage values automatically. It does not, however, test for proficiency - not sure how to do that yet.

For Great Weapon Master, replace (wCategory.RangeProj etc) with wProperty.Heavy, and use atmBonus and dmmBonus.

Once the Weapon Proficiency test is sorted, it should hopefully slot into the where expression - but for now, it'll do - just hold the honour system there.
 
Thanks Elindor!

They both work wonderfully :D

If anyone has knowledge they can share please don't be shy!
 
For Great Weapon Master, replace (wCategory.RangeProj etc) with wProperty.Heavy, and use atmBonus and dmmBonus.

Have you got this working? My attempts are failing :( No changes are being made to anything visible on the In-Play tab.

doneif (field[abilActive].value = 0)
foreach pick in hero from BaseWep where "(wCategory.Heavy)"
eachpick.field[atmBonus].value -= 5
eachpick.field[dmmBonus].value += 10
nexteach
 
Last edited:
Here's the codeblock

Code:
doneif (field[abilActive].value = 0)

foreach pick in hero from BaseWep where "wProperty.Heavy"
eachpick.field[atmBonus].value -= 5
eachpick.field[dmmBonus].value += 10
nexteach
 
Got it. Change wCategory.Heavy to wProperty.Heavy

doneif (field[abilActive].value = 0)
foreach pick in hero from BaseWep where "(wProperty.Heavy)"
eachpick.field[atmBonus].value -= 5
eachpick.field[dmmBonus].value += 10
nexteach
 
Hmmm, seems to be easier than I thought with the editor after all...

Still would prefer a .dat files release so one can get the complete overview of things in the implementation.
 
I'm probably not going to be contributing to feats too much for the rest of the week - my priority is (hopefully understandably) covering the non-SRD material being used in the D&D game I'm running. I think I'm doing quite well - in addition to all of the feats, I've got one subrace and three sub classes (with all features) in a usable state (not as polished as I'd like, but I take what I can get), and a fallback strategy for Variant Human if I can't work out how to add a feat that the user can choose. So my immediate plan will be to deal with the two remaining subclasses and add in the spells I need (even if they're just placeholders at this time).

There is, however, some interesting design space in the feats, so I'll probably swing back into it in short order. But for now, sleep beckons - I've got work in the morning *yawn*
 
Not sure if this is correct thread to ask this question, but if you are not a programmer or the knowledge do all the editing that you guys are doing, is there is there away to add them or just need to wait for updates?
 
This information is enough for a non programmer to add this information in. You are just copying the steps and code provided into the matching fields in the editor.

The green ones are complete and functional. Orange is partially complete. Red is still work in progress.

I will post a tutorial with images in a bit as an example.
 
This information is enough for a non programmer to add this information in. You are just copying the steps and code provided into the matching fields in the editor.

The green ones are complete and functional. Orange is partially complete. Red is still work in progress.

I will post a tutorial with images in a bit as an example.
Why go through all that instead of just making actual .user files that can be shared? As has been mentioned the community can add the missing pieces of the SRD.

If all the separate people adding stuff started to work together it would go so much faster. Right now its like 20 people each doing there own thing. :p
 
Its probably the way to go. I'm assuming however changes will need to be made.

Feat Names changed
Feat Descriptions removed

I'm assuming community files can only contain the mechanism.

Can anyone confirm?
 
I'm assuming community files can only contain the mechanism.

Can anyone confirm?
Yep it has been CONFIRMED.

Basically you can most likely get away with the same "Name" of a Thing but you only want to list the Mechanics of the ability. So lets say "Dodge" feat (Sorry I don't know 5e) from 3.5. Call it "Dodge" but list a very simple text of +1 AC bonus.

Then take a look at my NOTE here about consistent file names and pick a two digit unique ID and how to set that.

Next stage of this is to compile the .user files into working version called Package or .hl file. This can be setup on the community servers with a working Update URL. Meaning that people will be able to download and install this community Pack really easily. In addition HL will tell gamers when a new version is out and will even prompt gamers to download and install.

This means you reach a MUCH larger audience. :)
 
Thanks Shadow.

Not sure I'm the right person to be taking the lead on this. The only reason i have availability is because i'm home with a 2 week old /zzzzzzz
 
NOTES - Pathfinder Scripting:

Two Weapon Defense

~ If we're disabled, do nothing
doneif (tagis[Helper.FtDisable] <> 0)

~ Check to see if we have something equipped in each hand
doneif (hero.tagis[Hero.EquipMain] + hero.tagis[Hero.EquipOff] < 2)

~ Check to see that we have at least two weapons equipped, or a double
~ weapon
if (hero.tagcount[Hero.EquipWep] < 2) then
doneif (hero.tagcount[Hero.EquipDbl] = 0)
endif

~ Check to see if our Unarmed Strike is selected in either main or off
~ hands
doneif (hero.child[wUnarmed].tagis[Hero.MainHand] + hero.child[wUnarmed].tagis[Hero.OffHand] > 0)

~ Otherwise, add a +1 Shield bonus to our AC
#applybonus[tACShield, hero.child[ArmorClass], field[abValue].value]

~ If we're in output mode, don't do anything
doneif (state.isoutput <> 0)

#appenddesc[pstTotDef,"{b}Addition from Two-weapon Defense{/b}: When wielding a double weapon or two weapons (not including natural weapons or unarmed strikes), you gain a " & signed(field[abValue].value) & " shield bonus to your AC.{br}{br}When you are fighting defensively or using the total defense action, this shield bonus increases to " & signed(field[abValue2].value) & "."]
#appenddesc[pstFtDefen,"{b}Addition from Two-weapon Defense{/b}: When wielding a double weapon or two weapons (not including natural weapons or unarmed strikes), you gain a " & signed(field[abValue].value) & " shield bonus to your AC.{br}{br}When you are fighting defensively or using the total defense action, this shield bonus increases to " & signed(field[abValue2].value) & "."]

~ if we're fighting defensively or total defense, the shield bonus increases to +2
if (#hascondition[pstFtDefen] + #hascondition[pstTotDef] <> 0) then
#applybonus[tACShield, hero.child[ArmorClass], field[abValue2].value]
endif

Aldori Dueling Mastery

~ If we're disabled, do nothing
doneif (tagis[Helper.FtDisable] <> 0)

~ If we have a shield, do nothing, we are done.
doneif (hero.tagis[Hero.EquipShld] <> 0)

~ If we have something in our off hand, is it an Aldori Dueling sword wielded 2 handed? If so set our bonus to 1, if not, done.
var shield as number
if (hero.tagis[Hero.EquipOff] <> 0) then
foreach pick in hero from BaseWep where "IsWeapon.wDuelSwo"
if (eachpick.field[gIsEquip].value + eachpick.field[wIs2nd].value = 2) then
shield = 1
endif
nexteach

doneif (shield = 0)

~ If we don't have something in our off hand, is an Aldori Dueling sword equipped in 1 hand? If so set our bonus to 2, if not, done.
elseif (hero.tagis[Hero.EquipOff] = 0) then
foreach pick in hero from BaseWep where "IsWeapon.wDuelSwo"
if (eachpick.field[gIsEquip].value = 1) then
shield = 2
endif
nexteach
doneif (shield = 0)
endif

~ Add the shield bonus to our Value field, and then add that as a shield bonus to AC. Doesn't stack with other shield bonuses (like the spell)
field[abValue].value += shield
#applybonus[tACShield, hero.child[ArmorClass], field[abValue].value]

~ If we're disabled, do nothing
doneif (tagis[Helper.FtDisable] <> 0)

~ Assign the piercing weapon tag so dueling swords work with Duelist abilities.
foreach pick in hero from BaseWep where "IsWeapon.wDuelSwo"
perform eachpick.assign[wType.P]
nexteach

~ Do we have a dueling sword equipped in either hand? If so +2 Init.
foreach pick in hero from BaseWep where "IsWeapon.wDuelSwo"
if (eachpick.field[gIsEquip].value + eachpick.field[wIs2nd].value <> 0) then
hero.child[Initiative].field[Bonus].value += 2
endif
nexteach

Armor Proficiency (Heavy)

Type: Expr-reqs
Message: Armor Proficiency (Light) required.
tagis[Hero.ProfLight] <> 0
tagis[Hero.ProfMedium] <> 0
 
Last edited:
Back
Top