• 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

Assistance with Feat: Legendary Size from In the Company of Dragons Expanded

I am trying to program the following feat from the Pathfinder sourcebook In the Company of Dragons Expanded. I have the base In the Company of Dragons source already purchased and need some assistance on how I can add this as a feat. The material also says there is an adjustment in HL for Dracomorphosis but I can only assume it was removed at some point because I can't find it.

Legendary Size (Dragon)
You are a dragon of truly prodigious size.
Prerequisite: dracomorphosis class feature, character level 8th
Benefit: Increase your effective level by 2 when determining the effects of dracomorphosis. If you have at least 20 class levels in classes with the draconic hero archetype, gain the Colossal size and other benefits of the draconic exemplar’s great wyrm class feature. If you have at least 20 draconic exemplar class levels, gain an additional +2 size bonus to Strength and Constitution.

How do I grant the Great Wyrm [cRPDraGrea] class special ability at level 20?

I'm using the following but its throwing an error.

if (HeroLev >= 20) then
perform hero.assign[cRPDraGrea]
endif
 
Last edited:
I have created the following Eval Script to attempt to replace the existing variable hero.child[xRPDraDrac].field[abValue5].value = maximum(ExIncr1,HeroIncr1)

Generally when I click Test it seems to work ok but if I add levels or restart Hero Lab the feat stops working again.

Can anyone assist?

First, 401, Index 1

~if we've been disabled, get out now
doneif (tagis[Helper.SpcDisable] <> 0)

var ExLev as number
var HeroLev as number
var HeroLev1 as number
var ExIncr1 as number
var HeroIncr1 as number
ExLev = 0
call DracHero

if (#levelcount[DraconicE] >= 1) then
ExLev = #levelcount[DraconicE]+2
hero.childfound[cRPDraDra4].field[xExtraLev].value += 2
elseif (HeroLev >= 1) then
HeroLev1 = HeroLev+2
hero.childfound[cRPDraDra5].field[xExtraLev].value += 2
endif

ExIncr1 = round(ExLev/4,0,-1)

if (HeroLev <= 19) then
HeroIncr1 = round(HeroLev1/5,0,-1)
elseif (HeroLev >= 20) then
HeroIncr1 = 5
perform hero.childfound[abCITDraHGrtWyrm].assign[Helper.ShowSpec]
endif

~debug "ExLev = " & ExLev
~debug "HeroLev = " & HeroLev

~ store for later script use
hero.child[xRPDraDrac].field[abValue5].value = maximum(ExIncr1,HeroIncr1)
 
Why have this script running ultra-early? At First/401? Normally, a script that's just altering xExtraLev I'd put in the pre-levels phase, and then use normal timings - I prefer multiples of 10000.

Where is the HeroLev variable set?

The xRPDraDrac pick - what phase & priority does its script to set abValue5 run?
 
I'm not sure where HeroLev is set. I copied this eval script from the In the Company of Dragons, altered it a bit and then set it to run immediately after the original. The xExtraLev is just for the text of the power, the actual mechanics come from whats stored in abValue5 and the other variables based on it.

The Ability, Dracomorphosis (Functional) is xRPDraDrac. It have EvalScripts running at Pre-Attributes/10000, Post-Attributes/10000, First/400, First/401, Post-Attributes/9000
 
In case it helps, the line in the script that reads
call DracHero
is calling a procedure that the original Company of Dragons datafiles added to Herolab, and you should be able to view the script for that procedure with the editor to see exactly how it is getting or calculating the variables it uses.

Open the editor, and in the "General" tabs there is a "*Procedure" tab. Hit the "New Copy" button and choose the entry for "DracHero" in that list, and you will be able to read the script in the new copy you make.

You can't edit the original DracHero procedure used by the Company of Dragons data files, but sometimes it is helpful to see the code being used.
 
In case it helps, the line in the script that reads

is calling a procedure that the original Company of Dragons datafiles added to Herolab, and you should be able to view the script for that procedure with the editor to see exactly how it is getting or calculating the variables it uses.

Open the editor, and in the "General" tabs there is a "*Procedure" tab. Hit the "New Copy" button and choose the entry for "DracHero" in that list, and you will be able to read the script in the new copy you make.

You can't edit the original DracHero procedure used by the Company of Dragons data files, but sometimes it is helpful to see the code being used.

ploturo, Thank you for this I had no idea how to find it. I can do minor edits but I am not very experienced in creating new HL classic content. Looks like its just calculating how many Draconic Hero archetypes levels have been taken.

Here is the Procedure DracHero


~ calculate Draconic Hero level

var HeroLev as number
HeroLev = 0

if (hero.tagis[ClassVary.arAlcDraco] <> 0) then
HeroLev += #levelcount[Alchemist]
endif
if (hero.tagis[ClassVary.arBbnDraco] <> 0) then
HeroLev += #levelcount[Barbarian]
endif
if (hero.tagis[ClassVary.arBrdDraco] <> 0) then
HeroLev += #levelcount[Bard]
endif
if (hero.tagis[ClassVary.arCavDraco] <> 0) then
HeroLev += #levelcount[Cavalier]
endif
if (hero.tagis[ClassVary.arClrDraco] <> 0) then
HeroLev += #levelcount[Cleric]
endif
if (hero.tagis[ClassVary.arDrdDraco] <> 0) then
HeroLev += #levelcount[Druid]
endif
if (hero.tagis[ClassVary.arFtrDraco] <> 0) then
HeroLev += #levelcount[Fighter]
endif
if (hero.tagis[ClassVary.arGunDraco] <> 0) then
HeroLev += #levelcount[Gunsling]
endif
if (hero.tagis[ClassVary.arInqDraco] <> 0) then
HeroLev += #levelcount[Inquisito]
endif
if (hero.tagis[ClassVary.arMagDraco] <> 0) then
HeroLev += #levelcount[Magus]
endif
if (hero.tagis[ClassVary.arMnkDraco] <> 0) then
HeroLev += #levelcount[Monk]
endif
if (hero.tagis[ClassVary.arOraDraco] <> 0) then
HeroLev += #levelcount[Oracle]
endif
if (hero.tagis[ClassVary.arPalDraco] <> 0) then
HeroLev += #levelcount[Paladin]
endif
if (hero.tagis[ClassVary.arRgrDraco] <> 0) then
HeroLev += #levelcount[Ranger]
endif
if (hero.tagis[ClassVary.arRogDraco] <> 0) then
HeroLev += #levelcount[Rogue]
endif
if (hero.tagis[ClassVary.arSorDraco] <> 0) then
HeroLev += #levelcount[Sorcerer]
endif
if (hero.tagis[ClassVary.arSumDraco] <> 0) then
HeroLev += #levelcount[Summoner]
endif
if (hero.tagis[ClassVary.arTasDraco] <> 0) then
HeroLev += #levelcount[Taskshape]
endif
if (hero.tagis[ClassVary.arWitDraco] <> 0) then
HeroLev += #levelcount[Witch]
endif
if (hero.tagis[ClassVary.arWizDraco] <> 0) then
HeroLev += #levelcount[Wizard]
endif
 
I'm running this eval script at First/400/2 because I want it to run and replace the values set but the original eval script for ITC.

The racial size increase only works when I click "Test Now!", if I close Hero Lab or quick reload the files the size increase no longer functions. However the attributes increase adjust correctly.

I really appreciate any assistance.

~ determine new dracomorphosis increment
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~if we've been disabled, get out now
doneif (tagis[Helper.SpcDisable] <> 0)

var ExLev as number
var HeroLev as number
var HeroLev1 as number
var ExIncr1 as number
var HeroIncr1 as number
var incr as number
ExLev = 0
call DracHero

if (#levelcount[DraconicE] >= 1) then
ExLev = #levelcount[DraconicE]+2
hero.childfound[cRPDraDra4].field[xExtraLev].value += 2
elseif (HeroLev >= 1) then
HeroLev1 = HeroLev+2
hero.childfound[cRPDraDra5].field[xExtraLev].value += 2
endif

ExIncr1 = round(ExLev/4,0,-1)

if (HeroLev <= 19) then
HeroIncr1 = round(HeroLev1/5,0,-1)
elseif (HeroLev >= 20) then
HeroIncr1 = 5
perform hero.childfound[abCITDraHGrtWyrm].assign[Helper.ShowSpec]
endif

~debug "ExLev = " & ExLev
~debug "HeroLev = " & HeroLev

~ store for later script use
hero.child[xRPDraDrac].field[abValue5].value = maximum(ExIncr1,HeroIncr1)
field[abValue5].value = maximum(ExIncr1,HeroIncr1)

incr = hero.child[xRPDraDrac].field[abValue5].value
 
Let's go back to the basics - are you working in the right folder? In the main HL window, in the Tools menu, choose Explore Folders, and then Game System Data Folder. That'll open a folder from your computer - is the file you're creating this content in within that folder (and not a sub-folder)? Having a file somewhere else is something that can create the symptom of things only working after test now - HL only loads files from the correct folder when loading, but the test now operation just patches that one item into the database, and where the file it's from is located isn't checked.
 
wow, this is weird. I did the HL coding for the original In the Company of Dragons, sooo long ago now (2016, according my files.)

I have my original source code, if you need to see any bits. (It's been a while, don't remember too much about HL coding these days.)
 
I am coming at this from a different angle now. I found that the Dracomorphosis (functional) ability is actually assigned at the Race Taninim and I have been trying to attack it from a feat perspective. My though is to create an alternate racial trait that will replace the core Dracomorphosis ability with a custom one I create that allows for alterations from the expanded book.
 
This is what I have now but I'm not sure how to write the if statement for has levels in Draconic Exemplar & also has a specific feat so I keep getting errors at the moment.


~ determine dracomorphosis increment
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~if we've been disabled, get out now
doneif (tagis[Helper.SpcDisable] <> 0)

~ size bump every 4 levels for Draconic Exemplar
~ size bump every 5 levels for Draconic Hero
~ whichever one is higher takes effect, no stacking
var ExLev as number
var HeroLev as number
var ExIncr as number
var HeroIncr as number

ExLev = #levelcount[DraconicE]
call DracHero

ExIncr = round(ExLev/4,0,-1)
HeroIncr = round(HeroLev/5,0,-1)

~ Legendary Size feat, adjust Draconic Exemplar & Draconic Hero levels by +2 for size increase

if (ExLev >= 1, hero.childlives[fCITTanLegSize] = 1) then
ExIncr = round(ExLev+2/4,0,-1)
hero.childfound[cRPDraDra4].field[xExtraLev].value += 2
elseif (ExLev >= 20, hero.childlives[fCITTanLegSize] = 1) then
hero.child[aSTR].field[aNormMod].value += 2
hero.child[aCON].field[aNormMod].value += 2
elseif (HeroLev >= 1, hero.childlives[fCITTanLegSize] = 1) then
hero.childfound[cRPDraDra5].field[xExtraLev].value += 2
elseif (HeroLev <= 19, hero.childlives[fCITTanLegSize] = 1) then
HeroIncr = round(HeroLev+2/5,0,-1)
elseif (HeroLev >= 20, hero.childlives[fCITTanLegSize] = 1) then
HeroIncr = 5
perform hero.childfound[abCITDraHGrtWyrm].assign[Helper.ShowSpec]
endif

~debug "ExLev = " & ExLev
~debug "HeroLev = " & HeroLev

~ store for later script use
field[abValue5].value = maximum(ExIncr,HeroIncr)

~debug "incr = " & field[abValue5].value
 
Still needing some help... I need an if statement for if the character has a specific class and also has a specific feat then do stuff.

Can anyone assist?

~ Draconic Exemplar level +2 for Dracomorphosis
if ((hero.childlives[fCITTanLegSize] <> 0) + (hero.childlives[cHelpDra] <> 0) = 2) then
ExIncr = round(ExLev+2/4,0,-1)
hero.childfound[cRPDraDra4].field[xExtraLev].value += 2
endif
 
#levelcount[DraconicE] > 0

#hasfeat[fCITTanLegSize] <> 0

Combining them:
if (#levelcount[DraconicE] > 0) then
if (#hasfeat[fCITTanLegSize] <> 0) then
~make your changes here
endif
endif
 
Thank you. Is it possible to have an EvalScript that adjusts the value of an external ability?

For example, I have an evalScript that runs from the Ability [abCITDracExp] and I'd like it to update to the field.abValue5 on Ability [xRPDraDrac].

This doesn't seem to do the trick though.

hero.child[xRPDraDrac].field[abValue5].value = maximum(ExIncr1,HeroIncr1)
 
I have this script running First/400 on an Alternate Racial Trait once I noticed Dracomorphosis was bootstrapped to the race and not the class.

Nothing happens when you add the feat though, it's very frustrating.

~ determine legendary size dracomorphosis increment
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~if we've been disabled, get out now
doneif (tagis[Helper.SpcDisable] <> 0)

~ size bump every 4 levels for Draconic Exemplar
~ size bump every 5 levels for Draconic Hero
~ whichever one is higher takes effect, no stacking
var ExLev as number
var HeroLev as number
var HeroLev1 as number
var ExIncr as number
var HeroIncr as number
var LegSize as number

~ Legendary Feat +2 level variable
LegSize = 0
if (#hasfeat[fCITTanLegSize] <> 0) then
LegSize = 2
endif

call DracHeroExp
HeroLev1 = HeroLev+LegSize
ExLev = #levelcount[DraconicE]+LegSize

ExIncr = round(ExLev/4,0,-1)
HeroIncr = round(HeroLev1/5,0,-1)

~ Begin Legendary Size adjustments
~~ Draconic Exemplar level +2 for Dracomorphosis
if (ExLev <> 0) then
if (#hasfeat[fCITTanLegSize] <> 0) then
hero.childfound[cRPDraDra4].field[xExtraLev].value += 2
endif
endif

~~ Draconic Exemplar level +2 Str & Con for Great Wyrm
if (ExLev >= 20) then
if (#hasfeat[fCITTanLegSize] <> 0) then
hero.child[aSTR].field[aNormMod].value += 2
hero.child[aCON].field[aNormMod].value += 2
endif
endif

~ Draconic Hero levels by +2 for Dracomorphosis
if (HeroLev >=1) then
if (#hasfeat[fCITTanLegSize] <> 0) then
hero.childfound[cRPDraDra5].field[xExtraLev].value += 2
endif
endif

~ Draconic Hero level 20 gets Great Wyrm ability
if (HeroLev >= 20) then
if (#hasfeat[fCITTanLegSize] <> 0) then
HeroIncr = 5
perform hero.childfound[abCITDraHGrtWyrm].assign[Helper.ShowSpec]
endif
endif
~ End of Legendary Size adjustments

~debug "ExLev = " & ExLev
~debug "HeroLev = " & HeroLev

~ store for later script use
field[abValue5].value = maximum(ExIncr,HeroIncr)

~debug "incr = " & field[abValue5].value
 
Back
Top