if (weapon.getAmmoType() == AmmoType.T_C3_REMOTE_SENSOR) { return en.hasETypeFlag(Entity.ETYPE_SMALL_CRAFT) && !en.hasETypeFlag(Entity.ETYPE_DROPSHIP); if (weapon.hasFlag(WeaponType.F_ARTILLERY) && !weapon.hasFlag(WeaponType.F_BA_WEAPON)) { return (weapon.getAmmoType() == AmmoType.T_ARROW_IV) || en.hasETypeFlag(Entity.ETYPE_SMALL_CRAFT) || en.hasETypeFlag(Entity.ETYPE_JUMPSHIP); if (weapon.isSubCapital() || (weapon.isCapital() && (weapon.hasFlag(WeaponType.F_MISSILE))) || (weapon.getAtClass() == WeaponType.CLASS_SCREEN)) { return en.hasETypeFlag(Entity.ETYPE_DROPSHIP) || en.hasETypeFlag(Entity.ETYPE_JUMPSHIP); if (weapon.isCapital()) { return en.hasETypeFlag(Entity.ETYPE_JUMPSHIP); if (!weapon.hasFlag(WeaponType.F_AERO_WEAPON)) { return false; && (weapon.getRackSize() != 5) && (weapon.getRackSize() != 10) && (weapon.getRackSize() != 15) && (weapon.getRackSize() != 20)) { return false; && (weapon.getRackSize() != 2) && (weapon.getRackSize() != 4) && (weapon.getRackSize() != 6)) {
private void setupMediumLaser() { Mockito.when(mockWeaponType.getHeat()).thenReturn(3); Mockito.when(mockWeaponType.getDamage()).thenReturn(5); Mockito.when(mockWeaponType.getShortRange()).thenReturn(3); Mockito.when(mockWeaponType.getMediumRange()).thenReturn(6); Mockito.when(mockWeaponType.getLongRange()).thenReturn(9); Mockito.when(mockWeapon.getDesc()).thenReturn("Medium Laser"); }
range_brackets[RANGE_SHORT] = weapon.getShortRange(); range_brackets[RANGE_MEDIUM] = weapon.getMediumRange(); range_brackets[RANGE_LONG] = weapon.getLongRange(); range_brackets[3] = weapon.getExtremeRange(); range_brackets[4] = weapon.getMinimumRange(); if (weapon.getAmmoType() == AmmoType.T_ATM) { if (ammo_ranges[2]) { if (weapon.getAmmoType() == AmmoType.T_MML) { if (ammo_ranges[2]) { int weapon_mod = weapon.getToHitModifier(); if ((weapon.getAmmoType() == AmmoType.T_AC_LBX) || (weapon.getAmmoType() == AmmoType.T_AC_LBX_THB)) { weapon_mod = -1;
/** * Damage calculation for BattleForce and AlphaStrike * @param range - the range in hexes * @return - damage in BattleForce scale */ public double getBattleForceDamage(int range) { double damage = 0; if (range <= getLongRange()) { //Variable damage weapons that cannot reach into the BF long range band use LR damage for the MR band if (getDamage() == DAMAGE_VARIABLE && range == BattleForceElement.MEDIUM_RANGE && getLongRange() < BattleForceElement.LONG_RANGE) { damage = getDamage(BattleForceElement.LONG_RANGE); } else { damage = getDamage(range); } if (range == BattleForceElement.SHORT_RANGE && getMinimumRange() > 0) { damage = adjustBattleForceDamageForMinRange(damage); } if (getToHitModifier() != 0) { damage -= damage * getToHitModifier() * 0.05; } } return damage / 10.0; }
/** * Method computes how much heat a dial down weapon generates * * @param weapon * @param wtype * @param range * @return Heat, minimum of 1; */ public static int dialDownHeat(Mounted weapon, WeaponType wtype, int range) { int toReturn = wtype.getHeat(); if (!wtype.hasModes()) { return toReturn; } int damage = wtype.getDamage(range); int newDamage = Compute.dialDownDamage(weapon, wtype, range); toReturn = Math.max(1, wtype.getHeat() - Math.max(0, damage - newDamage)); return toReturn; }
protected boolean hasViableWeapons() { int totalDmg = 0; boolean hasRangeSixPlus = false; List<Mounted> weaponList = getTotalWeaponList(); for (Mounted weapon : weaponList) { if (weapon.isCrippled()) { continue; } WeaponType type = (WeaponType) weapon.getType(); if (type.getDamage() == WeaponType.DAMAGE_VARIABLE) { } else if (type.getDamage() == WeaponType.DAMAGE_ARTILLERY) { return true; } else if (type.getDamage() == WeaponType.DAMAGE_BY_CLUSTERTABLE) { totalDmg += type.getRackSize(); } else if (type.getDamage() == WeaponType.DAMAGE_SPECIAL) { if (type instanceof ISBAPopUpMineLauncher) { totalDmg += 4; } } else { totalDmg += type.getDamage(); } if (type.getLongRange() >= 6) { hasRangeSixPlus = true; } } return (totalDmg >= 5) || hasRangeSixPlus; }
if (wtype.hasFlag(WeaponType.F_AMS) && (wtype.getAmmoType() == AmmoType.T_AMS)) { amsBV += etype.getBV(this); for (Mounted mounted : getWeaponList()) { WeaponType wtype = (WeaponType) mounted.getType(); double dBV = wtype.getBV(this); String name = wtype.getName(); if (wtype.hasFlag(WeaponType.F_AMS)) { continue; if (wtype.hasFlag(WeaponType.F_DIRECT_FIRE) && hasTargComp) { dBV *= 1.25; name = name.concat(" with Targeting Computer"); if (!(wtype.hasFlag(WeaponType.F_ENERGY) || wtype.hasFlag(WeaponType.F_ONESHOT) || wtype.hasFlag(WeaponType.F_INFANTRY) || (wtype .getAmmoType() == AmmoType.T_NA))) { String key = wtype.getAmmoType() + ":" + wtype.getRackSize(); if (!weaponsForExcessiveAmmo.containsKey(key)) { weaponsForExcessiveAmmo.put(key, wtype.getBV(this)); } else { weaponsForExcessiveAmmo.put(key, wtype.getBV(this) + weaponsForExcessiveAmmo.get(key));
@Override protected int calcDamagePerHit() { double toReturn = wtype.getDamage(nRange); && wtype.hasModes()) || wtype.hasFlag(WeaponType.F_BOMBAST_LASER)) { toReturn = Compute.dialDownDamage(weapon, wtype, nRange); if (nRange <= 1) { toReturn++; } else if (nRange <= wtype.getMediumRange()) { } else if (nRange <= wtype.getLongRange()) { toReturn--; && (nRange > wtype.getRanges(weapon)[RangeType.RANGE_LONG])) { toReturn -= 1; && (nRange > wtype.getRanges(weapon)[RangeType.RANGE_EXTREME])) { toReturn = (int) Math.floor(toReturn * .75); toReturn = Compute.directBlowInfantryDamage( toReturn, bDirect ? toHit.getMoS() / 3 : 0, wtype.getInfantryDamageClass(), ((Infantry) target).isMechanized(), toHit.getThruBldg() != null, ae.getId(), calcDmgPerHitReport);
if (wtype instanceof InfantryWeapon && !wtype.hasFlag(WeaponType.F_TAG)) { wDamageTrooperL.setVisible(true); wDamageTrooperR.setVisible(true); if (wtype.getDamage() == WeaponType.DAMAGE_BY_CLUSTERTABLE) { if (wtype instanceof HAGWeapon) { wDamR.setText(Messages.getString("MechDisplay.Variable")); //$NON-NLS-1$ } else if (wtype.getDamage() == WeaponType.DAMAGE_VARIABLE) { wDamR.setText(Messages.getString("MechDisplay.Variable")); //$NON-NLS-1$ } else if (wtype.getDamage() == WeaponType.DAMAGE_SPECIAL) { wDamR.setText(Messages.getString("MechDisplay.Special")); //$NON-NLS-1$ } else if (wtype.getDamage() == WeaponType.DAMAGE_ARTILLERY) { StringBuffer damage = new StringBuffer(); int artyDamage = wtype.getRackSize(); damage.append(Integer.toString(artyDamage)); artyDamage -= 10; } else if (wtype.hasFlag(WeaponType.F_ENERGY) && wtype.hasModes() && (unitDisplay.getClientGUI() != null) && unitDisplay.getClientGUI().getClient().getGame().getOptions().booleanOption( OptionsConstants.ADVCOMBAT_TACOPS_ENERGY_WEAPONS)) { wDamR.setText(Integer.toString(wtype.getDamage())); int shortR = wtype.getShortRange(); int mediumR = wtype.getMediumRange(); int longR = wtype.getLongRange(); int extremeR = wtype.getExtremeRange();
ranges = weapon.isCapital()? CAPITAL_RANGES : STANDARD_RANGES; if (weapon.getAmmoType() == AmmoType.T_INARC) { specialAbilities.merge(BattleForceSPA.INARC, 1, Integer::sum); continue; } else if (weapon.getAmmoType() == AmmoType.T_NARC) { if (weapon.hasFlag(WeaponType.F_BA_WEAPON)) { specialAbilities.merge(BattleForceSPA.CNARC, 1, Integer::sum); } else { if (weapon.getAtClass() == WeaponType.CLASS_SCREEN) { specialAbilities.merge(BattleForceSPA.SCR, 1, Integer::sum); continue; if (weapon.hasFlag(WeaponType.F_AMS)) { specialAbilities.put(BattleForceSPA.AMS, null); continue; if (weapon.hasFlag(WeaponType.F_TAG)) { if (weapon.hasFlag(WeaponType.F_C3MBS)) { specialAbilities.merge(BattleForceSPA.C3BSM, 1, Integer::sum); specialAbilities.merge(BattleForceSPA.MHQ, 12, Integer::sum); //count half-tons } else if (weapon.hasFlag(WeaponType.F_C3M)) { specialAbilities.merge(BattleForceSPA.C3M, 1, Integer::sum); specialAbilities.merge(BattleForceSPA.MHQ, 10, Integer::sum); if (weapon.getShortRange() < 5) { specialAbilities.put(BattleForceSPA.LTAG, null); } else {
if (bayMount == null) { try { bayMount = a.addEquipment(weap.getBayType(), nLoc, rearMount); newBay = false; } catch (LocationFullException ex) { double damage = weap.getShortAV(); if (weap.isCapital()) { damage *= 10; if (!newBay && (((bayDamage + damage) <= 700) || weap.hasFlag(WeaponType.F_MASS_DRIVER)) && (bayMount.isRearMounted() == rearMount) && (weap.getAtClass() == ((WeaponType) bayMount.getType()).getAtClass()) && !(((WeaponType) bayMount.getType()).isSubCapital() && !weap.isSubCapital())) { } else { try { bayMount = a.addEquipment(weap.getBayType(), nLoc, rearMount); } catch (LocationFullException ex) { throw new EntityLoadingException(ex.getMessage());
return qty[row] + ""; case COL_NAME: return wp.getName(); case COL_IS_CLAN: return TechConstants.getTechName(wp.getTechLevel(gameYear)); case COL_DMG: return wp.getDamage(); case COL_HEAT: return wp.getHeat(); case COL_SHORT: return wp.getShortRange(); case COL_MED: return wp.getMediumRange(); case COL_LONG: return wp.getLongRange(); case COL_LEVEL: return TechConstants.getSimpleLevelName(TechConstants .convertFromNormalToSimple(wp .getTechLevel(gameYear))); case COL_INTERNAL_NAME: return wp.getInternalName(); default: return "?";
Mockito.when(mockWeaponType.getAmmoType()).thenReturn(AmmoType.T_AC); Mockito.when(mockWeaponType.getRanges(Mockito.eq(mockWeapon))).thenReturn(new int[]{3, 6, 12, 18, 24}); Mockito.when(mockWeaponType.getMinimumRange()).thenReturn(3); Mockito.when(mockWeaponType.hasFlag(Mockito.eq(WeaponType.F_DIRECT_FIRE))).thenReturn(true); mockTarget, mockTargetState, mockWeapon, mockGame)); Mockito.when(mockWeaponType.hasFlag(Mockito.eq(WeaponType.F_DIRECT_FIRE))).thenReturn(false); expected = new ToHitData(mockShooter.getCrew().getGunnery(), FireControl.TH_GUNNERY); expected.addModifier(FireControl.TH_MEDIUM_RANGE); mockTarget, mockTargetState, mockWeapon, mockGame)); Mockito.when(mockWeaponType.hasFlag(Mockito.eq(WeaponType.F_DIRECT_FIRE))).thenReturn(false); Mockito.when(mockShooter.hasTargComp()).thenReturn(false); Mockito.when(mockWeaponType.getToHitModifier()).thenReturn(-2); expected = new ToHitData(mockShooter.getCrew().getGunnery(), FireControl.TH_GUNNERY); expected.addModifier(FireControl.TH_MEDIUM_RANGE); mockTarget, mockTargetState, mockWeapon, mockGame)); Mockito.when(mockWeaponType.getToHitModifier()).thenReturn(0); Mockito.when(mockSwarmStop.getRanges(Mockito.eq(mockWeapon))).thenReturn(new int[]{0, 0, 0, 0, 0}); Mockito.when(mockTargetState.getPosition()).thenReturn(new Coords(0, 0)); Mockito.when(mockWeapon.getType()).thenReturn(mockSwarmStop);
public int[] getRanges(Mounted weapon) { int minRange = getMinimumRange(); int sRange = getShortRange(); int mRange = getMediumRange(); int lRange = getLongRange(); int eRange = getExtremeRange(); boolean hasLoadedAmmo = (weapon.getLinked() != null); if ((getAmmoType() == AmmoType.T_ATM) && hasLoadedAmmo) { AmmoType atype = (AmmoType) weapon.getLinked().getType(); if ((atype.getAmmoType() == AmmoType.T_ATM) && (atype.getMunitionType() == AmmoType.M_EXTENDED_RANGE)) { if ((getAmmoType() == AmmoType.T_IATM) && hasLoadedAmmo) { AmmoType atype = (AmmoType) weapon.getLinked().getType(); if ((atype.getAmmoType() == AmmoType.T_IATM) && (atype.getMunitionType() == AmmoType.M_EXTENDED_RANGE)) { if ((getAmmoType() == AmmoType.T_MML) && hasLoadedAmmo) { AmmoType atype = (AmmoType) weapon.getLinked().getType(); if (atype.hasFlag(AmmoType.F_MML_LRM) || (getAmmoType() == AmmoType.T_LRM_TORPEDO)) { minRange = 6; sRange = 7; if (hasFlag(WeaponType.F_PDBAY)) { if (hasModes() && weapon.curMode().equals("Point Defense")) { sRange = 1; } else {
@Override public int getBattleForceTotalHeatGeneration(boolean allowRear) { int totalHeat = 0; // finish the max heat calculations if (this.getJumpMP() > 0) { totalHeat += getJumpHeat(getJumpMP()); } else if (!isIndustrial() && hasEngine()) { totalHeat += getEngine().getRunHeat(this); } for (Mounted mount : getWeaponList()) { WeaponType weapon = (WeaponType) mount.getType(); if (weapon.hasFlag(WeaponType.F_ONESHOT) || (allowRear && !mount.isRearMounted()) || (!allowRear && mount.isRearMounted())) { continue; } if (weapon.getAmmoType() == AmmoType.T_AC_ROTARY) { totalHeat += weapon.getHeat() * 6; } else if (weapon.getAmmoType() == AmmoType.T_AC_ULTRA || weapon.getAmmoType() == AmmoType.T_AC_ULTRA_THB) { totalHeat += weapon.getHeat() * 2; } else { totalHeat += weapon.getHeat(); } } if (hasWorkingMisc(MiscType.F_STEALTH, -1)) { totalHeat += 10; } return totalHeat; }
/** * need to check bay location before loading ammo */ @Override public boolean loadWeapon(Mounted mounted, Mounted mountedAmmo) { boolean success = false; WeaponType wtype = (WeaponType) mounted.getType(); AmmoType atype = (AmmoType) mountedAmmo.getType(); if (mounted.getLocation() != mountedAmmo.getLocation()) { return success; } if (mountedAmmo.isAmmoUsable() && !wtype.hasFlag(WeaponType.F_ONESHOT) && (atype.getAmmoType() == wtype.getAmmoType()) && (atype.getRackSize() == wtype.getRackSize())) { mounted.setLinked(mountedAmmo); success = true; } return success; }
Mounted weapon = ae.getEquipment(weaponId); WeaponType wtype = (WeaponType) weapon.getType(); int[] weaponRanges = wtype.getRanges(weapon); boolean isAttackerInfantry = (ae instanceof Infantry); boolean isAttackerBA = (ae instanceof BattleArmor); boolean isWeaponInfantry = (wtype instanceof InfantryWeapon) && !wtype.hasFlag(WeaponType.F_TAG); boolean isSwarmOrLegAttack = (wtype instanceof InfantryAttack); boolean isIndirect = ((wtype.getAmmoType() == AmmoType.T_LRM) || (wtype.getAmmoType() == AmmoType.T_LRM_IMP) || (wtype.getAmmoType() == AmmoType.T_MML) || (wtype.getAmmoType() == AmmoType.T_EXLRM) || (wtype.getAmmoType() == AmmoType.T_TBOLT_5) || (wtype.getAmmoType() == AmmoType.T_TBOLT_10) || (wtype.getAmmoType() == AmmoType.T_TBOLT_15) || (wtype.getAmmoType() == AmmoType.T_TBOLT_20) || (wtype.getAmmoType() == AmmoType.T_IATM) || (wtype.getAmmoType() == AmmoType.T_LRM_TORPEDO) || (wtype.getAmmoType() == AmmoType.T_MEK_MORTAR) || (wtype instanceof ArtilleryCannonWeapon)) && weapon.curMode().equals("Indirect"); boolean nc3EnergyGuided = ((wtype.hasFlag(WeaponType.F_ENERGY)) || (wtype.getAtClass() == WeaponType.CLASS_CAPITAL_MISSILE) || (wtype.getAtClass() == WeaponType.CLASS_AR10) || (wtype.getAtClass() == WeaponType.CLASS_ATM) || (wtype.getAtClass() == WeaponType.CLASS_LRM) || (wtype.getAtClass() == WeaponType.CLASS_SRM) || (wtype.getAtClass() == WeaponType.CLASS_MML) || (wtype.getAtClass() == WeaponType.CLASS_THUNDERBOLT));
if(wt.isCapital() || wt.isSubCapital() || wt.hasFlag(WeaponType.F_INFANTRY) || wt.hasFlag(WeaponType.F_ONESHOT) || wt.hasFlag(WeaponType.F_PROTOTYPE)) { continue; if(!((wt.hasFlag(WeaponType.F_MECH_WEAPON) && type == Person.T_MECHWARRIOR) || (wt.hasFlag(WeaponType.F_AERO_WEAPON) && type != Person.T_AERO_PILOT) || (wt.hasFlag(WeaponType.F_TANK_WEAPON) && !(type == Person.T_VEE_GUNNER || type == Person.T_NVEE_DRIVER || type == Person.T_GVEE_DRIVER || type == Person.T_VTOL_PILOT)) || (wt.hasFlag(WeaponType.F_BA_WEAPON) && type != Person.T_BA) || (wt.hasFlag(WeaponType.F_PROTO_WEAPON) && type != Person.T_PROTO_PILOT))) { continue; if(wt.getAtClass() == WeaponType.CLASS_NONE || wt.getAtClass() == WeaponType.CLASS_POINT_DEFENSE || wt.getAtClass() >= WeaponType.CLASS_CAPITAL_LASER) { continue; if(TechConstants.isClan(wt.getTechLevel(year)) != isClan) { continue; int lvl = wt.getTechLevel(year); if(lvl < 0) { continue;
|| (wtype.getAtClass() == (19)) || (wtype.getAtClass() == (20))) { return super.handle(phase, vPhaseReport); r.newlines = 0; r.subject = subjectId; r.add(wtype.getName() + number); if (entityTarget != null) { r.addDesc(entityTarget); int range = RangeType.rangeBracket(nRange, wtype.getATRanges(), true, false); int hits = 1; int nCluster = 1; av = bayWType.getShortAV(); } else if (range == WeaponType.RANGE_MED) { av = bayWType.getMedAV(); } else if (range == WeaponType.RANGE_LONG) { av = bayWType.getLongAV(); } else if (range == WeaponType.RANGE_EXT) { av = bayWType.getExtAV(); int dmgClass = wtype.getInfantryDamageClass(); int nDamage; if (dmgClass < WeaponType.WEAPON_BURST_1D6) { nDamage = -wtype.getDamage(nRange)
if (bayWType.getAtClass() == (WeaponType.CLASS_AR10) && (atype.hasFlag(AmmoType.F_AR10_KILLER_WHALE) || atype.hasFlag(AmmoType.F_PEACEMAKER))) { weaponarmor = 40; } else if (bayWType.getAtClass() == (WeaponType.CLASS_AR10) && (atype.hasFlag(AmmoType.F_AR10_WHITE_SHARK) || atype.hasFlag(AmmoType.F_SANTA_ANNA))) { weaponarmor = 30; } else if (bayWType.getAtClass() == (WeaponType.CLASS_AR10) && atype.hasFlag(AmmoType.F_AR10_BARRACUDA)) { weaponarmor = 20; } else { weaponarmor = bayWType.getMissileArmor(); current_av = bayWType.getShortAV(); } else if (range == WeaponType.RANGE_MED) { current_av = bayWType.getMedAV(); } else if (range == WeaponType.RANGE_LONG) { current_av = bayWType.getLongAV(); } else if (range == WeaponType.RANGE_EXT) { current_av = bayWType.getExtAV();