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); }
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); }
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); }
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))); }
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))); }
static void Main() { BCSV.PopulateHashTable(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainWindow()); }
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"])); } }
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))); }
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)); } }
/// <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); }
//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; } }
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(); } }
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(); }