diff --git a/example_data/type_chart.json b/data/type_effectiveness.json similarity index 100% rename from example_data/type_chart.json rename to data/type_effectiveness.json diff --git a/data/type_effectiveness_generation-i.json b/data/type_effectiveness_generation-i.json new file mode 100644 index 0000000..682ccec --- /dev/null +++ b/data/type_effectiveness_generation-i.json @@ -0,0 +1,494 @@ +[ + { + "attacking_type": "normal", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "normal", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-i" + }, + { + "attacking_type": "fire", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "fire", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "fire", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "fire", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "fire", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "fire", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "fire", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "water", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "water", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "water", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "water", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "water", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "water", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "electric", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "electric", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "electric", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "electric", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "electric", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "electric", + "defending_type": "ground", + "damage_factor": 0.0, + "generation": "generation-i" + }, + { + "attacking_type": "grass", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "grass", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "grass", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "grass", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "grass", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "grass", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "grass", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "grass", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "grass", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "ice", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "ice", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "ice", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "ice", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "ice", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "ice", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "ice", + "defending_type": "ice", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "fighting", + "defending_type": "normal", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "fighting", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "fighting", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "fighting", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "fighting", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "fighting", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "fighting", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "fighting", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-i" + }, + { + "attacking_type": "poison", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "poison", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "poison", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "poison", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "poison", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "ground", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "ground", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "ground", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "ground", + "defending_type": "electric", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "ground", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "ground", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "ground", + "defending_type": "flying", + "damage_factor": 0.0, + "generation": "generation-i" + }, + { + "attacking_type": "flying", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "flying", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "flying", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "flying", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "flying", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "psychic", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "psychic", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "psychic", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "bug", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "bug", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "bug", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "bug", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "bug", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "bug", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "bug", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "rock", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "rock", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "rock", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "rock", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "rock", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "rock", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-i" + }, + { + "attacking_type": "ghost", + "defending_type": "ghost", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "ghost", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-i" + }, + { + "attacking_type": "ghost", + "defending_type": "normal", + "damage_factor": 0.0, + "generation": "generation-i" + }, + { + "attacking_type": "dragon", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-i" + } +] \ No newline at end of file diff --git a/data/type_effectiveness_generation-ii.json b/data/type_effectiveness_generation-ii.json new file mode 100644 index 0000000..905e6f2 --- /dev/null +++ b/data/type_effectiveness_generation-ii.json @@ -0,0 +1,650 @@ +[ + { + "attacking_type": "normal", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "normal", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "normal", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-ii" + }, + { + "attacking_type": "fire", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "fire", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "fire", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "fire", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "fire", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "fire", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "fire", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "fire", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "water", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "water", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "water", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "water", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "water", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "water", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "electric", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "electric", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "electric", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "electric", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "electric", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "electric", + "defending_type": "ground", + "damage_factor": 0.0, + "generation": "generation-ii" + }, + { + "attacking_type": "grass", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "grass", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "grass", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "grass", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "grass", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "grass", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "grass", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "grass", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "grass", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "grass", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "ice", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "ice", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "ice", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "ice", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "ice", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "ice", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "ice", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "ice", + "defending_type": "ice", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "fighting", + "defending_type": "normal", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "fighting", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "fighting", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "fighting", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "fighting", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "fighting", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "fighting", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "fighting", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "fighting", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "fighting", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-ii" + }, + { + "attacking_type": "poison", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "poison", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "poison", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "poison", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "poison", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "poison", + "defending_type": "steel", + "damage_factor": 0.0, + "generation": "generation-ii" + }, + { + "attacking_type": "ground", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "ground", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "ground", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "ground", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "ground", + "defending_type": "electric", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "ground", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "ground", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "ground", + "defending_type": "flying", + "damage_factor": 0.0, + "generation": "generation-ii" + }, + { + "attacking_type": "flying", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "flying", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "flying", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "flying", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "flying", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "flying", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "psychic", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "psychic", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "psychic", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "psychic", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "psychic", + "defending_type": "dark", + "damage_factor": 0.0, + "generation": "generation-ii" + }, + { + "attacking_type": "bug", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "bug", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "bug", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "bug", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "bug", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "bug", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "bug", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "bug", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "bug", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "rock", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "rock", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "rock", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "rock", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "rock", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "rock", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "rock", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "ghost", + "defending_type": "ghost", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "ghost", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "ghost", + "defending_type": "dark", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "ghost", + "defending_type": "normal", + "damage_factor": 0.0, + "generation": "generation-ii" + }, + { + "attacking_type": "dragon", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "dragon", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "dark", + "defending_type": "ghost", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "dark", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "dark", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "dark", + "defending_type": "dark", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "steel", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "steel", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-ii" + }, + { + "attacking_type": "steel", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "steel", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "steel", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-ii" + }, + { + "attacking_type": "steel", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-ii" + } +] \ No newline at end of file diff --git a/data/type_effectiveness_generation-iii.json b/data/type_effectiveness_generation-iii.json new file mode 100644 index 0000000..152686d --- /dev/null +++ b/data/type_effectiveness_generation-iii.json @@ -0,0 +1,650 @@ +[ + { + "attacking_type": "normal", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "normal", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "normal", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-iii" + }, + { + "attacking_type": "fire", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "fire", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "fire", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "fire", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "fire", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "fire", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "fire", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "fire", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "water", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "water", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "water", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "water", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "water", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "water", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "electric", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "electric", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "electric", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "electric", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "electric", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "electric", + "defending_type": "ground", + "damage_factor": 0.0, + "generation": "generation-iii" + }, + { + "attacking_type": "grass", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "grass", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "grass", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "grass", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "grass", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "grass", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "grass", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "grass", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "grass", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "grass", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "ice", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "ice", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "ice", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "ice", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "ice", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "ice", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "ice", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "ice", + "defending_type": "ice", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "fighting", + "defending_type": "normal", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "fighting", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "fighting", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "fighting", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "fighting", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "fighting", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "fighting", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "fighting", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "fighting", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "fighting", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-iii" + }, + { + "attacking_type": "poison", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "poison", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "poison", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "poison", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "poison", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "poison", + "defending_type": "steel", + "damage_factor": 0.0, + "generation": "generation-iii" + }, + { + "attacking_type": "ground", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "ground", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "ground", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "ground", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "ground", + "defending_type": "electric", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "ground", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "ground", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "ground", + "defending_type": "flying", + "damage_factor": 0.0, + "generation": "generation-iii" + }, + { + "attacking_type": "flying", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "flying", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "flying", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "flying", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "flying", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "flying", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "psychic", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "psychic", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "psychic", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "psychic", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "psychic", + "defending_type": "dark", + "damage_factor": 0.0, + "generation": "generation-iii" + }, + { + "attacking_type": "bug", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "bug", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "bug", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "bug", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "bug", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "bug", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "bug", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "bug", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "bug", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "rock", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "rock", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "rock", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "rock", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "rock", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "rock", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "rock", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "ghost", + "defending_type": "ghost", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "ghost", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "ghost", + "defending_type": "dark", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "ghost", + "defending_type": "normal", + "damage_factor": 0.0, + "generation": "generation-iii" + }, + { + "attacking_type": "dragon", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "dragon", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "dark", + "defending_type": "ghost", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "dark", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "dark", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "dark", + "defending_type": "dark", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "steel", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "steel", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-iii" + }, + { + "attacking_type": "steel", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "steel", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "steel", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-iii" + }, + { + "attacking_type": "steel", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-iii" + } +] \ No newline at end of file diff --git a/data/type_effectiveness_generation-iv.json b/data/type_effectiveness_generation-iv.json new file mode 100644 index 0000000..536ebe6 --- /dev/null +++ b/data/type_effectiveness_generation-iv.json @@ -0,0 +1,650 @@ +[ + { + "attacking_type": "normal", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "normal", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "normal", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-iv" + }, + { + "attacking_type": "fire", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "fire", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "fire", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "fire", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "fire", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "fire", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "fire", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "fire", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "water", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "water", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "water", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "water", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "water", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "water", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "electric", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "electric", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "electric", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "electric", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "electric", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "electric", + "defending_type": "ground", + "damage_factor": 0.0, + "generation": "generation-iv" + }, + { + "attacking_type": "grass", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "grass", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "grass", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "grass", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "grass", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "grass", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "grass", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "grass", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "grass", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "grass", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "ice", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "ice", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "ice", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "ice", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "ice", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "ice", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "ice", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "ice", + "defending_type": "ice", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "fighting", + "defending_type": "normal", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "fighting", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "fighting", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "fighting", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "fighting", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "fighting", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "fighting", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "fighting", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "fighting", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "fighting", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-iv" + }, + { + "attacking_type": "poison", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "poison", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "poison", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "poison", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "poison", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "poison", + "defending_type": "steel", + "damage_factor": 0.0, + "generation": "generation-iv" + }, + { + "attacking_type": "ground", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "ground", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "ground", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "ground", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "ground", + "defending_type": "electric", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "ground", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "ground", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "ground", + "defending_type": "flying", + "damage_factor": 0.0, + "generation": "generation-iv" + }, + { + "attacking_type": "flying", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "flying", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "flying", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "flying", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "flying", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "flying", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "psychic", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "psychic", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "psychic", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "psychic", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "psychic", + "defending_type": "dark", + "damage_factor": 0.0, + "generation": "generation-iv" + }, + { + "attacking_type": "bug", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "bug", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "bug", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "bug", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "bug", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "bug", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "bug", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "bug", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "bug", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "rock", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "rock", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "rock", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "rock", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "rock", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "rock", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "rock", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "ghost", + "defending_type": "ghost", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "ghost", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "ghost", + "defending_type": "dark", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "ghost", + "defending_type": "normal", + "damage_factor": 0.0, + "generation": "generation-iv" + }, + { + "attacking_type": "dragon", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "dragon", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "dark", + "defending_type": "ghost", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "dark", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "dark", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "dark", + "defending_type": "dark", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "steel", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "steel", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-iv" + }, + { + "attacking_type": "steel", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "steel", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "steel", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-iv" + }, + { + "attacking_type": "steel", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-iv" + } +] \ No newline at end of file diff --git a/data/type_effectiveness_generation-ix.json b/data/type_effectiveness_generation-ix.json new file mode 100644 index 0000000..bb7d691 --- /dev/null +++ b/data/type_effectiveness_generation-ix.json @@ -0,0 +1,722 @@ +[ + { + "attacking_type": "normal", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "normal", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "normal", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-ix" + }, + { + "attacking_type": "fire", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "fire", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "fire", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "fire", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "fire", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "fire", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "fire", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "fire", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "water", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "water", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "water", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "water", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "water", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "water", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "electric", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "electric", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "electric", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "electric", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "electric", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "electric", + "defending_type": "ground", + "damage_factor": 0.0, + "generation": "generation-ix" + }, + { + "attacking_type": "grass", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "grass", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "grass", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "grass", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "grass", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "grass", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "grass", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "grass", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "grass", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "grass", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "ice", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "ice", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "ice", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "ice", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "ice", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "ice", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "ice", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "ice", + "defending_type": "ice", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "fighting", + "defending_type": "normal", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "fighting", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "fighting", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "fighting", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "fighting", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "fighting", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "fighting", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "fighting", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "fighting", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "fighting", + "defending_type": "fairy", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "fighting", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-ix" + }, + { + "attacking_type": "poison", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "poison", + "defending_type": "fairy", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "poison", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "poison", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "poison", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "poison", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "poison", + "defending_type": "steel", + "damage_factor": 0.0, + "generation": "generation-ix" + }, + { + "attacking_type": "ground", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "ground", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "ground", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "ground", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "ground", + "defending_type": "electric", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "ground", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "ground", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "ground", + "defending_type": "flying", + "damage_factor": 0.0, + "generation": "generation-ix" + }, + { + "attacking_type": "flying", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "flying", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "flying", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "flying", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "flying", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "flying", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "psychic", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "psychic", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "psychic", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "psychic", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "psychic", + "defending_type": "dark", + "damage_factor": 0.0, + "generation": "generation-ix" + }, + { + "attacking_type": "bug", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "bug", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "bug", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "bug", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "bug", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "bug", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "bug", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "bug", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "bug", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "bug", + "defending_type": "fairy", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "rock", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "rock", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "rock", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "rock", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "rock", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "rock", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "rock", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "ghost", + "defending_type": "ghost", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "ghost", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "ghost", + "defending_type": "dark", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "ghost", + "defending_type": "normal", + "damage_factor": 0.0, + "generation": "generation-ix" + }, + { + "attacking_type": "dragon", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "dragon", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "dragon", + "defending_type": "fairy", + "damage_factor": 0.0, + "generation": "generation-ix" + }, + { + "attacking_type": "dark", + "defending_type": "ghost", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "dark", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "dark", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "dark", + "defending_type": "dark", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "dark", + "defending_type": "fairy", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "steel", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "steel", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "steel", + "defending_type": "fairy", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "steel", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "steel", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "steel", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "steel", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "fairy", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "fairy", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "fairy", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-ix" + }, + { + "attacking_type": "fairy", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "fairy", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-ix" + }, + { + "attacking_type": "fairy", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-ix" + } +] \ No newline at end of file diff --git a/data/type_effectiveness_generation-v.json b/data/type_effectiveness_generation-v.json new file mode 100644 index 0000000..3163ab8 --- /dev/null +++ b/data/type_effectiveness_generation-v.json @@ -0,0 +1,662 @@ +[ + { + "attacking_type": "normal", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "normal", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "normal", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-v" + }, + { + "attacking_type": "fire", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "fire", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "fire", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "fire", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "fire", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "fire", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "fire", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "fire", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "water", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "water", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "water", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "water", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "water", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "water", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "electric", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "electric", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "electric", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "electric", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "electric", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "electric", + "defending_type": "ground", + "damage_factor": 0.0, + "generation": "generation-v" + }, + { + "attacking_type": "grass", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "grass", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "grass", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "grass", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "grass", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "grass", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "grass", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "grass", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "grass", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "grass", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "ice", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "ice", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "ice", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "ice", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "ice", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "ice", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "ice", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "ice", + "defending_type": "ice", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "fighting", + "defending_type": "normal", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "fighting", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "fighting", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "fighting", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "fighting", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "fighting", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "fighting", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "fighting", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "fighting", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "fighting", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-v" + }, + { + "attacking_type": "poison", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "poison", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "poison", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "poison", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "poison", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "poison", + "defending_type": "steel", + "damage_factor": 0.0, + "generation": "generation-v" + }, + { + "attacking_type": "ground", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "ground", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "ground", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "ground", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "ground", + "defending_type": "electric", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "ground", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "ground", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "ground", + "defending_type": "flying", + "damage_factor": 0.0, + "generation": "generation-v" + }, + { + "attacking_type": "flying", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "flying", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "flying", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "flying", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "flying", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "flying", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "psychic", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "psychic", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "psychic", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "psychic", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "psychic", + "defending_type": "dark", + "damage_factor": 0.0, + "generation": "generation-v" + }, + { + "attacking_type": "bug", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "bug", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "bug", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "bug", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "bug", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "bug", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "bug", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "bug", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "bug", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "rock", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "rock", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "rock", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "rock", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "rock", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "rock", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "rock", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "ghost", + "defending_type": "ghost", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "ghost", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "ghost", + "defending_type": "dark", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "ghost", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "ghost", + "defending_type": "normal", + "damage_factor": 0.0, + "generation": "generation-v" + }, + { + "attacking_type": "dragon", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "dragon", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "dark", + "defending_type": "ghost", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "dark", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "dark", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "dark", + "defending_type": "dark", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "dark", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "steel", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "steel", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-v" + }, + { + "attacking_type": "steel", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "steel", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "steel", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-v" + }, + { + "attacking_type": "steel", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-v" + } +] \ No newline at end of file diff --git a/data/type_effectiveness_generation-vi.json b/data/type_effectiveness_generation-vi.json new file mode 100644 index 0000000..fa7b984 --- /dev/null +++ b/data/type_effectiveness_generation-vi.json @@ -0,0 +1,722 @@ +[ + { + "attacking_type": "normal", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "normal", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "normal", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-vi" + }, + { + "attacking_type": "fire", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "fire", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "fire", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "fire", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "fire", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "fire", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "fire", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "fire", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "water", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "water", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "water", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "water", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "water", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "water", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "electric", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "electric", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "electric", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "electric", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "electric", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "electric", + "defending_type": "ground", + "damage_factor": 0.0, + "generation": "generation-vi" + }, + { + "attacking_type": "grass", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "grass", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "grass", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "grass", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "grass", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "grass", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "grass", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "grass", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "grass", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "grass", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "ice", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "ice", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "ice", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "ice", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "ice", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "ice", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "ice", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "ice", + "defending_type": "ice", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "fighting", + "defending_type": "normal", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "fighting", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "fighting", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "fighting", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "fighting", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "fighting", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "fighting", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "fighting", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "fighting", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "fighting", + "defending_type": "fairy", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "fighting", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-vi" + }, + { + "attacking_type": "poison", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "poison", + "defending_type": "fairy", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "poison", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "poison", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "poison", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "poison", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "poison", + "defending_type": "steel", + "damage_factor": 0.0, + "generation": "generation-vi" + }, + { + "attacking_type": "ground", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "ground", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "ground", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "ground", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "ground", + "defending_type": "electric", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "ground", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "ground", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "ground", + "defending_type": "flying", + "damage_factor": 0.0, + "generation": "generation-vi" + }, + { + "attacking_type": "flying", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "flying", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "flying", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "flying", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "flying", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "flying", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "psychic", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "psychic", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "psychic", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "psychic", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "psychic", + "defending_type": "dark", + "damage_factor": 0.0, + "generation": "generation-vi" + }, + { + "attacking_type": "bug", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "bug", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "bug", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "bug", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "bug", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "bug", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "bug", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "bug", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "bug", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "bug", + "defending_type": "fairy", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "rock", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "rock", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "rock", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "rock", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "rock", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "rock", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "rock", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "ghost", + "defending_type": "ghost", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "ghost", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "ghost", + "defending_type": "dark", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "ghost", + "defending_type": "normal", + "damage_factor": 0.0, + "generation": "generation-vi" + }, + { + "attacking_type": "dragon", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "dragon", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "dragon", + "defending_type": "fairy", + "damage_factor": 0.0, + "generation": "generation-vi" + }, + { + "attacking_type": "dark", + "defending_type": "ghost", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "dark", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "dark", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "dark", + "defending_type": "dark", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "dark", + "defending_type": "fairy", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "steel", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "steel", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "steel", + "defending_type": "fairy", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "steel", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "steel", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "steel", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "steel", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "fairy", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "fairy", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "fairy", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-vi" + }, + { + "attacking_type": "fairy", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "fairy", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vi" + }, + { + "attacking_type": "fairy", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-vi" + } +] \ No newline at end of file diff --git a/data/type_effectiveness_generation-vii.json b/data/type_effectiveness_generation-vii.json new file mode 100644 index 0000000..c5b354a --- /dev/null +++ b/data/type_effectiveness_generation-vii.json @@ -0,0 +1,722 @@ +[ + { + "attacking_type": "normal", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "normal", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "normal", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-vii" + }, + { + "attacking_type": "fire", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "fire", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "fire", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "fire", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "fire", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "fire", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "fire", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "fire", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "water", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "water", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "water", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "water", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "water", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "water", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "electric", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "electric", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "electric", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "electric", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "electric", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "electric", + "defending_type": "ground", + "damage_factor": 0.0, + "generation": "generation-vii" + }, + { + "attacking_type": "grass", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "grass", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "grass", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "grass", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "grass", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "grass", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "grass", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "grass", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "grass", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "grass", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "ice", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "ice", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "ice", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "ice", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "ice", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "ice", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "ice", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "ice", + "defending_type": "ice", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "fighting", + "defending_type": "normal", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "fighting", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "fighting", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "fighting", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "fighting", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "fighting", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "fighting", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "fighting", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "fighting", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "fighting", + "defending_type": "fairy", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "fighting", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-vii" + }, + { + "attacking_type": "poison", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "poison", + "defending_type": "fairy", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "poison", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "poison", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "poison", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "poison", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "poison", + "defending_type": "steel", + "damage_factor": 0.0, + "generation": "generation-vii" + }, + { + "attacking_type": "ground", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "ground", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "ground", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "ground", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "ground", + "defending_type": "electric", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "ground", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "ground", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "ground", + "defending_type": "flying", + "damage_factor": 0.0, + "generation": "generation-vii" + }, + { + "attacking_type": "flying", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "flying", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "flying", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "flying", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "flying", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "flying", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "psychic", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "psychic", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "psychic", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "psychic", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "psychic", + "defending_type": "dark", + "damage_factor": 0.0, + "generation": "generation-vii" + }, + { + "attacking_type": "bug", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "bug", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "bug", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "bug", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "bug", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "bug", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "bug", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "bug", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "bug", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "bug", + "defending_type": "fairy", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "rock", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "rock", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "rock", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "rock", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "rock", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "rock", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "rock", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "ghost", + "defending_type": "ghost", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "ghost", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "ghost", + "defending_type": "dark", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "ghost", + "defending_type": "normal", + "damage_factor": 0.0, + "generation": "generation-vii" + }, + { + "attacking_type": "dragon", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "dragon", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "dragon", + "defending_type": "fairy", + "damage_factor": 0.0, + "generation": "generation-vii" + }, + { + "attacking_type": "dark", + "defending_type": "ghost", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "dark", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "dark", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "dark", + "defending_type": "dark", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "dark", + "defending_type": "fairy", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "steel", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "steel", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "steel", + "defending_type": "fairy", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "steel", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "steel", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "steel", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "steel", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "fairy", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "fairy", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "fairy", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-vii" + }, + { + "attacking_type": "fairy", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "fairy", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-vii" + }, + { + "attacking_type": "fairy", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-vii" + } +] \ No newline at end of file diff --git a/data/type_effectiveness_generation-viii.json b/data/type_effectiveness_generation-viii.json new file mode 100644 index 0000000..7acb3c2 --- /dev/null +++ b/data/type_effectiveness_generation-viii.json @@ -0,0 +1,722 @@ +[ + { + "attacking_type": "normal", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "normal", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "normal", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-viii" + }, + { + "attacking_type": "fire", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "fire", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "fire", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "fire", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "fire", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "fire", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "fire", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "fire", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "water", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "water", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "water", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "water", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "water", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "water", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "electric", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "electric", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "electric", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "electric", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "electric", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "electric", + "defending_type": "ground", + "damage_factor": 0.0, + "generation": "generation-viii" + }, + { + "attacking_type": "grass", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "grass", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "grass", + "defending_type": "water", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "grass", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "grass", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "grass", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "grass", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "grass", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "grass", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "grass", + "defending_type": "dragon", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "ice", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "ice", + "defending_type": "ground", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "ice", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "ice", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "ice", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "ice", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "ice", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "ice", + "defending_type": "ice", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "fighting", + "defending_type": "normal", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "fighting", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "fighting", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "fighting", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "fighting", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "fighting", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "fighting", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "fighting", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "fighting", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "fighting", + "defending_type": "fairy", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "fighting", + "defending_type": "ghost", + "damage_factor": 0.0, + "generation": "generation-viii" + }, + { + "attacking_type": "poison", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "poison", + "defending_type": "fairy", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "poison", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "poison", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "poison", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "poison", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "poison", + "defending_type": "steel", + "damage_factor": 0.0, + "generation": "generation-viii" + }, + { + "attacking_type": "ground", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "ground", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "ground", + "defending_type": "steel", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "ground", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "ground", + "defending_type": "electric", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "ground", + "defending_type": "bug", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "ground", + "defending_type": "grass", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "ground", + "defending_type": "flying", + "damage_factor": 0.0, + "generation": "generation-viii" + }, + { + "attacking_type": "flying", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "flying", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "flying", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "flying", + "defending_type": "rock", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "flying", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "flying", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "psychic", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "psychic", + "defending_type": "poison", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "psychic", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "psychic", + "defending_type": "psychic", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "psychic", + "defending_type": "dark", + "damage_factor": 0.0, + "generation": "generation-viii" + }, + { + "attacking_type": "bug", + "defending_type": "grass", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "bug", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "bug", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "bug", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "bug", + "defending_type": "flying", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "bug", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "bug", + "defending_type": "ghost", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "bug", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "bug", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "bug", + "defending_type": "fairy", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "rock", + "defending_type": "flying", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "rock", + "defending_type": "bug", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "rock", + "defending_type": "fire", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "rock", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "rock", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "rock", + "defending_type": "ground", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "rock", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "ghost", + "defending_type": "ghost", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "ghost", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "ghost", + "defending_type": "dark", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "ghost", + "defending_type": "normal", + "damage_factor": 0.0, + "generation": "generation-viii" + }, + { + "attacking_type": "dragon", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "dragon", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "dragon", + "defending_type": "fairy", + "damage_factor": 0.0, + "generation": "generation-viii" + }, + { + "attacking_type": "dark", + "defending_type": "ghost", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "dark", + "defending_type": "psychic", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "dark", + "defending_type": "fighting", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "dark", + "defending_type": "dark", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "dark", + "defending_type": "fairy", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "steel", + "defending_type": "rock", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "steel", + "defending_type": "ice", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "steel", + "defending_type": "fairy", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "steel", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "steel", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "steel", + "defending_type": "water", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "steel", + "defending_type": "electric", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "fairy", + "defending_type": "fighting", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "fairy", + "defending_type": "dragon", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "fairy", + "defending_type": "dark", + "damage_factor": 2.0, + "generation": "generation-viii" + }, + { + "attacking_type": "fairy", + "defending_type": "poison", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "fairy", + "defending_type": "steel", + "damage_factor": 0.5, + "generation": "generation-viii" + }, + { + "attacking_type": "fairy", + "defending_type": "fire", + "damage_factor": 0.5, + "generation": "generation-viii" + } +] \ No newline at end of file diff --git a/example_data/charizard.json b/example_data/charizard.json deleted file mode 100644 index b085ffc..0000000 --- a/example_data/charizard.json +++ /dev/null @@ -1,158 +0,0 @@ -{ - "6": { - "id": 6, - "name": "charizard", - "types": [ - "fire", - "flying" - ], - "base_stats": { - "hp": 78, - "attack": 84, - "defense": 78, - "special_attack": 109, - "special_defense": 85, - "speed": 100 - }, - "abilities": [ - "blaze", - "solar-power" - ], - "moves": [ - 5, - 7, - 9, - 10, - 14, - 15, - 17, - 19, - 25, - 29, - 34, - 36, - 38, - 43, - 44, - 45, - 46, - 52, - 53, - 63, - 66, - 68, - 69, - 70, - 76, - 82, - 83, - 89, - 90, - 91, - 92, - 99, - 102, - 104, - 108, - 111, - 115, - 117, - 126, - 129, - 130, - 154, - 156, - 157, - 163, - 164, - 173, - 174, - 182, - 184, - 187, - 189, - 200, - 201, - 203, - 206, - 207, - 210, - 211, - 213, - 214, - 216, - 218, - 223, - 225, - 231, - 232, - 237, - 239, - 241, - 242, - 246, - 249, - 251, - 257, - 261, - 263, - 264, - 270, - 280, - 290, - 299, - 307, - 311, - 314, - 315, - 317, - 332, - 337, - 349, - 355, - 363, - 366, - 374, - 394, - 403, - 406, - 407, - 411, - 416, - 421, - 424, - 432, - 445, - 466, - 468, - 481, - 488, - 496, - 497, - 507, - 510, - 512, - 517, - 519, - 523, - 525, - 526, - 535, - 542, - 590, - 595, - 612, - 693, - 784, - 799, - 814, - 815, - 851, - 913, - 915 - ], - "weight": 905, - "height": 17, - "base_experience": 240 - } -} \ No newline at end of file diff --git a/example_data/charizard_moves.json b/example_data/charizard_moves.json deleted file mode 100644 index 6a06c3d..0000000 --- a/example_data/charizard_moves.json +++ /dev/null @@ -1,212 +0,0 @@ -{ - "5": { - "id": 5, - "name": "mega-punch", - "type": "normal", - "power": 80, - "accuracy": 85, - "pp": 20, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": null, - "target": "selected-pokemon", - "description": "Inflicts regular damage with no additional effect." - }, - "7": { - "id": 7, - "name": "fire-punch", - "type": "fire", - "power": 75, - "accuracy": 100, - "pp": 15, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": 10, - "target": "selected-pokemon", - "description": "Has a 10% chance to burn the target." - }, - "9": { - "id": 9, - "name": "thunder-punch", - "type": "electric", - "power": 75, - "accuracy": 100, - "pp": 15, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": 10, - "target": "selected-pokemon", - "description": "Has a 10% chance to paralyze the target." - }, - "10": { - "id": 10, - "name": "scratch", - "type": "normal", - "power": 40, - "accuracy": 100, - "pp": 35, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": null, - "target": "selected-pokemon", - "description": "Inflicts regular damage with no additional effect." - }, - "17": { - "id": 17, - "name": "wing-attack", - "type": "flying", - "power": 60, - "accuracy": 100, - "pp": 35, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": null, - "target": "selected-pokemon", - "description": "Inflicts regular damage with no additional effect." - }, - "14": { - "id": 14, - "name": "swords-dance", - "type": "normal", - "power": null, - "accuracy": null, - "pp": 20, - "priority": 0, - "damage_class": "status", - "effect_id": null, - "effect_chance": null, - "target": "user", - "description": "Raises the user's Attack by two stages." - }, - "15": { - "id": 15, - "name": "cut", - "type": "normal", - "power": 50, - "accuracy": 95, - "pp": 30, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": null, - "target": "selected-pokemon", - "description": "Inflicts regular damage with no additional effect." - }, - "19": { - "id": 19, - "name": "fly", - "type": "flying", - "power": 90, - "accuracy": 95, - "pp": 15, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": null, - "target": "selected-pokemon", - "description": "User flies high into the air, dodging all attacks, and hits next turn." - }, - "25": { - "id": 25, - "name": "mega-kick", - "type": "normal", - "power": 120, - "accuracy": 75, - "pp": 5, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": null, - "target": "selected-pokemon", - "description": "Inflicts regular damage with no additional effect." - }, - "29": { - "id": 29, - "name": "headbutt", - "type": "normal", - "power": 70, - "accuracy": 100, - "pp": 15, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": 30, - "target": "selected-pokemon", - "description": "Has a 30% chance to make the target flinch." - }, - "34": { - "id": 34, - "name": "body-slam", - "type": "normal", - "power": 85, - "accuracy": 100, - "pp": 15, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": 30, - "target": "selected-pokemon", - "description": "Has a 30% chance to paralyze the target." - }, - "36": { - "id": 36, - "name": "take-down", - "type": "normal", - "power": 90, - "accuracy": 85, - "pp": 20, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": null, - "target": "selected-pokemon", - "description": "User receives 1/4 the damage it inflicts in recoil." - }, - "43": { - "id": 43, - "name": "leer", - "type": "normal", - "power": null, - "accuracy": 100, - "pp": 30, - "priority": 0, - "damage_class": "status", - "effect_id": null, - "effect_chance": 100, - "target": "all-opponents", - "description": "Lowers the target's Defense by one stage." - }, - "38": { - "id": 38, - "name": "double-edge", - "type": "normal", - "power": 120, - "accuracy": 100, - "pp": 15, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": null, - "target": "selected-pokemon", - "description": "User receives 1/3 the damage inflicted in recoil." - }, - "44": { - "id": 44, - "name": "bite", - "type": "dark", - "power": 60, - "accuracy": 100, - "pp": 25, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": 30, - "target": "selected-pokemon", - "description": "Has a 30% chance to make the target flinch." - } -} \ No newline at end of file diff --git a/example_data/classic_moves.json b/example_data/classic_moves.json deleted file mode 100644 index 04aa2be..0000000 --- a/example_data/classic_moves.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "1": { - "id": 1, - "name": "pound", - "type": "normal", - "power": 40, - "accuracy": 100, - "pp": 35, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": null, - "target": "selected-pokemon", - "description": "Inflicts regular damage with no additional effect." - }, - "2": { - "id": 2, - "name": "karate-chop", - "type": "fighting", - "power": 50, - "accuracy": 100, - "pp": 25, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": null, - "target": "selected-pokemon", - "description": "Has an increased chance for a critical hit." - }, - "33": { - "id": 33, - "name": "tackle", - "type": "normal", - "power": 40, - "accuracy": 100, - "pp": 35, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": null, - "target": "selected-pokemon", - "description": "Inflicts regular damage with no additional effect." - }, - "34": { - "id": 34, - "name": "body-slam", - "type": "normal", - "power": 85, - "accuracy": 100, - "pp": 15, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": 30, - "target": "selected-pokemon", - "description": "Has a 30% chance to paralyze the target." - }, - "36": { - "id": 36, - "name": "take-down", - "type": "normal", - "power": 90, - "accuracy": 85, - "pp": 20, - "priority": 0, - "damage_class": "physical", - "effect_id": null, - "effect_chance": null, - "target": "selected-pokemon", - "description": "User receives 1/4 the damage it inflicts in recoil." - } -} \ No newline at end of file diff --git a/example_data/starter_pokemon.json b/example_data/starter_pokemon.json deleted file mode 100644 index 789b600..0000000 --- a/example_data/starter_pokemon.json +++ /dev/null @@ -1,342 +0,0 @@ -{ - "2": { - "id": 2, - "name": "ivysaur", - "types": [ - "grass", - "poison" - ], - "base_stats": { - "hp": 60, - "attack": 62, - "defense": 63, - "special_attack": 80, - "special_defense": 80, - "speed": 60 - }, - "abilities": [ - "overgrow", - "chlorophyll" - ], - "moves": [ - 14, - 15, - 20, - 22, - 29, - 33, - 34, - 36, - 38, - 45, - 46, - 70, - 72, - 73, - 74, - 75, - 76, - 77, - 79, - 80, - 81, - 92, - 99, - 102, - 104, - 111, - 113, - 115, - 117, - 133, - 148, - 156, - 164, - 173, - 174, - 182, - 188, - 189, - 200, - 202, - 203, - 204, - 206, - 207, - 210, - 213, - 214, - 216, - 218, - 219, - 230, - 235, - 237, - 241, - 249, - 263, - 267, - 270, - 275, - 282, - 290, - 311, - 331, - 345, - 363, - 388, - 402, - 412, - 437, - 438, - 445, - 447, - 474, - 491, - 496, - 497, - 520, - 526, - 580, - 590, - 803, - 851, - 885 - ], - "weight": 130, - "height": 10, - "base_experience": 142 - }, - "1": { - "id": 1, - "name": "bulbasaur", - "types": [ - "grass", - "poison" - ], - "base_stats": { - "hp": 45, - "attack": 49, - "defense": 49, - "special_attack": 65, - "special_defense": 65, - "speed": 45 - }, - "abilities": [ - "overgrow", - "chlorophyll" - ], - "moves": [ - 13, - 14, - 15, - 20, - 22, - 29, - 33, - 34, - 36, - 38, - 45, - 70, - 72, - 73, - 74, - 75, - 76, - 77, - 79, - 80, - 81, - 92, - 99, - 102, - 104, - 111, - 113, - 115, - 117, - 124, - 130, - 133, - 148, - 156, - 164, - 173, - 174, - 182, - 188, - 189, - 200, - 202, - 203, - 204, - 206, - 207, - 210, - 213, - 214, - 216, - 218, - 219, - 230, - 235, - 237, - 241, - 249, - 263, - 267, - 270, - 275, - 282, - 290, - 311, - 320, - 331, - 345, - 363, - 388, - 402, - 412, - 437, - 438, - 445, - 447, - 474, - 491, - 496, - 497, - 520, - 526, - 580, - 590, - 803, - 851, - 885 - ], - "weight": 69, - "height": 7, - "base_experience": 64 - }, - "3": { - "id": 3, - "name": "venusaur", - "types": [ - "grass", - "poison" - ], - "base_stats": { - "hp": 80, - "attack": 82, - "defense": 83, - "special_attack": 100, - "special_defense": 100, - "speed": 80 - }, - "abilities": [ - "overgrow", - "chlorophyll" - ], - "moves": [ - 14, - 15, - 20, - 22, - 29, - 33, - 34, - 36, - 38, - 45, - 46, - 63, - 70, - 72, - 73, - 74, - 75, - 76, - 77, - 79, - 80, - 81, - 89, - 92, - 99, - 102, - 104, - 111, - 113, - 115, - 117, - 133, - 148, - 156, - 164, - 173, - 174, - 182, - 184, - 188, - 189, - 200, - 202, - 203, - 204, - 206, - 207, - 210, - 213, - 214, - 216, - 218, - 219, - 230, - 235, - 237, - 241, - 249, - 263, - 267, - 270, - 275, - 282, - 290, - 311, - 331, - 335, - 338, - 345, - 363, - 388, - 398, - 402, - 412, - 414, - 416, - 431, - 437, - 438, - 445, - 447, - 474, - 491, - 496, - 497, - 520, - 523, - 526, - 572, - 580, - 590, - 707, - 803, - 805, - 851, - 885 - ], - "weight": 1000, - "height": 20, - "base_experience": 236 - } -} \ No newline at end of file diff --git a/tools/data/pokemon_downloader.py b/tools/data/pokemon_downloader.py index 29d6487..901544f 100644 --- a/tools/data/pokemon_downloader.py +++ b/tools/data/pokemon_downloader.py @@ -89,6 +89,7 @@ class TypeEffectiveness: attacking_type: str defending_type: str damage_factor: float # 0.0, 0.5, 1.0, 2.0 + generation: str # generation name (e.g., "generation-i", "generation-ii") class PokemonDownloader: @@ -235,59 +236,159 @@ class PokemonDownloader: except Exception as e: logger.error(f"Failed to download move {move_id}: {e}") return None - - def download_type_effectiveness(self) -> List[TypeEffectiveness]: + + def download_type_effectiveness(self, target_generation: str = "generation-i") -> List[TypeEffectiveness]: """ - Download type effectiveness data. - + Download type effectiveness data for a specific generation. + + Args: + target_generation: Generation to get effectiveness for (default: "generation-i") + Returns: - List of TypeEffectiveness objects + List of TypeEffectiveness objects for the specified generation """ effectiveness_data = [] - + try: - # Get all types (Gen 1 has 15 types) - gen1_types = [ - 'normal', 'fire', 'water', 'electric', 'grass', 'ice', - 'fighting', 'poison', 'ground', 'flying', 'psychic', - 'bug', 'rock', 'ghost', 'dragon' + # First, build a cache of type generations to avoid repeated API calls + console.print("šŸ” Building type generation cache...") + type_generations = self._build_type_generation_cache() + + # Filter types that exist in the target generation + target_gen_index = self._generation_order.index(target_generation) + valid_types = [ + type_name for type_name, gen_name in type_generations.items() + if self._generation_order.index(gen_name) <= target_gen_index ] - - for type_name in gen1_types: - type_data = self._safe_api_call(pb.type_, type_name) - - # Double damage to - for relation in type_data.damage_relations.double_damage_to: - if relation.name in gen1_types: + + console.print(f"šŸ“Š Processing {len(valid_types)} types for {target_generation}") + + for type_name in valid_types: + try: + type_data = self._safe_api_call(pb.type_, type_name) + + # Process current damage relations for the target generation + current_relations = self._get_damage_relations_for_generation( + type_data, target_generation, type_generations + ) + + # Add current generation effectiveness data + for defending_type, damage_factor in current_relations.items(): effectiveness_data.append(TypeEffectiveness( attacking_type=type_name, - defending_type=relation.name, - damage_factor=2.0 + defending_type=defending_type, + damage_factor=damage_factor, + generation=target_generation )) - - # Half damage to - for relation in type_data.damage_relations.half_damage_to: - if relation.name in gen1_types: - effectiveness_data.append(TypeEffectiveness( - attacking_type=type_name, - defending_type=relation.name, - damage_factor=0.5 - )) - - # No damage to - for relation in type_data.damage_relations.no_damage_to: - if relation.name in gen1_types: - effectiveness_data.append(TypeEffectiveness( - attacking_type=type_name, - defending_type=relation.name, - damage_factor=0.0 - )) - + + except Exception as e: + logger.warning(f"Failed to process type {type_name}: {e}") + continue + + console.print(f"āœ… Processed {len(effectiveness_data)} type effectiveness entries") return effectiveness_data - + except Exception as e: logger.error(f"Failed to download type effectiveness: {e}") return [] + + def _build_type_generation_cache(self) -> Dict[str, str]: + """ + Build a cache of type names to their generation. + + Returns: + Dictionary mapping type name to generation name + """ + type_generations = {} + + # List of all known Pokemon types across all generations + all_types = [ + 'normal', 'fire', 'water', 'electric', 'grass', 'ice', + 'fighting', 'poison', 'ground', 'flying', 'psychic', + 'bug', 'rock', 'ghost', 'dragon', 'dark', 'steel', + 'fairy' + ] + + for type_name in all_types: + try: + type_data = self._safe_api_call(pb.type_, type_name) + type_generations[type_name] = type_data.generation.name + except Exception as e: + logger.warning(f"Failed to get generation for type {type_name}: {e}") + continue + + return type_generations + + @property + def _generation_order(self) -> List[str]: + """Get the order of generations for comparison.""" + return [ + 'generation-i', 'generation-ii', 'generation-iii', 'generation-iv', + 'generation-v', 'generation-vi', 'generation-vii', 'generation-viii', + 'generation-ix' + ] + + def _get_damage_relations_for_generation(self, type_data, target_generation: str, type_generations: Dict[str, str]) -> Dict[str, float]: + """ + Extract damage relations for a specific generation from type data. + + Args: + type_data: Type data from PokeAPI + target_generation: Target generation name + type_generations: Cache of type names to their generation + + Returns: + Dictionary mapping defending type to damage factor + """ + relations = {} + + # Check if we need historical data + if type_data.generation.name == target_generation: + # Current generation - use current damage relations + damage_relations = type_data.damage_relations + else: + # Look for historical data + damage_relations = None + for past_relation in type_data.past_damage_relations: + if past_relation.generation.name == target_generation: + damage_relations = past_relation.damage_relations + break + + # If no historical data found, use current relations + if damage_relations is None: + damage_relations = type_data.damage_relations + + # Extract damage factors, filtering by generation + target_gen_index = self._generation_order.index(target_generation) + + if hasattr(damage_relations, 'double_damage_to'): + for relation in damage_relations.double_damage_to: + # Only include types that exist in the target generation + defending_gen = type_generations.get(relation.name) + if defending_gen: + defending_gen_index = self._generation_order.index(defending_gen) + if defending_gen_index <= target_gen_index: + relations[relation.name] = 2.0 + + if hasattr(damage_relations, 'half_damage_to'): + for relation in damage_relations.half_damage_to: + # Only include types that exist in the target generation + defending_gen = type_generations.get(relation.name) + if defending_gen: + defending_gen_index = self._generation_order.index(defending_gen) + if defending_gen_index <= target_gen_index: + relations[relation.name] = 0.5 + + if hasattr(damage_relations, 'no_damage_to'): + for relation in damage_relations.no_damage_to: + # Only include types that exist in the target generation + defending_gen = type_generations.get(relation.name) + if defending_gen: + defending_gen_index = self._generation_order.index(defending_gen) + if defending_gen_index <= target_gen_index: + relations[relation.name] = 0.0 + + return relations def download_pokemon_batch(self, start_id: int, end_id: int, max_workers: int = 5) -> Dict[int, PokemonData]: """ @@ -572,65 +673,101 @@ def download_moves(ctx, move_ids, workers): @cli.command() +@click.option('--generation', default='generation-i', help='Target generation for type effectiveness') @click.pass_context -def download_types(ctx): +def download_types(ctx, generation): """Download type effectiveness data.""" downloader = ctx.obj['downloader'] - + console.print(Panel.fit( - "šŸ”½ Downloading type effectiveness data", + f"šŸ”½ Downloading type effectiveness data for {generation}", style="bold blue" )) - - effectiveness_data = downloader.download_type_effectiveness() - + + effectiveness_data = downloader.download_type_effectiveness(generation) + if effectiveness_data: - downloader.save_type_effectiveness(effectiveness_data) + filename = f"type_effectiveness_{generation}.json" + downloader.save_type_effectiveness(effectiveness_data, filename) console.print(f"āœ… Successfully downloaded {len(effectiveness_data)} type effectiveness entries") else: console.print("āŒ Failed to download type effectiveness data") +@cli.command() +@click.option('--generations', default='generation-i,generation-ii,generation-iii,generation-iv,generation-v,generation-vi,generation-vii,generation-viii,generation-ix', + help='Comma-separated list of generations to download') +@click.option('--workers', default=3, help='Number of concurrent workers') +@click.pass_context +def download_types_multi(ctx, generations, workers): + """Download type effectiveness data for multiple generations.""" + downloader = ctx.obj['downloader'] + + generation_list = [gen.strip() for gen in generations.split(',')] + console.print(Panel.fit( + f"šŸ”½ Downloading type effectiveness for {len(generation_list)} generations", + style="bold blue" + )) + + total_entries = 0 + for generation in generation_list: + console.print(f"\nšŸ“Š Processing {generation}...") + + effectiveness_data = downloader.download_type_effectiveness(generation) + + if effectiveness_data: + filename = f"type_effectiveness_{generation}.json" + downloader.save_type_effectiveness(effectiveness_data, filename) + total_entries += len(effectiveness_data) + console.print(f"āœ… Saved {len(effectiveness_data)} entries for {generation}") + else: + console.print(f"āŒ Failed to download data for {generation}") + + console.print(f"\nšŸŽ‰ Downloaded type effectiveness for {len(generation_list)} generations ({total_entries} total entries)") + + @cli.command() @click.option('--start', default=1, help='Starting Pokemon ID') @click.option('--end', default=151, help='Ending Pokemon ID (151 for Gen 1)') @click.option('--workers', default=5, help='Number of concurrent workers') +@click.option('--generation', default='generation-i', help='Target generation for type effectiveness') @click.pass_context -def download_complete(ctx, start, end, workers): +def download_complete(ctx, start, end, workers, generation): """Download complete dataset (Pokemon, moves, and type effectiveness).""" downloader = ctx.obj['downloader'] - + console.print(Panel.fit( - f"šŸ”½ Downloading complete Pokemon dataset ({start}-{end})", + f"šŸ”½ Downloading complete Pokemon dataset ({start}-{end}) for {generation}", style="bold blue" )) - + # Download Pokemon pokemon_data = downloader.download_pokemon_batch(start, end, workers) - + if pokemon_data: downloader.save_pokemon_data(pokemon_data, f"pokemon_complete_{start}_{end}.json") - + # Get all unique moves all_move_ids = set() for pokemon in pokemon_data.values(): all_move_ids.update(pokemon.moves) - + # Download moves if all_move_ids: moves_data = downloader.download_moves_batch(list(all_move_ids), workers) if moves_data: downloader.save_moves_data(moves_data, f"moves_complete_{start}_{end}.json") - - # Download type effectiveness - effectiveness_data = downloader.download_type_effectiveness() + + # Download type effectiveness for specified generation + effectiveness_data = downloader.download_type_effectiveness(generation) if effectiveness_data: - downloader.save_type_effectiveness(effectiveness_data, "type_effectiveness_complete.json") - + filename = f"type_effectiveness_complete_{generation}.json" + downloader.save_type_effectiveness(effectiveness_data, filename) + # Show final summary summary_table = downloader.get_stats_summary(pokemon_data) console.print(summary_table) - + console.print("šŸŽ‰ Complete dataset download finished!") else: console.print("āŒ Failed to download Pokemon data") diff --git a/tools/data/schemas.py b/tools/data/schemas.py index f7c63dc..6c657fe 100644 --- a/tools/data/schemas.py +++ b/tools/data/schemas.py @@ -111,9 +111,10 @@ TYPE_EFFECTIVENESS_ENTRY_SCHEMA = { "damage_factor": { "type": "number", "enum": [0.0, 0.5, 1.0, 2.0] # Only valid damage multipliers - } + }, + "generation": {"type": "string", "minLength": 1} # Generation name (e.g., "generation-i") }, - "required": ["attacking_type", "defending_type", "damage_factor"], + "required": ["attacking_type", "defending_type", "damage_factor", "generation"], "additionalProperties": False } @@ -124,13 +125,58 @@ TYPE_EFFECTIVENESS_SCHEMA = { "uniqueItems": True } -# Valid Generation 1 types for additional validation -GEN1_TYPES = { - 'normal', 'fire', 'water', 'electric', 'grass', 'ice', - 'fighting', 'poison', 'ground', 'flying', 'psychic', - 'bug', 'rock', 'ghost', 'dragon' +# Valid types by generation for additional validation +GENERATION_TYPES = { + 'generation-i': { + 'normal', 'fire', 'water', 'electric', 'grass', 'ice', + 'fighting', 'poison', 'ground', 'flying', 'psychic', + 'bug', 'rock', 'ghost', 'dragon' + }, + 'generation-ii': { + 'normal', 'fire', 'water', 'electric', 'grass', 'ice', + 'fighting', 'poison', 'ground', 'flying', 'psychic', + 'bug', 'rock', 'ghost', 'dragon', 'dark', 'steel' + }, + 'generation-iii': { + 'normal', 'fire', 'water', 'electric', 'grass', 'ice', + 'fighting', 'poison', 'ground', 'flying', 'psychic', + 'bug', 'rock', 'ghost', 'dragon', 'dark', 'steel' + }, + 'generation-iv': { + 'normal', 'fire', 'water', 'electric', 'grass', 'ice', + 'fighting', 'poison', 'ground', 'flying', 'psychic', + 'bug', 'rock', 'ghost', 'dragon', 'dark', 'steel' + }, + 'generation-v': { + 'normal', 'fire', 'water', 'electric', 'grass', 'ice', + 'fighting', 'poison', 'ground', 'flying', 'psychic', + 'bug', 'rock', 'ghost', 'dragon', 'dark', 'steel' + }, + 'generation-vi': { + 'normal', 'fire', 'water', 'electric', 'grass', 'ice', + 'fighting', 'poison', 'ground', 'flying', 'psychic', + 'bug', 'rock', 'ghost', 'dragon', 'dark', 'steel', 'fairy' + }, + 'generation-vii': { + 'normal', 'fire', 'water', 'electric', 'grass', 'ice', + 'fighting', 'poison', 'ground', 'flying', 'psychic', + 'bug', 'rock', 'ghost', 'dragon', 'dark', 'steel', 'fairy' + }, + 'generation-viii': { + 'normal', 'fire', 'water', 'electric', 'grass', 'ice', + 'fighting', 'poison', 'ground', 'flying', 'psychic', + 'bug', 'rock', 'ghost', 'dragon', 'dark', 'steel', 'fairy' + }, + 'generation-ix': { + 'normal', 'fire', 'water', 'electric', 'grass', 'ice', + 'fighting', 'poison', 'ground', 'flying', 'psychic', + 'bug', 'rock', 'ghost', 'dragon', 'dark', 'steel', 'fairy' + } } +# Backward compatibility +GEN1_TYPES = GENERATION_TYPES['generation-i'] + class DataValidator: """Validator class for Pokemon data using JSON schemas.""" @@ -260,27 +306,30 @@ class DataValidator: def validate_type_effectiveness(self, effectiveness_data: List[Dict[str, Any]]) -> List[str]: """ Validate type effectiveness data. - + Args: effectiveness_data: List of type effectiveness entries - + Returns: List of validation error messages (empty if valid) """ errors = [] - + # Schema validation for error in self.type_effectiveness_validator.iter_errors(effectiveness_data): errors.append(f"Schema error: {error.message}") - - # Additional validation + + # Additional validation using generation-specific types for i, entry in enumerate(effectiveness_data): - if 'attacking_type' in entry and entry['attacking_type'] not in GEN1_TYPES: - errors.append(f"Entry {i}: Invalid attacking type '{entry['attacking_type']}'") - - if 'defending_type' in entry and entry['defending_type'] not in GEN1_TYPES: - errors.append(f"Entry {i}: Invalid defending type '{entry['defending_type']}'") - + generation = entry.get('generation', 'generation-i') + valid_types = GENERATION_TYPES.get(generation, GEN1_TYPES) + + if 'attacking_type' in entry and entry['attacking_type'] not in valid_types: + errors.append(f"Entry {i}: Invalid attacking type '{entry['attacking_type']}' for {generation}") + + if 'defending_type' in entry and entry['defending_type'] not in valid_types: + errors.append(f"Entry {i}: Invalid defending type '{entry['defending_type']}' for {generation}") + return errors def validate_file(self, file_path: Path, data_type: str) -> List[str]: