• 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

Making Generic Classes work

GLBIV

Well-known member
Greetings,

I'm trying to build character classes in HL to emulate the generic class variant system as described in UA.

Working with the existing NPC expert class, and making various changes hit die, bonus feats, etc., I'm almost there, but I'm hitting a big snag when it comes to getting the class skills to register after I select them.

I realize that the cExpSkill bootstrap is likely tied specifically to the expert NPC class, so I'm wondering how I can tweak it to make it work on my generic versions.

Has anyone run into this before?

-Lou
 
The reason I haven't replied is that I'm not really sure what you are asking. The more detail you provide about the problem, the more likely you will get a response. I don't work with NPC classes in my game (I think they are completely unnecessary) so I'm not familiar with the Expert. I get that you are selecting skills, but you aren't telling me how. I get that you want a variable pool of skills, but I'm not sure what you mean by cExpSkill being related to it. In truth, I don't know that there is a way to assign a bootstrap (such as a skill) through a script. If there was, I would be using it myself to implement shape changing abilities. I haven't been able to do it, and I'm a fairly competent programmer.
 
I remember trying to get the expert skills to work for me when I was building stuff for the community files, but I'm pretty sure they are wedded to that class alone. You might try giving each character class a certain number of custom abilities and use those to pick your class skills.
 
it looks like the cExpSkill that is bootstrapped is internal to the system. normally I'd say, make a copy of it and change the references to your new class, then change the bootstraps to your copy, but I can't find the original cExpSkill anywhere. I'll look into it more tomorrow when I have more time.
 
Kendall,

Thanks, I wasn't trying to rude. I'll clarify.

I am working on a campaign that uses only the three generic classes that are described as a variant rule in Unearth Arcana - Warrior, Expert, Spellcaster. I think they are more individualized and realistic than the standard cookie cutter classes - and the metric butt-ton of prestige classes - that exist in the core rules.

One key feature of these generic classes is they select their own class skills - much like the NPC class expert.

What I was trying to do was make a copy of NPC expert in the editor, then change all the class features except the sExpSkill bootstrap. Turns out, the class validates, but when I start creating a character I can select the class skills at on the class tab, but none of them register as class skills on the skills tab. If I could get that to work, my problem would be completely solved, because I've figured out how to rig everything else.

I haven't taken a programming class in more than 10 years, and that was C++, so I haven't a clue if there's a way to trick HL into believing my copied custom class is the same as the NPC expert class as far as the cExpSkill thing is concerned. And since I can't edit the thing its self, I was wondering if one of you code-wizes knew how.

I still make PCs by hand - because I like it - but HL is great for generating NPCs.

I suppose I could simply designate every skill as a class skill for these NPCs and limit the number of skills I select in creation. I was just wondering if there was a code fix.

Thanks for the time guys,

-G
 
Nightfox, That was my initial thought too, but I looked all over for cExpSkill and the only place it shows up is on the actual bootstrap Thing ID list.

I know if I could edit it, it would simply be a matter of replacing cHelpEx (or whatever the id for expert is) with whatever the ids for my classes will be, but I can't find it anywhere.
 
Ok, I've taken a quick look at this, and you really can't do anything with cExpSkill. It's part of what HL does internally specifically for the Expert class (so bootstrapping the same to your class won't work). cExpSkill is just a skill chooser. You can emulate this with a Custom Ability, but it will be complicated. You will have to make a Custom Ability with the same Name (but different IDs) to all the Skills. Then you have each of those Custom Abilities bootstrap their own skill (ClassSkill.XXXX I think) they represent. Be sure to delete the Helper.ShowSpec tag from each of these Custom Abilities (otherwise all the skill selections will show up in the Specials list on the hero). Now, give the class a custom count equal to the number of skills they can choose, that choose from those on your Custom list of skills. Does that help?
 
I think there is an example of using Custom Specials for this in the community files as well, for the Noble Class, if I remember correctly. They get 1 or 2 class skills they get to choose.

On second consideration, these three classes do they always get the same # of class skills? If so you could make a class special and bootstrap that X number of times at 1st level, have the class special choose among all skills, and pull the ClassSkill tag to the special. Then push that to the linked class to give it the class skill.

For example, if the Arcanist always gets 4 class skills, bootstrap the special 4 times, each of which chooses a skill, pulls the tag, pushes it to the class via the linkage.
 
Most helpful guys. While the fixes appear a bit laborious, I'd rather put the time in the front end, so I can generate baddies on the fly.

I'll play around with them this weekend.

Aaron, in this case, the warrior always gets craft, plus six to choose. The expert gets, craft, profession and 12 more, and spellcaster gets craft, knowledges, profession and four more. It's a pretty neat system, I highly recommend it. One of the best parts about it is not having to tote around 40+ books to make sure you have reference materials on hand.

Thanks again,
-G
 
Last edited:
I think there is an example of using Custom Specials for this in the community files as well, for the Noble Class, if I remember correctly. They get 1 or 2 class skills they get to choose.

On second consideration, these three classes do they always get the same # of class skills? If so you could make a class special and bootstrap that X number of times at 1st level, have the class special choose among all skills, and pull the ClassSkill tag to the special. Then push that to the linked class to give it the class skill.

For example, if the Arcanist always gets 4 class skills, bootstrap the special 4 times, each of which chooses a skill, pulls the tag, pushes it to the class via the linkage.

Aaron, can this be done for special abilities as well? This may be a solution to my change shape dilemma, as I should be able to pull all the tags from one creature and push them to the other. But I don't think special abilities work with just tags, but thought I'd ask anyhow.
 
You can pull the tags from a list of selections, including special abilities, but just forwarding the tags somewhere might not do it. You have to get them to the right place, and might have to mess with fields as well. It'd probably be a lot of work.

So for example say you have the druid's wild shape class special, and you have set it up to have a selector among whichever races.
On the Class Special you might bootstrap 4 "blank" weapons called wBlank that will be transformed into the natural weapons of the form. You'd also need to mark them so they will be distinguishable from within a script (for example with User.NatAtt1/NatAtt2/etc tags).

Now here is the broad strokes of an example script, off the top of my head and untested:

Script 1
Phase: Whichever Works Priority 100
~ Set the focus to our chosen race

~ Set up a list of variables we might need, including nohide and whatever else

~ Cycle through all the bootstraps on the chosen race, looking for a bite attack.
foreach bootstrap in focus where "IsWeapon.wBite"

~Pull all the tags that we need, like wMain, Crit range, and so on

~Anything field based, for which we have no tags, store in a variable

~ If we have found at least 1 thing, then the weapon bootstrapped should not be hidden.
nohide = 1

nexteach

~ Now forward all that information gathered from the race's bite attack to our blank weapon. I don't think findchild exists in 3.5, so you will probably have to do another foreach.
foreach bootstrap in this where "IsWeapon.wBlank & User.NatAtt1"
~ Push the tags and set the variables here.

~ If we never found a bite then nohide = 0 and we should hide the blank weapon we work with. Do that here
nexteach

~ Now delete the tags we pulled, because later eval scripts will be pulling their own and we don't want to confuse them. The variables don't matter because they don't carry over.
 
You could have one eval script for each weapon, seperated in Priority by about 50.

The drawpacks for this are that the foreaches (of which there would have to be many) use up a lot of computational resources, and for other abilities (like Pounce or Low Light Vision) you'd either have to set up a bunch of individual "Blank" specials and have the livename/description overwritten. Or you'd have to bootstrap them to the Class Special with bootstrap conditions looking for specific tags (so that the foreach could assign that user tag to the hero if it detected the appropriate bootstrap on the chosen race) and this would keep growing as you added more forms.
 
Ok, I follow. Not sure what I will do yet, as I'm not really yet ready to tackle this big a project. I'm also not entirely sure if what the best solution is at this point. The more it becomes in my thought experiement, the more it seems like a really problematic piece of code. In other words, this would be a far better function that could be hard-coded by HL (since I know that the hard-code does forward over some bootstraps on known things, just not sure about variable things). I think I have a better way of doing this, but again, the more I think about the process, the more complications I run into. When I actually try to tackle it, I will definitely post the solution if I find one.
 
Back
Top