diff options
Diffstat (limited to 'src/com/pkrandom/pokemon/GenRestrictions.java')
-rwxr-xr-x | src/com/pkrandom/pokemon/GenRestrictions.java | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/src/com/pkrandom/pokemon/GenRestrictions.java b/src/com/pkrandom/pokemon/GenRestrictions.java new file mode 100755 index 0000000..7fea8c3 --- /dev/null +++ b/src/com/pkrandom/pokemon/GenRestrictions.java @@ -0,0 +1,144 @@ +package com.pkrandom.pokemon; + +/*----------------------------------------------------------------------------*/ +/*-- GenRestrictions.java - stores what generations the user has limited. --*/ +/*-- --*/ +/*-- Part of "Universal Pokemon Randomizer ZX" by the UPR-ZX team --*/ +/*-- Pokemon and any associated names and the like are --*/ +/*-- trademark and (C) Nintendo 1996-2020. --*/ +/*-- --*/ +/*-- The custom code written here is licensed under the terms of the GPL: --*/ +/*-- --*/ +/*-- This program is free software: you can redistribute it and/or modify --*/ +/*-- it under the terms of the GNU General Public License as published by --*/ +/*-- the Free Software Foundation, either version 3 of the License, or --*/ +/*-- (at your option) any later version. --*/ +/*-- --*/ +/*-- This program is distributed in the hope that it will be useful, --*/ +/*-- but WITHOUT ANY WARRANTY; without even the implied warranty of --*/ +/*-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --*/ +/*-- GNU General Public License for more details. --*/ +/*-- --*/ +/*-- You should have received a copy of the GNU General Public License --*/ +/*-- along with this program. If not, see <http://www.gnu.org/licenses/>. --*/ +/*----------------------------------------------------------------------------*/ + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +public class GenRestrictions { + + public boolean allow_gen1, allow_gen2, allow_gen3, allow_gen4, allow_gen5, allow_gen6, allow_gen7; + public boolean allow_evolutionary_relatives; + + public GenRestrictions() { + } + + public GenRestrictions(int state) { + allow_gen1 = (state & 1) > 0; + allow_gen2 = (state & 2) > 0; + allow_gen3 = (state & 4) > 0; + allow_gen4 = (state & 8) > 0; + allow_gen5 = (state & 16) > 0; + allow_gen6 = (state & 32) > 0; + allow_gen7 = (state & 64) > 0; + allow_evolutionary_relatives = (state & 128) > 0; + } + + public boolean nothingSelected() { + return !allow_gen1 && !allow_gen2 && !allow_gen3 && !allow_gen4 && !allow_gen5 && !allow_gen6 && !allow_gen7; + } + + public int toInt() { + return makeIntSelected(allow_gen1, allow_gen2, allow_gen3, allow_gen4, allow_gen5, allow_gen6, allow_gen7, + allow_evolutionary_relatives); + } + + public void limitToGen(int generation) { + if (generation < 2) { + allow_gen2 = false; + } + if (generation < 3) { + allow_gen3 = false; + } + if (generation < 4) { + allow_gen4 = false; + } + if (generation < 5) { + allow_gen5 = false; + } + if (generation < 6) { + allow_gen6 = false; + } + if (generation < 7) { + allow_gen7 = false; + } + } + + public boolean allowTrainerSwapMegaEvolvables(boolean isXY, boolean isTypeThemedTrainers) { + if (isTypeThemedTrainers) { + return megaEvolutionsOfEveryTypeAreInPool(isXY); + } else { + return megaEvolutionsAreInPool(isXY); + } + } + + public boolean megaEvolutionsOfEveryTypeAreInPool(boolean isXY) { + Set<Type> typePool = new HashSet<>(); + if (allow_gen1) { + typePool.addAll(Arrays.asList(Type.GRASS, Type.POISON, Type.FIRE, Type.FLYING, Type.WATER, Type.PSYCHIC, + Type.GHOST, Type.NORMAL, Type.BUG, Type.ROCK)); + } + if (allow_gen2) { + typePool.addAll(Arrays.asList(Type.ELECTRIC, Type.BUG, Type.STEEL, Type.FIGHTING, Type.DARK, + Type.FIRE, Type.ROCK)); + if (!isXY) { + typePool.add(Type.GROUND); + } + } + if (allow_gen3) { + typePool.addAll(Arrays.asList(Type.FIRE, Type.FIGHTING, Type.PSYCHIC, Type.FAIRY, Type.STEEL, Type.ROCK, + Type.ELECTRIC, Type.GHOST, Type.DARK, Type.DRAGON)); + if (!isXY) { + typePool.addAll(Arrays.asList(Type.GRASS, Type.WATER, Type.GROUND, Type.FLYING, Type.ICE)); + } + } + if (allow_gen4) { + typePool.addAll(Arrays.asList(Type.DRAGON, Type.GROUND, Type.FIGHTING, Type.STEEL, Type.GRASS, Type.ICE)); + if (!isXY) { + typePool.addAll(Arrays.asList(Type.NORMAL, Type.PSYCHIC)); + } + } + if (allow_gen5 && !isXY) { + typePool.add(Type.NORMAL); + } + if (allow_gen6 && !isXY) { + typePool.addAll(Arrays.asList(Type.ROCK, Type.FAIRY)); + } + return typePool.size() == 18; + } + + public boolean megaEvolutionsAreInPool(boolean isXY) { + if (isXY) { + return allow_gen1 || allow_gen2 || allow_gen3 || allow_gen4; + } else { + return allow_gen1 || allow_gen2 || allow_gen3 || allow_gen4 || allow_gen5 || allow_gen6; + } + } + + private int makeIntSelected(boolean... switches) { + if (switches.length > 32) { + // No can do + return 0; + } + int initial = 0; + int state = 1; + for (boolean b : switches) { + initial |= b ? state : 0; + state *= 2; + } + return initial; + } + +} |