public static double gymOffense(final PokemonId pokemonId,final PokemonMove move1,final PokemonMove move2,final int attackIV){
  final PokemonMeta meta=PokemonMetaRegistry.getMeta(pokemonId);
  return Math.max(PokemonCalculationUtils.dpsForMove(pokemonId,move1,true) * WEAVE_LENGTH_SECONDS,PokemonCalculationUtils.weaveDps(pokemonId,move1,move2,0)) * (meta.getBaseAttack() + attackIV);
}

public static double gymOffense ( final PokemonId pokemonId , final PokemonMove move1 , final PokemonMove move2 , final int attackIV ) { final PokemonMeta meta = PokemonMetaRegistry . getMeta ( pokemonId ) ; return Math . max ( PokemonCalculationUtils . dpsForMove ( pokemonId , move1 , true ) * WEAVE_LENGTH_SECONDS , PokemonCalculationUtils . weaveDps ( pokemonId , move1 , move2 , 0 ) ) * ( meta . getBaseAttack ( ) + attackIV ) ; }
gym offense takes the better of no weave / weave damage over 100s and multiplies by the pokemon ' s base attack to arrive at a ranking of raw damage output .
