• 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

Speaking of Broken Earth...

Paragon

Well-known member
Now that I'm going to actually be using it, I notice two of the "community" edges (these are particular traits of a community, not something attached to a chracter) allow the PCs to learn two skills with an advance rather than one, one only Knowledges, one general. I'm pretty sure the easiest way to do this is to have a couple of false "edges" that refund their own cost or pieces of "equipment" that do what I need; however, I'm not entirely clear on how to produce that result. Anyone care to enlighten me?
 
You are too vague in what you are asking. Do you mean that the Edge gives a one-time benefit, or do you mean that it occurs every single time that someone wants to "learn a new skill" or "increase lesser skill" as an Advance? There is a distinction between character creation and Advances, even though it is rather clumsy at times within Hero Lab. Edges can be "creation only" but otherwise an object has no idea if it was taken at creation or as an Advance, which is a bug in my opinion -- it is most evident when you want an Edge to bootstrap a new skill.

Since I have no idea what you want, I will guess and give some options:

1) have it give a half an Advance when the Edge is taken. This is only valid if the Edge can be taken as an Advance.

2) have it give half a skill point when the Edge is taken if this is a Creation-Only Edge. This limits it to skills, too.

3) have it give back half an Advance afterwards. I did this with my "Free Attributes per Rank" mod. The player adds the additional skill and a mechanic counts the "lesser skills" or "new skills" and refunds a point.

Based on what you are saying, probably both 1 and 2, since, again, Hero Lab is clueless about when you take an Edge.
 
Let me quote the two community "edges" (they're really things you get when you do certain improvements to the PC's community, since community building is part of the game) so what I'm looking at is clear.

"Computerized Library
This represents a wealth of digital information that
characters can access through a computer interface.
Community Benefit: Economy and Morale both
increase by one die type.
PC Benefit: When PCs Advance, they can take two
new Knowledge skills for a single Advance. "

and (I'd actually misremembered this one, as its more specific than I thought):

"Public School
Requires: Books or Computerized Library, 12 Build, 12
weeks
This is a public space for learning. All in the community
are welcome, though there is a particular emphasis on
educating young people.
Community Benefit: Once each year the community
can add one new Citizen Edge without needing to recruit
anybody.
PC Benefit: When they take an Advance, PCs may
choose to learn two new skills at d4 instead of the normal
one."
 
A non-working option is to make up an Advance that requires the Edge. But that does not work because Advances cannot have requirements. Too bad for us since that would be ideal for this situation.

You could make an Edge for Public School with an eval script that looks for the New Skill Advance. If it finds at least one then it gives another half of an Advance to the character. If this Edge can exist more than once on the same character (it does not look like it can) then it would be better with a mechanic that counts both the number of times this edge is taken and the number of "new skill" Advances.

The Computerized Library could look for two New Skills that are Knowledge skill, at which point it can give the 0.5 Advance refund. This way they only get the benefit if it is two Knowledge skills and you do not have to mess with bootstrapping.
 
I think the important thing to note here is that these are not Edges at all. More like benefits for a Group or Faction, so they wouldn't need to do what an Edge does, in that sense, or cost an Edge or Advance or the like. So it's probably better not to call these Edges at all because that can imply a certain mechanic/methodology within Hero Lab. Although you may still be able to use a Group or Faction to handle these it seems to me this is another situation where we could use another class of "Abilities" for things that just aren't Edges or Hindrances but could potentially use the available coding sections of those things to just do whatever other stuff we a particular setting might need.
 
Last edited:
Edges are the easiest way to add something to a character. They are not REAL edges. Since you can only have one Group and one Faction I would recommend against using those, especially for a one-time addition.

Edges really are the best way within the framework of Hero Lab. A reward would also work, but then you have to jump into Creation Mode and that is against the point of an Advance.
 
What I do in the case of 0-cost and 0.5 cost edges is that I make it obvious in its name. "0 - Public School" and "0 - Computerized Library" would do it. This way people know that it is not REALLY an Edge. If you put 0 in the cost it really is free.
 
Ouch.
Well, I'd create a new type of Advance for each of these. Take the standard advance that adds a new Skill and make it cost half an advance like raising a lesser Skill. You'll want to add a source tag so it only shows up in your Setting.

Code:
  <thing
    id="advSkillPS"
    name="Gain a New Skill from PS"
    compset="Advance"
    description="Select a new skill at a d4 rating.">
    <fieldval field="advAction" value="New Skill"/>
    <fieldval field="advDynamic" value="component.Skill & !Hide.Skill"/>
    <fieldval field="advCost" value=".5"/>
    <tag group="Advance" tag="AddNew"/>
    <tag group="DomainTerm" tag="Focus"/>
    <!-- Modify tagexpr to deny skills that have already been added to the character -->
    <eval index="1" phase="Render" priority="1000">
      <before name="Assign Dynamic Tagexpr"/><![CDATA[
      ~get the list of all unique skills on the hero and assemble it as a list of precluded tags
      var tagexpr as string
      foreach pick in hero from Skill where "!Hide.Skill"
        if (eachpick.isunique <> 0) then
          tagexpr &= " & !Skill." & eachpick.idstring
          endif
        nexteach

      ~if there are any tags to exclude, append them to the tagexpr appropriately
      if (empty(tagexpr) = 0) then
        field[advDynamic].text &= tagexpr
        endif
      ]]></eval>

    <!-- Attach the child entity for tracking the advance -->
    <child entity="Advance">
      <tag group="Advance" tag="MustChoose"/>
      </child>
    </thing>
 
Yeah, its not the first time I've had things that were outside the normal advancement schemata come up; I usually ended up faking them with virtual "equipment" which I was considering doing here. I just wasn't sure how.

This is just another one of the places where the fact that SW considers advancement in a way more than a little different that it does character building is not helpful; were it a pure build system I suspect this would be a lot easier.

I'll give your approach a try when I get a little time, CC. Thanks for the help from all three of you, as always.
 
Well, we have to deal with the fact that the advancement system works completely differently than the character creation system. It's the way Savage Worlds is designed.
 
The above works if they can be taken multiple times. If they can only be taken once, add this into the thing id part, before the >

Code:
uniqueness="unique"
 
Yeah, its not the only place where SW's set-up here creates artifacts in some cases. I bet whoever did the HL file I've heard is out there for Accursed had just piles of fun...
 
I was finally getting around to doing this, and realized I don't know where the extent Advance mechanics are stored; they don't seem to have an Editor tab of their own. Could someone point me in the right direction?
 
Where do I actually go to add a custom Advance? Even if I do it directly in the XML I need an example to work from, and I can't seem to find a place the extent ones are stored. There's an entry for Advances in the Simple tab, but that seems to be about how Advance points are counted, not how they're actually structured. There's a tab for Rewards, but not one for Advances.
 
What I did was make a user file, and then edit it outside of the editor as this one contains nothing that the editor can read. I ended mine with "Data" in its name to remind me that it is just a data file, not really a "user" file as we normally use them.

This is mine:
Code:
<?xml version="1.0" encoding="ISO-8859-1"?>



<document signature="Hero Lab Data">
  <!-- ADVANCES -->
  <!-- Attribute Increases -->
  <thing id="advAttriN" name="Boost Attribute (Novice)" description="Increase an attribute by one die type." compset="Advance" replaces="advAttrib" uniqueness="unique">
    <fieldval field="advAction" value="Novice Boost Attribute"/>
    <fieldval field="advDynamic" value="component.Attribute & !Helper.Maximum & !Hide.Attribute"/>
    <fieldval field="advCost" value="1"/>
    <tag group="Advance" tag="Increase"/>
    <child entity="Advance"></child>
  </thing>
  <thing id="advAttriS" name="Boost Attribute (Seasoned)" description="Increase an attribute by one die type." compset="Advance" uniqueness="unique">
    <fieldval field="advAction" value="Seasoned Boost Attribute"/>
    <fieldval field="advDynamic" value="component.Attribute & !Helper.Maximum & !Hide.Attribute"/>
    <fieldval field="advCost" value="1"/>
    <tag group="Advance" tag="Increase"/>
    <child entity="Advance"></child>
  </thing>
  <thing id="advAttriV" name="Boost Attribute (Veteran)" description="Increase an attribute by one die type." compset="Advance" uniqueness="unique">
    <fieldval field="advAction" value="Veteran Boost Attribute"/>
    <fieldval field="advDynamic" value="component.Attribute & !Helper.Maximum & !Hide.Attribute"/>
    <fieldval field="advCost" value="1"/>
    <tag group="Advance" tag="Increase"/>
    <child entity="Advance"></child>
  </thing>
  <thing id="advAttriH" name="Boost Attribute (Heroic)" description="Increase an attribute by one die type." compset="Advance" uniqueness="unique">
    <fieldval field="advAction" value="Heroic Boost Attribute"/>
    <fieldval field="advDynamic" value="component.Attribute & !Helper.Maximum & !Hide.Attribute"/>
    <fieldval field="advCost" value="1"/>
    <tag group="Advance" tag="Increase"/>
    <child entity="Advance"></child>
  </thing>
  <thing id="advAttriL" name="Boost Attribute (First Legendary)" description="Increase an attribute by one die type." compset="Advance" uniqueness="unique">
    <fieldval field="advAction" value="Legendary Boost Attribute"/>
    <fieldval field="advDynamic" value="component.Attribute & !Helper.Maximum & !Hide.Attribute"/>
    <fieldval field="advCost" value="1"/>
    <tag group="Advance" tag="Increase"/>
    <child entity="Advance"></child>
  </thing>
  <thing id="advAttriZ" name="Boost Attribute (Legendary)" description="Increase an attribute by one die type." compset="Advance">
    <fieldval field="advAction" value="Legendary Boost Attribute"/>
    <fieldval field="advDynamic" value="component.Attribute & !Helper.Maximum & !Hide.Attribute"/>
    <fieldval field="advCost" value="1"/>
    <tag group="Advance" tag="Increase"/>
    <child entity="Advance"></child>
  </thing>

  <!-- New Skill -->
  <thing id="advSkiLL" name="Gain a New Skill" description="Select a new skill at a d4 rating." compset="Advance" replaces="advSkill">
    <fieldval field="advAction" value="New Skill"/>
    <fieldval field="advDynamic" value="component.Skill & !Hide.Skill"/>
    <fieldval field="advCost" value=".5"/>
    <tag group="Advance" tag="AddNew"/>
    <tag group="DomainTerm" tag="Focus"/>
    <eval phase="Render" priority="1000">
      <![CDATA[
      ~get the list of all unique skills on the hero and assemble it as a list of precluded tags
      var tagexpr as string
      foreach pick in hero from Skill where "!Hide.Skill"
        if (eachpick.isunique <> 0) then
          tagexpr &= " & !Skill." & eachpick.idstring
          endif
        nexteach

      ~if there are any tags to exclude, append them to the tagexpr appropriately
      if (empty(tagexpr) = 0) then
        field[advDynamic].text &= tagexpr
        endif]]>
      <before name="Assign Dynamic Tagexpr"/>
    </eval>
    <child entity="Advance">
      <tag group="Advance" tag="MustChoose"/>
    </child>
  </thing>

  <!-- Power points tracker so the user can manage the expenditure of power points -->
  <thing
    id="trkPowNoHi"
    name="Power Points"
    compset="Tracker">

    <fieldval field="trkMin" value="0"/>
    <fieldval field="trkMax" value="0"/>

    <!-- Resetting the tracker sets the value to the maximum -->
    <tag group="Helper" tag="ResetMax"/>
  </thing>
  
  <!-- Shootist Power points tracker -->
  <thing
    id="trkPowSh"
    name="Shootist Pool"
    compset="Tracker">

    <fieldval field="trkMin" value="0"/>
    <fieldval field="trkMax" value="0"/>

    <!-- Resetting the tracker sets the value to the maximum -->
    <tag group="Helper" tag="ResetMax"/>
  </thing>
  
  <!-- Free Soaks tracker so the user can manage the expenditure soaks -->
  <thing
    id="trkSoak"
    name="Soak Pool"
    compset="Tracker">

    <fieldval field="trkMin" value="0"/>
    <fieldval field="trkMax" value="0"/>

    <!-- Resetting the tracker sets the value to the maximum -->
    <tag group="Helper" tag="ResetMax"/>
  </thing>

  <!-- Adaptable Warrior tracker so the user can manage the expenditure soaks -->
  <thing
    id="trkAdWar"
    name="Adaptable Warrior"
    compset="Tracker">

    <fieldval field="trkMin" value="0"/>
    <fieldval field="trkMax" value="0"/>

    <!-- Resetting the tracker sets the value to the maximum -->
    <tag group="Helper" tag="ResetMax"/>
  </thing>

  <!-- Versatile Caster tracker so the user can manage the expenditure soaks -->
  <thing
    id="trkVCast"
    name="Versatile Caster"
    compset="Tracker">

    <fieldval field="trkMin" value="0"/>
    <fieldval field="trkMax" value="0"/>

    <!-- Resetting the tracker sets the value to the maximum -->
    <tag group="Helper" tag="ResetMax"/>
  </thing>
</document>

For the Soak Pool above, I have the players get one free Soak roll per session per Rank. It is the initial roll, and may not be used for a re-roll.

For Adaptable Warrior, that is the number of uses per session to use a Combat Edge that the character does not normally have.
 
I hate that the Attribute advances do not tell you that you cannot use them until after you get one "naughty, you selected one too many!". So I made different versions for each Rank.
 
So its still done with the typical <thing></thing> pattern, the editor just doesn't really interact with it? In other words, if I just get in and insert the two special advances in the .user file it should, theoretically, work? CC's post seemed to suggest going about it by copy and edit, which is what's throwing me off here.

Also, there are two other things:
1. The half advances should only be takeable two times each; once for the two associated with the Computerized Library, and once for the two associated with the Public School. You mentioned that I need to mark the uniqueness flag; won't that, in practice, only let people take one of these each, rather than two? If so, is there a syntax that can let it be taken a second time, but only a second?
2. How would I construct the one that only lets you take Knowledge skills differently (the Computerized Library)?
 
Back
Top