private void processMapAt(int offset, int mapBank, int mapNumber) {

		// second map header
		int smhBank = rom[offset] & 0xFF;
		int smhPointer = readWord(offset + 3);
		int smhOffset = calculateOffset(smhBank, smhPointer);

		// map name
		int mapLandmark = rom[offset + 5] & 0xFF;
		mapNames[mapBank][mapNumber] = landmarkNames[mapLandmark];

		// event header
		// event header is in same bank as script header
		int ehBank = rom[smhOffset + 6] & 0xFF;
		int ehPointer = readWord(smhOffset + 9);
		int ehOffset = calculateOffset(ehBank, ehPointer);

		// skip over filler
		ehOffset += 2;

		// warps
		int warpCount = rom[ehOffset++] & 0xFF;
		// warps are skipped
		ehOffset += warpCount * 5;

		// xy triggers
		int triggerCount = rom[ehOffset++] & 0xFF;
		// xy triggers are skipped
		ehOffset += triggerCount * 8;

		// signposts
		int signpostCount = rom[ehOffset++] & 0xFF;
		// we do care about these
		for (int sp = 0; sp < signpostCount; sp++) {
			// type=7 are hidden items
			int spType = rom[ehOffset + sp * 5 + 2] & 0xFF;
			if (spType == 7) {
				// get event pointer
				int spPointer = readWord(ehOffset + sp * 5 + 3);
				int spOffset = calculateOffset(ehBank, spPointer);
				// item is at spOffset+2 (first two bytes are the flag id)
				itemOffs.add(spOffset + 2);
			}
		}
		// now skip past them
		ehOffset += signpostCount * 5;

		// visible objects/people
		int peopleCount = rom[ehOffset++] & 0xFF;
		// we also care about these
		for (int p = 0; p < peopleCount; p++) {
			// color_function & 1 = 1 if itemball
			int pColorFunction = rom[ehOffset + p * 13 + 7];
			if ((pColorFunction & 1) == 1) {
				// get event pointer
				int pPointer = readWord(ehOffset + p * 13 + 9);
				int pOffset = calculateOffset(ehBank, pPointer);
				// item is at the pOffset for non-hidden items
				itemOffs.add(pOffset);
			}
		}

	}