Races and Racial Abilities (Savage)

From HLKitWiki
Revision as of 12:27, 17 December 2008 by Rob (talk | contribs)
Jump to navigationJump to search

Context: HL Kit … Authoring Examples … Savage Worlds Walk-Through 

Overview

The next thing we should probably address is support for races and racial abilities.

Component and Component Set

The Skeleton files already have a suitable component and component set in place for managing races ("Race"), as well as an "Ability" component and component set that can be used for racial abilities. The only change we should consider is that the "Ability" component set includes the "Trait" component, and racial abilities in Savage Worlds don't have any need for those mechanics. Consequently, we can readily delete the "Trait" component from the "Ability" component set in the file "traits.str", eliminating the unnecessary overhead.

<compset
  id="Ability">
  <compref component="Ability"/>
  <compref component="SpecialTab"/>
  </compset>

Adding a Race

Since everything is now in place, we can begin adding the various races and their abilities. In the interest of keeping everything conveniently grouped in a single place, we'll define both races and their abilities in the "thing_races.dat" file. Each race will simply bootstrap all of the abilities that it confers. Those abilities will then possess scripts, as necessary, to apply the appropriate changes to the character.

We'll start with a race that is relatively simple, the "Atlanteans". This race has two abilities, with one ability conferring a bonus that is applied via an Eval script. The three pieces should look something like below:

<thing
  id="racAtlant"
  name="Atlantean"
  compset="Race"
  isunique="yes"
  description="Description goes here">
  <bootstrap thing="abAquatic"/>
  <bootstrap thing="abTough"/>
  </thing>

<thing
  id="abAquatic"
  name="Aquatic"
  compset="Ability"
  isunique="yes"
  description="Description goes here">
  </thing>

<thing
  id="abTough"
  name="Tough"
  compset="Ability"
  isunique="yes"
  description="Description goes here">
  <eval index="1" phase="PreTraits" priority="5000">
    <before name="Calc trtFinal"/><![CDATA[
    ~add +1 die to the Vigor attribute
    #traitbonus[attrVig] += 1
    ]]></eval>
  </thing> 

Special Case Situations

Among all of the races outlined in the Savage Worlds rulebook, there are a handful of special case situations that warrant specific commentary. Each of these is outlined in this section. Except for these special cases, the races are rather straightforward.

For the "Dwarves" race, there is the "Slow" ability, which sets the base "Pace" value for the Dwarf to five instead of the normal six. In order for this to work properly, be sure to set the appropriate value for "Pace" using the conventions established earlier in this walk-through. An example of the "Slow" ability is presented below.

<thing
  id="abSlow"
  name="Slow"
  compset="Ability"
  isunique="yes"
  description="Description goes here">
  <!-- Dwarves have a base Pace of 5
        NOTE! Since we're setting the Pace to a fixed value, do it early, before
              any adjustments are applied.
  -->
  <eval index="1" phase="Setup" priority="1000"><![CDATA[
    #traitbonus[trPace] = 5
    ]]></eval>
  </thing>

The "Elves" race possesses the "All Thumbs" ability, which is actually the "All Thumbs" hindrance. There are two options for how we can handle this properly. The first option is to duplicate the behaviors of the "All Thumbs" hindrance as a separate ability, and the second is to automatically bootstrap the "All Thumbs" hindrance from the ability. The latter approach requires that the bootstrapped hindrance be specially implemented so that it does not confer bonus points that can be traded in for edges or other benefits. That extra handling is more work, so it's simpler to just duplicate the "All Thumbs" hindrance as a racial ability.

Unfortunately, having a separate "All Thumbs" ability introduces another wrinkle that needs to be resolved. Since the "All Thumbs" ability is equivalent to the "All Thumbs" hindrance, it's important that the user not be allowed to take the hindrance when the "Elves" race is selected for a character, and vice versa. Actually precluding this is a bit of work, but it's relatively easy to detect when the user has done it and report a validation error, so that's the method we'll employ. Sadly, we can't implement our solution yet, since we don't have the hindrance in place yet, so we'll make a note to come back and deal with this later.

Next on the list of special cases is the "Heritage" ability of Half-Elves. This ability gives the character the ability to choose one of two different options: the "Agile" ability of Elves or a free edge of the player's choice. A variety of different methods could be employed to solve this, ranging from simple to complex. We're going to keep things simple, so we'll create two separate versions of the race, with each conferring a different option. This way, the user simply selects the version he wants and everything works easily. The names of each race must include an indication of the benefit being granted, such as "Half-Elven (Edge)", which is shown below.

<thing
  id="racHfElf1"
  name="Half-Elven (Edge)"
  compset="Race"
  isunique="yes"
  description="Description goes here">
  <bootstrap thing="abHeritage"/>
  <bootstrap thing="abFreeEdge"/>
  <bootstrap thing="abLowLight"/>
  <bootstrap thing="abOutHE"/>
  </thing>

Although a few different races have the "Outsider" ability, each instance of the ability is a bit different from the others. As such, we can't just have a single "Outsider" ability that can be re-used. We must instead have multiple abilities that all have the same name yet differ in their details.

The final special case is that a couple of races grant a natural weapon of some sort. The Rakashans have a "Claws" ability that behaves as a natural weapon, while the Saurians have an explicit "Natural Weapon" ability. We aren't able to add weapons yet, so we need to make a note about these and come back to implement them later.