@Override
	public void setMoveTutorCompatibility(Map<Pokemon, boolean[]> compatData) {
		if (!hasMoveTutors()) {
			return;
		}
		int amount = romEntry.getInt("MoveTutorCount");
		int baseOffset = romEntry.getInt("MoveTutorCompatOffset");
		int bytesPer = romEntry.getInt("MoveTutorCompatBytesCount");
		try {
			byte[] mtcFile;
			if (romEntry.romType == Type_HGSS) {
				mtcFile = readFile(romEntry.getString("MoveTutorCompat"));
			} else {
				mtcFile = readOverlay(romEntry
						.getInt("MoveTutorCompatOvlNumber"));
			}
			for (Map.Entry<Pokemon, boolean[]> compatEntry : compatData
					.entrySet()) {
				Pokemon pkmn = compatEntry.getKey();
				boolean[] flags = compatEntry.getValue();
				for (int j = 0; j < bytesPer; j++) {
					int offsHere = baseOffset + (pkmn.number - 1) * bytesPer
							+ j;
					if (j * 8 + 8 <= amount) {
						// entirely new byte
						mtcFile[offsHere] = getByteFromFlags(flags, j * 8 + 1);
					} else if (j * 8 < amount) {
						// need some of the original byte
						int newByte = getByteFromFlags(flags, j * 8 + 1) & 0xFF;
						int oldByteParts = (mtcFile[offsHere] >>> (8 - amount + j * 8)) << (8 - amount + j * 8);
						mtcFile[offsHere] = (byte) (newByte | oldByteParts);
					}
					// else do nothing to the byte
				}
			}
			if (romEntry.romType == Type_HGSS) {
				writeFile(romEntry.getString("MoveTutorCompat"), mtcFile);
			} else {
				writeOverlay(romEntry.getInt("MoveTutorCompatOvlNumber"),
						mtcFile);
			}
		} catch (IOException e) {
		}
	}