• 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

Character Creation and XP

SeeleyOne

Well-known member
It annoys me when you are creating a character that starts out with experience points. An example is when you enter a value for the Starting XP in the Configure Your Hero menu. Another example is the edge from Deadlands called Veteran o' the Weird West.

This annoys me because it effectively changes the rules for a character while in creation mode. The character has access to edges at the point of character creation that he/she should not normally have access to. This is unfair as the order that you get things when spending Advancements really does matter.

But, I do have a fix. It makes it so that while the character still has skill points, reward points (from taking hindrances), and edges the character will be locked at 0 experience points and remain Novice.

I made a Mechanic.
Name: Zero XP at Creation
Unique ID: ZeroXP

Eval Script
Phase Final
Priority 1000
Code:
var pauseit as number
var checkit as number
pauseit = 0
checkit = 0

~ Check for unspent Skill Points
checkit = #resleft[resSkill]

if (checkit > 0) then
   pauseit = 1
endif

if (checkit < 0) then
   pauseit = 1
endif

~ Check for unspent Edges
checkit = #resleft[resEdge]

if (checkit > 0) then
   pauseit = 1
endif

if (checkit < 0) then
   pauseit = 1
endif

~ Check for unspent Rewards Points
checkit = #resleft[resHinder]

if (checkit > 0) then
   pauseit = 1
endif

if (checkit < 0) then
   pauseit = 1
endif

~ If pauseit is 1, you are still in character creation
if (pauseit = 1) then
    hero.child[resXP].field[resMax].value = 0
endif
 
While I sympathize with the annoyance about order-of-operations issues, I do have to note that this isn't the only place that happens; the whole Greater/Lesser Skill thing in advancement is an embodiment of it, too.
 
The Greater/Lesser skill thing in Advancement is intentional, as it is how the rules work. Or maybe I just misunderstand what you mean.

The only thing that annoys me in the Advancements is that they do not check for validation before the fact, like a skill or edge. If you get an attribute and you already did that rank it complains after the fact "hey, you got too many. Never mind that I tempted you to do so".

There is a semi-fix for this. I added versions of the attribute advance into my user file. You have to do this outside of the editor, but it works. I also made those that are not Legendary become "unique". I say a semi-fix because ideally it should know what rank you are when you are choosing an advance for that slot.

Much of what I say might come across as harsh criticism. I do like Hero Lab. I can usually understand why certain design-decisions were made. There is a definite difference in the capabilities of when it was created and what can be done now. Savage Worlds as a whole has grown immensely in that time as well.

There are many things that can be changed for the better, and most of those are not all that hard in themselves to accomplish. That is a big part of what has frustrated me -- "but, but , it is actually easy, here is how to do it". The real question is time. I know that Lone Wolf puts the vast majority of their collective time into Realm Works and Pathfinder.

I don't have time, either. Sure, I can spare a bit of time here and there, but surely not enough to devote an actual project. After I graduate next Spring, depending on my job situation, I will hopefully have some time.
 
Yeah, there are lots of little things that bug me about the current state of SWD in Hero Lab, and this is partly one of them. Like when bringing in a new character to an existing game we'll just pre-set the XP and advance a character that way, but despite the advances lining up in order and that the program checks for Attribute advancement only once per Rank it doesn't actually seem to check Rank requirements against the earlier advancement slots. It also doesn't let you reorder those as well, so if you delete anything that would change the order things were done in that can cause problems as well (mainly just the error about taking more than one attribute bump in a rank.) We've mentioned that kind of stuff on this forum plenty, though, so I figure it is what it is.

As for the code, though, that might be pretty useful to add to some of the Deadlands files I maintain. Mind if I add it?
 
Be my guest. The point of my sharing my solutions is so that people can use them. Better yet, improve on them. The less than and greater thans could probably be in the same if statements for each section, but at the time I could not recall what the "and" is in Hero Lab's code and I did not want to search for an example. In hindsight it is probably just &

Ideally, some of them would just be implemented to the core (and just fixed in the source code). :)
 
Oh, I just thought of this. For the Veteran of the Weird West, if might actually be better to add the experience points after the "pause" is done. So the XP will not be added to the character until the edges, skill points, hindrance points are spent. I did not bother adding Attributes to the list because they are irrelevant. So is Hindrance points, but I added them as if they are not spent then perhaps you are still thinking about using them.
 
The Greater/Lesser skill thing in Advancement is intentional, as it is how the rules work. Or maybe I just misunderstand what you mean.

That is what I mean; its annoying that the SW rules do that. That you can have two characters, that just by the order in which they bought something end up with different values--specifically, it almost always makes sense for your first purchase when you level to be an attribute (often Agility in a typical action-oriented game, but sometimes Smarts) because it makes the skills you actually want to increase cheaper.

(In other words, I'm bitching about the game system here, not HL).
 
That is a good point. I have noticed that as a truth in my own group.

Some groups actually use a house rule, which I am considering to adopt myself, where you get your Rank's attribute advance upon reaching that rank. What I will do if I do decide to do it is that I will add an attribute point at character creation instead of allowing one as an advance, and then for the other ranks change the <fieldvalfield="advCost"value="1"/> to have a value of 0. Then when the characters get to the appropriate Rank tell the player to add it.
 
Thinking about it, there is way to make skill costs use the attribute retroactively.

First, you need to make your own version of the Increase Attribute advance. In your version you need to add this line: <bootstrap thing="rewAttrib"></bootstrap>

However, this will have the following effects:
1) It will alter the Rewards total. You can get around this with making a mechanic that counts for the advance and fixes the point total.
2) It will likely alter the Skill points total in the Skills tab, so you will need to adjust them. But you want to, so that is ok.
3) It will likely alter skill selections from during advancement. This can be annoying since it can be hard to go backwards.

However, it DOES work. If you make your own version of that advance. You have to open the user file outside of the editor. I would suggest placing near the top so that it is easier to find and change later since you have to do it manually.
 
I just came up with an even more efficient code for enforcing Novice and character creation and for enforcing the Rank while choosing Advances.

It can also be used with an alternate XP table. All that you have to do (as far as Rank is concerned) is change the value of xpPerRank in this code and you are done. You would possibly have to alter the number of Advances in a different Eval script.

I spread out the code a bit so that it is easier for us to read.

Phase: Final
Priority: 5010

Code:
    var endRank as number
    var xpPerRank as number
    var advPerRank as number
    var advCount as number
    var xp as number
    var xpRank as number
    var rankCount as number
    var endRank as number

    xpPerRank = 20
    advPerRank = xpPerRank / 5
    advCount = 0
    xp = hero.child[resXP].field[resMax].value
    xpRank = xpPerRank
    rankCount = 0
    endRank = 0

   ~ Check for spent Advances
   foreach pick in hero from Advance sortas _CompSeq_
      advCount += eachpick.field[advCost].value
   nexteach

   ~ Determine Rank based on current Advance
   ~ Seasoned
   rankCount = advPerRank -1
   if (advCount >= rankCount) then
      if (xp >= xpRank) then
          endRank = 1
      endif
   endif

   ~ Veteran
   rankCount = rankCount + advPerRank
   xpRank = xpRank + xpPerRank
   if (advCount >= rankCount) then
      if (xp >= xpRank) then
          endRank = 2
      endif
   endif

   ~ Heroic
   rankCount = rankCount + advPerRank
   xpRank = xpRank + xpPerRank
   if (advCount >= rankCount) then
      if (xp >= xpRank) then
          endRank = 3
      endif
   endif

   ~ Legendary
   rankCount = rankCount + advPerRank
   xpRank = xpRank + xpPerRank
   if (advCount >= rankCount) then
      if (xp >= xpRank) then
          endRank = 4
      endif
   endif

   ~ Apply the Rank
   herofield[acRank].value = endRank
 
Back
Top