• 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

Dragons and Age Categories

Matt Droz

Well-known member
It's always bothered me a bit that there's a separate entry for each Age Category for each Dragon. Oh, I understand totally why, especially with the Encounter Builder so you can find the dragons by Challenge Rating and such.

Still, it bugged me. So when I found myself creating another dragon in the Editor, I decided to do this differently. I created a generic Age Category under Racial Special with an Array-Based menu:

- Choose -
Wyrmling
Very young
Young
Juvenile
Young adult
Adult
Mature Adult
Old
Very old
Ancient
Wyrm
Great wyrm

There's a single Eval Rule at First/100 to display the message "Must choose an age category" if one hasn't been chosen.
Code:
validif (field[usrIndex].value <> 0)

Then, for the good stuff:

Eval Script #1
First (Users)/100; Index 1
Code:
~ Set's dragon's size, CR, hit dice, natural armor, and ability scores based on Age Category
doneif (field[usrIndex].value = 0)

var sizemod as number
var hDice as number
var nArm as number
var mScore as number
var strSc as number
var dexSc as number
var conSc as number
perform hero.findchild[BaseRace].setfocus
 
doneif (state.isfocus = 0)

if (field[usrIndex].value = 12) then
  sizemod = 5
  focus.field[rCR].value += 16
elseif (field[usrIndex].value = 11) then
  sizemod = 4
  focus.field[rCR].value += 14
elseif (field[usrIndex].value = 10) then
  sizemod = 4
  focus.field[rCR].value += 13
elseif (field[usrIndex].value = 9) then
  sizemod = 4
  focus.field[rCR].value += 12
elseif (field[usrIndex].value = 8) then
  sizemod = 4
  focus.field[rCR].value += 11
elseif (field[usrIndex].value = 7) then
  sizemod = 3
  focus.field[rCR].value += 9
elseif (field[usrIndex].value = 6) then
  sizemod = 3
  focus.field[rCR].value += 8
elseif (field[usrIndex].value = 5) then
  sizemod = 3
  focus.field[rCR].value += 7
elseif (field[usrIndex].value = 4) then
  sizemod = 2
  focus.field[rCR].value += 5
elseif (field[usrIndex].value = 3) then
  sizemod = 2
  focus.field[rCR].value += 4
elseif (field[usrIndex].value = 2) then
  sizemod = 1
  focus.field[rCR].value += 2
  endif

call SizeChange

hDice = (field[usrIndex].value - 1) * 2
nArm = (field[usrIndex].value - 1) * 3
if (field[usrIndex].value = 2) then
  strSc = 4
elseif (field[usrIndex].value >= 3) then
  strSc = (field[usrIndex].value + 1) * 2
else
  strSc = 0
  endif

dexSc = field[usrIndex].value + 1
dexSc = round(dexSc/3, 0, -1)
dexSc = dexSc * 2

if (field[usrIndex].value >= 3) then
  conSc = field[usrIndex].value + 2
  conSc = round(conSc/2, 0, -1)
  conSc = conSc * 2
else
  conSc = (field[usrIndex].value - 1) * 2
  endif
mScore = round(field[usrIndex].value /2, 0, -1) * 2

focus.field[rHitDice].value += hDice
focus.field[rAC].value += nArm
focus.field[rSTR].value += strSc
focus.field[rDEX].value -= dexSc
focus.field[rCON].value += conSc
focus.field[rINT].value += mScore
focus.field[rWIS].value += mScore
focus.field[rCHA].value += mScore

Eval Script #2:
Render/9999; Index 2
Code:
~ appends Age Category to livename of dragon; sets Frightful Presence range
doneif (field[usrIndex].value = 0)

hero.findchild[BaseRace].field[livename].text = hero.findchild[BaseRace].field[thingname].text & ", " & field[usrSelect].text

hero.childfound[raFrightPr].field[abRange].value = field[usrIndex].value * 30

Okay, that's the Racial Ability that you add on to the dragon. Now, back to the dragon itself. adding the following Eval Script at First (Users)/101 will set the abValue of the breath weapon, set the bonus feats value (rFeat), and set the Damage Reduction values as they go up in age category:
Code:
doneif (hero.childfound[raFRAgeCat].field[usrIndex].value = 0)

hero.childfound[raDrBreath].field[abValue].value = hero.childfound[raFRAgeCat].field[usrIndex].value

field[rFeat].value -= round(field[rHitDice].value /2, 0, 1)

if (hero.childfound[raFRAgeCat].field[usrIndex].value >= 11) then
  perform hero.childfound[xDamRdMag].assign[Value.20]
elseif (hero.childfound[raFRAgeCat].field[usrIndex].value >= 9) then
  perform hero.childfound[xDamRdMag].assign[Value.15]
elseif (hero.childfound[raFRAgeCat].field[usrIndex].value >= 7) then
  perform hero.childfound[xDamRdMag].assign[Value.10]
elseif (hero.childfound[raFRAgeCat].field[usrIndex].value >= 5) then
  perform hero.childfound[xDamRdMag].assign[Value.5]
  endif

This Eval Script will set the skill values dependent on the age value
Pre-Levels (Users)/100
Code:
#skillinnate[skBluff] += field[rHitDice].value
#skillinnate[skDiplo] += field[rHitDice].value
#skillinnate[skDisguise] += field[rHitDice].value
#skillinnate[skKnowLoc] += field[rHitDice].value
#skillinnate[skPercep] += field[rHitDice].value
#skillinnate[skSenseMot] += field[rHitDice].value

if (hero.childfound[raFRAgeCat].field[usrIndex].value >= 2) then
  #skillinnate[skSpellcr] += field[rHitDice].value
  endif
if (hero.childfound[raFRAgeCat].field[usrIndex].value >= 4) then
  #skillinnate[skKnowArca] += field[rHitDice].value
  endif
if (hero.childfound[raFRAgeCat].field[usrIndex].value >= 6) then
  #skillinnate[skKnowHist] += field[rHitDice].value
  endif
if (hero.childfound[raFRAgeCat].field[usrIndex].value >= 8) then
  #skillinnate[skKnowNobl] += field[rHitDice].value
  endif
if (hero.childfound[raFRAgeCat].field[usrIndex].value >= 10) then
  #skillinnate[skKnowRel] += field[rHitDice].value
  endif
if (hero.childfound[raFRAgeCat].field[usrIndex].value >= 12) then
  #skillinnate[skKnowPlan] += field[rHitDice].value
  endif

The final bit is the spell-like abilities, feats, and racial abilities that come in at different age categories. Instead of trying to play around with various custom tags and such, the Age Category actually increases the HD by two every time it goes up. So, you can use a boot strap condition (below) to determine whether it shows the feat/ability or not.
First/500
Code:
fieldval:rHitDice >= 22

That's it. The "default" dragon is all the wyrmling stats, which the Age Category choice will update. Now, instead of creating an entry for each age category, you can create one dragon entry then choose the age category on the Backgrounds tab. Sure, it means the dragons will only show up in the Encounter Builder at their minimum CR, but I can live with that.

Any thoughts/suggestions?
 
Looks interesting Matt. I did something similar for the community bestiary (I wanted to implement some abilities and a template that depended on dragon age category). The dragon is the "base" dragon, and the user selects the age cat from a configurable. The configurable assigns a tag. Depending on what the tag is the base dragon gets its various abilities.
 
Last edited:
So how woudl these show up in the encounter builder? Are you basing everything on the Adult age, and then modifying from there? in which case, it would show up at the CR of an Adult dragon? Then once added, you'd go in and adjust the age?

I don't see a problem with that, specifically because when dealing with dragons, you've usually got an idea that you're going to have a given dragon in the encounter, and aren't hunting by CR to find an appropriate enemy. More just a curiosity aspect.

So this does bring up a shortcoming in the encounter builder though. I understand, all it does is parse through the .stock files to compile it's database of options, but for future feature expansions of it, it would be great if it supported single base + variations. The dragon age is just a single example, but there are all the other templates and such that aren't really all that usable via the encounter builder.

Having a category tree would be amazing - though I'm not sure the best way to categorize them. Obvious major Type groups like undead, outsiders, dragons, etc, then the sub groups below each would be different depending on the major group. Currently, the ability to filter down strictly by text search is a little limited.
 
So how woudl these show up in the encounter builder? Are you basing everything on the Adult age, and then modifying from there? in which case, it would show up at the CR of an Adult dragon? Then once added, you'd go in and adjust the age?
They'd show up with their Wyrmling stats since that's what I'm using as the base, so a bunch of CR 2-4's.
I don't see a problem with that, specifically because when dealing with dragons, you've usually got an idea that you're going to have a given dragon in the encounter, and aren't hunting by CR to find an appropriate enemy. More just a curiosity aspect.

So this does bring up a shortcoming in the encounter builder though. I understand, all it does is parse through the .stock files to compile it's database of options, but for future feature expansions of it, it would be great if it supported single base + variations. The dragon age is just a single example, but there are all the other templates and such that aren't really all that usable via the encounter builder.

Having a category tree would be amazing - though I'm not sure the best way to categorize them. Obvious major Type groups like undead, outsiders, dragons, etc, then the sub groups below each would be different depending on the major group. Currently, the ability to filter down strictly by text search is a little limited.
That would be terrific.

The other great thing about the Encounter Builder as it stands now, if you build your own .STOCK portfolio with statted out NPCs, it will load them in. This is great for searching through the portfolios I'm trying to build for Forgotten Realms NPCs.
 
Back
Top