Lone Wolf Development Forums  

Go Back   Lone Wolf Development Forums > Hero Lab Forums > HL - d20 System

Notices

Reply
 
Thread Tools Display Modes
Lawful_g
Senior Member
Volunteer Data File Contributor
 
Join Date: Mar 2007
Posts: 1,245

Old February 9th, 2011, 12:31 AM
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?
Lawful_g is offline   #31 Reply With Quote
Lawful_g
Senior Member
Volunteer Data File Contributor
 
Join Date: Mar 2007
Posts: 1,245

Old February 9th, 2011, 12:39 AM
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.
Lawful_g is offline   #32 Reply With Quote
Golkiwu
Member
 
Join Date: Jun 2010
Location: Atlanta
Posts: 65

Old February 9th, 2011, 02:57 AM
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?

That's Homunculus!
Golkiwu is offline   #33 Reply With Quote
Lawful_g
Senior Member
Volunteer Data File Contributor
 
Join Date: Mar 2007
Posts: 1,245

Old February 9th, 2011, 04:00 AM
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.
Lawful_g is offline   #34 Reply With Quote
Golkiwu
Member
 
Join Date: Jun 2010
Location: Atlanta
Posts: 65

Old February 9th, 2011, 01:48 PM
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.

That's Homunculus!

Last edited by Golkiwu; February 9th, 2011 at 01:59 PM.
Golkiwu is offline   #35 Reply With Quote
Lawful_g
Senior Member
Volunteer Data File Contributor
 
Join Date: Mar 2007
Posts: 1,245

Old February 9th, 2011, 02:34 PM
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.
Lawful_g is offline   #36 Reply With Quote
Golkiwu
Member
 
Join Date: Jun 2010
Location: Atlanta
Posts: 65

Old February 9th, 2011, 04:03 PM
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

That's Homunculus!

Last edited by Golkiwu; February 9th, 2011 at 04:10 PM.
Golkiwu is offline   #37 Reply With Quote
Lawful_g
Senior Member
Volunteer Data File Contributor
 
Join Date: Mar 2007
Posts: 1,245

Old February 9th, 2011, 04:38 PM
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 by Lawful_g; February 9th, 2011 at 05:18 PM.
Lawful_g is offline   #38 Reply With Quote
Lawful_g
Senior Member
Volunteer Data File Contributor
 
Join Date: Mar 2007
Posts: 1,245

Old February 9th, 2011, 04:40 PM
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 by Lawful_g; February 9th, 2011 at 04:50 PM. Reason: Clarification
Lawful_g is offline   #39 Reply With Quote
Golkiwu
Member
 
Join Date: Jun 2010
Location: Atlanta
Posts: 65

Old February 9th, 2011, 05:11 PM
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?

That's Homunculus!

Last edited by Golkiwu; February 9th, 2011 at 05:20 PM.
Golkiwu is offline   #40 Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -8. The time now is 04:23 PM.


Powered by vBulletin® - Copyright ©2000 - 2024, vBulletin Solutions, Inc.
wolflair.com copyright ©1998-2016 Lone Wolf Development, Inc. View our Privacy Policy here.