@Override
	public boolean setStarters(List<Pokemon> newStarters) {
		if (newStarters.size() != 3) {
			return false;
		}
		for (Pokemon pkmn : newStarters) {
			if (!isInGame(pkmn)) {
				return false;
			}
		}
		// Support Deoxys/Mew starters in E/FR/LG
		if (!havePatchedObedience) {
			attemptObedienceEvolutionPatches();
		}
		int baseOffset = romEntry.getValue("StarterPokemon");

		int starter0 = pokeNumTo3GIndex(newStarters.get(0).number);
		int starter1 = pokeNumTo3GIndex(newStarters.get(1).number);
		int starter2 = pokeNumTo3GIndex(newStarters.get(2).number);
		if (romEntry.romType == RomType_Ruby
				|| romEntry.romType == RomType_Sapp
				|| romEntry.romType == RomType_Em) {

			// US
			// order: 0, 1, 2
			writeWord(baseOffset, starter0);
			writeWord(baseOffset + 2, starter1);
			writeWord(baseOffset + 4, starter2);

		} else {

			// frlg:

			// US
			// order: 0, 1, 2
			writeWord(baseOffset, starter0);
			writeWord(baseOffset + 5, starter1);

			writeWord(baseOffset + 515, starter1);
			writeWord(baseOffset + 520, starter2);

			writeWord(baseOffset + 461, starter2);
			writeWord(baseOffset + 466, starter0);

			if (romEntry.romCode.charAt(3) != 'J'
					&& romEntry.romCode.charAt(3) != 'B') {
				// Update PROF. Oak's descriptions for each starter
				// First result for each STARTERNAME is the text we need
				writeFRLGStarterText(pokes[1].name, newStarters.get(0),
						"you want to go with\\nthe ");
				writeFRLGStarterText(pokes[4].name, newStarters.get(1),
						"you’re claiming the\\n");
				writeFRLGStarterText(pokes[7].name, newStarters.get(2),
						"you’ve decided on the\\n");
			}
		}
		return true;

	}