• 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

Tome of Battle: Book of Nine Swords

I will look at that. Quick question, if I create Secondary custom abilities (maneuvers), will they display separately from the Primary (stances) in the listing?

FYI: I entered all of the Stances (Primary Custom Abilities) and they are all selectable. I only did the ones a Sword Sage can have, and they all have descriptions. Luckily, there are only so many Stances. The Maneuvers are much more plentiful.
 
OK, one other thought.

How do I incorporate initiator levels vs Multiclass characters. Every level for Sword sage is +1, and every level in any other class is +1/2. This dictates the highest maneuver level known as per Table 3-1 ToB pg 39. The character I am doing this whole thing for only has one level of Sword Sage, and 11 from other levels (1+5=6th level initiator level = level 3 manuevers available) Is this something I should worry about, of ignore it.
 
When creating a custom ability, the second option is "Secondary Custom Ability", check that to make the ability show up in the secondary list, instead of the primary.

It sounds like you're going to need to store the initiator level somewhere, so that you can modify it.

My first thought on the subject would be to create a new item on the Special tab - leave the "Show in Specials List" option unchecked, because you want this to be hidden in the background, and at the top, make it unique. Then bootstrap it from the classes that need to know how many initiator levels they have.

Then, you can have all the classes that grant initiator levels add their number of levels to the field[Value].value of the special, then when you're deciding what powers are available, look up the Value field on that special.
 
I went ahead with the Psionics for the maneuvers. Now I just have to finish the list and then we can get into making them all actually do things. As a note, I am able to select them as I create and test them. working so far.
 
Just finished entering all of the Maneuvers, now I need to add descriptions and ranges (tomorrow). They are all selectable and ordering in increment of Level. I imagine that only the boosts really need any scripting, so that they reflect the bestowed bonuses. Everything else is instant or one round stuff. There are a lot of stances to be configured as well.
 
When creating a custom ability, the second option is "Secondary Custom Ability", check that to make the ability show up in the secondary list, instead of the primary.

It sounds like you're going to need to store the initiator level somewhere, so that you can modify it.

My first thought on the subject would be to create a new item on the Special tab - leave the "Show in Specials List" option unchecked, because you want this to be hidden in the background, and at the top, make it unique. Then bootstrap it from the classes that need to know how many initiator levels they have.

Then, you can have all the classes that grant initiator levels add their number of levels to the field[Value].value of the special, then when you're deciding what powers are available, look up the Value field on that special.

I have all of the available Stances (Custom Ability) and Maneuvers (Psionics) that are available to a Sword Sage. The Stances have descriptions, but not the Maneuvers (yet). I have created the Special you described, but then you mention some coding jargon and lost me , the whole "Value" this and that thing. Not sure where to go with that for the calculation of the Initiator levels. I understand (I think ) about the bootstrapping bit, just not the "Value" stuff. I have bootstrapped several classes to the Special. The field scripting is where I am a bit lost. Looking through the online manual, I have seen many different scripting references, but nothing that stands out as the right one to modify (although there are many I think will help in coding the Maneuvers/stances). I know that it will need to count the Sword Sage levels as "wholes" and the other listed classes as "Halves" for calculation, but I do not know the syntax to make it function. I assume that I will need to create a template of this script, and then attach it to each bootstrap changing the class reference in each script. If this is correct, then a bit of code hint will go a long way.
 
Last edited:
And my comment was a reference to a skit on Space Ghost: Coast to Coast, no offense was taken.

The thing Mathias is talking about is similar to what I did to make the Warlock class.

When you have a thing in HL, it is made up of fields (which usually store numbers, but sometimes text), and tags (which mark attributes of a thing), it is the interaction of these that defines the characteristics of the thing. Let me try and explain Mathias' suggestion a little more simply for you.

In the editor there is a tab called Specials, go there and create a special, give it a name like "Initiator Levels" and a unique ID "xInitiate". Now this special has many fields automatically in it, one of the fields is named "Value" and stores a number. This is what our other things (manuevers etc) will look at.

There are also tags on it which determine if it will be shown in the actual HL program when it is added. Since adding to the things Value field and checking the number can happen in the background without the user missing anything, we should leave the tag that reveals it to the user off. You can control that tag by checking or unchecking the "Show in Specials List?" button in the editor when you are making the special.

Now we have our special but nothing is adding to the value field or checking the value field, and the program doesn't know when to add it. So the next step is to attach it to all the classes that need it. Go to each of those classes and hit the Bootstrap button and enter the unique ID for your new special. Now when you add a level of the class the special will come with it, but the user still won't see it because it lacks the tag to show itself.

Here is an important note, if you add levels of 3 different classes that all need the thing, it will be added 3 times by default. This isn't good, slows the program down and is confusing. How do we fix it? In the editor go back to the special you made, look toward the top, there is a section that says "Uniqueness" with a drop down box above it. The box defaults to "No", which is why each class will add another copy. Change it from "No" to "Unique". That way no matter how many classes try to add the thing, only 1 copy will exist on the hero.

Now you have your special, and no matter what there will always only be one copy of it on the hero. Let's handle the adding to it's value. Go back to each of those classes' Class Helpers (that is the name of the tab) and make Eval Scripts to add to the value, based on their level.

For example if 1 level of the class adds 1 to the initiator level, you script might look like this:

Phase: Post Levels Priority: 10000
~ Add our levels in this class to the value of the Initiator level thing's Value field
hero.childfound[xInitiate].field[Value].value += field[cTotalLev].value

The above script spells out "hero.childfound[xInitiate]" because it is looking for something else on the hero, but since the "cTotalLev" field is on the same thing, it doesn't need to specify the class helpers Unique ID. Also, you may have to modify the above if a class adds, for example, half levels or something.

Ok, so now we have our special and all the classes you add to the hero add to it's value, which it faithfully stores. Now to make maneuvers check it to confirm they are valid.

Create whatever Maneuvers or Powers you want, it sounds like you have already done many of them. Each needs a minimum initiator level, so click on the Expr Reqs button for the thing. The first line is the error message to be displayed, something like "Minimum Xth level Initiator required." and the second is the script to check the thing is valid. Give line 2 this code:

hero.childfound[xInitiate].field[Value].value >= X

Where "X" is the minimum initiator level required by that thing. Now each of those should be able to be enforced in HL.

Is the above explanation clear?
 
Having just been nice, I hope you'll forgive me for saying I find your sig to be extremely aggravating, scrolling down this thread is like being repeatedly punched in the eye.
 
That is exactly what I needed to know. One thing remains though, each classes level is counted as one half of an initiator level. so it is a 2 for 1 thing. how is that to work or be scripted?

Is this better?
 
Much, thank you.

You can use different math commands in HL scripts, I assume that it is 1/2 level, rounded down? You can use the round command.

round(EQUATION, #decimal places to round to, round up=1 or round down=-1)

In the equation you can use + and - as obvious. * means multiplication, and / means division.

So for this case it would be:

hero.childfound[xInitiate].field[Value].value += round(field[cTotalLev].value/2, 0, -1)

If there is a minimum of 1st level you will have to employ another command "maximum(X, Y)" which chooses the highest of the two. That will allow you to round down to 0, but still get 1. Remember you can nest commands inside one another. With a minimum of 1st level added it would look like this:

hero.childfound[xInitiate].field[Value].value += maximum(round(field[cTotalLev].value/2, 0, -1), 1)

I think that should work, though it is off the top of my head, so give it a test run first.
 
OK, you said to go to all of the classes and bootstrap the xInitiate to them. How do I do this? Do I open up a copy of the class? I cannot modify the original file, as it says I can't. Or are you referring to creating a bootstrap in the Special and adding the script? Do you have special access as a Data Contributor that allows you to change the classes that I cannot?

Sorry to be so obtuse.
 
Last edited:
Aren't you making the new classes, like Swordsage/crusader/or whatever in the editor already? Or do levels of base classes like fighter also count for initiator levels?

Everything in the editor has several buttons on the upper right, one of which is named "bootstrap", click on that. Then click "add a new bootstrap" and type the Unique ID of the thing you want to tie to it.
 
Yes I have Sword sage made (only one I am worried about for now). For Multiclassed Sword Sages, their other classes that are non Sword Sage/Warblade/Crusader count 1/2 per level toward initiator levels for calculating the highest level maneuver/stance they are able to take. Only Sword Sage/Warblade/Crusader levels dictate the styles available and quantity of stances/maneuvers known. The "other" classes (for my needs rogue and swashbuckler) dictate the level the maneuver or stance can be. My character is rogue 5/Swashbuckler 6/ Sword Sage 1, which equals a 6th level Initiator, which gives him access to 3rd level stances/maneuvers [{(5+6)/2 rounded down}+1] = 6.
So what you are suggesting is that I bootstrap the class ID to the helper, which I did, and it caused an error. I will say this was before I made the helper unique, and the error was when loading a 20th level test Sword Sage.

Doing this gives the error: Thing "xInitiate" - Bootstrap thing "cRogue" is invalid due to non-zero maxlimit value
 
Last edited:
No, I am suggesting you bootstrap the "xInitiate" special you made to the class helper for swordsage. In the editor, open the file you have swordsage in, click on the "Class" tab, and select Swordsage, then hit the bootstrap button and add a new bootstrap for the Initiator special you made.

Then hit the Eval Scripts button and add that eval script... at least that was what I suggested, read below.

Alright, so if other base class levels count towards initiator level then you have 2 options. You could:

A. Make a new copy of every base class that has the eval script to add to your Initiator special, then have it replace the old copies of the class via the Replaces Thing mechanism. I do not reccommend this way, because it is a lot of work.

B. Not put the eval script on the Class Helper, and instead put it on the Initiator special but modify it to look at all levels on the hero. You'd still have to bootstrap it to all classes that use it (swordsage, crusader, etc) but not to other classes (rogue, wizards etc), so no need to replace the old ones. I think this is the better option.

To have it look at all levels on the hero use a foreach:

Phase Post-Levels Priority 10000
~ Look at every thing on the hero that is a class helper...
foreach pick in hero from BaseClHelp

~ On each thing, if it is one of the classes that gets full level added (we check identity by looking at the thingid.WHATEVER tag) then add all of the [cTotalLev] field's value to our Value field. In this example cHelpSSa for Swordsage, and cHelpWHA for all future classes you add that add full levels. If you do not have any others yet, delete it, but you will have to add each to the code as the classes are created, or they will not add correctly.

if (eachpick.tagis[thingid.cHelpSSa] + eachpick.tagis[thingid.cHelpWHA] <> 0) then
field[Value].value += eachpick.field[cTotalLev].value

~ Otherwise, if it is not one of those classes, add half levels to our value field, rounded down. I am still assuming a minimum of 1, since you didn't tell me any different.

else
field[Value].value += maximum(round(eachpick.field[cTotalLev].value/2, 0, -1), 1)

endif

~Go on to the next thing
nexteach
 
Last edited:
Some other questions, do prestige classes also count at 1/2 value towards initiator levels?

Also, is the gaining of initiator levels from other classes something only the Swordsage gets, as opposed to other classes like the crusader?
 
Last edited:
The initiator levels are for the martial maneuver calculation of all three ToB classes. So they would all get it/them. I see that in the script it has "WHATEVER" in there,and am supposing that is where the cHelpRog would go as well as the cHelpWHA = cHelpRog.

I placed this in the eval scripts as you said, and after correcting the unique ID name (I called it cHelpSsg and you had cHelpSSa -took me three times to figure it out) it passed without error.

This calculates the Stances (Class Abilities) for Sword Sage, but is not calculating the other classes for the total.

Also, how do I get the Maneuvers, which are based on psionics as Mathias had suggested earlier in this thread, calculate the xInitiate special into this. I have the Psionics Power levels based on the initiator levels (same rate of gain), and when I set the Sword Sage Level, it allows (meaning the Maneuver is not in red) the maneuver as valid (not red), but is not calculating the other levels (10 of rogue).

I did not do anything for the Special xInitiate outside of creating it and making it unique. Was there supposed to be some thing else added to it?
 
Last edited:
Back
Top