private void parseMapArchive(ByteBuffer buffer, int x, int y, int z, int xOff, int yOff, int cX, int cY, int offSettings, boolean skipFloors) {
	anInt3125++;
	if (offSettings != 1) {
	    if (offSettings == 2) {
		yOff = 1;
		xOff = 1;
	    } else if (offSettings == 3)
		xOff = 1;
	} else
	    yOff = 1;
	if (x < 0 || maximumX <= x || y < 0 || y >= maximumY) {
	    for (;;) {
		int opcode = buffer.getUByte();
		if ((opcode ^ 0xffffffff) == -1)
		    break;
		if ((opcode ^ 0xffffffff) == -2) {
		    buffer.getUByte();
		    break;
		}
		if ((opcode ^ 0xffffffff) >= -50)
		    buffer.getUByte();
	    }
	} else {
	    if (!aBoolean3109 && !skipFloors)
		Class348_Sub33.settingFlags[z][x][y] = (byte) 0;
	    for (;;) {
		int opcode = buffer.getUByte();
		if (opcode == 0) {
		    if (aBoolean3109)
			heightmap[0][xOff + x][yOff + y] = 0;
		    else if ((z ^ 0xffffffff) != -1)
			heightmap[z][xOff + x][yOff + y] = (heightmap[z - 1][x + xOff][y + yOff]) - 960;
		    else
			heightmap[0][xOff + x][y + yOff]= (8 * -(Class318_Sub1_Sub3_Sub4.getNoise(cX + 932731, cY + 556238)) << 2);
		    break;
		}
		if (opcode == 1) {
		    int value = buffer.getUByte();
		    if (aBoolean3109)
			heightmap[0][x + xOff][y + yOff] = value * 8 << 2;
		    else {
			if (value == 1)
			    value = 0;
			if (z != 0)
			    heightmap[z][xOff + x][yOff + y] = (heightmap[z - 1][xOff + x][y + yOff]) - (value * 8 << 2);
			else
			    heightmap[0][x + xOff][y + yOff] = 8 * -value << 2;
		    }
		    break;
		}
		if (opcode <= 49) {
		    if (skipFloors)
			buffer.getUByte();
		    else {
			overlayIds[z][x][y] = buffer.getByte();
			overlayShading[z][x][y] = (byte) ((opcode - 2) / 4);
			overlayRotation[z][x][y] = (byte) Class139.bitAnd(3, opcode + offSettings - 2);
		    }
		} else if (opcode <= 81) {
		    if (!aBoolean3109 && !skipFloors)
			Class348_Sub33.settingFlags[z][x][y] = (byte) (opcode - 49);
		} else if (!skipFloors)
		    underlayIds[z][x][y] = (byte) (opcode - 81);
	    }
	}
    }