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;
                }
            }
        }
Exemplo n.º 2
0
        /// <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();
        }