By the eye of Vecna I think I've got it!!!
ok, for those interested, let me share what I've done.
Why we do it: In one of our games our DM gives the characters boons/bonuses/abilities that don't necessarily correspond with our classes or levels. Over time the [Special] tab becomes less and less helpful as you end up with more and more to scroll through. If you know where an ability comes from, it can be much faster to just go to the class tab and look up the information there.
What I did: I set up a class that I could attach the boons and abilities to. If new abilities are added later, I just have to create a class special and link it to the class which is much easier then creating a new template every time. Next I create a way of controlling the template level or tier and finally the actual template. Bootstrap the class cHelp item and the level control and you are set. But if you want a more detailed solution, keep reading.
Step 1) Create a class.
We don't really need all of a class, but if you want the tab you need the cHelp item and that means making a class. The class name will appear at the top of the class tab. Most of the information on the new class page is not important or can be changed later, but as usual, make the Name, Abbreviation, and Identifier relevant.
Step 2) Clean up after the "Help"
To make things easier we're going to make some changes and add an Eval script to the cHelp item. It turns out the cClass item controls level count and Hit dice, while the cHelp has the abilities, specials, BAB, saves, and skills calculations. Because we don't want the template to add to our BAB, Saves and Skills in general, we are going to undo this with an eval script. To make things simple, I suggest changing BAB and all the Saves to "Poor", and the skills to 0
Post Level
Code:
~lets undo our level calculated bonuses
~first we'll get the level for calculation
var lev as number
lev = field[cTotalLev].value
~We'll start with BAB
var bab as number
bab = round(lev/2,0,-1)
~ remove the bonus on our attack rolls
hero.child[Attack].field[tAtk].value -= bab
~ and now remove this from our number of attacks calculation
hero.child[Attack].field[tAtkBase].value -= bab
~Now we'll get rid of the saves
var sav as number
sav = round(lev/3,0,-1)
~Now we just subtract from our base saves
hero.child[vFort].field[vBase].value -= sav
hero.child[vRef].field[vBase].value -= sav
hero.child[vWill].field[vBase].value -= sav
~Finally, lets take care of the skill points
var bon as number
var skl as number
bon = hero.child[aINT].field[aNormMod].value
if (bon < 1) then
bon = 1
endif
skl = lev * bon
~ In order to change the skill points we need to know the class index
var index as number
index = field[cClsIndex].value
herofield[tSkTotals].arrayvalue[index] -= skl
Step 3) Level it out
I found it easiest to control the template level with a permanent adjustment. The counter becomes the template level and I can easily reference it later if needed.
Note 1: make the adjustment Unique so once it is added, it doesn't show up on your list again.
Note 2: make sure the Minimum adjustment is “1” or you will open yourself up to even more problems later. Once again, all the work is in the eval script.
First 100
Code:
~ Identify our Template Level
var lev as number
lev = field[pAdjust].value
~ Now to assign our template level to our template class
hero.child[cHelpTst].field[cTotalLev].value = lev
Step 4) Tie it all together
Now go out and create a template under the Race/Template tab. Once you have a name and ID you can add descriptive text or any initial benefits, but when you’re ready to trick the system, head over to:
BOOTSTRAPS.
Thing: <the adjustment we made for level control in step 3>
Tags:
Group Id: Helper Tag Id: AdjPerm
Thing: cHelpTst
SAVE AND TEST.
now you can simply add any boons, bonuses or abilities as class abilities and attach them to the class we made in step 1.
Important note:
DON’T PANIC
When you add (or re-add if you update the class or template) you will see a wall of error text and all the abilities in the new class tab will be greyed out. This is due to a timing issue I haven’t figured out, but don’t worry. Just travel over to the Adjust tab of the character and you should see the level adjuster we built in the lower left. Toggle the counter to force the code to run and get everything working.