Senior Member
Join Date: Nov 2013
Location: Andover, Ma
Posts: 632
|
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. |
#1 |
Spy
Join Date: Jan 2011
Location: Van Nuys, California
Posts: 1,220
|
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 |
#2 |
Spy
Join Date: Jan 2011
Location: Van Nuys, California
Posts: 1,220
|
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 |
#3 |
Spy
Join Date: Jan 2011
Location: Van Nuys, California
Posts: 1,220
|
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 |
#4 |
Senior Member
Join Date: Nov 2013
Location: Andover, Ma
Posts: 632
|
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 |
#5 |
Spy
Join Date: Jan 2011
Location: Van Nuys, California
Posts: 1,220
|
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.
|
#6 |
Senior Member
Join Date: Nov 2013
Location: Andover, Ma
Posts: 632
|
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. |
#7 |
|
|