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

		// info
		int tableOffset = romEntry.getValue("TradeTableOffset");
		int tableSize = romEntry.getValue("TradeTableSize");
		int nicknameLength = romEntry.getValue("TradeNameLength");
		int otLength = romEntry.getValue("TradeOTLength");
		int[] unused = romEntry.arrayEntries.get("TradesUnused");
		int unusedOffset = 0;
		int entryLength = nicknameLength + otLength + 10;

		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.requestedPokemon = pokes[rom[entryOffset + 1] & 0xFF];
			trade.givenPokemon = pokes[rom[entryOffset + 2] & 0xFF];
			trade.nickname = readString(entryOffset + 3, nicknameLength);
			int atkdef = rom[entryOffset + 3 + nicknameLength] & 0xFF;
			int spdspc = rom[entryOffset + 4 + nicknameLength] & 0xFF;
			trade.ivs = new int[] { (atkdef >> 4) & 0xF, atkdef & 0xF,
					(spdspc >> 4) & 0xF, spdspc & 0xF };
			trade.item = rom[entryOffset + 5 + nicknameLength] & 0xFF;
			trade.otId = readWord(entryOffset + 6 + nicknameLength);
			trade.otName = readString(entryOffset + 8 + nicknameLength,
					otLength);
			trades.add(trade);
		}

		return trades;

	}