• 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

Racial special as weapon issue

frumple

Well-known member
Looks like if I have a racial special that shows in the weapons tab, it does not scale with size. Additionally it does not appear as on option for feats etc. that can affect weapons/natural attacks.
 
It looks to be actually more complicated. Any attack bootstrapped by a racial special (not just defined by one) is not scaling correctly with size.
 
Yep that solves it.

Now for another issue.

I want to initally set the damage via the base creature's size (according to wDamage 700-712, i.e Table 3-1), but scale as normal. I can set the damage easily enough, but when I change size it uses my new scale not the standard one. I tried assigning tags or other flags with a doneif statement, to no avail.
 
I don't understand what you mean by "but scale as normal". Also, how did you construct a new damage track (which is what I think you are saying)? I didn't think that sort of thing was available to users.
 
I kind of did an end run as follows.

Here is the code fragment.

All natural attacks in the template I an bootstraping with the tag Custom.FromTpl

Code:
foreach pick in hero from BaseNatWep where "!Custom.InitDam & Custom.FromTpl"

var v_size as number
var v_mod as number
var v_dam as string
var v_over as number

~ set focus
perform eachpick.setfocus

~ initialize damage string
dam = "wMain."

v_size = herofield[tSize].value + 4 + mod

if (v_size <= 0) then
~ for blank damage
  v_size = 0
~ the rest follows the table in the bestiary
elseif (v_size = 1) then
  dam &= "1_1"
elseif (v_size = 2) then
  dam & = "1d2_2"
elseif (v_size = 3) then
  dam &= "1d3_3"
elseif (v_size = 4) then
  dam &= "1d4_4"
elseif (v_size = 5) then
  dam &= "1d6_5"
elseif (v_size = 6) then
  dam &= "1d8_6"
elseif (v_size = 7) then
  dam &= "2d6_104"
elseif (v_size = 8) then
  dam &= "2d8_104"
elseif (v_size = 9) then
  dam &= "4d6_106"
elseif (v_size = 10) then
  dam &= "4d8_206"
~ this is extrapolating from the improved natural attack feat
elseif (v_size = 11) then
  dam &= "6d6_107"
elseif (v_size = 12) then
  dam &= "6d8_207"
elseif (v_size = 13) then
  dam &= "8d8_208"
else
  dam &= "8d8_208"
  v_over = v_size - 13
endif

if (v_size <> 0) then
  perform focus.assignstr[dam]
endif
if (v_over <> 0) then
  focus.field[wDamage].value += v_over
~ will fill in the other wDamage type fields here as well
endif

~ tag tells us not to go through this again
perform eachpick.assign[Custom.InitDam]

perform state.clearfocus

nexteach

I am still trying to figure out the timing on it. I was planning on making this into a macro or procedure that will set attacks on templates since they often say "as if the base creature was X size larger/smaller"
 
Last edited:
As if "X sizes larger/smaller" is handled by applying Helper.DamageUp or Helper.DamageDown X number of times.
 
Code:
if (v_size <> 0) then
  perform [B]focus.[/B]assignstr[dam]
endif
if (v_over <> 0) then
  [B]focus.[/B]field[wDamage].value += v_over
~ will fill in the other wDamage type fields here as well
endif

~ tag tells us not to go through this again
perform [B]eachpick.[/B]assign[Custom.InitDam]

endif
Hey FYI Frumple. Part of your code is using "eachpick" and part of it is using "focus." but I see no set focus. Could that be the issue?
 
I actually bootstrap with the damage for a Medium character scaled as appropriate. If I was to use the above. I would use the damage for the Medium character and have the mod be the # of size categories higher or lower (thus the line v_size = herofield[tSize].value + 4 + mod).

I guess another way I could do it is to directly set

field[wDamage].value += 700
 
Oops forgot to put in the perform eachpick.setfocus at the beginning when I typed it in above. It is in the code I am experimenting with. I just fixed it.

I guess the issue is that I want to be able to set the damage of an attack in a template by size according to one table, but have it follow the same pattern of scaling on any future changes in size or application of feats.
 
Oops forgot to put in the perform eachpick.setfocus at the beginning when I typed it in above. It is in the code I am experimenting with. I just fixed it.

I guess the issue is that I want to be able to set the damage of an attack in a template by size according to one table, but have it follow the same pattern of scaling on any future changes in size or application of feats.
I feel your pain in this actually. HL sizing of natural attacks has some issues. Currently seen it recently with a player's character with a druid. Based upon how you activate things like "enlarge" "Strong Jaw" or other abilities that increase natural damage you get different results.

I have been trying to track down "why" for all of this to give a detailed bug report.

Even funnier is their is a very large thread asking for an official FAQ on natural attack size increases. As it appears to be different based on where you look it up. Oh look it has 261 FAQ requests. :) ;)

Without SKR around doubt it will even get a FAQ response now even with that many clicks.... :(
 
I know I would appreciate some clarity on the damage progressions as well. The different damage tracks we have set up and all the different wMain tags... it's a pain to adjust.
 
Woot! I got it working.

This code is on a racial special that does damage as if one size category higher.
Timing is First/1000

Code:
doneif (tagis[Custom.InitDam] <> 0)

var v_size as number
var v_mod as number
var v_dam as string
var v_over as number

v_mod = 1


~ initialize damage string
v_dam = "wMain."

v_size = 4 + v_mod

if (v_size <= 0) then
~ for blank damage
  v_size = 0
~ the rest follows the table in the bestiary
elseif (v_size = 1) then
  v_dam &= "1_1"
elseif (v_size = 2) then
  v_dam &= "1d2_2"
elseif (v_size = 3) then
  v_dam&= "1d3_3"
elseif (v_size = 4) then
  v_dam &= "1d4_4"
elseif (v_size = 5) then
  v_dam &= "1d6_5"
elseif (v_size = 6) then
  v_dam &= "1d8_6"
elseif (v_size = 7) then
  v_dam &= "2d6_104"
elseif (v_size = 8) then
  v_dam &= "2d8_104"
elseif (v_size = 9) then
  v_dam &= "4d6_106"
elseif (v_size = 10) then
  v_dam &= "4d8_206"
~ this is extrapolating from the improved natural attack feat
elseif (v_size = 11) then
  v_dam &= "6d6_107"
elseif (v_size = 12) then
  v_dam &= "6d8_207"
elseif (v_size = 13) then
  v_dam &= "8d8_208"
else
  v_dam &= "8d8_208"
  v_over = v_size - 13
endif

debug "v_size: " & v_size
debug "v_dam: " & v_dam
debug "v_over: " & v_over

if (v_size <> 0) then
  perform assignstr[v_dam]
endif
if (v_over <> 0) then
  field[wDamage].value += v_over
~ will fill in the other wDamage type fields here as well
endif

~ tag tells us not to go through this again
perform assign[Custom.InitDam]
 
Last edited:
What I have assumed is that they follow Table 3-1 in the Bestiary. The exception being the progression from the Improved Natural Attack feat.
 
Made some modifications to generalize the code. Here is the code for the procedure I came up with.

Code:
~ run at First/1000
~ user needs to set focus to weapon before calling this
~ and set v_mod and v_type before call
~ v_mod is how many sizes above or below the damage is done as
~ v_type is what kind of natural attack we are starting as

~ note the string for v_type is strictly the same as the kind of natural attack given
~ in Table 3-1 of the Bestiary

doneif (this.tagis[Custom.InitDam] <> 0)

var v_size as number
var v_mod as number
var v_type as string
var v_start as number
var v_dam as string
var v_over as number
var d4track as number

~ initialize damage string
v_dam = "wMain."

~ set us on the correct track
v_type = lowercase(v_type)

~ since medium always starts as 1d4 or 1d6 we check if we are on the 1d4 track
~ if not we go to the 1d6
~ with compare if we have one of the comparison strings the product will be 0
~ otherwise it will be some non-zero value

d4track = compare("claw",v_type) * compare("hoof",v_type) * compare ("tentacle",v_type) * compare("wing",v_type) * compare("slam",v_type) * compare("sting",v_type) * compare("talons",v_type) * compare("other",v_type)


if (d4track = 0) then
~ start with 1d4 for medium
  v_start += 4
else
~ start with 1d6 for medium
  v_start += 5
endif

v_size = v_mod + v_start

if (v_size <= 0) then
~ for blank damage
  v_size = 0
~ the rest follows the table in the bestiary
elseif (v_size = 1) then
  v_dam &= "1_1"
elseif (v_size = 2) then
  v_dam &= "1d2_2"
elseif (v_size = 3) then
  v_dam&= "1d3_3"
elseif (v_size = 4) then
  v_dam &= "1d4_4"
elseif (v_size = 5) then
  v_dam &= "1d6_5"
elseif (v_size = 6) then
  v_dam &= "1d8_6"
elseif (v_size = 7) then
  v_dam &= "2d6_104"
elseif (v_size = 8) then
  v_dam &= "2d8_104"
elseif (v_size = 9) then
  v_dam &= "4d6_106"
elseif (v_size = 10) then
  v_dam &= "4d8_206"
~ this is extrapolating from the improved natural attack feat
elseif (v_size = 11) then
  v_dam &= "6d6_107"
elseif (v_size = 12) then
  v_dam &= "6d8_207"
elseif (v_size = 13) then
  v_dam &= "8d8_208"
else
  v_dam &= "8d8_208"
  v_over = v_size - 13
endif

if (v_size <> 0) then
  perform this.assignstr[v_dam]
endif
if (v_over <> 0) then
  field[wDamage].value += v_over
  
endif

~ tag tells us not to go through this again
perform this.assign[Custom.InitDam]
 
Last edited:
Back
Top