@Override
	public List<IngameTrade> getIngameTrades() {
		List<IngameTrade> trades = new ArrayList<IngameTrade>();

		// info
		int tableOffset = romEntry.getValue("TradeTableOffset");
		int tableSize = romEntry.getValue("TradeTableSize");
		int[] unused = romEntry.arrayEntries.get("TradesUnused");
		int unusedOffset = 0;
		int entryLength = 60;

		for (int entry = 0; entry < tableSize; entry++) {
			if (unusedOffset < unused.length && unused[unusedOffset] == entry) {
				unusedOffset++;
				continue;
			}
			IngameTrade trade = new IngameTrade();
			int entryOffset = tableOffset + entry * entryLength;
			trade.nickname = readVariableLengthString(entryOffset);
			trade.givenPokemon = pokes[poke3GIndexToNum(readWord(entryOffset + 12))];
			trade.ivs = new int[6];
			for (int i = 0; i < 6; i++) {
				trade.ivs[i] = rom[entryOffset + 14 + i] & 0xFF;
			}
			trade.otId = readWord(entryOffset + 24);
			trade.item = readWord(entryOffset + 40);
			trade.otName = readVariableLengthString(entryOffset + 43);
			trade.requestedPokemon = pokes[poke3GIndexToNum(readWord(entryOffset + 56))];
			trades.add(trade);
		}

		return trades;

	}