Lone Wolf Development Forums  

Go Back   Lone Wolf Development Forums > Hero Lab Forums > HL - d20 System
Register FAQ Community Today's Posts Search

Notices

Reply
 
Thread Tools Display Modes
TobyFox2002
Senior Member
 
Join Date: Nov 2013
Location: Andover, Ma
Posts: 632

Old April 2nd, 2014, 06:01 AM
Ladies and Gentlemen, I am very happy to announce that I have completed a preliminary version of a monster advancer script that is so portable that it can even be applied to already existing creatures with minimal effort.

So far however it only includes advancement by HD for base saves and BAB, not the increase (or decrease) in STR, DEX, CON Nat Armor or Attack Bon, from size. As those are a function of Size and the size at which creatures change is a product of individual monsters rather static.

I am working on a way to add that to the script but its proving difficult using tags. Rather than an incrimentor. I should have more information as I complete additional parts of the script.
TobyFox2002 is offline   #1 Reply With Quote
Kendall-DM
Spy
 
Join Date: Jan 2011
Location: Van Nuys, California
Posts: 1,220

Old April 5th, 2014, 10:17 AM
I have both scripts, which I added as adjustments. However, it's not perfect, there are some 'quirks' in d20 HL that don't do some things well, and until it gets fixed it will continue to be a problem. Just trying to save you some trouble.

For comparison, here is my script for HD advancement:
@First/1
Code:
~ If we're not enabled, get out now.
doneif (field[pIsOn].value = 0)

~ Change our HD, BAB, saves.
foreach pick in hero from BaseRace where "thingid.r?"
  var good as number
  var medium as number
  var poor as number
  good = round(eachpick.field[rHitDice].value / 2, 0, -1) + 2
  medium = round(eachpick.field[rHitDice].value * 0.75, 0, -1)
  poor = round(eachpick.field[rHitDice].value * 0.5, 0, -1)

  ~ Adjust the HD to the new value.
  eachpick.field[rHitDice].value += field[pAdjust].value

  ~ Assign appropriate attack bonuses.
  if (eachpick.field[rAttack].value = medium) then
    eachpick.field[rAttack].value = round(eachpick.field[rHitDice].value * 0.75, 0, -1)
  elseif (eachpick.field[rAttack].value = poor) then
    eachpick.field[rAttack].value = round(eachpick.field[rHitDice].value * 0.5, 0, -1)
  else
    eachpick.field[rAttack].value = eachpick.field[rHitDice].value
  endif

  ~ Check that a low HD fey or undead is not getting medium BAB. (creature types I assign)
  if (eachpick.field[rHitDice].value < 2) then
    if (hero.childlives[tFey] + hero.childlives[tUndead] <> 0) then
      eachpick.field[rAttack].value = 0
    endif
  endif

  ~ Assign appropriate save bonuses.
  if (eachpick.field[rFort].value = good) then
    eachpick.field[rFort].value = round(eachpick.field[rHitDice].value / 2, 0, -1) + 2
  else
    eachpick.field[rFort].value = round(eachpick.field[rHitDice].value / 3, 0, -1)
  endif
  if (eachpick.field[rRef].value = good) then
    eachpick.field[rRef].value = round(eachpick.field[rHitDice].value / 2, 0, -1) + 2
  else
    eachpick.field[rRef].value = round(eachpick.field[rHitDice].value / 3, 0, -1)
  endif
  if (eachpick.field[rWill].value = good) then
    eachpick.field[rWill].value = round(eachpick.field[rHitDice].value / 2, 0, -1) + 2
  else
    eachpick.field[rWill].value = round(eachpick.field[rHitDice].value / 3, 0, -1)
  endif 
nexteach
Kendall-DM is offline   #2 Reply With Quote
Kendall-DM
Spy
 
Join Date: Jan 2011
Location: Van Nuys, California
Posts: 1,220

Old April 5th, 2014, 10:18 AM
Here is the script I run for Size Advancement adjustment:
@First/22000
Code:
~ If we're not enabled, get out now.
doneif (field[pIsOn].value = 0)

~ If we're sizing down or not sizing yet, get out now.
doneif (field[pAdjust].value < 1)

~ Add to size - must come after race and template size set.
var origsize as number
origsize = herofield[tSize].value
herofield[tSize].value += field[pAdjust].value

~ Increase the size of all our equipment by 1.
foreach pick in hero from MyGear 
  eachpick.field[gSizeMod].value += field[pAdjust].value
  eachpick.field[gWeight].value *= (field[pAdjust].value * 2)
nexteach
foreach pick in hero from BaseNatWep
  var x as number
  for x = 1 to field[pAdjust].value
    perform eachpick.assign[Helper.DamageUp]
  next
nexteach

~ Determine changes to our abilities based on size difference.
var diff as number
diff = herofield[tSize].value - origsize
if (origsize = -4) then
  if (diff = 8) then
    ~ +42 str, -12 dex, +18 con, +14 nat
    hero.child[aSTR].field[aStartMod].value += 42
    hero.child[aDEX].field[aStartMod].value -= 12
    hero.child[aCON].field[aStartMod].value += 18
    hero.child[ArmorClass].field[tACNatural].value += 14
  elseif (diff = 7) then
    ~ +34 str, -12 dex, +14 con, +9 nat
    hero.child[aSTR].field[aStartMod].value += 34
    hero.child[aDEX].field[aStartMod].value -= 12
    hero.child[aCON].field[aStartMod].value += 14
    hero.child[ArmorClass].field[tACNatural].value += 9
  elseif (diff = 6) then
    ~ +26 str, -12 dex, +10 con, +5 nat
    hero.child[aSTR].field[aStartMod].value += 26
    hero.child[aDEX].field[aStartMod].value -= 12
    hero.child[aCON].field[aStartMod].value += 10
    hero.child[ArmorClass].field[tACNatural].value += 5
  elseif (diff = 5) then
    ~ +18 str, -10 dex, +6 con, +2 nat
    hero.child[aSTR].field[aStartMod].value += 18
    hero.child[aDEX].field[aStartMod].value -= 10
    hero.child[aCON].field[aStartMod].value += 6
    hero.child[ArmorClass].field[tACNatural].value += 2
  elseif (diff = 4) then
    ~ +10 str, -8 dex, +2 con
    hero.child[aSTR].field[aStartMod].value += 10
    hero.child[aDEX].field[aStartMod].value -= 8
    hero.child[aCON].field[aStartMod].value += 2
  elseif (diff = 3) then
    ~ +6 str, -6 dex
    hero.child[aSTR].field[aStartMod].value += 6
    hero.child[aDEX].field[aStartMod].value -= 6
  elseif (diff = 2) then
    ~ +2 str, -4 dex
    hero.child[aSTR].field[aStartMod].value += 2
    hero.child[aDEX].field[aStartMod].value -= 4
  elseif (diff = 1) then
    ~ -2 dex
    hero.child[aDEX].field[aStartMod].value -= 2
  endif
elseif (origsize = -3) then
  if (diff = 7) then
    ~ +42 str, -10 dex, +18 con, +14 nat
    hero.child[aSTR].field[aStartMod].value += 42
    hero.child[aDEX].field[aStartMod].value -= 10
    hero.child[aCON].field[aStartMod].value += 18
    hero.child[ArmorClass].field[tACNatural].value += 14
  elseif (diff = 6) then
    ~ +34 str, -10 dex, +14 con, +9 nat
    hero.child[aSTR].field[aStartMod].value += 34
    hero.child[aDEX].field[aStartMod].value -= 10
    hero.child[aCON].field[aStartMod].value += 14
    hero.child[ArmorClass].field[tACNatural].value += 9
  elseif (diff = 5) then
    ~ +26 str, -10 dex, +10 con, +5 nat
    hero.child[aSTR].field[aStartMod].value += 26
    hero.child[aDEX].field[aStartMod].value -= 10
    hero.child[aCON].field[aStartMod].value += 10
    hero.child[ArmorClass].field[tACNatural].value += 5
  elseif (diff = 4) then
    ~ +18 str, -8 dex, +6 con, +2 nat
    hero.child[aSTR].field[aStartMod].value += 18
    hero.child[aDEX].field[aStartMod].value -= 8
    hero.child[aCON].field[aStartMod].value += 6
    hero.child[ArmorClass].field[tACNatural].value += 2
  elseif (diff = 3) then
    ~ +10 str, -6 dex, +2 con
    hero.child[aSTR].field[aStartMod].value += 10
    hero.child[aDEX].field[aStartMod].value -= 6
    hero.child[aCON].field[aStartMod].value += 2
  elseif (diff = 2) then
    ~ +6 str, -4 dex
    hero.child[aSTR].field[aStartMod].value += 6
    hero.child[aDEX].field[aStartMod].value -= 4
  elseif (diff = 1) then
    ~ +2 str, -2 dex
    hero.child[aSTR].field[aStartMod].value += 2
    hero.child[aDEX].field[aStartMod].value -= 2
  endif
elseif (origsize = -2) then
  if (diff = 6) then
    ~ +40 str, -8 dex, +18 con, +14 nat
    hero.child[aSTR].field[aStartMod].value += 40
    hero.child[aDEX].field[aStartMod].value -= 8
    hero.child[aCON].field[aStartMod].value += 18
    hero.child[ArmorClass].field[tACNatural].value += 14
  elseif (diff = 5) then
    ~ +32 str, -8 dex, +14 con, +9 nat
    hero.child[aSTR].field[aStartMod].value += 32
    hero.child[aDEX].field[aStartMod].value -= 8
    hero.child[aCON].field[aStartMod].value += 14
    hero.child[ArmorClass].field[tACNatural].value += 9
  elseif (diff = 4) then
    ~ +24 str, -8 dex, +10 con, +5 nat
    hero.child[aSTR].field[aStartMod].value += 24
    hero.child[aDEX].field[aStartMod].value -= 8
    hero.child[aCON].field[aStartMod].value += 10
    hero.child[ArmorClass].field[tACNatural].value += 5
  elseif (diff = 3) then
    ~ +16 str, -6 dex, +6 con, +2 nat
    hero.child[aSTR].field[aStartMod].value += 16
    hero.child[aDEX].field[aStartMod].value -= 6
    hero.child[aCON].field[aStartMod].value += 6
    hero.child[ArmorClass].field[tACNatural].value += 2
  elseif (diff = 2) then
    ~ +8 str, -4 dex, +2 con
    hero.child[aSTR].field[aStartMod].value += 8
    hero.child[aDEX].field[aStartMod].value -= 4
    hero.child[aCON].field[aStartMod].value += 2
  elseif (diff = 1) then
    ~ +4 str, -2 dex
    hero.child[aSTR].field[aStartMod].value += 4
    hero.child[aDEX].field[aStartMod].value -= 2
  endif
elseif (origsize = -1) then
  if (diff = 5) then
    ~ +36 str, -6 dex, +18 con, +14 nat
    hero.child[aSTR].field[aStartMod].value += 36
    hero.child[aDEX].field[aStartMod].value -= 6
    hero.child[aCON].field[aStartMod].value += 18
    hero.child[ArmorClass].field[tACNatural].value += 14
  elseif (diff = 4) then
    ~ +28 str, -6 dex, +14 con, +9 nat
    hero.child[aSTR].field[aStartMod].value += 28
    hero.child[aDEX].field[aStartMod].value -= 6
    hero.child[aCON].field[aStartMod].value += 14
    hero.child[ArmorClass].field[tACNatural].value += 9
  elseif (diff = 3) then
    ~ +20 str, -6 dex, +10 con, +5 nat
    hero.child[aSTR].field[aStartMod].value += 20
    hero.child[aDEX].field[aStartMod].value -= 6
    hero.child[aCON].field[aStartMod].value += 10
    hero.child[ArmorClass].field[tACNatural].value += 5
  elseif (diff = 2) then
    ~ +12 str, -4 dex, +6 con, +2 nat
    hero.child[aSTR].field[aStartMod].value += 12
    hero.child[aDEX].field[aStartMod].value -= 4
    hero.child[aCON].field[aStartMod].value += 6
    hero.child[ArmorClass].field[tACNatural].value += 2
  elseif (diff = 1) then
    ~ +4 str, -2 dex, +2 con
    hero.child[aSTR].field[aStartMod].value += 4
    hero.child[aDEX].field[aStartMod].value -= 2
    hero.child[aCON].field[aStartMod].value += 2
  endif
elseif (origsize = 0) then
  if (diff = 4) then
    ~ +32 str, -4 dex, +16 con, +14 nat
    hero.child[aSTR].field[aStartMod].value += 32
    hero.child[aDEX].field[aStartMod].value -= 4
    hero.child[aCON].field[aStartMod].value += 16
    hero.child[ArmorClass].field[tACNatural].value += 14
  elseif (diff = 3) then
    ~ +24 str, -4 dex, +12 con, +9 nat
    hero.child[aSTR].field[aStartMod].value += 24
    hero.child[aDEX].field[aStartMod].value -= 4
    hero.child[aCON].field[aStartMod].value += 12
    hero.child[ArmorClass].field[tACNatural].value += 9
  elseif (diff = 2) then
    ~ +16 str, -4 dex, +8 con, +5 nat
    hero.child[aSTR].field[aStartMod].value += 16
    hero.child[aDEX].field[aStartMod].value -= 4
    hero.child[aCON].field[aStartMod].value += 8
    hero.child[ArmorClass].field[tACNatural].value += 5
  elseif (diff = 1) then
    ~ +8 str, -2 dex, +4 con, +2 nat
    hero.child[aSTR].field[aStartMod].value += 8
    hero.child[aDEX].field[aStartMod].value -= 2
    hero.child[aCON].field[aStartMod].value += 4
    hero.child[ArmorClass].field[tACNatural].value += 2
  endif
elseif (origsize = 1) then
  if (diff = 3) then
    ~ +24 str, -2 dex, +12 con, +12 nat
    hero.child[aSTR].field[aStartMod].value += 24
    hero.child[aDEX].field[aStartMod].value -= 2
    hero.child[aCON].field[aStartMod].value += 12
    hero.child[ArmorClass].field[tACNatural].value += 12
  elseif (diff = 2) then
    ~ +16 str, -2 dex, +8 con, +7 nat
    hero.child[aSTR].field[aStartMod].value += 16
    hero.child[aDEX].field[aStartMod].value -= 2
    hero.child[aCON].field[aStartMod].value += 8
    hero.child[ArmorClass].field[tACNatural].value += 7
  elseif (diff = 1) then
    ~ +8 str, -2 dex, +4 con, +3 nat
    hero.child[aSTR].field[aStartMod].value += 8
    hero.child[aDEX].field[aStartMod].value -= 2
    hero.child[aCON].field[aStartMod].value += 4
    hero.child[ArmorClass].field[tACNatural].value += 3
  endif
elseif (origsize = 2) then
  if (diff = 2) then
    ~ +16 str, +8 con, +9 nat
    hero.child[aSTR].field[aStartMod].value += 16
    hero.child[aCON].field[aStartMod].value += 8
    hero.child[ArmorClass].field[tACNatural].value += 9
  elseif (diff = 1) then
    ~ +8 str, +4 con, +4 nat
    hero.child[aSTR].field[aStartMod].value += 8
    hero.child[aCON].field[aStartMod].value += 4
    hero.child[ArmorClass].field[tACNatural].value += 4
  endif
elseif (origsize = 3) then
  if (diff = 1) then
    ~ +8 str, +4 con, +5 nat
    hero.child[aSTR].field[aStartMod].value += 8
    hero.child[aCON].field[aStartMod].value += 4
    hero.child[ArmorClass].field[tACNatural].value += 5
  endif
endif
Kendall-DM is offline   #3 Reply With Quote
Kendall-DM
Spy
 
Join Date: Jan 2011
Location: Van Nuys, California
Posts: 1,220

Old April 5th, 2014, 10:19 AM
And as a last bonus, in the same Size Advancement adjustment, you can add this second script of you want to 'size down':
@First/22000
Code:
~ If we're not enabled, get out now.
doneif (field[pIsOn].value = 0)

~ If we're sizing up or not sizing yet, get out now.
doneif (field[pAdjust].value > -1)

~ Add to size - must come after race and template size set.
var origsize as number
origsize = herofield[tSize].value
herofield[tSize].value += field[pAdjust].value

~ Decrease the size of all our equipment by 1.
foreach pick in hero from MyGear where "!Helper.GearNoSize | thingid.wUnarmed"
~ & !component.BaseWep & !component.BaseArmor" (was 1/4)
  eachpick.field[gSizeMod].value += field[pAdjust].value
  eachpick.field[gWeight].value *= (-1 / (field[pAdjust].value * 2))
nexteach
~foreach pick in hero from MyGear where "!Helper.GearNoSize & (component.BaseWep | component.BaseArmor)"
~  eachpick.field[gSizeMod].value += field[pAdjust].value
~  eachpick.field[gWeight].value *= (-1 / (field[pAdjust].value * 2))
~nexteach
foreach pick in hero from BaseNatWep
  eachpick.field[wDamage].value += field[pAdjust].value
nexteach

~ Determine changes to our abilities based on size difference.
var diff as number
diff = origsize - herofield[tSize].value
if (origsize = 4) then
  if (diff = 8) then
    ~ -42 str, +12 dex, -18 con, -14 nat
    hero.child[aSTR].field[aStartMod].value -= 42
    hero.child[aDEX].field[aStartMod].value += 12
    hero.child[aCON].field[aStartMod].value -= 18
    hero.child[ArmorClass].field[tACNatural].value -= 14
  elseif (diff = 7) then
    ~ -42 str, +10 dex, -18 con, -14 nat
    hero.child[aSTR].field[aStartMod].value -= 42
    hero.child[aDEX].field[aStartMod].value += 10
    hero.child[aCON].field[aStartMod].value -= 18
    hero.child[ArmorClass].field[tACNatural].value -= 14
  elseif (diff = 6) then
    ~ -40 str, +8 dex, -18 con, -14 nat
    hero.child[aSTR].field[aStartMod].value -= 40
    hero.child[aDEX].field[aStartMod].value += 8
    hero.child[aCON].field[aStartMod].value -= 18
    hero.child[ArmorClass].field[tACNatural].value -= 14
  elseif (diff = 5) then
    ~ -36 str, +6 dex, -18 con, -14 nat
    hero.child[aSTR].field[aStartMod].value -= 36
    hero.child[aDEX].field[aStartMod].value += 6
    hero.child[aCON].field[aStartMod].value -= 18
    hero.child[ArmorClass].field[tACNatural].value -= 14
  elseif (diff = 4) then
    ~ -32 str, +4 dex, -16 con, -14 nat
    hero.child[aSTR].field[aStartMod].value -= 32
    hero.child[aDEX].field[aStartMod].value += 4
    hero.child[aCON].field[aStartMod].value -= 16
    hero.child[ArmorClass].field[tACNatural].value -= 14
  elseif (diff = 3) then
    ~ -24 str, +2 dex, -12 con, -12 nat
    hero.child[aSTR].field[aStartMod].value -= 24
    hero.child[aDEX].field[aStartMod].value += 2
    hero.child[aCON].field[aStartMod].value -= 12
    hero.child[ArmorClass].field[tACNatural].value -= 12
  elseif (diff = 2) then
    ~ -16 str, -8 con, -9 nat
    hero.child[aSTR].field[aStartMod].value -= 16
    hero.child[aCON].field[aStartMod].value -= 8
    hero.child[ArmorClass].field[tACNatural].value -= 9
  elseif (diff = 1) then
    ~ -8 str, -4 con, -5 nat
    hero.child[aSTR].field[aStartMod].value -= 8
    hero.child[aCON].field[aStartMod].value -= 4
    hero.child[ArmorClass].field[tACNatural].value -= 5
  endif
elseif (origsize = 3) then
  if (diff = 7) then
    ~ -34 str, +12 dex, -14 con, -9 nat
    hero.child[aSTR].field[aStartMod].value -= 34
    hero.child[aDEX].field[aStartMod].value += 12
    hero.child[aCON].field[aStartMod].value -= 14
    hero.child[ArmorClass].field[tACNatural].value -= 9
  elseif (diff = 6) then
    ~ -34 str, +10 dex, -14 con, -9 nat
    hero.child[aSTR].field[aStartMod].value -= 34
    hero.child[aDEX].field[aStartMod].value += 10
    hero.child[aCON].field[aStartMod].value -= 14
    hero.child[ArmorClass].field[tACNatural].value -= 9
  elseif (diff = 5) then
    ~ -32 str, +8 dex, -14 con, -9 nat
    hero.child[aSTR].field[aStartMod].value -= 32
    hero.child[aDEX].field[aStartMod].value += 8
    hero.child[aCON].field[aStartMod].value -= 14
    hero.child[ArmorClass].field[tACNatural].value -= 9
  elseif (diff = 4) then
    ~ -28 str, +6 dex, -14 con, -9 nat
    hero.child[aSTR].field[aStartMod].value -= 28
    hero.child[aDEX].field[aStartMod].value += 6
    hero.child[aCON].field[aStartMod].value -= 14
    hero.child[ArmorClass].field[tACNatural].value -= 9
  elseif (diff = 3) then
    ~ -24 str, +4 dex, -12 con, -9 nat
    hero.child[aSTR].field[aStartMod].value -= 24
    hero.child[aDEX].field[aStartMod].value += 4
    hero.child[aCON].field[aStartMod].value -= 12
    hero.child[ArmorClass].field[tACNatural].value -= 9
  elseif (diff = 2) then
    ~ -16 str, +2 dex, -8 con, -7 nat
    hero.child[aSTR].field[aStartMod].value -= 16
    hero.child[aDEX].field[aStartMod].value += 2
    hero.child[aCON].field[aStartMod].value -= 8
    hero.child[ArmorClass].field[tACNatural].value -= 7
  elseif (diff = 1) then
    ~ -2 str, -4 con, -4 nat
    hero.child[aSTR].field[aStartMod].value -= 2
    hero.child[aCON].field[aStartMod].value -= 4
    hero.child[ArmorClass].field[tACNatural].value -= 4
  endif
elseif (origsize = 2) then
  if (diff = 6) then
    ~ -26 str, +12 dex, -10 con, -5 nat
    hero.child[aSTR].field[aStartMod].value -= 26
    hero.child[aDEX].field[aStartMod].value += 12
    hero.child[aCON].field[aStartMod].value -= 10
    hero.child[ArmorClass].field[tACNatural].value -= 5
  elseif (diff = 5) then
    ~ -26 str, +10 dex, -10 con, -5 nat
    hero.child[aSTR].field[aStartMod].value -= 26
    hero.child[aDEX].field[aStartMod].value += 10
    hero.child[aCON].field[aStartMod].value -= 10
    hero.child[ArmorClass].field[tACNatural].value -= 5
  elseif (diff = 4) then
    ~ -24 str, +8 dex, -10 con, -5 nat
    hero.child[aSTR].field[aStartMod].value -= 24
    hero.child[aDEX].field[aStartMod].value += 8
    hero.child[aCON].field[aStartMod].value -= 10
    hero.child[ArmorClass].field[tACNatural].value -= 5
  elseif (diff = 3) then
    ~ -20 str, +6 dex, -10 con, -5 nat
    hero.child[aSTR].field[aStartMod].value -= 20
    hero.child[aDEX].field[aStartMod].value += 6
    hero.child[aCON].field[aStartMod].value -= 10
    hero.child[ArmorClass].field[tACNatural].value -= 5
  elseif (diff = 2) then
    ~ -16 str, +4 dex, -8 con, -5 nat
    hero.child[aSTR].field[aStartMod].value -= 16
    hero.child[aDEX].field[aStartMod].value += 4
    hero.child[aCON].field[aStartMod].value -= 8
    hero.child[ArmorClass].field[tACNatural].value -= 5
  elseif (diff = 1) then
    ~ -8 str, +2 dex, -4 con, -3 nat
    hero.child[aSTR].field[aStartMod].value -= 8
    hero.child[aDEX].field[aStartMod].value += 2
    hero.child[aCON].field[aStartMod].value -= 4
    hero.child[ArmorClass].field[tACNatural].value -= 3
  endif
elseif (origsize = 1) then
  if (diff = 5) then
    ~ -18 str, +10 dex, -6 con, -2 nat
    hero.child[aSTR].field[aStartMod].value -= 18
    hero.child[aDEX].field[aStartMod].value += 10
    hero.child[aCON].field[aStartMod].value -= 6
    hero.child[ArmorClass].field[tACNatural].value -= 2
  elseif (diff = 4) then
    ~ -18 str, +8 dex, -6 con, -2 nat
    hero.child[aSTR].field[aStartMod].value -= 18
    hero.child[aDEX].field[aStartMod].value += 8
    hero.child[aCON].field[aStartMod].value -= 6
    hero.child[ArmorClass].field[tACNatural].value -= 2
  elseif (diff = 3) then
    ~ -16 str, +6 dex, -6 con, -2 nat
    hero.child[aSTR].field[aStartMod].value -= 16
    hero.child[aDEX].field[aStartMod].value += 6
    hero.child[aCON].field[aStartMod].value -= 6
    hero.child[ArmorClass].field[tACNatural].value -= 2
  elseif (diff = 2) then
    ~ -12 str, +4 dex, -6 con, -2 nat
    hero.child[aSTR].field[aStartMod].value -= 12
    hero.child[aDEX].field[aStartMod].value += 4
    hero.child[aCON].field[aStartMod].value -= 6
    hero.child[ArmorClass].field[tACNatural].value -= 2
  elseif (diff = 1) then
    ~ -8 str, +2 dex, -4 con, -2 nat
    hero.child[aSTR].field[aStartMod].value -= 8
    hero.child[aDEX].field[aStartMod].value += 2
    hero.child[aCON].field[aStartMod].value -= 4
    hero.child[ArmorClass].field[tACNatural].value -= 2
  endif
elseif (origsize = 0) then
  if (diff = 4) then
    ~ -10 str, +8 dex, -2 con
    hero.child[aSTR].field[aStartMod].value -= 10
    hero.child[aDEX].field[aStartMod].value += 8
    hero.child[aCON].field[aStartMod].value -= 2
  elseif (diff = 3) then
    ~ -10 str, +6 dex, -2 con
    hero.child[aSTR].field[aStartMod].value -= 10
    hero.child[aDEX].field[aStartMod].value += 6
    hero.child[aCON].field[aStartMod].value -= 2
  elseif (diff = 2) then
    ~ -8 str, +4 dex, -2 con
    hero.child[aSTR].field[aStartMod].value -= 8
    hero.child[aDEX].field[aStartMod].value += 4
    hero.child[aCON].field[aStartMod].value -= 2
  elseif (diff = 1) then
    ~ -4 str, +2, dex, -2 con
    hero.child[aSTR].field[aStartMod].value -= 4
    hero.child[aDEX].field[aStartMod].value += 2
    hero.child[aCON].field[aStartMod].value -= 2
  endif
elseif (origsize = -1) then
  if (diff = 3) then
    ~ -6 str, +6 dex
    hero.child[aSTR].field[aStartMod].value -= 6
    hero.child[aDEX].field[aStartMod].value += 6
  elseif (diff = 2) then
    ~ -6 str, +4 dex
    hero.child[aSTR].field[aStartMod].value -= 6
    hero.child[aDEX].field[aStartMod].value += 4
  elseif (diff = 1) then
    ~ -4 str, +2 dex
    hero.child[aSTR].field[aStartMod].value -= 4
    hero.child[aDEX].field[aStartMod].value += 2
  endif
elseif (origsize = -2) then
  if (diff = 2) then
    ~ -2 str, +4 dex
    hero.child[aSTR].field[aStartMod].value -= 2
    hero.child[aDEX].field[aStartMod].value += 4
  elseif (diff = 1) then
    ~ -2 str, +2 dex
    hero.child[aSTR].field[aStartMod].value -= 2
    hero.child[aDEX].field[aStartMod].value += 2
  endif
elseif (origsize = -3) then
  if (diff = 1) then
    ~ +2 dex
    hero.child[aDEX].field[aStartMod].value += 2
  endif
endif
Kendall-DM is offline   #4 Reply With Quote
TobyFox2002
Senior Member
 
Join Date: Nov 2013
Location: Andover, Ma
Posts: 632

Old April 5th, 2014, 10:32 AM
I used your advancement script (I could never get it to work), for the idea. I want to add a tag called User.SIZE_HD## that will show the max HD value for a given size category, but that would add a monstrous number of user tags. And it would be best if I could change this from a special to an adjustment. But I couldn't figure out how to add other choices to the adjustment chooser.

I have a special applied to races I have created. Along with specials that have User. tags applied to them one for each monster type two for elemental and animals as they have two different forms. Also, there is no advancement for humanoids or monstrous humanoids.

I use assigned tags to change the creature type. The problems I run into is that first it counts ALL HD advancements in stead of only the class Extra HD. Which could pose a problem when advancing both by class level and by racial HD. There is of course a flaw with this method, it assigns a static value that overrides class levels or multiple creature types. Therefore, if you class levels the progression the creature type overrides the class.

Another issue I have recently discovered is that if you try to advance Extra HD past 20 HD hero labs yells at you. Its very annoying.

Code:
~ Get HD of Character 
      var HD as number
~      HD = herofield[tLevelAdj].value + tagcount[Classes.ExtraHD]
      HD = #totallevelcount[]
~   Set value for attack bonus....
      var good_at as number
      var medium_at as number
      var poor_at as number

~ Good = HD [as fighter], medium = 3/4 HD [as cleric], Poor = 1/2 HD [as wizard]
      good_at = HD
      medium_at = round(HD * 0.75, 0, -1) + 1
      poor_at = round(HD / 2, 0, -1)

~   Set value for base saves....
      var good_sv as number
      var medium_sv as number
      var poor_sv as number

      good_sv = round(HD / 2, 0, -1) + 2
      medium_sv = round(HD * 0.75, 0, -1)
      poor_sv = round(HD * 0.34, 0, -1)

~ Set the target based on tags
if (tagis[User.AdvAber] <> 0) then
  field[livename].text = field[name].text & " Aberration"
      ~ Base Attack Adjustments, per HD
      hero.child[Attack].field[tAtkBase].value = medium_at
 
      ~ Base Save Adjustments, Based on Creature Type and HD
      hero.child[vFort].field[vBase].value = poor_sv
      hero.child[vRef].field[vBase].value = poor_sv
      hero.child[vWill].field[vBase].value = good_sv
elseif (tagis[User.AdvAni] <> 0) then
  field[livename].text = field[name].text & " Animal"
      ~ Base Attack Adjustments, per HD
      hero.child[Attack].field[tAtkBase].value = medium_at
 
      ~ Base Save Adjustments, Based on Creature Type and HD
      hero.child[vFort].field[vBase].value = good_sv
      hero.child[vRef].field[vBase].value = good_sv
      hero.child[vWill].field[vBase].value = poor_sv
elseif (tagis[User.AdvAniGW] <> 0) then
  field[livename].text = field[name].text & " Animal w/ Good Will"
      ~ Base Attack Adjustments, per HD
      hero.child[Attack].field[tAtkBase].value = medium_at
 
      ~ Base Save Adjustments, Based on Creature Type and HD
      hero.child[vFort].field[vBase].value = good_sv
      hero.child[vRef].field[vBase].value = good_sv
      hero.child[vWill].field[vBase].value = good_sv
elseif (tagis[User.AdvConst] <> 0) then
  field[livename].text = field[name].text & " Construct"
      ~ Base Attack Adjustments, per HD
      hero.child[Attack].field[tAtkBase].value = medium_at
 
      ~ Base Save Adjustments, Based on Creature Type and HD
      hero.child[vFort].field[vBase].value = poor_sv
      hero.child[vRef].field[vBase].value = poor_sv
      hero.child[vWill].field[vBase].value = poor_sv
elseif (tagis[User.AdvDrag] <> 0) then
  field[livename].text = field[name].text & " Dragon"
      ~ Base Attack Adjustments, per HD
      hero.child[Attack].field[tAtkBase].value = good_at
 
      ~ Base Save Adjustments, Based on Creature Type and HD
      hero.child[vFort].field[vBase].value = good_sv
      hero.child[vRef].field[vBase].value = good_sv
      hero.child[vWill].field[vBase].value = good_sv
elseif (tagis[User.AdvEleAF] <> 0) then
  field[livename].text = field[name].text & " Elemental (Air/Fire)"
      ~ Base Attack Adjustments, per HD
      hero.child[Attack].field[tAtkBase].value = medium_at
 
      ~ Base Save Adjustments, Based on Creature Type and HD
      hero.child[vFort].field[vBase].value = poor_sv
      hero.child[vRef].field[vBase].value = good_sv
      hero.child[vWill].field[vBase].value = poor_sv
elseif (tagis[User.AdvEleWE] <> 0) then
  field[livename].text = field[name].text & " Elemental (Water/Earth"
      ~ Base Attack Adjustments, per HD
      hero.child[Attack].field[tAtkBase].value = medium_at
 
      ~ Base Save Adjustments, Based on Creature Type and HD
      hero.child[vFort].field[vBase].value = good_sv
      hero.child[vRef].field[vBase].value = poor_sv
      hero.child[vWill].field[vBase].value = poor_sv
elseif (tagis[User.AdvFey] <> 0) then
  field[livename].text = field[name].text & " Fey"
      ~ Base Attack Adjustments, per HD
      hero.child[Attack].field[tAtkBase].value = poor_at
 
      ~ Base Save Adjustments, Based on Creature Type and HD
      hero.child[vFort].field[vBase].value = poor_sv
      hero.child[vRef].field[vBase].value = good_sv
      hero.child[vWill].field[vBase].value = good_sv
elseif (tagis[User.AdvGiant] <> 0) then
  field[livename].text = field[name].text & " Giant"
      ~ Base Attack Adjustments, per HD
      hero.child[Attack].field[tAtkBase].value = medium_at
 
      ~ Base Save Adjustments, Based on Creature Type and HD
      hero.child[vFort].field[vBase].value = good_sv
      hero.child[vRef].field[vBase].value = poor_sv
      hero.child[vWill].field[vBase].value = poor_sv
elseif (tagis[User.AdvMagBea] <> 0) then
  field[livename].text = field[name].text & " Magical Beast"
      ~ Base Attack Adjustments, per HD
      hero.child[Attack].field[tAtkBase].value = good_at
 
      ~ Base Save Adjustments, Based on Creature Type and HD
      hero.child[vFort].field[vBase].value = good_sv
      hero.child[vRef].field[vBase].value = good_sv
      hero.child[vWill].field[vBase].value = poor_sv
elseif (tagis[User.AdvOoze] <> 0) then
  field[livename].text = field[name].text & " Ooze"
      ~ Base Attack Adjustments, per HD
      hero.child[Attack].field[tAtkBase].value = medium_at
 
      ~ Base Save Adjustments, Based on Creature Type and HD
      hero.child[vFort].field[vBase].value = poor_sv
      hero.child[vRef].field[vBase].value = poor_sv
      hero.child[vWill].field[vBase].value = poor_sv
elseif (tagis[User.AdvOutsid] <> 0) then
  field[livename].text = field[name].text & " Outsider"
      ~ Base Attack Adjustments, per HD
      hero.child[Attack].field[tAtkBase].value = good_at
 
      ~ Base Save Adjustments, Based on Creature Type and HD
      hero.child[vFort].field[vBase].value = good_sv
      hero.child[vRef].field[vBase].value = good_sv
      hero.child[vWill].field[vBase].value = good_sv
elseif (tagis[User.AdvPlant] <> 0) then
  field[livename].text = field[name].text & " Plant"
      ~ Base Attack Adjustments, per HD
      hero.child[Attack].field[tAtkBase].value = medium_at
 
      ~ Base Save Adjustments, Based on Creature Type and HD
      hero.child[vFort].field[vBase].value = good_sv
      hero.child[vRef].field[vBase].value = poor_sv
      hero.child[vWill].field[vBase].value = poor_sv
elseif (tagis[User.AdvUndead] <> 0) then
  field[livename].text = field[name].text & " Undead"
      ~ Base Attack Adjustments, per HD
      hero.child[Attack].field[tAtkBase].value = poor_at
 
      ~ Base Save Adjustments, Based on Creature Type and HD
      hero.child[vFort].field[vBase].value = poor_sv
      hero.child[vRef].field[vBase].value = poor_sv
      hero.child[vWill].field[vBase].value = good_sv
elseif (tagis[User.AdvVermin] <> 0) then
  field[livename].text = field[name].text & " Vermin"
      ~ Base Attack Adjustments, per HD
      hero.child[Attack].field[tAtkBase].value = medium_at
 
      ~ Base Save Adjustments, Based on Creature Type and HD
      hero.child[vFort].field[vBase].value = good_sv
      hero.child[vRef].field[vBase].value = poor_sv
      hero.child[vWill].field[vBase].value = poor_sv
endif

  field[livename].text = field[livename].text
This is not perfect, but its the best I can do. With luck, perhaps a working one that can be made that functions for everyone.
TobyFox2002 is offline   #5 Reply With Quote
Kendall-DM
Spy
 
Join Date: Jan 2011
Location: Van Nuys, California
Posts: 1,220

Old April 5th, 2014, 09:51 PM
In general, the idea of both advancing HD as a monster and advancing HD as a class is counter-intuitive. However, one can consider a monster advancement a class as well, and consider it multi-classing. Put in perspective though, I think one is not conducive to the other. It would be better to add Monster class levels (which HL has the capability to do) rather than monster advancement by HD and size. I, for one, never mix the two, it's always one or the other.
Kendall-DM is offline   #6 Reply With Quote
TobyFox2002
Senior Member
 
Join Date: Nov 2013
Location: Andover, Ma
Posts: 632

Old April 5th, 2014, 10:07 PM
No I wouldn't mix them either, I'm just saying I don't things to go crazy when someone tries to do just that.

I would also agree that this is probably not the best way to handle this either. I'd like to be able to let the GM add this through adjustment. But, that is numbers you want to size up +1 extra HD +1... I personally like something a bit more.... visible. Something that will show up as increasing HD for the purposes of DC's and so on..

The big snag for this is... as seen in the attached image, for classes this isn't a big deal [for most people, I'd love to see epic level support but that's a different topic all together.] But for monsters, a high HD does not necessarily mean unbeatable for the party, take dragons or the larger of the monstrous vermin for example.
Attached Images
File Type: gif Extra HD error.gif (210.6 KB, 4 views)
TobyFox2002 is offline   #7 Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -8. The time now is 11:25 PM.


Powered by vBulletin® - Copyright ©2000 - 2024, vBulletin Solutions, Inc.
wolflair.com copyright ©1998-2016 Lone Wolf Development, Inc. View our Privacy Policy here.