question: @ Override protected int calcAttackValue ( ) { int av = 0 ; int range = RangeType . rangeBracket ( nRange , wtype . getATRanges ( ) , true , false ) ; AmmoType atype = ( AmmoType ) ammo . getType ( ) ; if ( atype . getMunitionType ( ) == AmmoType . M_HIGH_EXPLOSIVE ) { if ( range == WeaponType . RANGE_SHORT ) { av = wtype . getRoundShortAV ( ) ; av = av + ( av / 2 ) ; } } else if ( atype . getMunitionType ( ) == AmmoType . M_EXTENDED_RANGE ) { if ( range == WeaponType . RANGE_SHORT ) { av = wtype . getRoundShortAV ( ) ; } else if ( range == WeaponType . RANGE_MED ) { av = wtype . getRoundMedAV ( ) ; } else if ( range == WeaponType . RANGE_LONG ) { av = wtype . getRoundLongAV ( ) ; } else if ( range == WeaponType . RANGE_EXT ) { av = wtype . getRoundLongAV ( ) ; } av = av / 2 ; } else { if ( range == WeaponType . RANGE_SHORT ) { av = wtype . getRoundShortAV ( ) ; } else if ( range == WeaponType . RANGE_MED ) { av = wtype . getRoundMedAV ( ) ; } else if ( range == WeaponType . RANGE_LONG ) { av = wtype . getRoundLongAV ( ) ; } else if ( range == WeaponType . RANGE_EXT ) { av = wtype . getRoundExtAV ( ) ; } } if ( bDirect ) { av = Math . min ( av + ( toHit . getMoS ( ) / 3 ) , av * 2 ) ; } if ( bGlancing ) { av = ( int ) Math . floor ( av / 2.0 ) ; } av = ( int ) Math . floor ( getBracketingMultiplier ( ) * av ) ; return av ; }
target:  Calculate the attack value based on range