What is up with Line Infantry’s attacks that bypass armour? Is this supposed to work like this, or is it a bug? Either way, this might be an interesting exploit to create a unit with an attack that bypasses all armour.
In the stand ground mode their ranged attack damage type is blank and bypasses all armour. It looks like they’re lacking any protoactions for the stand ground stance which makes it default to whatever is in the tactics file and have an undefined damage type.
Protoy
<unit id="2334" name="deNatLineInfantry">
<dbid>2909</dbid>
<displaynameid>122111</displaynameid>
<editornameid>122112</editornameid>
<populationcount>0</populationcount>
<buildlimit>15</buildlimit>
<subciv>Habsburg</subciv>
<obstructionradiusx>0.4900</obstructionradiusx>
<obstructionradiusz>0.4900</obstructionradiusz>
<formationcategory>Ranged</formationcategory>
<maxvelocity>4.2500</maxvelocity>
<maxrunvelocity>6.2500</maxrunvelocity>
<movementtype>land</movementtype>
<turnrate>18.0000</turnrate>
<animfile>units\natives\europeans\line_infantry\line_infantry.xml</animfile>
<impacttype>Flesh</impacttype>
<physicsinfo>dude</physicsinfo>
<icon>resources\art\units\natives\europeans\line_infantry_icon.png</icon>
<portraiticon>resources\art\units\natives\europeans\line_infantry_portrait.png</portraiticon>
<rollovertextid>122116</rollovertextid>
<shortrollovertextid>25669</shortrollovertextid>
<initialhitpoints>140.0000</initialhitpoints>
<maxhitpoints>140.0000</maxhitpoints>
<los>19.0000</los>
<projectileprotounit>InvisibleProjectile</projectileprotounit>
<unitaitype>RangedCombative</unitaitype>
<trainpoints>35.0000</trainpoints>
<bounty>12.0000</bounty>
<buildbounty>12.0000</buildbounty>
<cost resourcetype="Food">60.0000</cost>
<cost resourcetype="Gold">55.0000</cost>
<allowedage>2</allowedage>
<armor type="Ranged" value="0.1000">
</armor>
<veterancybonus>
<rank id="0">
<veterancymodify modifytype="MaxHP">1.2000</veterancymodify>
<veterancymodify modifytype="Damage">1.2000</veterancymodify>
</rank>
<rank id="1">
<veterancymodify modifytype="MaxHP">1.3000</veterancymodify>
<veterancymodify modifytype="Damage">1.3000</veterancymodify>
</rank>
<rank id="2">
<veterancymodify modifytype="MaxHP">1.4500</veterancymodify>
<veterancymodify modifytype="Damage">1.4500</veterancymodify>
</rank>
</veterancybonus>
<sharedselectionunittypes>
<unittype>deNatMercLineInfantry</unittype>
</sharedselectionunittypes>
<unittype>LogicalTypeHealed</unittype>
<unittype>LogicalTypeValidSharpshoot</unittype>
<unittype>LogicalTypeNeededForVictory</unittype>
<unittype>LogicalTypeHandUnitsAutoAttack</unittype>
<unittype>LogicalTypeLandMilitary</unittype>
<unittype>LogicalTypeScout</unittype>
<unittype>LogicalTypeValidSPCUnitsDeadCondition</unittype>
<unittype>LogicalTypeGarrisonInShips</unittype>
<unittype>LogicalTypeRangedUnitsAutoAttack</unittype>
<unittype>LogicalTypeRangedUnitsAutoAttackNoVillagers</unittype>
<unittype>LogicalTypeVillagersAttack</unittype>
<unittype>LogicalTypeHandUnitsAttack</unittype>
<unittype>LogicalTypeRangedUnitsAttack</unittype>
<unittype>LogicalTypeMinimapFilterMilitary</unittype>
<unittype>Unit</unittype>
<unittype>Military</unittype>
<unittype>UnitClass</unittype>
<unittype>AbstractInfantry</unittype>
<unittype>AbstractHeavyInfantry</unittype>
<unittype>HasBountyValue</unittype>
<unittype>AbstractGunpowderTrooper</unittype>
<unittype>Ranged</unittype>
<unittype>CountsTowardMilitaryScore</unittype>
<unittype>AbstractCavalryInfantry</unittype>
<unittype>ConvertsHerds</unittype>
<unittype>AbstractRangedInfantry</unittype>
<unittype>LogicalTypeInfantryVolleyTactic</unittype>
<unittype>AbstractMusketeer</unittype>
<unittype>AbstractNativeWarrior</unittype>
<flag>CollidesWithProjectiles</flag>
<flag>ApplyHandicapTraining</flag>
<flag>CorpseDecays</flag>
<flag>ShowGarrisonButton</flag>
<flag>DontRotateObstruction</flag>
<flag>ObscuredByUnits</flag>
<flag>Tracked</flag>
<flag>ExperienceUnit</flag>
<flag>UseTacticArmorOverride</flag>
<flag>TacticArmorUseBaseIfNotSet</flag>
<command page="10" column="1">Stop</command>
<command page="10" column="0">Garrison</command>
<command page="10" column="7">Delete</command>
<command page="11" column="0">Abilities</command>
<tactics>lineinfantry.tactics</tactics>
<protoaction>
<name>BuildingAttack</name>
<damage>17.000000</damage>
<damagetype>Siege</damagetype>
<rof>3.000000</rof>
</protoaction>
<protoaction>
<name>DefendHandAttack</name>
<damage>11.000000</damage>
<damagetype>Hand</damagetype>
<rof>1.00000</rof>
<damagebonus type="AbstractCavalry">3.000000</damagebonus>
<damagebonus type="AbstractLightInfantry">2.250000</damagebonus>
</protoaction>
<protoaction>
<name>DefendRangedAttack</name>
<damage>21.0000000</damage>
<damagetype>Ranged</damagetype>
<maxrange>13.000000</maxrange>
<rof>3.000000</rof>
</protoaction>
<protoaction>
<name>MeleeHandAttack</name>
<damage>11.000000</damage>
<damagetype>Hand</damagetype>
<rof>1.00000</rof>
<damagebonus type="AbstractCavalry">3.000000</damagebonus>
<damagebonus type="AbstractLightInfantry">2.250000</damagebonus>
</protoaction>
<protoaction>
<name>StaggerHandAttack</name>
<damage>11.000000</damage>
<damagetype>Hand</damagetype>
<rof>1.00000</rof>
<damagebonus type="AbstractCavalry">3.000000</damagebonus>
<damagebonus type="AbstractLightInfantry">2.250000</damagebonus>
</protoaction>
<protoaction>
<name>StaggerRangedAttack</name>
<damage>21.0000000</damage>
<damagetype>Ranged</damagetype>
<maxrange>16.000000</maxrange>
<rof>3.000000</rof>
</protoaction>
<protoaction>
<name>VolleyHandAttack</name>
<damage>11.000000</damage>
<damagetype>Hand</damagetype>
<rof>1.00000</rof>
<damagebonus type="AbstractCavalry">3.000000</damagebonus>
<damagebonus type="AbstractLightInfantry">2.250000</damagebonus>
</protoaction>
<protoaction>
<name>VolleyRangedAttack</name>
<damage>21.0000000</damage>
<damagetype>Ranged</damagetype>
<maxrange>13.000000</maxrange>
<rof>2.700000</rof>
</protoaction>
</unit>
Tactics
<action>
<name stringid="79907">StandGroundRangedAttack</name>
<type>Attack</type>
<attackaction>1</attackaction>
<rangedlogic>1</rangedlogic>
<anim>Volley_standing_attack</anim>
<reloadanim>Volley_standing_reload</reloadanim>
<idleanim>Volley_standing_idle</idleanim>
<maxheight>0</maxheight>
<accuracy>1.0</accuracy>
<accuracyreductionfactor>1.5</accuracyreductionfactor>
<aimbonus>0</aimbonus>
<maxspread>5</maxspread>
<spreadfactor>0.25</spreadfactor>
<trackrating>12</trackrating>
<unintentionaldamagemultiplier>0.7</unintentionaldamagemultiplier>
<projectile>InvisibleProjectile</projectile>
<impacteffect>effects\impacts\gun</impacteffect>
<minrange>2</minrange>
<rate type="Unit">1.0 </rate>
<throw>1</throw>
<damage>13.000000</damage>
<maxrange>12.000000</maxrange>
<rof>2.000000</rof>
<instantballistics>1</instantballistics>
</action>
<tactic>StandGround<armoroverride type="Ranged"
value="0.2000"/>
<armoroverride type="Hand"
value="0.1000"/>
<armoroverride type="Siege"
value="0.1000"/>
<action priority="100">StandGroundRangedAttack</action>
<action priority="75">BuildingAttack</action>
<action priority="25">MeleeHandAttack</action>
<action>Build</action>
<attacktype>LogicalTypeRangedUnitsAttack</attacktype>
<autoattacktype>LogicalTypeRangedUnitsAutoAttack</autoattacktype>
<attackresponsetype>LogicalTypeRangedUnitsAttack</attackresponsetype>
<runaway>0</runaway>
<autoretarget>1</autoretarget>
<idleanim>Defend_idle</idleanim>
<boredanim>Defend_bored</boredanim>
<deathanim>Death_by_melee</deathanim>
<walkanim>Cover_walk</walkanim>
<joganim>Cover_jog</joganim>
<runanim>Cover_run</runanim>
</tactic>