public override void Parse(GameBitBuffer buffer)
 {
     Field0 = buffer.ReadInt(32);
     snoActor = buffer.ReadInt(32);
     Field2 = buffer.ReadInt(32);
     Field3 = buffer.ReadInt(4) + (-1);
     Field4 = buffer.ReadInt(4) + (-1);
     Field5 = buffer.ReadInt(4) + (-1);
     Field6 = buffer.ReadInt(3);
     Field7 = buffer.ReadInt(32);
     Field8 = buffer.ReadInt(32);
     Field9 = new int[4];
     for(int i = 0;i < _Field9.Length;i++) _Field9[i] = buffer.ReadInt(32);
     Field10 = buffer.ReadFloat32();
     Field11 = buffer.ReadFloat32();
     Field12 = buffer.ReadFloat32();
     Field13 = buffer.ReadFloat32();
     Field14 = buffer.ReadFloat32();
     Field15 = buffer.ReadFloat32();
     snoInventory = buffer.ReadInt(32);
     snoSecondaryInventory = buffer.ReadInt(32);
     snoLore = buffer.ReadInt(32);
     Field19 = new HealthDropInfo();
     Field19.Parse(buffer);
     Field20 = new HealthDropInfo();
     Field20.Parse(buffer);
     Field21 = new HealthDropInfo();
     Field21.Parse(buffer);
     Field22 = new HealthDropInfo();
     Field22.Parse(buffer);
     Field23 = buffer.ReadInt(32);
     Field24 = buffer.ReadInt(3);
     //still checking fixedarrays on basictypes
     Field25 = new float[139];
     for(int loop12 = 0;loop12 < _Field25.Length;loop12++)
     {
     _Field25[loop12] = buffer.ReadFloat32();
     }
     snoSkillKit = buffer.ReadInt(32);
     Field27 = new SkillDeclaration[8];
     for(int i = 0;i < _Field27.Length;i++)
     {
         _Field27[i] = new SkillDeclaration();
         _Field27[i].Parse(buffer);
     }
     Field28 = new MonsterSkillDeclaration[8];
     for(int i = 0;i < _Field28.Length;i++)
     {
         _Field28[i] = new MonsterSkillDeclaration();
         _Field28[i].Parse(buffer);
     }
     snoTreasureClassFirstKill = buffer.ReadInt(32);
     snoTreasureClass = buffer.ReadInt(32);
     snoTreasureClassRare = buffer.ReadInt(32);
     snoTreasureClassChampion = buffer.ReadInt(32);
     snoTreasureClassChampionLight = buffer.ReadInt(32);
     Field34 = new Monster2();
     Field34.Parse(buffer);
     Field35 = buffer.ReadFloat32();
     Field36 = buffer.ReadFloat32();
     Field37 = buffer.ReadFloat32();
     Field38 = buffer.ReadFloat32();
     Field39 = buffer.ReadInt(32);
     Field40 = buffer.ReadFloat32();
     Field41 = buffer.ReadInt(32);
     Field42 = buffer.ReadInt(32);
     arAIBehaviors = new int[6];
     for(int i = 0;i < _arAIBehaviors.Length;i++) _arAIBehaviors[i] = buffer.ReadInt(32);
     Field44 = new int[8];
     for(int i = 0;i < _Field44.Length;i++) _Field44[i] = buffer.ReadInt(32);
     snoSummonActor = new int[6];
     for(int i = 0;i < _snoSummonActor.Length;i++) _snoSummonActor[i] = buffer.ReadInt(32);
     Field46 = new int[4];
     for(int i = 0;i < _Field46.Length;i++) _Field46[i] = buffer.ReadInt(32);
     Field47 = new int[6];
     for(int i = 0;i < _Field47.Length;i++) _Field47[i] = buffer.ReadInt(32);
     Field48 = buffer.ReadInt(32);
     Field49 = buffer.ReadInt(32);
     Field50 = buffer.ReadInt(32);
     Field51 = buffer.ReadCharArray(128);
     serTagMap = new SerializeData();
     serTagMap.Parse(buffer);
     hTagMap = new DT_TAGMAP();
     hTagMap.Parse(buffer);
     Field54 = buffer.ReadInt(32);
     serSpawnGroups = new SerializeData();
     serSpawnGroups.Parse(buffer);
     //still checking variablearrays
     this.SpawnGroups = new List<MonsterMinionSpawnGroup>( buffer.ReadInt(0) );
     for(int loop12 = 0; loop12 < _SpawnGroups.Count; loop12++)
     {
         _SpawnGroups[loop12] = new MonsterMinionSpawnGroup();
         _SpawnGroups[loop12].Parse(buffer);
     }
 }
 public void FileRead(MpqFileStream stream, long offset)
 {
     stream.Position = offset + 12;
     Field0 = stream.ReadValueS32();
     stream.Position = offset + 16;
     snoActor = stream.ReadValueS32();
     stream.Position = offset + 20;
     Field2 = stream.ReadValueS32();
     stream.Position = offset + 24;
     _Field3 = stream.ReadValueS32();
     stream.Position = offset + 28;
     _Field4 = stream.ReadValueS32();
     stream.Position = offset + 32;
     _Field5 = stream.ReadValueS32();
     stream.Position = offset + 56;
     _Field6 = stream.ReadValueS32();
     stream.Position = offset + 60;
     Field7 = stream.ReadValueS32();
     stream.Position = offset + 64;
     Field8 = stream.ReadValueS32();
     stream.Position = offset + 68;
     Field9 = new int[4];
     for(int loop12=0; loop12 < 4; loop12++ )
     {
         int temp12_Field9;
         temp12_Field9 = stream.ReadValueS32();
         _Field9[loop12] = temp12_Field9;
     }
     stream.Position = offset + 640;
     Field10 = stream.ReadValueF32();
     stream.Position = offset + 644;
     Field11 = stream.ReadValueF32();
     stream.Position = offset + 648;
     Field12 = stream.ReadValueF32();
     stream.Position = offset + 652;
     Field13 = stream.ReadValueF32();
     stream.Position = offset + 656;
     Field14 = stream.ReadValueF32();
     stream.Position = offset + 660;
     Field15 = stream.ReadValueF32();
     stream.Position = offset + 964;
     snoInventory = stream.ReadValueS32();
     stream.Position = offset + 968;
     snoSecondaryInventory = stream.ReadValueS32();
     stream.Position = offset + 972;
     snoLore = stream.ReadValueS32();
     stream.Position = offset + 668;
     Field19 = new HealthDropInfo();
     Field19.FileRead(stream, stream.Position);
     stream.Position = offset + 680;
     Field20 = new HealthDropInfo();
     Field20.FileRead(stream, stream.Position);
     stream.Position = offset + 692;
     Field21 = new HealthDropInfo();
     Field21.FileRead(stream, stream.Position);
     stream.Position = offset + 704;
     Field22 = new HealthDropInfo();
     Field22.FileRead(stream, stream.Position);
     stream.Position = offset + 664;
     Field23 = stream.ReadValueS32();
     stream.Position = offset + 1108;
     _Field24 = stream.ReadValueS32();
     stream.Position = offset + 84;
     Field25 = new float[139];
     for(int loop12=0; loop12 < 139; loop12++ )
     {
         float temp12_Field25;
         temp12_Field25 = stream.ReadValueF32();
         _Field25[loop12] = temp12_Field25;
     }
     stream.Position = offset + 716;
     snoSkillKit = stream.ReadValueS32();
     stream.Position = offset + 720;
     Field27 = new SkillDeclaration[8];
     for(int loop12=0; loop12 < 8; loop12++ )
     {
         SkillDeclaration temp12_Field27;
         temp12_Field27 = new SkillDeclaration();
         temp12_Field27.FileRead(stream, stream.Position);
         _Field27[loop12] = temp12_Field27;
     }
     stream.Position = offset + 784;
     Field28 = new MonsterSkillDeclaration[8];
     for(int loop12=0; loop12 < 8; loop12++ )
     {
         MonsterSkillDeclaration temp12_Field28;
         temp12_Field28 = new MonsterSkillDeclaration();
         temp12_Field28.FileRead(stream, stream.Position);
         _Field28[loop12] = temp12_Field28;
     }
     stream.Position = offset + 912;
     snoTreasureClassFirstKill = stream.ReadValueS32();
     stream.Position = offset + 916;
     snoTreasureClass = stream.ReadValueS32();
     stream.Position = offset + 920;
     snoTreasureClassRare = stream.ReadValueS32();
     stream.Position = offset + 924;
     snoTreasureClassChampion = stream.ReadValueS32();
     stream.Position = offset + 928;
     snoTreasureClassChampionLight = stream.ReadValueS32();
     stream.Position = offset + 36;
     Field34 = new Monster2();
     Field34.FileRead(stream, stream.Position);
     stream.Position = offset + 932;
     Field35 = stream.ReadValueF32();
     stream.Position = offset + 936;
     Field36 = stream.ReadValueF32();
     stream.Position = offset + 940;
     Field37 = stream.ReadValueF32();
     stream.Position = offset + 944;
     Field38 = stream.ReadValueF32();
     stream.Position = offset + 948;
     Field39 = stream.ReadValueS32();
     stream.Position = offset + 952;
     Field40 = stream.ReadValueF32();
     stream.Position = offset + 956;
     Field41 = stream.ReadValueS32();
     stream.Position = offset + 960;
     Field42 = stream.ReadValueS32();
     stream.Position = offset + 976;
     arAIBehaviors = new int[6];
     for(int loop12=0; loop12 < 6; loop12++ )
     {
         int temp12_arAIBehaviors;
         temp12_arAIBehaviors = stream.ReadValueS32();
         _arAIBehaviors[loop12] = temp12_arAIBehaviors;
     }
     stream.Position = offset + 1000;
     Field44 = new int[8];
     for(int loop12=0; loop12 < 8; loop12++ )
     {
         int temp12_Field44;
         temp12_Field44 = stream.ReadValueS32();
         _Field44[loop12] = temp12_Field44;
     }
     stream.Position = offset + 1032;
     snoSummonActor = new int[6];
     for(int loop12=0; loop12 < 6; loop12++ )
     {
         int temp12_snoSummonActor;
         temp12_snoSummonActor = stream.ReadValueS32();
         _snoSummonActor[loop12] = temp12_snoSummonActor;
     }
     stream.Position = offset + 1056;
     Field46 = new int[4];
     for(int loop12=0; loop12 < 4; loop12++ )
     {
         int temp12_Field46;
         temp12_Field46 = stream.ReadValueS32();
         _Field46[loop12] = temp12_Field46;
     }
     stream.Position = offset + 1072;
     Field47 = new int[6];
     for(int loop12=0; loop12 < 6; loop12++ )
     {
         int temp12_Field47;
         temp12_Field47 = stream.ReadValueS32();
         _Field47[loop12] = temp12_Field47;
     }
     stream.Position = offset + 1096;
     Field48 = stream.ReadValueS32();
     stream.Position = offset + 1100;
     Field49 = stream.ReadValueS32();
     stream.Position = offset + 1104;
     Field50 = stream.ReadValueS32();
     stream.Position = offset + 1176;
     Field51 = stream.ReadString(128);
     stream.Position = offset + 1136;
     serTagMap = new SerializeData();
     serTagMap.FileRead(stream, stream.Position);
     stream.Position = offset + 1144;
     // hTagMap: type DT_TAGMAP hasnt a deserializer implemented
     throw new Exception("some fields arent going to be decoded.");
     stream.Position = offset + 1152;
     Field54 = stream.ReadValueS32();
     stream.Position = offset + 1168;
     serSpawnGroups = new SerializeData();
     serSpawnGroups.FileRead(stream, stream.Position);
     stream.Position = offset + 1160;
     //still checking variablearrays
     SpawnGroups = new List<MonsterMinionSpawnGroup>();
     for(int i = 0; i < (int)(serSpawnGroups.Field1 / 24); i++)
     {
     stream.Position = serSpawnGroups.Field0 + 16 + (24*i) ;
         MonsterMinionSpawnGroup temp12_SpawnGroups;
         temp12_SpawnGroups = new MonsterMinionSpawnGroup();
         temp12_SpawnGroups.FileRead(stream, stream.Position);
         _SpawnGroups.Add(temp12_SpawnGroups);
     }
 }