• 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

Getting/Setting STR

wdmartin

Well-known member
I'm working on a 3.5 spell adjustment for wild shape. I've figured out how to handle natural armor and weapons, but I'm struggling with adjusting the ability scores.

3.5 wild shape specifies that magic items (such as a Belt of Giant's Strength) stop functioning when you're in wild shape, and that the STR/DEX score gets replaced with that of the animal. So I thought I could just do something like this as an eval script:

Code:
~ If we're not enabled, get out now
doneif (field[pIsOn].value = 0)

var adjustment as number

~ The first number is the target ability score.
adjustment = 11 - hero.child[aSTR].field[aFinalVal].value

~ Apply the adjustment.
#applybonus[Bonus, hero.child[aSTR], adjustment]

This compiles fine. I set up a suitable test hero with a STR of 8, and ran it. I figured 11 - 8 = 3, so it would apply a bonus of 3 to the score, bringing it up to 11.

What actually happened is that it applied a bonus of 11 to the score, raising it to 19. My theory is that I'm not getting the current STR correctly. The "hero.child[aSTR].field[aFinalVal].value" bit appears to be evaluating to zero.

Also, I have no idea if the #applybonus macro will work with a negative number, as might happen if I were shifting form to something tiny.
 
There should be no problem with using #applybonus with a negative number. The program doesn't care.

What is the timing on your script? If you are getting a 0 STR score, then you may be running it too early. It needs to be Post-Attributes or later.
 
Sendric, actually, #applypenalty[] should be used if you want to apply the greater negative number. #applybonus[] is used if you to apply the greater of the two positive numbers.

However, the Bonus field is for stacking bonuses, so it shouldn't be applied with #applybonus[] - it should just be a +=. Or, change to one of the other bonus type fields, like BonMorale, that is designed for bonuses that don't stack with each other.
 
Last edited:
Ah ha, I bet that's the problem -- it's probably running in the wrong phase. Thanks!

I don't have access to Hero Lab right this moment, but I'll give it a try later this evening.
 
Use the aNormForce field for this. Just set that field's value to the value you want to force this attribute to be.
 
I didn't get a chance to work on this over the weekend -- the data file I needed is actually only on my computer at work, where I've got a secondary license set up for long shifts when nobody comes to the reference desk for help. Like, uh, this one right now.

Anyway, I got it working. Here's the script for wild shaping into a Porpoise (minus bootstraps for the aquatic subtype, swim speed and slam attack):

Phase: Attributes (Users); Priority: 100; Index: 2

Code:
~ If we're not enabled, get out now
doneif (field[pIsOn].value = 0)

~ Note the new CON modifier
var newConMod as number
newConMod = 1

~ Get the original CON modifier
var origConMod as number
origConMod = hero.child[aCON].field[aModBonus].value

~ Set the constitution
hero.child[aCON].field[aFinalVal].value = 13
hero.child[aCON].field[aModBonus].value = newConMod

~ Get the difference between the original CON modifier and the new one
var conSkew as number
conSkew = origConMod - newConMod

~ Get the total hit dice of the hero
var heroHD as number
heroHD = hero.child[Totals].field[tHitDice].value

~ Adjust the hero's hit points to retain the original
~ pre-modification total.
hero.child[Totals].field[tHP].value += conSkew * heroHD


~ Set our natural armor class
hero.child[ArmorClass].field[tACNatural].value = 2

~ Set the strength
hero.child[aSTR].field[aFinalVal].value = 11
hero.child[aSTR].field[aModBonus].value = 0

~ Set the dexterity
hero.child[aDEX].field[aFinalVal].value = 17
hero.child[aDEX].field[aModBonus].value = 3

I tried aNormForce, but it has the peculiarity that if you disable the adjustment, the ability score doesn't revert to the original score. Using aFinalVal makes it revert the score when the adjustment is disabled.

This was moderately annoying to work out, but now it's done! And it can probably be re-used for other wild shapes -- just change the values of the abilities and their modifiers, natural armor, and bootstraps. I'm probably going to go through and do the ones on the core rule book.
 
Great! Thanks. It's my intention to add these in to the community set some day. I'll use this as a starting point.
 
Just some notes on wild shape.

=== Requirements ===
  • Creature must be of an appropriate type (animal, plant, elemental)
  • Druid must be familiar with the creature (consult GM)
  • Creature's hit dice must be equal to or lesser than PC's druid level
  • Druid gains/loses stuff per the Alternate Form special ability, with modifications from base class (longer duration,etc).


=== Valid Forms from the SRD ===
  • 5th - small and medium animals
    • Baboon (1 hd)
    • Badger (1 hd)
    • Bear, Black (3 hd)
    • Boar (3 hd)
    • Cheetah (3 hd)
    • Crocodile (3 hd)
    • Dog (1 hd)
    • Dog, Riding (2 hd)
    • Donkey (2 hd)
    • Eagle (1 hd)
    • Hyena (2 hd)
    • Leopard (3 hd)
    • Lizard, Monitor (3 hd)
    • Octopus (2 hd)
    • Pony (2 hd)
    • Pony, War (2 hd)
    • Porpoise (2 hd)
    • Shark, Medium (3 hd)
    • Snake, Constrictor, Medium (3 hd)
    • Snake, Small Viper (1 hd)
    • Snake, Medium Viper (2 hd)
    • Squid (3 hd)
    • Wolf (2 hd)
    • Wolverine (3 hd)

  • 8th - large animals
    • Ape (4 hd)
    • Bear, Brown (6 hd)
    • Bear, Polar (8 hd)
    • Bison (5 hd)
    • Camel (5 hd)
    • Horse (3 for all but heavy warhorse, which is 4 hd)
    • Lion (5 hd)
    • Manta Ray (4 hd)
    • Mule (3 hd)
    • Octopus, Giant (8 hd)
    • Rhinocerous (8 hd)
    • Shark, Large (7 hd)
    • Snake, Large Viper (3 hd)
    • Tiger (6 hd)

  • 11th - tiny animals
    • Cat (1/2 hd)
    • Hawk (1 hd)
    • Lizard 1/2
    • Monkey (1 hd)
    • Owl (1 hd)
    • Rat (1/4 hd)
    • Raven 1/4
    • Snake, Tiny Viper (1/4 hd)
    • Weasel 1/2

  • 12th - tiny-large plants
    • tiny plants (none)
    • small plants (none)
    • medium plants
      • Fungus, Violet (2 hd)
      • Fungus, Shrieker (2 hd)
      • Phantom Fungus (2 hd)
    • large plants
      • Assassin Vine (4 hd)
      • Shambling Mound (8 hd)


  • 15th - huge animals and plants
    • huge animals
      • Crocodile, Giant (7 hd)
      • Elephant (11 hd)
      • Shark, Huge (10 hd)
      • Snake, Constrictor, Giant (11 hd)
      • Snake, Huge Viper (6 hd)
      • Squid, Giant (12 hd)
      • Orca (9 hd)
    • huge plants
      • Tendriculos (9 hd)
      • Treant (7 hd)

  • 16th - small-large elementals
    • Air Elemental, Small-Large (2, 4, 8 hd)
    • Belker (7 hd)
    • Earth Elemental, Small-Large (2, 4, 8 hd)
    • Fire Elemental, Small-Large (2, 4, 8 hd)
    • Invisible Stalker (8 hd)
    • Magmin (2 hd)
    • Thoqqua (3 hd)
    • Water Elemental, Small-Large (2, 4, 8 hd)

  • 20th - huge elementals
    • Air Elemental, Huge (16 hd)
    • Earth Elemental, Huge (16 hd)
    • Fire Elemental, Huge (16 hd)
    • Water Elemental, Huge (16 hd)

=== Notes ===

The prohibition on assuming a form with more hit dice than your druid level is basically meaningless, at least as long as you stick to the stuff in the SRD. By the time you're high enough level to have access to a category of creatures, your druid level is already higher than the hit dice for every form in that category. The only exception is Greater and Elder elementals, which have 21 and 24 hit dice, so you can never assume those forms without some some crazy feat/PrC which surely exists somewhere.

I'm thinking about implementing a level check anyway, to throw Hero Lab validation error if you assume a shape you're not eligible for (like, say, a 5th level druid turning into a cat -- tiny forms not allowed before level 11). For a single-classed druid, that should be straightforward, but I'm not sure what to do about prestige classes that boost your effective druid level. Surely there must be some. It might just be simpler to do a hit dice check -- hero's hit dice have to be a certain level to apply a given form with no validation error. Thoughts on this?

The small and medium animals are likely to be fairly simple. I'll need to learn stuff about assigning multiple natural attacks (like bite/claw/claw for a tiger, and that doesn't even account for pounce and rake). Probably the easiest way is to just load a copy of the creatures the wild shape is imitating and copy ... uh, study how it was done there. >.>

EDIT: I've created an expanded version of this list that shows all of the adjustments that need to happen for all of these shapes. Here it is:

http://www.atuan.com/wild-shape-notes.html

Unfortunately it's way too large for the forum character limit, and I can't attach html files.
 
Last edited:
Back
Top