Lone Wolf Development Forums

Lone Wolf Development Forums (http://forums.wolflair.com/index.php)
-   HL - d20 System (http://forums.wolflair.com/forumdisplay.php?f=46)
-   -   Help with Modifying 3.5 (http://forums.wolflair.com/showthread.php?t=12170)

Kendall-DM January 14th, 2011 12:57 PM

Help with Modifying 3.5
 
I have two main things in 3.5 that I wish to modify, but for the life of me I can't find where the original things are. So, I'm asking the community for some help. Here goes.

I want to modify the attack bonuses from attributes so that they are one-half what they currently are. For example, an 18 Strength normally gives a +4 to your attack, but in my homebrew it only supplies +2 (half as much). My rule is thus, all bonuses to attack values are halved, rounded down, but at least providing a +1 if you have a bonus (so that 12-13 range still gives +1). Notice this has no effect on penalties, only the bonuses. So I need to 1) code a conditional into the attack bonus calculations, and 2) adjust those bonuses appropriately. Any help for where (or if) I can do that would be appreciated.

Secondly, I have a modified skills so that base classes have class skills, cross-class skills, and general skills. The class skills and cross-class skills work normally, but my general skills are bought like class skills, but are limited to the max ranks of a cross-class skill. Any clues how I can implement that would be appreciated. I know I can define general skills in the base classes, just not sure how to implement them code wise (again, I seem to have trouble finding where exactly the system code does its thing).

I'm familiar with XML, but not fluent (I only just learned the basics this past fall). I am a programmer, so any help won't be too far over my head. Lay it on me. Thanks.

Lawful_g January 14th, 2011 02:18 PM

For #1 you could either recreate each of the classes with a special to do this, or and I just thought of this so I don't know that it will work, make a single adjustment for the in play tab.

For this adjustment, if it is clicked, its script:
A - detects the hero.child[aSTR].field[aModBonus].value
B - If negative, do nothing, done
C - If positive, subtract that value from the hero.child[Attack].field[tAtkMelee].value
D - Halve and round down the aModBonus value, minimum 1
E - Add that number back into the tAtkMelee field

For general skills, it sounds like you want to do something similar to the Jack of All Trades gnome racial special I made. Look at this forum post http://forums.wolflair.com/showpost....6&postcount=52 . Obviously not the exact same thing, the relevant parts are giving 1 rank for cross class skills and enforcing an error if more than CC ranks are applied.

Lawful_g January 14th, 2011 02:25 PM

Something to keep in mind is phase and priority is paramount. #1 should either be late in the Attributes phase or more likely, early in the Post Attributes phase.

For the linked forum post Colen set the limit as "if we have more than 5 ranks", but you'll have to define what the current CC max rank is in the script and set that value in place of the 5.

Kendall-DM January 14th, 2011 03:01 PM

Quote:

Originally Posted by Lawful_g (Post 50452)
For #1 you could either recreate each of the classes with a special to do this, or and I just thought of this so I don't know that it will work, make a single adjustment for the in play tab.

For this adjustment, if it is clicked, its script:
A - detects the hero.child[aSTR].field[aModBonus].value
B - If negative, do nothing, done
C - If positive, subtract that value from the hero.child[Attack].field[tAtkMelee].value
D - Halve and round down the aModBonus value, minimum 1
E - Add that number back into the tAtkMelee field

For general skills, it sounds like you want to do something similar to the Jack of All Trades gnome racial special I made. Look at this forum post http://forums.wolflair.com/showpost....6&postcount=52 . Obviously not the exact same thing, the relevant parts are giving 1 rank for cross class skills and enforcing an error if more than CC ranks are applied.

Not sure it is possible to do this in the In Play tab, since I don't see any way I can alter or even create a script. Where, exactly, is it calculating the attack values, from the classes? I have to go through and alter most of the classes anyhow, due to the skill system I have (all classes get a minimum of 4 skill points plus Int mod per level).

If I do redo the classes, is it possible to remove the old classes or overwrite them? Or does it matter, since mine will have the same names with different unique ids?

Kendall-DM January 14th, 2011 03:41 PM

Just thought of another complication. Well, not a complication, something I'd like to do that I can do manually if necessary. Armors are house ruled in my game based on a percentage of the character's Dexterity. *grumble grumble*

I've been delving into the d20 XML files, and I can see places where I can make simple changes. However, the calculated changes are nowhere to be found there, so I'm wondering where that's being done at. If it's internal, then I can't do anything about that, but being that Hero Lab is highly modifiable, as it shows with its Savage World example of a whole new game system, I don't see why it should be internal. Something in the d20 files has to be scripting the calculation, I just can't find it. I would like to do what Savage World is doing, as there is a specific example of calculating the attack values, but where that is located in the d20 files is a mystery.

Lawful_g January 14th, 2011 03:51 PM

Sorry, I misspoke. While I said In Play, I meant the Adjustment Tab. You can add a new Condition in the editor that when checked would do the things I listed.

If you are doing all classes anyway then you can just put the script into a Unique Special bootstrapped to each class.

Yes, you can have your new classes replace the old ones. Look to the right side of the editor and you can see the "Replaces Thing ID" field. Enter the replaced things unique ID there to have your new one supercede the old.

Answer your other questions later. Late for a meeting.

Kendall-DM January 14th, 2011 04:49 PM

Ok, I shall try that. Not too keen on the character class adjustment, but if worst comes to worst, I'll try that as well. My script comes out something like:

if (hero.child[aSTR].field[aModBonus].value > 0) then
hero.child[Attack].field[tAtkMelee].value -= hero.child[aSTR].field[aModBonus].value
var temp_mod as number
temp_mod = round (hero.child[aSTR].field[aModBonus].value / 2, 0, -1)
temp_mod = maximum (temp_mod, 1)
hero.child[Attack].field[tAtkMelee].value += temp_mod
endif

With another script to cover Dexterity and Ranged attacks. I set it Post Attribute, but I haven't yet tested it. Again, I feel that there should be an easier way to do this right inside the XML code.

Kendall-DM January 15th, 2011 10:48 AM

Bah, seems in order to change what I want in the d20 files, I would have to do a whole recreation. I certainly don't want to do that. But without the skeleton files, which according to the documentation is where you set up all the internal calculations, I can't seem to change the things I want (I'm actually editing the XML files directly and compiling them). Unfortunately, some things are defined in ways I can't access (such as tAtk and tAttack), as they are not present in any of the XML files as a calculated field (which is what it is). *grumble*

Lawful_g January 15th, 2011 03:16 PM

You can do a lot through the editor if you know how to work it, but I don't know if you can do enough for what you want. I have no experience working directly with the XML code, so I can't help you there.

Kendall-DM January 18th, 2011 03:49 PM

I'm making progress on my changes. Found out there is a HeroLab file that actually does some things behind the scenes for different game systems, which is annoying, since it is already a compiled file and I can't delve into its contents. One thing that bugs me though, I changed some things in the XML file, but I can't see any of those changes unless I load that particular file into the Editor and test it. For example, I went directly into the Fighter XML file and changed its 2 skill points to 4 skill points. But when I load the d20 file into HeroLab and create a Fighter, no changes are present, and I have to go into the Editor and load the Fighter and test it. I'm not editing anything at all in the Editor, but I still have to compile it with the Editor, even if I change the actual XML files to new skill point values and load up HeroLab. Seems that when I choose the d20 file, it should be recognizing the changes I made, but it doesn't. Perplexes me.

Mathias January 18th, 2011 05:07 PM

If you're talking about the Source folder, that's a reference, not the code HL uses. Only files in the /data directory, not its subfolders, are incorporated into HL.

Changes to the files are made by creating replacements and new things in the editor. The "New (Copy)" button on the bottom left, combined with the "Replaces Thing Id" field on the center-right are what you want to use in order to edit an existing thing.

Kendall-DM January 18th, 2011 05:44 PM

Quote:

Originally Posted by Mathias (Post 50627)
If you're talking about the Source folder, that's a reference, not the code HL uses. Only files in the /data directory, not its subfolders, are incorporated into HL.

Changes to the files are made by creating replacements and new things in the editor. The "New (Copy)" button on the bottom left, combined with the "Replaces Thing Id" field on the center-right are what you want to use in order to edit an existing thing.

So I would need to know the id that I was replacing, and type it into that Replaces Thing Id field?

Kendall-DM January 18th, 2011 05:51 PM

Well, I'll be a monkey's uncle. I didn't realize that my data file had additional files in it. I just looked at the first few and thought they were all graphics files. Stupid me. I might be able to pull this off afterall, assuming I know what I'm doing. I'm still getting the hang of XML, though it seems rather easy to me, so I might be missing some nuance. I was always in the source folder, like a dunce.

Kendall-DM January 18th, 2011 10:11 PM

Not sure what I'm doing wrong here, as the tutorial and everything I have found here says the same thing that I am doing. I created a new Fighter class to replace the old Fighter class. I used the Replace Unique ID to replace the cHelpFtr. Now, when I return to HL, there are two Fighter classes listed when I select a level. That shouldn't be there, and I don't know why it is listing my new class and the old class as well. Anyhow, I created a Fighter for my new class, and the tabs now show both the new Fighter tab AND the old Fighter tab alongside it. What, or where, the heck did I go wrong? I've tried manipulating this but it keeps showing up no matter how I try to fix it.

Kendall-DM January 18th, 2011 11:25 PM

Seems I've got that all figured out, and I've also figured out how to get the attack bonuses to work. Thanks Lawful_g, that method of making new classes with a bootstrap worked perfectly. I'm trying to figure out how to do this with the armor rule in my game. Armor no longer has a max Dex bonus, but has a 1, .75, or .5 multiplied to the character's Dex bonus and added into the Armor Class. For example, light armor is x1, medium x.75, and heavy x.5 (rounded down). I've tried making new armors with this maximum Dex percentage as a tag, but I'm having problems implementing it. Here is the script I was using for determining max Dex bonus to armor.

if (hero.child[aDEX].field[aModBonus].value > 0) then
hero.child[ArmorClass].field[Bonus].value -= minimum(hero.child[aDEX].field[aModBonus].value, hero.child[ArmorClass].field[mMaxDex].value)
var temp_mod as number
temp_mod = round (hero.child[ArmorClass].field[mMaxDex].value * hero.child[ArmorClass].field[mPctDex].value, 1, -1)
hero.child[ArmorClass].field[Bonus].value += temp_mod
endif

It simply doesn't recognize the mPctDex in my new chain shirt armor I made, even though I have created a tag there. Problem is, if I make it a user tag, it has no way of accessing it. One solution I thought of was to create three new abilities to bootstrap to my armors that has the 1, .75, and .5 modifiers. Thanks in advance for any pointers.

Mathias January 18th, 2011 11:47 PM

If all light armor, medium armor, or heavy armor has the same multiplier, you can use:

Code:


if (tagis[mClass.Light] <> 0) then
...
elseif (tagis[mClass.Medium] <> 0) then
...
elseif (tagis[mClass.Heavy] <> 0) then
...
endif

New fields and new tag groups need to be defined in the structural files for the game system - you can't just create them on the fly.

Kendall-DM January 19th, 2011 12:33 AM

Quote:

Originally Posted by Mathias (Post 50639)
If all light armor, medium armor, or heavy armor has the same multiplier, you can use:

Code:


if (tagis[mClass.Light] <> 0) then
...
elseif (tagis[mClass.Medium] <> 0) then
...
elseif (tagis[mClass.Heavy] <> 0) then
...
endif

New fields and new tag groups need to be defined in the structural files for the game system - you can't just create them on the fly.

Unfortunately, I have some crossover. For example, hide is medium armor, but has a Dex multiplier of x1. Half-plate, a heavy armor, has a x.75 mulitplier. So the crossover causes a problem. Fail to understand why the editor gives you the option to create new tags or fields, when you can't create them in the editor. Kind of self-defeating. So, essentially, if I want to make my own hide armor, I can't add anything new to it? All armors just conform to the strict letter of the d20 system? That's disappointing.

So, could I do this then? Add a script to each armor, that resets it's mMaxDex to the hero's Dex bonus * that armor's percentage modifier? How would I phase that?

Mathias January 19th, 2011 09:17 AM

You can create new tags for tag groups that have been defined as being dynamic - that's what the User tag group that's at the bottom of most editor pages is.

So, there, you can create the DexFrac1, DexFrac075 and DexFrac05 tags in the user group, and assign the correct one to each armor. Then, look for User.DexFrac1, User.DexFrac075 and User.DexFrac05 in that if...then I gave you.

The Tags and Fields buttons at the top right, if that's what you're talking about, allow you to set any value you like for any field that's already defined for the thing you're creating (rarely there are reasons to go outside what can be set with the options that are pre-defined within the body of the editor), or to add any tag that exists to the thing (or a new tag within an existing tag group if that group is dynamic).

Kendall-DM January 19th, 2011 10:43 AM

Aha, I see what's happening here. While XML is completely flexibile, within the domain of tags you pre-defined, the HL program has can't have additional pre-defined tags outside of what it recognizes except for creating a user tag (which is added into the particular data file and is not added into the program itself). While it limits ultimate flexibility, as standalone XML is, in order for HL to "not break" it can only allow changes within the system the Editor (and thus the user file). So all my work directly editing the XML files won't work (outside of altering pre-defined values), so that clears up my wrong headed way of thinking I could edit this. I'm going to have to bite the bullet and read through the entire Authoring Kit guide and tutorial just to know what I'm doing to make HL happy.

One other thing. Seems that I thought I had fixed the duplicated Fighter tag in HL, but it has shown up again. Not sure what I did wrong or how to get rid of the old Fighter tab. Any suggestions what I did wrong or what I can do?

Lawful_g January 19th, 2011 03:02 PM

I would make sure that both the class helper and the class levels are replaced in the user file. Maybe you only put the unique ID for the class levels in the Replaces Thing field, and didn't do the same for your class helper.

By the way, a good way of looking up how to do things is to pattern your own code after what has already been done. There is a large body of d20 stuff entered by myself and others whose examples might or might not help. You sound like someone who already understands coding, much better than I do, but I have managed to make things in the editor seemed daunting at first.

Kendall-DM January 19th, 2011 03:11 PM

Hmmm. I made a copy of the Fighter, replaced the cHelpFtr, which I believe is the helper file. I didn't think I would need to replace the levels as well, since I will not be changing anything in the levels file, so I can just inherit it from the original Fighter can't I? Well, I'll take a look at it later. I've got a pretty good idea on what I have to do now, and I'll be reading through the Authoring Kit Guide in it's entirety to see what's what. My main problem with the whole Authoring examples, are they chose the simplest cases, and didn't touch at all on the more complex ones, which is absurd, considering that is the point of why HL exists in the first place. Someone really needs to create a better Authoring Kit example set.

Mathias January 19th, 2011 03:29 PM

What's added in the Classes tab is the Class Level - then, the class level bootstraps the class helper. Since the Class Helper is unique, only one copy for each class the character has ever gets onto the character.

The editor manual is what you should read first (from the help menu within the editor) - that deals with the d20 files specifically. The Authoriing Kit wiki is mostly about building a game system from scratch. Looking at existing things, and seeing how they go about what they're trying to do is my recommendation for a second step. For example, if you want a feat that adds a bonus to a specific skill or two, that sounds close to the various skill A + 2/skill B +2 feats, like stealthy.

Mathias January 19th, 2011 03:32 PM

The complex Authoring Kit example is the 4ed game system.

Kendall-DM January 19th, 2011 04:00 PM

Yeah, I went through the editor manual, it just falls short of anything helpful in my opinion. I'll be back at it tonight, I've made some progress, so I think it's possible to most of what I want, and manual the rest. The problem I'm having is, it's hard to see ALL the changes I have to make in the files. For example, I'm changing the armor max Dex system. Once I implement that, I have to consider what happens when I apply a material, like Mithril, to it. Those kinds of things are the kind I can think of. It's the one's I can't think of that will blow up on me.

Now as far as the class tab goes, then I did it correctly. I replaced the cHelpFtr ID, and I get a tab with Fighter bootstrapping the old cHelpFtr, and another Fighter tab bootstrapping the newer replacement cHelpFgt. I'll look at it again tonight and try to work it through. Thanks for all the help guys.

Oh yeah. 4E... bleh. Good game in it's own right, but it just doesn't feel like D&D at all. Should have been released as a completely separate game system. During the early testing days, I play tested a Cleric, and found that I had very limited and almost restrictive healing abilities. During two different fights, I was able to NOT heal anyone, and then NOT heal anyone again. Utter silliness, because that's the version that made it in. Hopefully the add-on stuff corrected that, but I'll probably never play that game again. But then I'm old, I like the old open-ended stuff much better. :)

tkarn January 20th, 2011 01:29 AM

Have you already voted for the d20 game mechanics here:
http://forums.wolflair.com/showthread.php?t=9078 ?

Kendall-DM January 20th, 2011 02:54 PM

Quote:

Originally Posted by Mathias (Post 50657)
You can create new tags for tag groups that have been defined as being dynamic - that's what the User tag group that's at the bottom of most editor pages is.

So, there, you can create the DexFrac1, DexFrac075 and DexFrac05 tags in the user group, and assign the correct one to each armor. Then, look for User.DexFrac1, User.DexFrac075 and User.DexFrac05 in that if...then I gave you.

The Tags and Fields buttons at the top right, if that's what you're talking about, allow you to set any value you like for any field that's already defined for the thing you're creating (rarely there are reasons to go outside what can be set with the options that are pre-defined within the body of the editor), or to add any tag that exists to the thing (or a new tag within an existing tag group if that group is dynamic).

I got back on this last night and this is exactly what I needed. Generous thanks to Mathias. I've just realized, for nearly everything I need to "fix" for my game, it's going to require eval scripts and user tags for nearly all of it. Still not sure I can get my skill system to work like I want, but I've definitely gotten a few ideas to test out. So far, the only problem I'm having might be tied to my direct editing of the XML file, which is not a problem, since the files I'm working on are only testing files to see if what I want to do is possible. Thanks guys, if I have any other questions, I'll definitely come back to you.

Kendall-DM January 20th, 2011 09:07 PM

Nevermind. Fixed that problem.

However, is there a way to find out if something is equipped, specifically armor?

Another quick question, is there a way to error something, say for taking too many ranks in a skill if I choose to make the max ranks lower than the d20 system allows?

Kendall-DM January 21st, 2011 01:44 PM

Found a way to get the equipping to work. So I've been able to modify the attack bonuses for Str and Dex, been able to modify my armors to the system I use. Now for the skills. Does anyone know how to output an error when you chose too many skill ranks? Is there code for that? I guess it's not an error per se, just turns the tab red. Any ideas?

Lawful_g January 21st, 2011 06:09 PM

See this post, and look at the part about the Eval Rule to enforce max ranks.

http://forums.wolflair.com/showthrea...ht=jack+trades

Kendall-DM January 21st, 2011 06:57 PM

Yes, I've seen this. I've put in a rule that works, but doesn't turn the tab red, which was what I was hoping for. The problem with that example is it is all encompassing. I want to error to output ONLY when it is not a class skill for any other class as well. So, I've tried a different approach, for example, the general skill I've described is bought as a class skill, but has maximum ranks of a cross-class skill. General skills in my game are only available to the base classes (prestige classes don't get them, nor to monsters). Listen is a general skill for all classes but Bard, Barbarian, Druid, Monk, Ranger, and Rogue. So, I'm thinking of making a rule in Listen that checks that you have one of these classes, if you do, it does nothing (no error is output). Otherwise, it checks that the maximum ranks is cross-class for those classes. This is assuming that I can use regular boolean AND and OR to get this to work. If not, I will just plug them into each individual class.

My original point, yes the Jack of Trades is similar, but not the same. And it doesn't turn the skill red because I can't set maximum ranks to cross-class AND make a skill cost 1 for 1 like a class skill. So far, the only way I can see to do it is to change the portal logic, which is not available for d20 stuff without a complete revamp. And I'm not doing that. Just wanted to see if anyone found a way around it.

Kendall-DM January 22nd, 2011 11:32 AM

Nope, no boolean logic that I can use. Oh well, I have a solution, just requires me to add it to all the classes for all the specific skills. I just wanted to be able to exclude the error when it becomes a class skill for another of the character's classes. I could still do it, just would require alot of elseif statements to accomplish. I may still give it a try, but for now the solution I have works well enough to accomplish my goal.

EDIT: Hell, I went ahead and just tried it out in the class. Works perfectly, and the elseif statements were easy, because they all say "done". Now if only I could get the tab to turn red, I'd be there.

Kendall-DM January 22nd, 2011 12:32 PM

Does anyone know if the "linked panel id" field is used anymore?

Also, does anyone know the list of panel ids?

I've found a way to make the tab highlight red, but I would need the panel ids to make it work.

Kendall-DM January 22nd, 2011 04:39 PM

Another curiousity, is there a way to get the tactical window while in combat to track and remove effects that have durations? I notice you can put a duration in one of the fields, but it never counts down the duration. Seems the easiest thing in the world to program in, anyone know if this works or not, or whether there are plans to include that in a later version?

Kendall-DM January 24th, 2011 07:42 PM

Does anyone know if there is a tag for whether a caster is a spontaneous arcane caster (like a sorcerer or a bard)?

Lawful_g January 24th, 2011 08:27 PM

Hero.SpontArc

Kendall-DM January 24th, 2011 09:52 PM

Is there a resource where I can find all these tags?

risner January 25th, 2011 12:10 AM

Quote:

Originally Posted by Kendall-DM (Post 50949)
Is there a resource where I can find all these tags?

Best way is to look at existing stuff that uses what you want (like in this case look at Bard/Sorcerer) and see the tags.

The other thing is to search the files in the herolab directory (using grep or etc) but be careful to not have the binary file data.hlz open when you recompile, as it crashes HL.

Lawful_g January 25th, 2011 03:53 AM

You can look at a list of tags and fields inside herolab. In the program, hit the Develop dropdown menu, then click "Enable Data File Debugging", that will ungray everything below it. I found that tag by looking at "Floating Info Windows -> Show Hero Tags", which looks at all tags on the hero. You can also look at all tags or fields on a selection (which is everything on the hero, near as I can tell).

Hope that helps.

Kendall-DM January 25th, 2011 04:16 AM

Yes, that is exactly what I was looking for! Thanks Lawful_g!

Lawful_g January 25th, 2011 04:12 PM

No problemo.


All times are GMT -8. The time now is 06:11 PM.

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