public static StaticItem Instantiate(HuedTile tile, int influence, int serial) { if (m_InstancePool.Count > 0) { StaticItem item = (StaticItem)m_InstancePool.Dequeue(); item.m_RealID = (short)((tile.ID & 0x3fff) | 0x4000); item.m_ID = (short)tile.ID; item.m_ID = (short)(item.m_ID & 0x3fff); item.m_ID = (short)(item.m_ID + 0x4000); item.m_Z = (sbyte)tile.Z; item.m_Hue = Hues.GetItemHue(item.m_ID, tile.Hue); item.m_Height = Map.GetHeight(item.m_ID); item.m_SortInfluence = influence; item.Serial = serial; item.m_LastImage = null; item.m_LastImageHue = null; item.m_LastImageID = 0; item.m_vAlpha = 0; item.m_bAlpha = false; item.m_bDraw = false; item.m_bInit = false; return(item); } return(new StaticItem(tile, influence, serial)); }
private StaticItem(HuedTile tile, int influence, int serial) { this.m_ID = (short) tile.ID; this.m_Z = (sbyte) tile.Z; this.m_RealID = (short) ((tile.ID & 0x3fff) | 0x4000); this.m_ID = (short) (this.m_ID & 0x3fff); this.m_ID = (short) (this.m_ID + 0x4000); this.m_Hue = Hues.GetItemHue(this.m_ID, tile.Hue); this.m_Height = Map.GetHeight(this.m_ID); this.m_SortInfluence = influence; this.Serial = serial; this.m_vPool = VertexConstructor.Create(); }
private StaticItem(HuedTile tile, int influence, int serial) { this.m_ID = (short)tile.ID; this.m_Z = (sbyte)tile.Z; this.m_RealID = (short)((tile.ID & 0x3fff) | 0x4000); this.m_ID = (short)(this.m_ID & 0x3fff); this.m_ID = (short)(this.m_ID + 0x4000); this.m_Hue = Hues.GetItemHue(this.m_ID, tile.Hue); this.m_Height = Map.GetHeight(this.m_ID); this.m_SortInfluence = influence; this.Serial = serial; this.m_vPool = VertexConstructor.Create(); }
public HuedTile[] ToArray() { if (this.m_Count == 0) { return(m_Empty); } HuedTile[] tileArray = new HuedTile[this.m_Count]; for (int i = 0; i < this.m_Count; i++) { tileArray[i] = this.m_Tiles[i]; } this.m_Count = 0; return(tileArray); }
public HuedTile[] ToArray() { if (this.m_Count == 0) { return m_Empty; } HuedTile[] tileArray = new HuedTile[this.m_Count]; for (int i = 0; i < this.m_Count; i++) { tileArray[i] = this.m_Tiles[i]; } this.m_Count = 0; return tileArray; }
private unsafe HuedTile[][][] ReadStaticBlock(int x, int y) { BinaryReader staticLookupReader; FileStream staticData; int num = 0; int[][] staticBlockRefs = this.m_Patch.StaticBlockRefs; if ((staticBlockRefs != null) && (staticBlockRefs[x] != null)) { num = staticBlockRefs[x][y]; } if (num < 0) { staticLookupReader = this.m_Patch.StaticLookupReader; staticData = this.m_Patch.StaticData; if ((staticLookupReader == null) || (staticData == null)) { return(this.m_EmptyStaticBlock); } staticLookupReader.BaseStream.Seek((long)(12 * ~num), SeekOrigin.Begin); } else { staticLookupReader = this.m_IndexReader; staticData = this.m_Statics; if ((staticLookupReader == null) || (staticData == null)) { return(this.m_EmptyStaticBlock); } staticLookupReader.BaseStream.Seek((long)(((x * this.m_BlockHeight) + y) * 12), SeekOrigin.Begin); } int num2 = staticLookupReader.ReadInt32(); int bytes = staticLookupReader.ReadInt32(); if ((num2 < 0) || (bytes <= 0)) { return(this.m_EmptyStaticBlock); } int num4 = bytes / 7; staticData.Seek((long)num2, SeekOrigin.Begin); StaticTile[] tileArray = new StaticTile[num4]; fixed(StaticTile *tileRef = tileArray) { Engine.NativeRead(staticData, (void *)tileRef, bytes); if (m_Lists == null) { m_Lists = new TileList[8][]; for (int j = 0; j < 8; j++) { m_Lists[j] = new TileList[8]; for (int k = 0; k < 8; k++) { m_Lists[j][k] = new TileList(); } } } TileList[][] lists = m_Lists; StaticTile * tilePtr = tileRef; StaticTile * tilePtr2 = tileRef + num4; while (tilePtr < tilePtr2) { lists[tilePtr->m_X & 7][tilePtr->m_Y & 7].Add((short)((tilePtr->m_ID & 0x3fff) + 0x4000), tilePtr->m_Hue, tilePtr->m_Z); tilePtr++; } HuedTile[][][] tileArray2 = new HuedTile[8][][]; for (int i = 0; i < 8; i++) { tileArray2[i] = new HuedTile[8][]; for (int m = 0; m < 8; m++) { tileArray2[i][m] = lists[i][m].ToArray(); } } return(tileArray2); } }
private static unsafe void Load(int x, int y, int w, int h, int world, Texture tex) { if (m_Colors == null) { LoadColors(); } if ((m_StrongReferences == null) || (m_StrongReferences.Length != (w * h))) { m_StrongReferences = new MapBlock[w * h]; } if ((m_Guarded == null) || (m_Guarded.Length != ((w * h) * 0x40))) { m_Guarded = new BitArray((w * h) * 0x40); } else { m_Guarded.SetAll(false); } Region[] guardedRegions = Region.GuardedRegions; int num = x * 8; int num2 = y * 8; int num3 = w * 8; int num4 = h * 8; for (int i = 0; i < guardedRegions.Length; i++) { Region region = guardedRegions[i]; RegionWorld world2 = region.World; bool flag = false; switch (world2) { case RegionWorld.Britannia: flag = (world == 0) || (world == 1); break; case RegionWorld.Felucca: flag = world == 0; break; case RegionWorld.Trammel: flag = world == 1; break; case RegionWorld.Ilshenar: flag = world == 2; break; case RegionWorld.Malas: flag = world == 3; break; case RegionWorld.Tokuno: flag = world == 4; break; } if (flag) { int num6 = region.X - num; int num7 = region.Y - num2; if (((num6 < num3) && (num7 < num4)) && ((num6 > -region.Width) && (num7 > -region.Height))) { int num8 = num6 + region.Width; int num9 = num7 + region.Height; if (num6 < 0) { num6 = 0; } if (num7 < 0) { num7 = 0; } for (int j = num6; (j < num8) && (j < num3); j++) { for (int k = num7; (k < num9) && (k < num4); k++) { m_Guarded[(k * num3) + j] = true; } } } } } TileMatrix matrix = Map.GetMatrix(world); LockData data = tex.Lock(LockFlags.WriteOnly); int num12 = data.Pitch >> 1; fixed(short *numRef = m_Colors) { for (int m = 0; m < w; m++) { short *numPtr = (short *)(data.pvSrc + ((m << 3) * 2)); for (int num14 = 0; num14 < h; num14++) { MapBlock block = matrix.GetBlock(x + m, y + num14); m_StrongReferences[(num14 * w) + m] = block; HuedTile[][][] tileArray = (block == null) ? matrix.EmptyStaticBlock : block.m_StaticTiles; Tile[] tileArray2 = (block == null) ? matrix.InvalidLandBlock : block.m_LandTiles; int index = 0; for (int num16 = 0; index < 8; num16 += 8) { for (int num17 = 0; num17 < 8; num17++) { int num18 = -255; int num19 = -255; int num20 = 0; int hue = 0; for (int num24 = 0; num24 < tileArray[num17][index].Length; num24++) { HuedTile tile = tileArray[num17][index][num24]; int iD = tile.ID; switch (iD) { case 0x4001: case 0x5796: case 0x61a4: case 0x6198: case 0x61bc: case 0x6199: break; default: { int z = tile.Z; int num23 = z + Map.GetHeight(iD); if ((num23 > num18) || ((z > num19) && (num23 >= num18))) { num18 = num23; num19 = z; num20 = iD; hue = tile.Hue; } break; } } } if ((tileArray2[num16 + num17].Z > num18) && (tileArray2[num16 + num17].ID != 2)) { num20 = tileArray2[num16 + num17].ID; hue = 0; } int num26 = ((((num14 << 3) + index) * num3) + (m << 3)) + num17; if (m_Guarded[num26] && ((((num26 >= 1) && !m_Guarded[num26 - 1]) || ((num26 >= num3) && !m_Guarded[num26 - num3])) || (((num26 < (m_Guarded.Length - 1)) && !m_Guarded[num26 + 1]) || ((num26 < (m_Guarded.Length - num3)) && !m_Guarded[num26 + num3])))) { numPtr[num17] = -31776; } else if (hue == 0) { numPtr[num17] = numRef[num20]; } else { numPtr[num17] = (short)Hues.Load((hue & 0x3fff) | 0x8000).Pixel((ushort)numRef[num20]); } } numPtr += num12; index++; } } } ArrayList items = Engine.Multis.Items; for (int n = 0; n < items.Count; n++) { Item item = (Item)items[n]; if (item.InWorld && item.Visible) { CustomMultiEntry customMulti = CustomMultiLoader.GetCustomMulti(item.Serial, item.Revision); Multi multi = null; if (customMulti != null) { multi = customMulti.Multi; } if (multi == null) { multi = item.Multi; } if (multi != null) { short[][] radar = multi.Radar; if (radar != null) { int num28; int num29; int num30; int num31; multi.GetBounds(out num28, out num29, out num30, out num31); int num32 = 0; for (int num33 = (item.Y - (y << 3)) + num29; num32 < radar.Length; num33++) { if ((num33 >= 0) && (num33 < (h << 3))) { short * numPtr2 = (short *)(data.pvSrc + ((num33 * num12) * 2)); short[] numArray2 = radar[num32]; int num34 = 0; for (int num35 = (item.X - (x << 3)) + num28; num34 < numArray2.Length; num35++) { if (((num35 >= 0) && (num35 < (w << 3))) && (numArray2[num34] != 0)) { numPtr2[num35] = numRef[numArray2[num34]]; } num34++; } } num32++; } } } } } } tex.Unlock(); }
public static StaticItem Instantiate(HuedTile tile, int influence, int serial) { if (m_InstancePool.Count > 0) { StaticItem item = (StaticItem) m_InstancePool.Dequeue(); item.m_RealID = (short) ((tile.ID & 0x3fff) | 0x4000); item.m_ID = (short) tile.ID; item.m_ID = (short) (item.m_ID & 0x3fff); item.m_ID = (short) (item.m_ID + 0x4000); item.m_Z = (sbyte) tile.Z; item.m_Hue = Hues.GetItemHue(item.m_ID, tile.Hue); item.m_Height = Map.GetHeight(item.m_ID); item.m_SortInfluence = influence; item.Serial = serial; item.m_LastImage = null; item.m_LastImageHue = null; item.m_LastImageID = 0; item.m_vAlpha = 0; item.m_bAlpha = false; item.m_bDraw = false; item.m_bInit = false; return item; } return new StaticItem(tile, influence, serial); }
public MapBlock(Tile[] landTiles, HuedTile[][][] staticTiles) { this.m_LandTiles = landTiles; this.m_StaticTiles = staticTiles; }