package com.rafa_99.pkrandom.pokemon; /*----------------------------------------------------------------------------*/ /*-- Trainer.java - represents a Trainer's pokemon set/other details. --*/ /*-- --*/ /*-- Part of "Universal Pokemon Randomizer ZX" by the UPR-ZX team --*/ /*-- Originally part of "Universal Pokemon Randomizer" by rafa_99 --*/ /*-- 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 . --*/ /*----------------------------------------------------------------------------*/ import java.util.ArrayList; import java.util.List; public class Trainer implements Comparable { public int offset; public List pokemon = new ArrayList<>(); public String tag; public boolean importantTrainer; // This value has some flags about the trainer's pokemon (e.g. if they have items or custom moves) public int poketype; public String name; public int trainerclass; public String fullDisplayName; public MultiBattleStatus multiBattleStatus = MultiBattleStatus.NEVER; public int forceStarterPosition = -1; public String toString() { StringBuilder sb = new StringBuilder("["); if (fullDisplayName != null) { sb.append(fullDisplayName).append(" "); } else if (name != null) { sb.append(name).append(" "); } if (trainerclass != 0) { sb.append("(").append(trainerclass).append(") - "); } sb.append(String.format("%x", offset)); sb.append(" => "); boolean first = true; for (TrainerPokemon p : pokemon) { if (!first) { sb.append(','); } sb.append(p.pokemon.name).append(" Lv").append(p.level); first = false; } sb.append(']'); if (tag != null) { sb.append(" (").append(tag).append(")"); } return sb.toString(); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + offset; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Trainer other = (Trainer) obj; return offset == other.offset; } @Override public int compareTo(Trainer o) { return offset - o.offset; } public boolean isBoss() { return tag != null && (tag.startsWith("ELITE") || tag.startsWith("CHAMPION") || tag.startsWith("UBER") || tag.endsWith("LEADER")); } public boolean isImportant() { return tag != null && (tag.startsWith("RIVAL") || tag.startsWith("FRIEND") || tag.endsWith("STRONG")); } public boolean skipImportant() { return ((tag != null) && (tag.startsWith("RIVAL1-") || tag.startsWith("FRIEND1-") || tag.endsWith("NOTSTRONG"))); } public void setPokemonHaveItems(boolean haveItems) { if (haveItems) { this.poketype |= 2; } else { // https://stackoverflow.com/a/1073328 this.poketype = poketype & ~2; } } public boolean pokemonHaveItems() { // This flag seems consistent for all gens return (this.poketype & 2) == 2; } public boolean pokemonHaveCustomMoves() { // This flag seems consistent for all gens return (this.poketype & 1) == 1; } public enum MultiBattleStatus { NEVER, POTENTIAL, ALWAYS } }