diff --git a/app/src/main/java/com/kamron/pogoiv/pokeflycomponents/IVPopupButton.java b/app/src/main/java/com/kamron/pogoiv/pokeflycomponents/IVPopupButton.java index ce528453c..79e0c381b 100644 --- a/app/src/main/java/com/kamron/pogoiv/pokeflycomponents/IVPopupButton.java +++ b/app/src/main/java/com/kamron/pogoiv/pokeflycomponents/IVPopupButton.java @@ -117,12 +117,16 @@ public void showQuickIVPreviewLook(@NonNull ScanResult scanResult) { int high = highest.percentPerfect; final StringBuilder text = new StringBuilder(); + String pokemonName = scanResult.pokemon.name; + if (pokemonName.contains(" - ")) { // check including form name + pokemonName = pokemonName.replace(" - ", "\n"); + } if (scanResult.getIVCombinationsCount() == 1 || high == low) { // Display something like "IV: 98%" text.append(getContext().getString( - R.string.iv_button_exact_result_preview_format, scanResult.pokemon.name, low)); + R.string.iv_button_exact_result_preview_format, pokemonName, low)); } else { // Display something like "IV: 55 - 87%" text.append(getContext().getString( - R.string.iv_button_range_result_preview_format, scanResult.pokemon.name, low, high)); + R.string.iv_button_range_result_preview_format, pokemonName, low, high)); } if (scanResult.levelRange.min != scanResult.levelRange.max) { text.append("*"); diff --git a/app/src/main/java/com/kamron/pogoiv/scanlogic/PokeInfoCalculator.java b/app/src/main/java/com/kamron/pogoiv/scanlogic/PokeInfoCalculator.java index 00daef8a2..f4e3ce610 100644 --- a/app/src/main/java/com/kamron/pogoiv/scanlogic/PokeInfoCalculator.java +++ b/app/src/main/java/com/kamron/pogoiv/scanlogic/PokeInfoCalculator.java @@ -145,6 +145,7 @@ private void populatePokemon(@NonNull GoIVSettings settings, @NonNull Resources final int[] devolution = res.getIntArray(R.array.devolutionNumber); final int[] evolutionCandyCost = res.getIntArray(R.array.evolutionCandyCost); final int[] candyNamesArray = res.getIntArray(R.array.candyNames); + final int[] formsCountIndex = res.getIntArray(R.array.formsCountIndex); int pokeListSize = names.length; for (int i = 0; i < pokeListSize; i++) { @@ -165,118 +166,34 @@ private void populatePokemon(@NonNull GoIVSettings settings, @NonNull Resources candyPokemons.add(pokedex.get(candyNamesArray[i])); basePokemons.add(pokedex.get(i)); } - } + //Check for different pokemon forms, such as alolan forms, and add them to the formsCount. + if (formsCountIndex[i] != -1) { + int[] formsCount = res.getIntArray(R.array.formsCount); + int formsStartIndex = 0; + + for (int j = 0; j < formsCountIndex[i]; j++) { + formsStartIndex += formsCount[j]; + } + + for (int j = 0; j < formsCount[formsCountIndex[i]]; j++) { + pokedex.get(i).forms.add(new Pokemon( + String.format("%s - %s", + pokedex.get(i).name, res.getStringArray(R.array.formNames)[formsStartIndex + j]), + String.format("%s - %s", + pokedex.get(i).toString(), + res.getStringArray(R.array.formNames)[formsStartIndex + j]), + i, + res.getIntArray(R.array.formAttack)[formsStartIndex + j], + res.getIntArray(R.array.formDefense)[formsStartIndex + j], + res.getIntArray(R.array.formStamina)[formsStartIndex + j], + devolution[i], + evolutionCandyCost[i]) + ); + } + } + } - //Hardcoded temp-fix, adds alolan variants. - Pokemon exegguteHardcode = new Pokemon("Alolan Exeggutor", "Alolan Exeggutor", pokeListSize, 230, 158, - 190, -1, -1); - pokedex.add(exegguteHardcode); - pokemap.put("alolan exeggutor", exegguteHardcode); - pokeListSize++; - - Pokemon p1 = new Pokemon("Alolan Rattata", "Alolan Rattata", pokeListSize, 103, 70, - 60, -1, -1); - pokedex.add(p1); - pokemap.put("alolan rattata", p1); - pokeListSize++; - - Pokemon p2 = new Pokemon("Alolan Raticate", "Alolan Raticate", pokeListSize, 135, 159, - 150, -1, -1); - pokedex.add(p2); - pokemap.put("alolan raticate", p2); - pokeListSize++; - - Pokemon p3 = new Pokemon("Alolan Raichu", "Alolan Raichu", pokeListSize, 201, 172, - 120, -1, -1); - pokedex.add(p3); - pokemap.put("alolan raichu", p3); - pokeListSize++; - - Pokemon p4 = new Pokemon("Alolan Sandshrew", "Alolan Sandshrew", pokeListSize, 125, 154, - 100, -1, -1); - pokedex.add(p4); - pokemap.put("alolan sandshrew", p4); - pokeListSize++; - - Pokemon p5 = new Pokemon("Alolan Sandslash", "Alolan Sandslash", pokeListSize, 177, 221, - 150, -1, -1); - pokedex.add(p5); - pokemap.put("alolan sandslash", p5); - pokeListSize++; - - Pokemon p6 = new Pokemon("Alolan Vulpix", "Alolan Vulpix", pokeListSize, 96, 122, - 76, -1, -1); - pokedex.add(p6); - pokemap.put("alolan vulpix", p6); - pokeListSize++; - - Pokemon p7 = new Pokemon("Alolan Ninetales", "Alolan Ninetales", pokeListSize, 170, 207, - 146, -1, -1); - pokedex.add(p7); - pokemap.put("alolan ninetales", p7); - pokeListSize++; - - Pokemon p8 = new Pokemon("Alolan Diglett", "Alolan Diglett", pokeListSize, 108, 80, - 20, -1, -1); - pokedex.add(p8); - pokemap.put("alolan diglett", p8); - pokeListSize++; - - Pokemon p9 = new Pokemon("Alolan Dugtrio", "Alolan Dugtrio", pokeListSize, 201, 148, - 70, -1, -1); - pokedex.add(p9); - pokemap.put("alolan dugtrio", p9); - pokeListSize++; - - Pokemon p10 = new Pokemon("Alolan Meowth", "Alolan Meowth", pokeListSize, 99, 81, - 80, -1, -1); - pokedex.add(p10); - pokemap.put("alolan meowth", p10); - pokeListSize++; - - Pokemon p11 = new Pokemon("Alolan Persian", "Alolan Persian", pokeListSize, 150, 139, - 130, -1, -1); - pokedex.add(p11); - pokemap.put("alolan persian", p11); - pokeListSize++; - - Pokemon p12 = new Pokemon("Alolan Geodude", "Alolan Geodude", pokeListSize, 132, 163, - 80, -1, -1); - pokedex.add(p12); - pokemap.put("alolan geodude", p12); - pokeListSize++; - - Pokemon p13 = new Pokemon("Alolan Graveler", "Alolan Graveler", pokeListSize, 164, 196, - 110, -1, -1); - pokedex.add(p13); - pokemap.put("alolan graveler", p13); - pokeListSize++; - - Pokemon p14 = new Pokemon("Alolan Golem", "Alolan Golem", pokeListSize, 211, 229, - 160, -1, -1); - pokedex.add(p14); - pokemap.put("alolan golem", p14); - pokeListSize++; - - Pokemon p15 = new Pokemon("Alolan Grimer", "Alolan Grimer", pokeListSize, 135, 90, - 160, -1, -1); - pokedex.add(p15); - pokemap.put("alolan grimer", p15); - pokeListSize++; - - Pokemon p16 = new Pokemon("Alolan Muk", "Alolan Muk", pokeListSize, 190, 184, - 210, -1, -1); - pokedex.add(p16); - pokemap.put("alolan muk", p16); - pokeListSize++; - - - Pokemon p17 = new Pokemon("Alolan Marowak", "Alolan Marowak", pokeListSize, 144, 200, - 120, -1, -1); - pokedex.add(p17); - pokemap.put("alolan marowak", p17); - pokeListSize++; } @@ -489,6 +406,25 @@ private Pokemon getLowestEvolution(Pokemon poke) { return devoPoke; } + /** + * Get all the pokemon forms for a pokemon. + * + * @param poke a pokemon, example Exeggutor + * @return all the pokemon forms, in the example would return Exeggutor normal and Exeggutor Alola + */ + private ArrayList getForms(Pokemon poke) { + ArrayList list = new ArrayList<>(); + Pokemon normalFormPokemon = pokedex.get(poke.number); + list.add(normalFormPokemon); + + if (normalFormPokemon.forms.isEmpty()) { + return list; // normal form only + } + + list.addAll(normalFormPokemon.forms); + return list; + } + /** * Returns the evolution line of a pokemon. * @@ -499,10 +435,12 @@ public ArrayList getEvolutionLine(Pokemon poke) { poke = getLowestEvolution(poke); ArrayList list = new ArrayList<>(); - list.add(poke); //add self - list.addAll(poke.evolutions); //add all immediate evolutions - for (Pokemon evolution : poke.evolutions) { - list.addAll(evolution.evolutions); + list.addAll(getForms(poke)); + for (Pokemon evolution2nd : poke.evolutions) { + list.addAll(getForms(evolution2nd)); + for (Pokemon evolution3rd : evolution2nd.evolutions) { + list.addAll(getForms(evolution3rd)); + } } return list; diff --git a/app/src/main/java/com/kamron/pogoiv/scanlogic/Pokemon.java b/app/src/main/java/com/kamron/pogoiv/scanlogic/Pokemon.java index 99e5e0a2b..3430a3ce1 100644 --- a/app/src/main/java/com/kamron/pogoiv/scanlogic/Pokemon.java +++ b/app/src/main/java/com/kamron/pogoiv/scanlogic/Pokemon.java @@ -44,6 +44,14 @@ public String getLetter() { */ public final List evolutions; + + /** + * Forms of this Pokemon. (Such as Alolan forms.) + * This list dose not include the normal form. + * The normal form pokemon is this pokemon itself. + */ + public final List forms; + /** * Pokemon name for OCR, this is what you saw in PokemonGo app. */ @@ -71,6 +79,7 @@ public Pokemon(String name, String displayName, int number, int baseAttack, int this.baseStamina = baseStamina; this.devoNumber = devoNumber; this.evolutions = new ArrayList<>(); + this.forms = new ArrayList<>(); this.candyEvolutionCost = candyEvolutionCost; } diff --git a/app/src/main/java/com/kamron/pogoiv/scanlogic/PokemonNameCorrector.java b/app/src/main/java/com/kamron/pogoiv/scanlogic/PokemonNameCorrector.java index d5ae6497c..88f029a8d 100644 --- a/app/src/main/java/com/kamron/pogoiv/scanlogic/PokemonNameCorrector.java +++ b/app/src/main/java/com/kamron/pogoiv/scanlogic/PokemonNameCorrector.java @@ -91,11 +91,11 @@ public PokeDist getPossiblePokemon(@NonNull ScanData scanData) { //3.1 Azuril and marill have the same evolution cost, but different types. if (scanData.getCandyName().toLowerCase().contains(pokeInfoCalculator.get(182).name.toLowerCase()) - && (scanData.getEvolutionCandyCost().get() != -1)){ //its not an azumarill + && (scanData.getEvolutionCandyCost().get() != -1)) { //its not an azumarill //if the scanned data contains the type water, it must be a marill, as azuril is normal type. - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(2))){ + if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(2))) { guess = new PokeDist(pokeInfoCalculator.get(182), 0); - } else{ + } else { guess = new PokeDist(pokeInfoCalculator.get(297), 0); } } @@ -132,171 +132,45 @@ public PokeDist getPossiblePokemon(@NonNull ScanData scanData) { } - //6. All else failed: make a wild guess based only on closest name match - if (guess.pokemon == null) { - guess = getNicknameGuess(scanData.getPokemonName(), pokeInfoCalculator.getPokedex()); - } - - //Check if the found pokemon should be alolan variant or not. - PokeDist aloGuess = null; - if (guess != null) { - if (guess.pokemon != null) { - if (scanData.getPokemonType() != null){ - if (scanData.getPokemonType().equals("") == false){ - aloGuess = checkForAlolanVariant(guess, scanData); - } - } + //6. Check if the found pokemon should be alolan variant or not. + if (scanData != null && scanData.getPokemonType() != null) { + PokeDist alolanGuess = checkAlolanVariant(guess, scanData); + if (alolanGuess != null) { + guess = alolanGuess; } + } - if (aloGuess != null) { - guess = aloGuess; + //7. All else failed: make a wild guess based only on closest name match + if (guess.pokemon == null) { + guess = getNicknameGuess(scanData.getPokemonName(), pokeInfoCalculator.getPokedex()); } + //if (guess.pokemon.number) return guess; } - /** - * Checks if a pokemon has an alolan variant, and if it does, checks if the scanned values has typing (Rock, - * grass etc) that fits the alolan or normal variant. IF it fits the alolan variant, returns a pokedist - * containing the alolan result, otherwise returns null. - * value - * - * @param guess The already calculated pokemon. - * @param scanData The scanned pokemon data - * @return The alolan variant if the scanned typing matches alolan, or null. - */ - private PokeDist checkForAlolanVariant(PokeDist guess, ScanData scanData) { + private PokeDist checkAlolanVariant(PokeDist guess, + ScanData scanData) { + try { + switch (guess.pokemon.number) { + case (102): // Exeggutor + // check types including dragon + if (scanData.getPokemonType().toLowerCase().contains( + pokeInfoCalculator.getTypeName(14).toLowerCase())) { + return new PokeDist(pokeInfoCalculator.get(102).forms.get(0), 0); + } + break; - System.out.println("asdasdasd exeggutor" + pokeInfoCalculator.get("alolan exeggutor").number); - if (guess.pokemon.number == 102) {//pokeInfoCalculator.get("exeggutor").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(14))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(389), 0); - return aloGuess; - } - } + default: + // do nothing - System.out.println("asdasdasd rattata" + pokeInfoCalculator.get("alolan rattata").number); - if (guess.pokemon.number == 18) {//pokeInfoCalculator.get("rattata").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(15))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(390), 0); - return aloGuess; - } - } - System.out.println("asdasdasd raticate" + pokeInfoCalculator.get("alolan raticate").number); - if (guess.pokemon.number == 19) {//pokeInfoCalculator.get("raticate").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(15))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(391), 0); - return aloGuess; - } - } - System.out.println("asdasdasd raichu" + pokeInfoCalculator.get("alolan raichu").number); - if (guess.pokemon.number == 25) {//pokeInfoCalculator.get("raichu").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(10))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(392), 0); - return aloGuess; - } - } - System.out.println("asdasdasd sandshrew" + pokeInfoCalculator.get("alolan sandshrew").number); - if (guess.pokemon.number == 26 ) {//pokeInfoCalculator.get("sandshrew").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(5))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(393), 0); - return aloGuess; - } - } - System.out.println("asdasdasd sandslash" + pokeInfoCalculator.get("alolan sandslash").number); - if (guess.pokemon.number ==27) {//pokeInfoCalculator.get("sandslash").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(5))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(394), 0); - return aloGuess; - } - } - System.out.println("asdasdasd vulpix" + pokeInfoCalculator.get("alolan vulpix").number); - if (guess.pokemon.number == 36) {//pokeInfoCalculator.get("vulpix").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(5))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(395), 0); - return aloGuess; } + } catch (NullPointerException e) { + return null; } - System.out.println("asdasdasd ninetales" + pokeInfoCalculator.get("alolan ninetales").number); - if (guess.pokemon.number == 37) {//pokeInfoCalculator.get("ninetales").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(5))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(396), 0); - return aloGuess; - } - } - System.out.println("asdasdasd diglett" + pokeInfoCalculator.get("alolan diglett").number); - if (guess.pokemon.number == 49) {//pokeInfoCalculator.get("diglett").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(16))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(397), 0); - return aloGuess; - } - } - System.out.println("asdasdasd dugtrio" + pokeInfoCalculator.get("alolan dugtrio").number); - if (guess.pokemon.number == 50) {//pokeInfoCalculator.get("dugtrio").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(16))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(398), 0); - return aloGuess; - } - } - System.out.println("asdasdasd meowth" + pokeInfoCalculator.get("alolan meowth").number); - if (guess.pokemon.number == 51) {//pokeInfoCalculator.get("meowth").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(15))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(399), 0); - return aloGuess; - } - } - System.out.println("asdasdasd persian" + pokeInfoCalculator.get("alolan persian").number); - if (guess.pokemon.number == 52) {//pokeInfoCalculator.get("persian").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(15))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(400), 0); - return aloGuess; - } - } - System.out.println("asdasdasd geodude" + pokeInfoCalculator.get("alolan geodude").number); - if (guess.pokemon.number == 73) {//pokeInfoCalculator.get("geodude").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(3))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(401), 0); - return aloGuess; - } - } - System.out.println("asdasdasd graveler" + pokeInfoCalculator.get("alolan graveler").number); - if (guess.pokemon.number == 74) {//pokeInfoCalculator.get("graveler").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(3))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(402), 0); - return aloGuess; - } - } - System.out.println("asdasdasd golem" + pokeInfoCalculator.get("alolan golem").number); - if (guess.pokemon.number == 75) {//pokeInfoCalculator.get("golem").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(3))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(403), 0); - return aloGuess; - } - } - System.out.println("asdasdasd grimer" + pokeInfoCalculator.get("alolan grimer").number); - if (guess.pokemon.number == 87) {//pokeInfoCalculator.get("grimer").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(15))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(404), 0); - return aloGuess; - } - } - System.out.println("asdasdasd muk" + pokeInfoCalculator.get("alolan muk").number); - if (guess.pokemon.number == 88) {//pokeInfoCalculator.get("muk").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(15))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(405), 0); - return aloGuess; - } - } - System.out.println("asdasdasd marowak" + pokeInfoCalculator.get("alolan marowak").number); - if (guess.pokemon.number == 104) {//pokeInfoCalculator.get("marowak").number) { - if (scanData.getPokemonType().contains(pokeInfoCalculator.getTypeName(1))) { - PokeDist aloGuess = new PokeDist(pokeInfoCalculator.get(406), 0); - return aloGuess; - } - } return null; } @@ -334,6 +208,7 @@ private ArrayList getCandyNameEvolutionCostGuess(ArrayList bes * @param pokemons the pokemon list to search the nickname into. * @return a pokedist representing the search result. */ + private PokeDist getNicknameGuess(String poketext, List pokemons) { //if there's no perfect match, get the pokemon that best matches the nickname within the best guess evo-line Pokemon bestMatchPokemon = null; diff --git a/app/src/main/java/com/kamron/pogoiv/scanlogic/ScanResult.java b/app/src/main/java/com/kamron/pogoiv/scanlogic/ScanResult.java index fd3aeae98..de55672b8 100644 --- a/app/src/main/java/com/kamron/pogoiv/scanlogic/ScanResult.java +++ b/app/src/main/java/com/kamron/pogoiv/scanlogic/ScanResult.java @@ -57,8 +57,8 @@ public ScanResult(@NonNull PokemonNameCorrector corrector, @NonNull ScanData sca /** * Creates a holder object for IV scan results. * - * @param pokemon Which pokemon it is - * @param scanData The OCR results + * @param pokemon Which pokemon it is + * @param scanData The OCR results */ public ScanResult(@NonNull Pokemon pokemon, @NonNull ScanData scanData) { this.pokemon = pokemon; @@ -68,9 +68,9 @@ public ScanResult(@NonNull Pokemon pokemon, @NonNull ScanData scanData) { this.gender = scanData.getPokemonGender(); LinkedHashSet m; - try{ + try { m = MovesetsManager.getMovesetsForDexNumber(pokemon.number); - }catch(NullPointerException e){ + } catch (NullPointerException e) { m = null; } @@ -362,9 +362,10 @@ private void refineByHighest(@NonNull HashSet high return; } - Boolean[] knownAttDefSta = { highestStats.contains(AppraisalManager.HighestStat.ATK), - highestStats.contains(AppraisalManager.HighestStat.DEF), - highestStats.contains(AppraisalManager.HighestStat.STA) }; + Boolean[] knownAttDefSta = { + highestStats.contains(AppraisalManager.HighestStat.ATK), + highestStats.contains(AppraisalManager.HighestStat.DEF), + highestStats.contains(AppraisalManager.HighestStat.STA)}; ArrayList refinedList = new ArrayList<>(); for (IVCombination comb : iVCombinations) { if (Arrays.equals(comb.getHighestStatSignature(), knownAttDefSta)) { @@ -378,6 +379,7 @@ private void refineByHighest(@NonNull HashSet high /** * Removes any iv combination that is outside the scope of the input percentage range. + * * @param range IV percent range */ private void refineByAppraisalPercentageRange(AppraisalManager.IVSumRange range) { @@ -398,6 +400,7 @@ private void refineByAppraisalPercentageRange(AppraisalManager.IVSumRange range) /** * Removes any iv combination where the highest IV is outside the scope of he input range. + * * @param range Range of the highest stat IV value */ private void refineByAppraisalIVRange(AppraisalManager.IVValueRange range) { diff --git a/app/src/main/res/values-de/pokemons.xml b/app/src/main/res/values-de/pokemons.xml index 70762f9d8..3508b9910 100644 --- a/app/src/main/res/values-de/pokemons.xml +++ b/app/src/main/res/values-de/pokemons.xml @@ -388,9 +388,6 @@ Groudon Rayquaza Jirachi - Deoxys_Defense - Deoxys_Attack - Deoxys_Speed Deoxys \ No newline at end of file diff --git a/app/src/main/res/values-fr/pokemons.xml b/app/src/main/res/values-fr/pokemons.xml index a224f9e9a..f7df0cc59 100644 --- a/app/src/main/res/values-fr/pokemons.xml +++ b/app/src/main/res/values-fr/pokemons.xml @@ -388,9 +388,6 @@ Groudon Rayquaza Jirachi - Deoxys_Defense - Deoxys_Attack - Deoxys_Speed Deoxys \ No newline at end of file diff --git a/app/src/main/res/values/forms.xml b/app/src/main/res/values/forms.xml new file mode 100644 index 000000000..a882445b9 --- /dev/null +++ b/app/src/main/res/values/forms.xml @@ -0,0 +1,43 @@ + + + + 3 + 1 + + + + + Attack Forme + Defense Forme + Speed Forme + + Alola Form + + + + + 414 + 144 + 230 + + 230 + + + + + 46 + 330 + 218 + + 158 + + + + + 100 + 100 + 100 + + 190 + + \ No newline at end of file diff --git a/app/src/main/res/values/integers.xml b/app/src/main/res/values/integers.xml index e8ab3d964..d00f0bf04 100644 --- a/app/src/main/res/values/integers.xml +++ b/app/src/main/res/values/integers.xml @@ -2371,4 +2371,394 @@ 387 388 + + + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + 1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + -1 + 0 + diff --git a/app/src/main/res/values/pokemons.xml b/app/src/main/res/values/pokemons.xml index 820ef7a4b..38b94d2dc 100644 --- a/app/src/main/res/values/pokemons.xml +++ b/app/src/main/res/values/pokemons.xml @@ -389,9 +389,6 @@ Groudon Rayquaza Jirachi - Deoxys_Defense - Deoxys_Attack - Deoxys_Speed Deoxys