private void recreateModelData(int tilesWide, int tilesHigh, int oam[], int objectTypes[], byte[][] newMask) {
		_tilesWide = tilesWide;
		_tilesHigh = tilesHigh;
		_oam = new int[oam.length];
		System.arraycopy(oam,0,_oam,0,oam.length);
		_objectTypes = new int[objectTypes.length];
		System.arraycopy(objectTypes,0,_objectTypes,0,objectTypes.length);
		
		if (newMask == null) {
			_mask = new byte[_tilesWide * _tilesHigh][16]; // all zero initially
		} else if (newMask.length != _tilesWide * _tilesHigh) {
			_mask = new byte[_tilesWide * _tilesHigh][16]; // all zero initially
		} else {
			_mask = newMask;
		}
		_insertionPoints = new int[_tilesWide * _tilesHigh]; // all zero

		int index = 0;
		for (int y = 0; y < _tilesHigh; y++) {
			for (int x = 0; x < _tilesWide; x++) {
				if ((x % 2 == 0) && (y % 2 == 0)) {
					// new meta entry
					_metaTileList.add(new MetaTile(0, 0, 0, 0, oam[index],objectTypes[index]));
				}
				index++;
			}
		}
		recreateDisplayData();
	}