@Override
	public void setEncounters(boolean useTimeOfDay,
			List<EncounterSet> encounters) {
		// Support Deoxys/Mew catches in E/FR/LG
		if (!havePatchedObedience) {
			attemptObedienceEvolutionPatches();
		}

		int startOffs = romEntry.getValue("WildPokemon");
		Iterator<EncounterSet> encounterAreas = encounters.iterator();
		Set<Integer> seenOffsets = new TreeSet<Integer>();
		int offs = startOffs;
		while (true) {
			// Read pointers
			int bank = rom[offs] & 0xFF;
			int map = rom[offs + 1] & 0xFF;
			if (bank == 0xFF && map == 0xFF) {
				break;
			}

			int grassPokes = readPointer(offs + 4);
			int waterPokes = readPointer(offs + 8);
			int treePokes = readPointer(offs + 12);
			int fishPokes = readPointer(offs + 16);

			// Add pokemanz
			if (grassPokes != -134217728 && rom[grassPokes] != 0
					&& !seenOffsets.contains(readPointer(grassPokes + 4))) {
				writeWildArea(grassPokes, 12, encounterAreas.next());
				seenOffsets.add(readPointer(grassPokes + 4));
			}
			if (waterPokes != -134217728 && rom[waterPokes] != 0
					&& !seenOffsets.contains(readPointer(waterPokes + 4))) {
				writeWildArea(waterPokes, 5, encounterAreas.next());
				seenOffsets.add(readPointer(waterPokes + 4));
			}
			if (treePokes != -134217728 && rom[treePokes] != 0
					&& !seenOffsets.contains(readPointer(treePokes + 4))) {
				writeWildArea(treePokes, 5, encounterAreas.next());
				seenOffsets.add(readPointer(treePokes + 4));
			}
			if (fishPokes != -134217728 && rom[fishPokes] != 0
					&& !seenOffsets.contains(readPointer(fishPokes + 4))) {
				writeWildArea(fishPokes, 10, encounterAreas.next());
				seenOffsets.add(readPointer(fishPokes + 4));
			}

			offs += 20;
		}
	}