@Override
	public void setFieldTMs(List<Integer> fieldTMs) {
		Iterator<Integer> iterTMs = fieldTMs.iterator();
		int[] givenTMs = new int[256];

		for (int offset : itemOffs) {
			int itemHere = rom[offset] & 0xFF;
			if (allowedItems.isTM(itemHere)) {
				// Cache replaced TMs to duplicate bug catching contest TM
				if (givenTMs[itemHere] != 0) {
					rom[offset] = (byte) givenTMs[itemHere];
				} else {
					// Replace this with a TM from the list
					int tm = iterTMs.next();
					if (tm >= 1 && tm <= 4) {
						tm += 190;
					} else if (tm >= 5 && tm <= 28) {
						tm += 191;
					} else {
						tm += 192;
					}
					givenTMs[itemHere] = tm;
					rom[offset] = (byte) tm;
				}
			}
		}
	}