• 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

Improve Inspire Courage

DarokinB

Active member
Hey all, Its been a while since I posted here. I am trying to add some missing items to HL. I've already added quite a few things: Half fey template, Gray Guard, and about 20 items from the MiC.

One of the ones I am struggling with is the Song of the Heart Feat and the Vest of Legends. Both improve the Bard's Inspire Courage ability. I went through the documentation (which is a little confusing to say the least, I can't seem to find a data structure explanation, similar to MSDN).

After digging a little into the list of class abilities, it seems like each of the Inspire Courage bonuses are unique abilities (i.e. Inspire Courage +1 is one ability, Inspire Courage +2 is another, etc). This suggests the system does not calculate the bonus in any way. Is that correct? If that is true, that suggests I will be unable to modify said bonus without modifying the bard class. Is that also true?

Thanks for the help and good gaming!
 
You should be able to do something similar to what the Monk's Belt does. Typically when there are multiple abilities for something like this, there is one base ability that the others add on to. For instance, using the Monk's Belt as an example, you'll notice that it increases the effective level of the character for the purpose of Improved Armor Class as such:

Code:
hero.child[cMnkAC].field[xExtraLev].value = hero.child[cMnkAC].field[xExtraLev].value + 5

When you look at the Monk's special abilities, you'll see that there are 4 other "Improved Armor Class" specials. These trigger when the monk reaches a certain level. By increasing the ExtraLev field as above you effectively trigger these specials to activate. The trick is to figure out which ability is the base one. One way to do that is to look for the one that doesn't have "Upgrade - hide from list" checked.

Hope this helps.

PS. Would you be interested in sharing your work with the community? I've been working on the community files, and can always use some extra hands.
 
Yes, and for the vest of legends, that is perfect. It also improves their level, thanks!

But for the Song of the Heart, it does not increase their level (and so the item and feat would stack), it simply increases the bonuses granted by the Bardic music. For the moment, I fixed this by Bootstrapping a special off the feat, which is named Bardic Music, Improved. Then on the specials list, it shows directly below the Bardic Music ability, to act as a reminder to add 1 to everything. Not every elegant, I would prefer that it improved the bonus automatically, but it will do for now.

And I would love to help. I took a break from using HL for a while to develop my own program for character management. It works fine (Developed in MS Access) its just slow and I am tired of coding it. HL works fine once you create the content. Right now the content I created is stored in one file, so I assume I would need to break it apart. Feel free to email me (my email address is my user name at aol dot com) and let me know what is left to be done, what you can use help with, etc.
 
When I create a bard, I don't see anywhere that even tells you what the bonus is (except in the Bard tab under "specials". Shouldn't these be showing up in the specials tab?
 
Correct, and it does. The problem is that when the bard has accrued enough levels to improve it, the bonus doesn't calculate. Instead, the system grants a new ability, Inspire Courage +2, which overrides the +1 in the specials tab. The problem with this method is that it is unclear if there is a way to grant a +1 bonus to the ability.

Although I think I may have a solution. If the item checks for Inspire Courage +1 and then grants Inspire Courage +2 (etc) than it may work. I am going to test it and see how it works. Seems like a long way of approaching it though.
 
Last edited:
Weird. I add 10 levels of Bard, and the only thing in my specials tab is Bardic Knowdlege.

Anyway, another option is you can change the name of abilities. As an example:

Code:
hero.childfound[xLore].field[xBrdMInsC].text = "Bardic Music: Inspire Courage +2"

This changes the name of the special to whatever you want it to be. You can also use variables, like this:

Code:
var bonus as number
bonus = hero.childfound[xBrdMInsC].field[hTotal].value
bonus += 1

hero.childfound[xBrdMInsC].field[xName].text = "Bardic Music: Inspire Courage +" & bonus & ""

I can't speak to whether or not that would come up with the appropriate number, but you get the idea. If it works, you would only have to do it once, which should help. You could also use some formula to determine what your bonus is independent of the hTotal field.
 
I appreciate the help, its taking me a bit to remember everything here. So I tried your first idea after frustratingly giving up on bootstrapping (I know there is a solution there, I just can't find any documentation on how the data is structured).

So, here is what I tried:
Code:
If (hero.pickexist[cBrdMInsC] = 1) then
    hero.childfound[xLore].field[cBrdMInsC].text = "Bardic Music: Inspire Courage +2"
endif

If (hero.pickexist[cBrdMInsC2] = 1 then
    hero.childfound[xLore].field[cBrdMInsC2].text = "Bardic Music: Inspire Courage +3"
endif

If (hero.pickexist[cBrdMInsC3] = 1 then
    hero.childfound[xLore].field[cBrdMInsC3].text = "Bardic Music: Inspire Courage +4"
endif

If (hero.pickexist[cBrdMInsC4] = 1 then
    hero.childfound[xLore].field[cBrdMInsC4].text = "Bardic Music: Inspire Courage +5"
endif

I am getting an error however. It says:
"Syntax error in 'eval' script for Thing 'fSongHeart' (EvalScript '#1') on Line 3
-> Invalid use of a reserved word in a script
 
I think the error has to do with the use of "pickexist". Additionally, I think your field is wrong.

EDIT: Ok, I finally figured out why they weren't showing up in my specials tab (no ranks in perform) so I was able to do some fiddling to figure out what might work best. This may not be the most efficient way of doing it, but it does seem to work pretty well. Try this:

Code:
if (hero.childfound[cBrdMInsC4].tagis[Helper.ShowSpec] = 1) then
    hero.childfound[xBrdMInsC].field[xName].text = "Bardic Music: Inspire Courage +5"

elseif (hero.childfound[cBrdMInsC3].tagis[Helper.ShowSpec] = 1) then
    hero.childfound[xBrdMInsC].field[xName].text = "Bardic Music: Inspire Courage +4"

elseif (hero.childfound[cBrdMInsC2].tagis[Helper.ShowSpec] = 1) then
    hero.childfound[xBrdMInsC].field[xName].text = "Bardic Music: Inspire Courage +3"

elseif (hero.childfound[cBrdMInsC].tagis[Helper.ShowSpec] = 1) then
    hero.childfound[xBrdMInsC].field[xName].text = "Bardic Music: Inspire Courage +2"
endif


Second Edit:

This way looks like it might be a more efficient use of code. It also demonstrates the use of the variable:

Code:
Post-levels 10200

if (hero.childfound[cBrdMInsC].tagis[Helper.ShowSpec] = 1) then

  var bonus as number

  bonus = round(hero.child[xBrdMInsC].field[Value].value/5 + 1, 0, 1)

  hero.childfound[xBrdMInsC].field[xName].text = "Bardic Music: Inspire Courage +" & bonus & ""
endif

Note the timing. It has to take place after Post-Levels 10100 (when the value field is determined).
 
Last edited:
That worked perfect! I finally got my previous code to work somewhat, but the abilities listed have level requirements attached to them. So when I added Bardic Music +4 to a character who didn't have 15 levels of Bard, HL freaked. This works great, thanks!

As a side note, how do you know the timing? Is there a timing chart somewhere or just experience?
 
As a side note, how do you know the timing? Is there a timing chart somewhere or just experience?

For pretty much anything, there's a way to look up the timing. In this case, go to your specials tab, right-click on "Bardic Music: Inspire Courage" and select "Show Debug Tasks". This shows you the timing of various scripts being run. It doesn't say exactly what's being done, of course. You'd have to go look at the code to know that, but doing this can help you make an educated guess about when you want to run your code.

Here's another thing that can help, and is something I did while getting this code together. You can use the debug command to help you make sure the numbers you are getting are correct. For instance, in trying to use the value field to create my variable, I had the wrong timing and my results were incorrect. So I used the following code:

Code:
var bonus as number
bonus = hero.child[xBrdMInsC].field[Value].value
debug bonus

I then went to the Develop menu -> Floating Info Windows -> Show Debug Output. When you save and "test now" the above, the debug window will show what number the variable "bonus" equals. Before I changed my timing, it was 0. Of course, you don't need to remove the rounding and other math from the equation as I did, but I do that to make sure I'm getting the right value before I start messing around with any math. That way I'll know for sure whether its a timing issue or a math issue.
 
Wow that's a huge help, thanks!

Also, your second formula does not work, so I went back to the first. I think the problem lies in the math. I am unclear what hero.child[xBrdMInsC].field[Value].value is, because it's not the bard level for the character (it showed up as a value 20 at level 11). So, when dividing it by 5, the feat at some point adds 2 to the Inspire Courage (at level 11 he went from a +3 to a +5).
 
Wow that's a huge help, thanks!

Also, your second formula does not work, so I went back to the first. I think the problem lies in the math. I am unclear what hero.child[xBrdMInsC].field[Value].value is, because it's not the bard level for the character (it showed up as a value 20 at level 11). So, when dividing it by 5, the feat at some point adds 2 to the Inspire Courage (at level 11 he went from a +3 to a +5).

Hmm....it worked ok for me at Bard levels 8 and 9. Is your character a straight Bard or does he have something else going on? Is he also wearing the Vest of Legends? I wonder if that could be changing it.

I chose to use that value instead of straight bard level since I wasn't sure if there would be other class levels that grant the ability. If that's not the case, you could try:

Code:
bonus = round(#levelcount[Bard]/5 + 1, 0, 1)

Incidentally, if you take a look at the Bardic Music: Inspire Courage +1 (the base one) you'll notice it bootstraps the special xBrdMInsC and modifies the value field for that special in an eval script based on the character's bard level. I assume anything that improves the bard's ability or otherwise increases their effective level for the purposes of Inspire Courage would also increase that number. That way, in theory at least, it should stack with the vest so that a level 3 bard with both the vest and this feat should have Inspire Courage +3 (the same as a level 8 bard with just the feat).
 
Last edited:
Are you calculating that a bard gets a +1 every 5 bard levels to their inspire courage? Is that what the "/ 5" is from? Maybe that's where my confusion is, because they get a +1 at 1st, +2 at 8th, +3 at 14th, and +4 at 20th.

And yes, the character in question has levels in other things. He has a template (half Fey, ECL +2). It does not add to hit dice but does add to level. Yes he is wearing the vest of Legends and it is applying properly.
 
Are you calculating that a bard gets a +1 every 5 bard levels to their inspire courage? Is that what the "/ 5" is from? Maybe that's where my confusion is, because they get a +1 at 1st, +2 at 8th, +3 at 14th, and +4 at 20th.

Not exactly, but now that I actually think about it, the math is flawed. I only looked at levels 1, 8, 14, and 20. Obviously that's the wrong approach. I'll take a second look at that.

EDIT: Ok, I'm not finding a simple formula that works from levels 1-20, so I guess if you wanted to base it off the level field, you'd have to do something like this:

Code:
if (hero.childfound[cBrdMInsC].tagis[Helper.ShowSpec] = 1) then

  var level as number
  var bonus as number

  level = hero.child[xBrdMInsC].field[Value].value
  bonus = 2
  
  if (level >= 20) then
   bonus += 3
  elseif (level >= 14) then
   bonus += 2
  elseif (level >= 8) then
   bonus += 1
  endif

  hero.childfound[xBrdMInsC].field[xName].text = "Bardic Music: Inspire Courage +" & bonus & ""
endif

Not as elegant as I'd like, but it should work pretty well assuming the level field is an accurate indicator of your bard ability level. If not, you can replace that with Bard levels as I did a few posts up.

And yes, the character in question has levels in other things. He has a template (half Fey, ECL +2). It does not add to hit dice but does add to level. Yes he is wearing the vest of Legends and it is applying properly.

I don't know much about the Half Fey template, but I wouldn't expect it to add to the character's Bard abilities.

NOTE: Incidentally, you can learn more about the round command and other math things here. Its a Pathfinder thread, but at least some of those commands also apply to d20.
 
Last edited:
Back
Top