Esempio n. 1
0
        private void SaveObjectList(string archive, string path)
        {
            string[] content = path.Split('/');

            string dir   = content[0];
            string layer = content[1];
            string file  = content[2];

            BCSV bcsv = new BCSV(mMapFiles[archive].OpenFile($"/stage/jmp/{path}"));

            bcsv.mEntries.Clear();

            List <AbstractObj> objs = mObjects[archive][layer];

            foreach (AbstractObj o in objs)
            {
                if (o.mFile == file)
                {
                    o.Save();
                    bcsv.mEntries.Add(o.mEntry);
                }
            }

            bcsv.Save();
            bcsv.Close();
        }
        public BCSV GenerateBCSV(List <Triangle> triangles)
        {
            var entries = GetCollisionEntries();
            var col     = RemoveDuplicateEntries(entries);

            KclLibrary.DebugLogger.WriteLine("Generating BCSV...");

            var bcsv = new BCSV();

            bcsv.IsBigEndian = false;
            bcsv.Fields.Add(new BCSV.Field("Sound_code", BCSV.FieldType.Int32, 0, 0x7F, 0));
            bcsv.Fields.Add(new BCSV.Field("Floor_code", BCSV.FieldType.Int32, 0, 0x1F80, 7));
            bcsv.Fields.Add(new BCSV.Field(51726534, BCSV.FieldType.Int32, 0, 0x7E000, 13));
            bcsv.Fields.Add(new BCSV.Field("Wall_code", BCSV.FieldType.Int32, 0, 0x780000, 19));
            bcsv.Fields.Add(new BCSV.Field("Camera_through", BCSV.FieldType.Int32, 0, 0x800000, 23));

            foreach (var tri in triangles)
            {
                var entry  = col[tri.Attribute];
                var record = new BCSV.Record(new object[5]
                {
                    (uint)CreateEntry(SoundCodes, entry.SoundCode),
                    (uint)CreateEntry(FloorCodes, entry.FloorCode),
                    (uint)entry.UnknownCode,
                    (uint)CreateEntry(WallCodes, entry.WallCode),
                    (uint)(entry.CameraThrough ? 1 : 0),
                });
                tri.Attribute = (ushort)bcsv.Records.Count;
                bcsv.Records.Add(record);
            }

            return(bcsv);
        }
Esempio n. 3
0
        public BCSV GenerateBCSV(List <Triangle> triangles)
        {
            var entries = GetCollisionEntries();
            var col     = RemoveDuplicateEntries(entries);

            KclLibrary.DebugLogger.WriteLine("Generating BCSV...");

            var bcsv = new BCSV();

            bcsv.IsBigEndian = true;
            bcsv.Fields.Add(new BCSV.Field("camera_id", BCSV.FieldType.Int32, 0, 0x000000FF, 0));
            bcsv.Fields.Add(new BCSV.Field("Sound_code", BCSV.FieldType.Int32, 0, 0x00007F00, 8));
            bcsv.Fields.Add(new BCSV.Field("Floor_code", BCSV.FieldType.Int32, 0, 0x01F8000, 15));
            bcsv.Fields.Add(new BCSV.Field("Wall_code", BCSV.FieldType.Int32, 0, 0x01E00000, 21));
            bcsv.Fields.Add(new BCSV.Field("Camera_through", BCSV.FieldType.Int32, 0, 0x02000000, 25));

            foreach (var tri in triangles)
            {
                var entry  = col[tri.Attribute];
                var record = new BCSV.Record(new object[5]
                {
                    (uint)(entry.CameraIndex == -1 ? 255 : entry.CameraIndex),
                    (uint)CreateEntry(SoundCodes, entry.SoundCode),
                    (uint)CreateEntry(FloorCodes, entry.FloorCode),
                    (uint)CreateEntry(WallCodes, entry.WallCode),
                    (uint)(entry.CameraThrough ? 1 : 0),
                });
                tri.Attribute = (ushort)bcsv.Records.Count;
                bcsv.Records.Add(record);
            }

            return(bcsv);
        }
Esempio n. 4
0
        public Galaxy(Game game, string name)
        {
            mGame       = game;
            mFilesystem = game.mFilesystem;
            mName       = name;

            mZones = new Dictionary <string, Zone>();
            RARCFilesystem scenarioFile = new RARCFilesystem(mFilesystem.OpenFile($"/StageData/{name}/{name}Scenario.arc"));
            BCSV           scenarioBCSV = new BCSV(scenarioFile.OpenFile("/root/ScenarioData.bcsv"));

            mScenarioEntries = scenarioBCSV.mEntries;
            scenarioBCSV.Close();

            BCSV zonesBCSV = new BCSV(scenarioFile.OpenFile("/root/ZoneList.bcsv"));

            foreach (BCSV.Entry e in zonesBCSV.mEntries)
            {
                string n = e.Get <string>("ZoneName");
                mZones.Add(n, new Zone(this, n));
            }

            zonesBCSV.Close();
            scenarioFile.Close();

            if (!NameHolder.HasGalaxyName(name))
            {
                return;
            }

            mGalaxyName = NameHolder.GetGalaxyName(name);
        }
Esempio n. 5
0
        public void LoadCameras()
        {
            BCSV cameraBCSV = new BCSV(mMapFiles["Map"].OpenFile("/root/camera/CameraParam.bcam"));

            cameraBCSV.RemoveField("no");
            mCameras = new List <Camera>();
            cameraBCSV.mEntries.ForEach(c => mCameras.Add(new Camera(c, this)));
        }
Esempio n. 6
0
        public static void Initialize()
        {
            mLights     = new List <LightEntry>();
            mFilesystem = new RARCFilesystem(Program.sGame.mFilesystem.OpenFile("/LightData/LightData.arc"));
            mBCSV       = new BCSV(mFilesystem.OpenFile("/LightData/LightData.bcsv"));

            mBCSV.mEntries.ForEach(e => mLights.Add(new LightEntry(e)));
        }
Esempio n. 7
0
        static void Main()
        {
            BCSV.PopulateHashTable();

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainWindow());
        }
Esempio n. 8
0
        public void LoadPaths()
        {
            BCSV pathsBCSV = new BCSV(mMapFiles["Map"].OpenFile("/root/jmp/Path/CommonPathInfo"));

            mPaths = new List <PathObj>();

            foreach (BCSV.Entry e in pathsBCSV.mEntries)
            {
                mPaths.Add(new PathObj(e, this, (RARCFilesystem)mMapFiles["Map"]));
            }
        }
Esempio n. 9
0
        public void LoadLight()
        {
            // thank you, DrillUpDownHardPlanetZone for having a empty light file for god knows why
            if (mMapFiles["Light"].GetFiles("/root/csv").Count == 0)
            {
                return;
            }

            BCSV lightBCSV = new BCSV(mMapFiles["Light"].OpenFile($"/root/csv/{mZoneName}Light.bcsv"));

            mLights = new List <Light>();
            lightBCSV.mEntries.ForEach(e => mLights.Add(new Light(e, mZoneName)));
        }
Esempio n. 10
0
        public PathObj(BCSV.Entry entry, Zone parentZone, RARCFilesystem filesystem)
        {
            mName = entry.Get <string>("name");
            mID   = entry.Get <short>("no");
            mZone = parentZone;

            mPathPointObjs = new List <PathPointObj>();

            BCSV b = new BCSV(filesystem.OpenFile($"/Stage/jmp/Path/CommonPathPointInfo.{mID}"));

            foreach (BCSV.Entry e in b.mEntries)
            {
                mPathPointObjs.Add(new PathPointObj(this, e));
            }
        }
Esempio n. 11
0
        /// <summary>
        /// Makes a new Object Array that can be put into a BCSV entry
        /// </summary>
        /// <returns>object[]</returns>
        public Dictionary <uint, object> MakeBCSVEntry(uint[] HashList)
        {
            Dictionary <uint, object> Data = new Dictionary <uint, object>()
            {
                { HashList[0], this.Number },
                { HashList[1], this.Name },
                { HashList[2], this.PowerStarID },
                { HashList[3], this.Appearence },
                { HashList[4], this.Type.ToString() },
                { HashList[5], this.Comet == CometType.None ? "" : this.Comet.ToString() },
                { HashList[6], this.TimeLimit },
                { HashList[7], 0 },
                { HashList[8], 0 }
            };

            for (int i = 0; i < Zones.Count; i++)
            {
                Data.Add(BCSV.FieldNameToHash(Zones[i].Name), Zones[i].Calculate());
            }

            return(Data);
        }
Esempio n. 12
0
        //private BCSV mFile;

        private void filesystemView_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (filesystemView.SelectedNode != null)
            {
                // this is simply a file vs folder check, since we don't assign tags to folders
                if (filesystemView.SelectedNode.Tag == null)
                {
                    return;
                }

                string tag = Convert.ToString(filesystemView.SelectedNode.Tag);

                if (mFiles.ContainsKey(tag))
                {
                    return;
                }


                BCSV file = new BCSV(mFilesystem.OpenFile(tag));
                mFiles.Add(tag, file);


                TabPage      tab      = new TabPage(tag);
                DataGridView dataGrid = new DataGridView();
                dataGrid.CellValueChanged += Grid_CellValueChanged;
                dataGrid.Dock              = DockStyle.Fill;
                tab.Controls.Add(dataGrid);
                bcsvEditorsTabControl.TabPages.Add(tab);
                mEditors.Add(tag, dataGrid);

                saveBCSVBtn.Enabled = true;
                saveAll_Btn.Enabled = true;

                dataGrid.Rows.Clear();
                dataGrid.Columns.Clear();

                foreach (BCSV.Field f in file.mFields.Values)
                {
                    int columnIdx = dataGrid.Columns.Add(f.mHash.ToString("X8"), f.mName);

                    // format floating point cells to show the first decimal point
                    if (f.mType == 2)
                    {
                        dataGrid.Columns[columnIdx].DefaultCellStyle.Format = "N1";
                    }
                }

                foreach (BCSV.Entry entry in file.mEntries)
                {
                    object[] row = new object[entry.Count];
                    int      i   = 0;

                    foreach (KeyValuePair <uint, object> _val in entry)
                    {
                        object val = _val.Value;
                        row[i++] = val;
                    }

                    dataGrid.Rows.Add(row);
                }

                // now we can jump to that page
                bcsvEditorsTabControl.SelectedTab = tab;
            }
        }
Esempio n. 13
0
        private void saveAll_Btn_Click(object sender, EventArgs e)
        {
            TabPageCollection tabs = bcsvEditorsTabControl.TabPages;

            foreach (TabPage tabPage in tabs)
            {
                // since we're saving, we can strip that * from tab pages
                tabPage.Text = tabPage.Text.Replace("*", "");
                DataGridView dataGrid = mEditors[tabPage.Text];
                BCSV         file     = mFiles[tabPage.Text];

                file.mEntries.Clear();

                foreach (DataGridViewRow r in dataGrid.Rows)
                {
                    if (r.IsNewRow)
                    {
                        continue;
                    }

                    BCSV.Entry entry = new BCSV.Entry();
                    file.mEntries.Add(entry);

                    foreach (BCSV.Field f in file.mFields.Values)
                    {
                        uint   hash   = f.mHash;
                        string valStr = r.Cells[hash.ToString("X8")].FormattedValue.ToString();

                        try
                        {
                            switch (f.mType)
                            {
                            case 0:
                            case 3:
                                entry.Add(hash, uint.Parse(valStr));
                                break;

                            case 4:
                                entry.Add(hash, ushort.Parse(valStr));
                                break;

                            case 5:
                                entry.Add(hash, byte.Parse(valStr));
                                break;

                            case 2:
                                entry.Add(hash, float.Parse(valStr));
                                break;

                            case 6:
                                entry.Add(hash, valStr);
                                break;
                            }
                        }
                        catch
                        {
                            switch (f.mType)
                            {
                            case 0:
                            case 3:
                                entry.Add(hash, (uint)0);
                                break;

                            case 4:
                                entry.Add(hash, (ushort)0);
                                break;

                            case 5:
                                entry.Add(hash, (byte)0);
                                break;

                            case 2:
                                entry.Add(hash, 0f);
                                break;

                            case 6:
                                entry.Add(hash, "");
                                break;
                            }
                        }
                    }
                }

                file.Save();
                mFilesystem.Save();
            }
        }
Esempio n. 14
0
        public void AssignsObjectsToList(string archive, string path)
        {
            string[] data  = path.Split('/');
            string   layer = data[1];
            string   dir   = data[2];

            if (!mObjects.ContainsKey(archive))
            {
                mObjects.Add(archive, new Dictionary <string, List <AbstractObj> >());
            }

            if (!mObjects[archive].ContainsKey(layer))
            {
                mObjects[archive].Add(layer, new List <AbstractObj>());
            }

            if (!mZones.ContainsKey(layer))
            {
                mZones.Add(layer, new List <StageObj>());
            }

            BCSV bcsv = new BCSV(mMapFiles[archive].OpenFile($"/stage/jmp/{path}"));

            foreach (BCSV.Entry e in bcsv.mEntries)
            {
                switch (dir)
                {
                case "AreaObjInfo":
                    mObjects[archive][layer].Add(new AreaObj(e, this, path));
                    break;

                case "CameraCubeInfo":
                    mObjects[archive][layer].Add(new CameraObj(e, this, path));
                    break;

                case "StageObjInfo":
                    mZones[layer].Add(new StageObj(e));
                    break;

                case "ObjInfo":
                    mObjects[archive][layer].Add(new LevelObj(e, this, path));
                    break;

                case "DemoObjInfo":
                    mObjects[archive][layer].Add(new DemoObj(e, this, path));
                    break;

                case "GeneralPosInfo":
                    mObjects[archive][layer].Add(new GeneralPosObj(e, this, path));
                    break;

                case "DebugMoveInfo":
                    mObjects[archive][layer].Add(new DebugMoveObj(e, this, path));
                    break;

                case "PlanetObjInfo":
                    mObjects[archive][layer].Add(new PlanetObj(e, this, path));
                    break;

                case "StartInfo":
                    mObjects[archive][layer].Add(new StartObj(e, this, path));
                    break;

                case "MapPartsInfo":
                    mObjects[archive][layer].Add(new MapPartsObj(e, this, path));
                    break;
                }
            }

            bcsv.Close();
        }