private void loadSkin() { animation = new List<animationData>(); bitmapBlocks = new List<bitmapData>(); textBlocks = new List<textBlockData>(); BinaryReader br = new BinaryReader(meta.MS); BinaryReader br2 = br; #region Animation Frames reflexive br2 = br; br.BaseStream.Position = 20; int animationCount = br.ReadInt32(); int animationOffset = br.ReadInt32() - map.SecondaryMagic; // Handles reflexives in other tags (pointers) int animationTag = map.Functions.ForMeta.FindMetaByOffset(animationOffset); if (animationCount > 0 && animationTag != meta.TagIndex) { Meta newMeta = Map.GetMetaFromTagIndex(animationTag, meta.Map, false, true); br2 = new BinaryReader(newMeta.MS); animationOffset -= newMeta.offset; } else animationOffset -= meta.offset; for (int list = 0; list < animationCount; list++) { animationData ad = new animationData(list, meta); ad.offset = animationOffset + list * 16; ad.Read(br2); this.animation.Add(ad); } #endregion #region Text blocks reflexive br2 = br; br.BaseStream.Position = 28; int textBlockCount = br.ReadInt32(); int textBlockOffset = br.ReadInt32() - map.SecondaryMagic; // Handles reflexives in other tags (pointers) int textBlockTag = map.Functions.ForMeta.FindMetaByOffset(textBlockOffset); if (textBlockCount > 0 && textBlockTag != meta.TagIndex) { Meta newMeta = Map.GetMetaFromTagIndex(textBlockTag, map, false, true); br2 = new BinaryReader(newMeta.MS); textBlockOffset -= newMeta.offset; } else textBlockOffset -= meta.offset; for (int list = 0; list < textBlockCount; list++) { textBlockData tbd = new textBlockData(list); tbd.offset = textBlockOffset + list * 44; tbd.Read(br2); this.textBlocks.Add(tbd); } #endregion #region Bitmap block reflexive br.BaseStream.Position = 36; int bitmapBlockCount = br.ReadInt32(); int bitmapBlockOffset = br.ReadInt32() - map.SecondaryMagic; // Handles reflexives in other tags (pointers) int bitmBlockTag = map.Functions.ForMeta.FindMetaByOffset(bitmapBlockOffset); if (bitmapBlockCount > 0 && bitmBlockTag != meta.TagIndex) { Meta newMeta = Map.GetMetaFromTagIndex(bitmBlockTag, map, false, true); br2 = new BinaryReader(newMeta.MS); bitmapBlockOffset -= newMeta.offset; } else bitmapBlockOffset -= meta.offset; // Always add 3 in case of using sub bitmaps for (int list = 0; list < bitmapBlockCount; list++) { bitmapData bd = new bitmapData(list); bd.offset = bitmapBlockOffset + list * 56; bd.Read(br2); int bitmID = map.Functions.ForMeta.FindMetaByID(bd.bitmIdent); if (bitmID != -1) { bd.meta = Map.GetMetaFromTagIndex(bitmID, map, false, false); ParsedBitmap pm = new ParsedBitmap(ref bd.meta, map); bd.link = pm.FindChunkAndDecode(0, 0, 0, ref bd.meta, map, 0, 0); this.bitmapBlocks.Add(bd); if (pm.Properties.Length > 1) { bd = (bitmapData)bd.Clone(); bd.link = pm.FindChunkAndDecode(1, 0, 0, ref bd.meta, map, 0, 0); } this.bitmapBlocks.Add(bd); if (pm.Properties.Length > 2) { bd = (bitmapData)bd.Clone(); bd.link = pm.FindChunkAndDecode(2, 0, 0, ref bd.meta, map, 0, 0); } this.bitmapBlocks.Add(bd); } } #endregion isLoaded = true; }