@Override
	public List<Evolution> getEvolutions() {
		int baseOffset = romEntry.getValue("PokemonEvolutions");
		List<Evolution> evos = new ArrayList<Evolution>();
		List<Evolution> evosForThisPoke = new ArrayList<Evolution>();
		for (int i = 1; i <= 386; i++) {
			evosForThisPoke.clear();
			int idx = pokeNumTo3GIndex(i);
			int evoOffset = baseOffset + (idx - 1) * 0x28;
			for (int j = 0; j < 5; j++) {
				int method = readWord(evoOffset + j * 8);
				int evolvingTo = readWord(evoOffset + j * 8 + 4);
				if (method >= 1 && method <= 15 && evolvingTo >= 1
						&& evolvingTo <= 411) {
					evolvingTo = poke3GIndexToNum(evolvingTo);
					Evolution evo = new Evolution(i, evolvingTo, true);
					if (!evos.contains(evo)) {
						evos.add(evo);
						evosForThisPoke.add(evo);
					}
				}
			}
			// split evos don't carry stats
			if (evosForThisPoke.size() > 1) {
				for (Evolution e : evosForThisPoke) {
					e.carryStats = false;
				}
			}
		}
		return evos;
	}