for (int y = startY; y < maxY; y++) { for (int x = startX; x < maxX; x++) { count++; Vector3 drawOffset = new Vector3(); Tile tile = tileMatrix.GetLandTile(x, y); int xIndex = x - startX; int yIndex = y - startY; drawOffset.X = xIndex * 44; drawOffset.Y = yIndex * 44; int z = (tile.Z << 2); int vertexIndex = (staticsOffset + ((yIndex * displaySize) + (xIndex))) * 6; int textureIndex = (staticsOffset + ((yIndex * displaySize) + (xIndex))); drawSets[textureIndex].Id = tile.ID; drawSets[textureIndex].DrawType = DrawType.Texture; Artwork.EnsureTextmap(GraphicsDevice, tile.ID); Tile eastTile = tileMatrix.GetLandTile(x + 1, y);//right Tile southTile = tileMatrix.GetLandTile(x, y + 1);//bottom Tile downTile = tileMatrix.GetLandTile(x + 1, y + 1);//bottom right int east = (eastTile.Z - tile.Z) << 2; int south = (southTile.Z - tile.Z) << 2; int down = (downTile.Z - tile.Z) << 2; vertices[vertexIndex].Position = drawOffset + new Vector3(0 - z, 0 - z, 0); vertices[vertexIndex].TextureCoordinate = new Vector2(0, 0); vertices[vertexIndex + 1].Position = drawOffset + new Vector3(44 - z - east, 0 - z - east, 0); vertices[vertexIndex + 1].TextureCoordinate = new Vector2(1, 0); vertices[vertexIndex + 2].Position = drawOffset + new Vector3(44 - z - down, 44 - z - down, 0); vertices[vertexIndex + 2].TextureCoordinate = new Vector2(1, 1); vertices[vertexIndex + 3].Position = drawOffset + new Vector3(0 - z - south, 44 - z - south, 0); vertices[vertexIndex + 3].TextureCoordinate = new Vector2(0, 1); vertices[vertexIndex + 4] = vertices[vertexIndex]; vertices[vertexIndex + 5] = vertices[vertexIndex + 2]; HuedTile[] statics = SortStatics(tileMatrix.GetStaticTiles(x, y)); for (int i = 0; i < statics.Length; i++, staticsOffset++, count++) { int staticIndex = (vertexIndex + 6) + (i * 6); textureIndex++; int heightOffset = 0; for (int a = 0; a < i; a++) { heightOffset = TileData.ItemTable[statics[a].ID & 0x3FFF].CalcHeight; } drawSets[textureIndex].Id = statics[i].ID; drawSets[textureIndex].DrawType = DrawType.Static; Artwork.EnsureStatic(GraphicsDevice, statics[i].ID); Texture2D texture = Artwork.GetTexture(statics[i].ID, DrawType.Static); z = (heightOffset + statics[i].Z) << 2; Vector3[] srcVectors = new Vector3[4]; float width = texture.Width * 1.40f; float height = texture.Height * 1.40f; Vector3 rotationPoint = new Vector3(-width / 2, -height / 2, 0); Matrix rotationMatrix = Matrix.CreateTranslation(rotationPoint) * Matrix.CreateRotationZ(MathHelper.ToRadians(-45)); srcVectors[0] = Vector3.Transform(new Vector3(0, 0 - z, 0), rotationMatrix); srcVectors[1] = Vector3.Transform(new Vector3(width, 0 - z, 0), rotationMatrix); srcVectors[2] = Vector3.Transform(new Vector3(width, height - z, 0), rotationMatrix); srcVectors[3] = Vector3.Transform(new Vector3(0, height - z, 0), rotationMatrix); vertices[staticIndex + 0].Position = drawOffset + srcVectors[0]; vertices[staticIndex + 1].Position = drawOffset + srcVectors[1]; vertices[staticIndex + 2].Position = drawOffset + srcVectors[2]; vertices[staticIndex + 3].Position = drawOffset + srcVectors[3]; vertices[staticIndex + 0].TextureCoordinate = new Vector2(0, 0); vertices[staticIndex + 1].TextureCoordinate = new Vector2(1, 0); vertices[staticIndex + 2].TextureCoordinate = new Vector2(1, 1); vertices[staticIndex + 3].TextureCoordinate = new Vector2(0, 1); vertices[staticIndex + 4] = vertices[staticIndex + 0]; vertices[staticIndex + 5] = vertices[staticIndex + 2]; } } }