• 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

Shield Bash

mirtos

Well-known member
From what i understand, Shield Bash should be available if the shield is a light shield (i dont know if improved shield bash works or not, so im not even looking into that), but I dont see it as a weapon.

Any ideas?
 
Agreed. It looks like it affects all shields, actually. I think what would need to be done is to modify all shields that allow shield bash to bootstrap a shield bash weapon. This is what Pathfinder does.
 
So its a bootstrap? Is this something that can be done in the .user files, or is it something that I have to wait for a new release for?

Appreciate any help.
 
It can be done in the .user files, though its also a bug in HL. It requires a new weapon (Shield Bash) be created, then bootstrapped to all shields that allow shield bash. I could put something together for you real quick, but full implementation would need to wait until the next community set release.
 
PM me your email address, and I'll send you an update. For now, this only works with Light Steel Shields. If you are looking for a different shield, specify that in the PM.
 
I have a fully implemented Shield Bash and Improved Shield Bash. It is quite a bit of coding to unwind because I added other things into the code to handle dealing with shield spikes (a nightmare), especially with enhancement bonuses (since the magical shield spikes are just broken and give errors). I'll try to sort that out some.
 
As before, bootstrap the new (equippable) Shield Bash attack to the shields. Then add this code to shields (there's a better hierarchical way to apply this, but I'm going the easy route here).

@Final Phase (users) 5500
Code:
~ Work out if we're equipped, or, if we're the child of a magic item, 
~ if our parent is equipped.
var result as number
result = field[gIsEquip].value
if (container.ishero = 0) then
  result += container.parent.field[gIsEquip].value
endif

~ If shield bash is being used, allow for use of shield and bash.
~ Remove shield AC if equipped, unless Improved Shield Bash exists.
if (result <> 0) then
  var ac as number
  if (container.ishero = 0) then
    if (container.parent.gizmo.child[wShldBash].field[gIsEquip].value <> 0) then
      perform hero.assign[Hero.ShldOffOK]
      if (#hasfeat[fImpShBash] = 0) then
        ac = container.parent.field[mAC].value + container.parent.field[BonEnhance].value
      endif
      hero.child[ArmorClass].field[tACShield].value -= ac
    elseif (container.parent.gizmo.child[wShldBash].field[wIs2nd].value <> 0) then
      perform hero.assign[Hero.ShldOffOK]
      if (#hasfeat[fImpShBash] = 0) then
        ac = container.parent.field[mAC].value + container.parent.field[BonEnhance].value
      endif
      hero.child[ArmorClass].field[tACShield].value -= ac
    endif
  elseif (hero.child[wShldBash].field[gIsEquip].value <> 0) then
    perform hero.assign[Hero.ShldOffOK]
    if (#hasfeat[fImpShBash] = 0) then
      ac = field[mAC].value
    endif
    hero.child[ArmorClass].field[tACShield].value -= ac
  elseif (hero.child[wShldBash].field[wIs2nd].value <> 0) then
    perform hero.assign[Hero.ShldOffOK]
    if (#hasfeat[fImpShBash] = 0) then
      ac = field[mAC].value
    endif
    hero.child[ArmorClass].field[tACShield].value -= ac
  endif
endif

Let me know if that works.
 
Last edited:
i was able to bootstrap the shield bash to normal shields, but when i create a custom weapon and use the shield as the base "armor", the bootstrap doesnt work.

thoughts?
 
I assume you mean custom armor, not a custom weapon, correct?

Are you making this from the HeroLab Editor, or just making a custom item from within the custom/masterwork framework of HeroLab itself?
 
yes, you are correct i meant a custom armor, within the custom/masterwork framework of herolab itself.

Also some other things that i was wondering about (assuming you can get the magical shield part to work)

1. Any idea how to get "bashing to work" (which increases the damage two sizes)
2. Any idea how to allow someone to custom the shield to be a weapon? (since you're supposed to be allowed to enchant the shield as a weapon.... im starting to wonder if the real thing im interested in is getting shield spikes to work.. as that seems closer, but im not sure...

thoughts?
 
Last edited:
I've completed that whole process, from shield spikes to magical enhancement to bashing with a shield. But before I get into the task you have ahead of you, I need to clarify a few things. I'm assuming the following steps are correct:

1. You created new normal weapons in the Editor called Shield Bash.
2. You copied each of your shields in the Editor with Replaces Thing Id set to the old Id (the one you have copied from).
3. You've bootstrapped each shield with the Shield Bash.

If you have done this, you should be seeing Shield Bash on your weapons tab when you have a shield equipped to the character. Assuming this is what you have done thus far.

I've left out some steps here purposely. When I put the code above for shield bashing (and using Improved Shield Bash), it was incomplete. That is on purpose, because it was meant as a starting point since what I have implemented is complex and is not easily explained. However, I will help you just to get your Shield Bash working right.

So, in the Shield Bash you have created in the Editor, set your Damage Dice to 1d3, Proficiency Required to Martial, Class to Light, Category to Melee Weapon, Critical Hit Target to 20, Critical Hit Multiplier to 2, Damage Type to Bludgeoning, check the Weapon Finesse Applies, and check Don't Allow Selection. Then add the following code at Pre-Levels/10000.

Code:
~ If we are a heavy shield, we do 1d4 damage and one handed.
if (container.tagis[ShldClass.Heavy] <> 0) then
  perform delete[wMain.?]
  perform delete[wClass.?]
  perform delete[Helper.Finesse]
  perform assign[wMain.1d4_4]
  perform assign[wClass.OneHanded]
endif

This should now take care of light shields vs. heavy shields damage appropriately, which is what I think you mean by getting "bashing to work".

You can use a shield as a weapon to shield bash, but a shield is not a weapon by itself per se. Therefore, a shield bash is a shield bash, regardless of the enhancement on the shield itself. you can't use the shield enhancement bonus as a weapon enhancement bonus. If the shield is to be 'weaponized' itself, you have to add shield spikes, and enchant them separately, which is whole other can of worms.

Let's just get the shield bash working, and if you really want to get shield spikes working I'll help with that too. Shield spikes are broke currently in the d20 files, they don't work when enchanted or set to masterwork (they just error). I've made a workaround for that, but it is quite involved. So shield bash first.
 
For your 1,2,3 questions: yes.

I actually did the damage as a bootstrap tag (that was the example that I was provided) I can change it to not be done in the bootstrap tag, but be part of the eval script you are mentioning.

What I was referring to was being able to create a masterwork/custom magic item (not through the editor, through the normal hero lab), and make it also have the shield bash available. Its only available in "Other Armor" and not "Custom, Magic, and Masterwork".

When I say "get Bashing" to work, I was referring to the special ability, bashing (a +2 modifier) which steps up the bashing damage by two sizes (light become 1d6, and heavy 1d8)

But the real issue is that shield bash only works for the non-custom/masterwork ones.

As an aside, for what its worth, by d20 rules, you can weaponize a shield without adding spikes. I just dont know if hero lab allows for it.
 
Last edited:
Even with the bootstrap tag, you can do the same thing, delete the old tag, add the new one. But I digress.

When I create a "Custom, Magic, and Masterwork" shield, I still have the Shield Bash listed in my weapons tab once I add it to the character. So I'm not sure what you are doing differently than what I am doing. I'm essentially doing what I laid out above.

Bashing, as in the magical enhancement, that would have been good to mention. Got it now. You should be able to set that Shield Bash's damage up one. Here is some simple code as an example.
Code:
container.parent.childexists[wShldBash].field[wDamage].value += 1
This will increase the shield bash up another die. So Bashing would have to have a new version made to replace the old one with something like this scripted. As for how to get it to apply to the Shield Bash, there is some parent child relationship that I don't know right off the top of my head, so I'm not sure I have that 100% right, but it gets you going in the right direction.

And you're right, you can weaponize a shield outside of the spikes, by enchanting the shield as a weapon (in addition to enchanting it separately as a shield). I don't allow it in my game, which is why I was confused. My bad.

Anyhow, the probable reason you are not getting your Shield Bash to work with custom items is that each item is a container, and the only way to access things bootstrapped to a container is to refer to the container's parent or child or gizmo. Yeah, it's about as clear as mud, but that is usually the culprit when things appear on regular items but not on custom items. Unfortunately, I really don't know how you are implementing everything to give you the appropriate steps to rectify the problem.
 
Is there something you can add to the community data files, Kendall? I had started something, but its only about half finished so far. I'd like to be able to have it available for the next release.
 
I could email you, or even PM my whole file if you'd like? id like to learn what im doing wrong so i can do other bootstraps....
 
Here is my shield bash and heavy shield, respectively.

Code:
  <thing id="wShldBash" name="Shield Bash" compset="Weapon">
    <tag group="wCritMin" tag="20"/>
    <tag group="wCritMult" tag="2"/>
    <tag group="wCategory" tag="Melee"/>
    <tag group="Helper" tag="Helper"/>
    <tag group="wType" tag="B"/>
    <tag group="wMain" tag="1d3_3"/>
    <tag group="wProfReq" tag="Martial"/>
    <eval phase="PreLevel" priority="10000"><![CDATA[~ If we are a heavy shield, we do 1d4 damage and one handed.
if (container.tagis[ShldClass.Heavy] <> 0) then
  perform delete[wMain.?]
  perform delete[wClass.?]
  perform delete[Helper.Finesse]
  perform assign[wMain.1d4_4]
  perform assign[wClass.OneHanded]
endif]]></eval>
    <exprreq message="Light Shield Proficiency required"><![CDATA[#hasfeat[fArmLgShld] + hero.tagis[Hero.ProfShield] <> 0]]></exprreq>
    </thing>

Code:
  <thing id="mShlHvSt2" name="Shield, Heavy Steel" description="You can&apos;t carry anything in your hand while using a Heavy Shield. You can Shield Bash with a heavy shield." compset="Armor" replaces="mShlHvStl">
    <fieldval field="gWeight" value="15"/>
    <fieldval field="gSizeCost" value="20"/>
    <tag group="mAC" tag="2" name="2" abbrev="2"/>
    <tag group="mArcFail" tag="15" name="15" abbrev="15"/>
    <tag group="mArmorChk" tag="2" name="2" abbrev="2"/>
    <tag group="mClass" tag="Shield" name="Shield" abbrev="Shield"/>
    <tag group="mMaxDex" tag="1000" name="1000" abbrev="1000"/>
    <tag group="EquipType" tag="Metal" name="Metal" abbrev="Metal"/>
    <tag group="ShldClass" tag="Heavy" name="Heavy Shield" abbrev="Heavy"/>
    <bootstrap thing="wShldBash">
      <autotag group="Helper" tag="Proficient"/>
      <autotag group="wClass" tag="OneHanded"/>
      </bootstrap>
    <eval phase="First"><![CDATA[~ Work out if we're equipped, or, if we're the child of a magic item, 
~ if our parent is equipped.
var result as number
result = field[gIsEquip].value
if (container.ishero = 0) then
  result += container.parent.field[gIsEquip].value
endif

~ If shield bash is being used, allow for use of shield and bash.
~ Remove shield AC if equipped, unless Improved Shield Bash exists.
if (result <> 0) then
  var ac as number
  if (container.ishero = 0) then
    if (container.parent.gizmo.child[wShldBash].field[gIsEquip].value <> 0) then
      perform hero.assign[Hero.ShldOffOK]
      if (#hasfeat[fImpShBash] = 0) then
        ac = container.parent.field[mAC].value + container.parent.field[BonEnhance].value
      endif
      hero.child[ArmorClass].field[tACShield].value -= ac
    elseif (container.parent.gizmo.child[wShldBash].field[wIs2nd].value <> 0) then
      perform hero.assign[Hero.ShldOffOK]
      if (#hasfeat[fImpShBash] = 0) then
        ac = container.parent.field[mAC].value + container.parent.field[BonEnhance].value
      endif
      hero.child[ArmorClass].field[tACShield].value -= ac
    endif
  elseif (hero.child[wShldBash].field[gIsEquip].value <> 0) then
    perform hero.assign[Hero.ShldOffOK]
    if (#hasfeat[fImpShBash] = 0) then
      ac = field[mAC].value
    endif
    hero.child[ArmorClass].field[tACShield].value -= ac
  elseif (hero.child[wShldBash].field[wIs2nd].value <> 0) then
    perform hero.assign[Hero.ShldOffOK]
    if (#hasfeat[fImpShBash] = 0) then
      ac = field[mAC].value
    endif
    hero.child[ArmorClass].field[tACShield].value -= ac
  endif
endif]]></eval>
    </thing>
 
Is there something you can add to the community data files, Kendall? I had started something, but its only about half finished so far. I'd like to be able to have it available for the next release.

Sendric, my stuff probably wouldn't gel well with the Community Files, since it is not strictly d20 (lots of house ruled changes), and there is a ton of interaction between all my file elements that may break. I'll see what I can do though, but I don't have a ton of time at the moment to devote to anything more than casual usage. But I'll try and see.
 
Back
Top