public override void Load(ref System.IO.FileStream File, ref System.IO.BinaryReader Reader) { File.Position = Offset + Base; if (File.Position < File.Length && Size > 0) { Header = Reader.ReadUInt32(); Records = (int)Reader.ReadUInt32(); ContentSize = Reader.ReadUInt32(); Array.Resize(ref _Item, Records); for (int i = 0; i <= Records - 1; i++) { uint ElementOffset = Reader.ReadUInt32(); uint ElementSize = Reader.ReadUInt32(); uint ElementID = Reader.ReadUInt32(); uint Pos = (uint)File.Position; switch (ElementID) { case 1: { Behaviors Insts = new Behaviors(); Insts.Offset = ElementOffset; Insts.Base = Offset + Base; Insts.Size = ElementSize; Insts.ID = ElementID; Insts.Load(ref File, ref Reader); _Item[i] = Insts; break; } case 2: { FuckingShits Insts = new FuckingShits(); Insts.Offset = ElementOffset; Insts.Base = Offset + Base; Insts.Size = ElementSize; Insts.ID = ElementID; Insts.Load(ref File, ref Reader); _Item[i] = Insts; break; } case 3: { Positions Insts = new Positions(); Insts.Offset = ElementOffset; Insts.Base = Offset + Base; Insts.Size = ElementSize; Insts.ID = ElementID; Insts.Load(ref File, ref Reader); _Item[i] = Insts; break; } case 4: { Paths Insts = new Paths(); Insts.Offset = ElementOffset; Insts.Base = Offset + Base; Insts.Size = ElementSize; Insts.ID = ElementID; Insts.Load(ref File, ref Reader); _Item[i] = Insts; break; } case 5: { SurfaceBehaviours Insts = new SurfaceBehaviours(); Insts.Offset = ElementOffset; Insts.Base = Offset + Base; Insts.Size = ElementSize; Insts.ID = ElementID; Insts.Load(ref File, ref Reader); _Item[i] = Insts; break; } case 6: { Instances Insts = new Instances(); Insts.Offset = ElementOffset; Insts.Base = Offset + Base; Insts.Size = ElementSize; Insts.ID = ElementID; Insts.Load(ref File, ref Reader); _Item[i] = Insts; break; } case 7: { Triggers Trigs = new Triggers(); Trigs.Offset = ElementOffset; Trigs.Base = Offset + Base; Trigs.Size = ElementSize; Trigs.ID = ElementID; Trigs.Load(ref File, ref Reader); _Item[i] = Trigs; break; } default: { BaseSection BS = new BaseSection(); BS.Offset = ElementOffset; BS.Base = Offset + Base; BS.Size = ElementSize; BS.ID = ElementID; BS.Load(ref File, ref Reader); _Item[i] = BS; break; } } File.Position = Pos; } } }
/// <summary> /// Create new RM2 chunk /// </summary> public void NewRM2() { Array.Resize(ref Item, 12); Records = 12; Item[0] = new GraphicsSection(); Item[0].ID = 11; Item[0].Records = 9; Array.Resize(ref Item[0]._Item, 9); for (int i = 0; i <= 8; i++) { switch (i) { case 0: { Item[0][i] = new Textures(); break; } case 1: { Item[0][i] = new Materials(); break; } case 2: { Item[0][i] = new Models(); break; } case 3: { Item[0][i] = new GCs(); break; } case 4: { Item[0][i] = new ID4Models(); break; } case 5: { Item[0][i] = new BaseSection(); break; } case 6: { Item[0][i] = new GCs(); break; } case 7: { Item[0][i] = new BaseSection(); break; } case 8: { Item[0][i] = new BaseSection(); break; } } Item[0][i].ID = (uint)i; } Array.Resize(ref Item, 12); Item[1] = new CodeSection(); Item[1].ID = 10; Item[1].Records = 13; Array.Resize(ref Item[1]._Item, 13); for (int i = 0; i <= 12; i++) { switch (i) { case 0: { Item[1][i] = new GameObjects(); break; } case 1: { Item[1][i] = new Scripts(); break; } case 2: { Item[1][i] = new Animations(); break; } case 3: { Item[1][i] = new OGIs(); break; } case 4: { Item[1][i] = new BaseSection(); break; } case 5: { Item[1][i] = new SoundDescriptions(); break; } case 6: { Item[1][i] = new Sound(); break; } case 7: case 8: case 9: case 10: case 11: case 12: { Item[1][i] = new SoundbankDescriptions(); break; } } Item[1][i].ID = (uint)i; } Item[2] = new BaseItem(); Item[2].ID = 8; Item[3] = new GeoData(); Item[3].ID = 9; for (int j = 4; j <= 11; j++) { Item[j] = new InstanceInfoSection(); Item[j].ID = (uint)j - 4; Item[j].Records = 9; Array.Resize(ref Item[j]._Item, 9); for (int i = 0; i <= 8; i++) { switch (i) { case 0: { Item[j][i] = new BaseSection(); break; } case 1: { Item[j][i] = new Behaviors(); break; } case 2: { Item[j][i] = new FuckingShits(); break; } case 3: { Item[j][i] = new Positions(); break; } case 4: { Item[j][i] = new Paths(); break; } case 5: { Item[j][i] = new SurfaceBehaviours(); break; } case 6: { Item[j][i] = new Instances(); break; } case 7: { Item[j][i] = new Triggers(); break; } case 8: { Item[j][i] = new BaseSection(); break; } } Item[j][i].ID = (uint)i; } } Recalculate(); }