@Override
	public boolean setStarters(List<Pokemon> newStarters) {
		if (newStarters.size() != 3) {
			return false;
		}
		for (Pokemon pkmn : newStarters) {
			if (!isInGame(pkmn)) {
				return false;
			}
		}

		// Actually write

		for (int i = 0; i < 3; i++) {
			byte starter = (byte) newStarters.get(i).number;
			int[] offsets = romEntry.arrayEntries.get("StarterOffsets"
					+ (i + 1));
			for (int offset : offsets) {
				rom[offset] = starter;
			}
		}

		// Attempt to replace text
		if (romEntry.getValue("CanChangeStarterText") > 0) {
			List<Integer> cyndaTexts = RomFunctions.search(rom,
					traduire("CYNDAQUIL"));
			int offset = cyndaTexts.get(romEntry.isCrystal ? 1 : 0);
			String pokeName = newStarters.get(0).name;
			writeFixedLengthScriptString(pokeName + "?\\e", offset,
					lengthOfStringAt(offset) + 1);

			List<Integer> totoTexts = RomFunctions.search(rom,
					traduire("TOTODILE"));
			offset = totoTexts.get(romEntry.isCrystal ? 1 : 0);
			pokeName = newStarters.get(1).name;
			writeFixedLengthScriptString(pokeName + "?\\e", offset,
					lengthOfStringAt(offset) + 1);

			List<Integer> chikoTexts = RomFunctions.search(rom,
					traduire("CHIKORITA"));
			offset = chikoTexts.get(romEntry.isCrystal ? 1 : 0);
			pokeName = newStarters.get(2).name;
			writeFixedLengthScriptString(pokeName + "?\\e", offset,
					lengthOfStringAt(offset) + 1);
		}
		return true;
	}