private List <DEM_Type> ParseSection2SubEntry(int offset, int count) { List <DEM_Type> subEntries = new List <DEM_Type>(); for (int i = 0; i < count; i++) { DEM_Type subEntry = new DEM_Type(); subEntry.I_00 = BitConverter.ToInt32(rawBytes, offset + 0); subEntry.I_04 = DEM_Type.GetDemoDataType(BitConverter.ToUInt16(rawBytes, offset + 4), BitConverter.ToUInt16(rawBytes, offset + 6), BitConverter.ToInt32(rawBytes, offset + 12)); subEntry.Offset = BitConverter.ToInt32(rawBytes, offset + 16); int pointerCount = BitConverter.ToInt32(rawBytes, offset + 12); int pointerOffset = BitConverter.ToInt32(rawBytes, offset + 16); subEntry = ParseTypes(subEntry.I_04, subEntry, pointerOffset, BitConverter.ToUInt16(rawBytes, offset + 4), BitConverter.ToUInt16(rawBytes, offset + 6), BitConverter.ToInt32(rawBytes, offset + 12)); subEntries.Add(subEntry); offset += 32; } return(subEntries); }
private DEM_Type ParseTypes(DEM_Type.DemoDataTypes demoType, DEM_Type subEntry, int offset, int type1, int type2, int count) { switch (demoType) { case DEM_Type.DemoDataTypes.Type0_1_6: subEntry.Type0_1_6 = Type0_1_6.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.FadeInOut: subEntry.Type0_2_7 = Type0_2_7.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type0_3_8: subEntry.Type0_3_8 = Type0_3_8.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type0_16_1: subEntry.Type0_16_1 = Type0_16_1.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type0_19_1: subEntry.Type0_19_1 = Type0_19_1.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type0_20_2: subEntry.Type0_20_2 = Type0_20_2.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type0_21_2: subEntry.Type0_21_2 = Type0_21_2.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_1_5: subEntry.Type1_1_5 = Type1_1_5.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_1_9: subEntry.Type1_1_9 = Type1_1_9.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_2_3: subEntry.Type1_2_3 = Type1_2_3.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_2_5: subEntry.Type1_2_5 = Type1_2_5.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Transformation: subEntry.Type1_4_2 = Type1_4_2.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_6_4: subEntry.Type1_6_4 = Type1_6_4.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_7_1: subEntry.Type1_7_1 = Type1_7_1.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_8_6: subEntry.Type1_8_6 = Type1_8_6.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_11_2: subEntry.Type1_11_2 = Type1_11_2.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_12_2: subEntry.Type1_12_2 = Type1_12_2.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_13_10: subEntry.Type1_13_10 = Type1_13_10.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_14_1: subEntry.Type1_14_1 = Type1_14_1.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_16_2: subEntry.Type1_16_2 = Type1_16_2.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_20_12: subEntry.Type1_20_12 = Type1_20_12.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_26_2: subEntry.Type1_26_2 = Type1_26_2.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_27_2: subEntry.Type1_27_2 = Type1_27_2.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.AnimationSmall: subEntry.Type1_0_9 = Type1_0_9.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Animation: subEntry.Type1_0_10 = Type1_0_10.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.ActorVisibility: subEntry.Type1_3_2 = Type1_3_2.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.ActorDamage: subEntry.Type1_9_5 = Type1_9_5.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_10_8: subEntry.Type1_10_8 = Type1_10_8.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_17_6: subEntry.Type1_17_6 = Type1_17_6.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type1_19_3: subEntry.Type1_19_3 = Type1_19_3.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Camera: subEntry.Type2_0_1 = Type2_0_1.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type2_6_3: subEntry.Type2_6_3 = Type2_6_3.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type2_7_5: subEntry.Type2_7_5 = Type2_7_5.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type2_7_8: subEntry.Type2_7_8 = Type2_7_8.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type2_9_2: subEntry.Type2_9_2 = Type2_9_2.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type2_10_2: subEntry.Type2_10_2 = Type2_10_2.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type2_11_1: subEntry.Type2_11_1 = Type2_11_1.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type3_0_1: subEntry.Type3_0_1 = Type3_0_1.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type3_1_1: subEntry.Type3_1_1 = Type3_1_1.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type3_2_1: subEntry.Type3_2_1 = Type3_2_1.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type3_3_1: subEntry.Type3_3_1 = Type3_3_1.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type3_4_2: subEntry.Type3_4_2 = Type3_4_2.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type4_2_3: subEntry.Type4_2_3 = Type4_2_3.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type4_3_5: subEntry.Type4_3_5 = Type4_3_5.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type4_4_1: subEntry.Type4_4_1 = Type4_4_1.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Effect: subEntry.Type4_0_12 = Type4_0_12.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.ScreenEffect: subEntry.Type4_1_8 = Type4_1_8.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type5_0_2: subEntry.Type5_0_2 = Type5_0_2.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type5_1_2: subEntry.Type5_1_2 = Type5_1_2.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Sound: subEntry.Type5_0_3 = Type5_0_3.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Music: subEntry.Type5_2_3 = Type5_2_3.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type5_3_2: subEntry.Type5_3_2 = Type5_3_2.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type5_4_3: subEntry.Type5_4_3 = Type5_4_3.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type6_0_1: subEntry.Type6_0_1 = Type6_0_1.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.DistanceFocus: subEntry.Type6_16_6 = Type6_16_6.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.SpmControl: subEntry.Type6_17_19 = Type6_17_19.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type6_18_7: subEntry.Type6_18_7 = Type6_18_7.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type6_19_15: subEntry.Type6_19_15 = Type6_19_15.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type6_20_2: subEntry.Type6_20_2 = Type6_20_2.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type7_0_5: subEntry.Type7_0_5 = Type7_0_5.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.YearDisplay: subEntry.Type9_0_2 = Type9_0_2.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type9_1_5: subEntry.Type9_1_5 = Type9_1_5.Read(rawBytes, bytes, offset); break; case DEM_Type.DemoDataTypes.Type0_17_0: case DEM_Type.DemoDataTypes.Type9_8_0: case DEM_Type.DemoDataTypes.Type0_16_0: //No values break; default: //Console.WriteLine(String.Format("Unknown DEM_Type: {0}_{1}_{2} (offset={3})", type1, type2, count, offset)); //Console.Read(); //break; throw new Exception(String.Format("Unknown DEM_Type: {0}_{1}_{2} (offset={3})", type1, type2, count, offset)); } return(subEntry); }