Line Infantry Armour Bypassing

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>
1 Like

might be a bug considering the nizams has a similar tactics file and since it has the proto entry for it it doesnt have this behaviour

interesting exploit though might be good to use for other units.

Adding the proper proto removes it so I’m pretty sure it’s a bug. Also it sets the RoF to 2 which seems to be the default for most tactics.

am pretty sure bypassing armor is intended behavior, this is a janky way to implement it but I think it’s on purpose.

1 Like

Correct. It’s intended. Completely reasonable design too.

1 Like

The unit benefits from different stances but it is strange that a unit has a attack that can’t be resisted at all that should be changed.

I think it is on purpose so it kills units with siege armor.
Nvmd other people answered.

1 Like

I’m disappointed but not surprised. I guess it’s about as reasonable as heavy infantry Arrow Knights.

1 Like

The wiki misses that stand ground also has all the same resistances as defend mode. So it sacrifices 1 range and 0.5 DPS for the potential to ignore 75% resistance of units like cannons. Who’s idea was this monstrosity!?

Could have been ANYONE!

also ignoring all the range resists on skirms, cdbs, cav etc.

ironically its a very apt way to make the unit “stand their ground” and fire.

also the slightly faster rof means they can often get the first reload in faster.

I am using this in German FI builds

1 Like

Also less overkill.

With this stance giving them 20% ranged resistance in addition to bypassing all armour they should almost be able trade evenly with Cassadors before CIR. Basically anything high resistance is going to struggle to deal with them, which is essentially everything that’s supposed to counter these guys.

And on top of all that they also get promotions.

1 Like

eh cassadors a bit of a stretch since that is still a 4.5 speed skirm with high base atk while this is a 4.25 speed unit.

Doing the math, even ignoring resistance it takes them 9 shots to kill base cassador while base cassador without CIR only takes 5 shots to kill them even with the 20 range armour so cassdors will do fine against them.

Even with the faster fire rate they still take longer to kill the cassador then likewise they arent going to trade well without tank & snare support.

edit: like for a more standard comparison. Vet Jan compared to this would still have higher HP even taking into account the range amour (like 47% more) while doing 47% less DPS against cassadors. So the Line infantry should do about the same against cassadors as Vet Jans

Janissaries plus combat promotions plus the ability to kill artillery from range sounds kinda busted to me. If it wasn’t hidden behind an unused stance this would probably be abused a lot more.

Jans with ability to kill artillery from range is just the nizams so atleast a lot more civs can use it.

Line Infantry attack is still quite a bit higher than Nizams against artillery. I’m not going to say they’re strictly better than Nizams, but they are cheaper, earlier, have promotions, and can get juiced up by some pretty good native cards. There are definitely some situations where they’re going to massively over perform.

Doesn’t it go down to 10 range?

It’s still 12 range.

Hmm yeah should probably be nerfed down to ten.
I actually made a video abusing them now that I remember. What is this game?!?!?! AOE3DE Line Infantry play, Organ Gun play, and a Revolt to finish it???

1 Like