private void ModelImporter_FormClosed(object sender, FormClosedEventArgs e) { if (m_EarlyClosure) { return; } GL.DeleteLists(m_PDisplayList, 1); GL.DeleteLists(m_DisplayList, 1); m_ImportedModel.Release(); ModelCache.RemoveModel(m_MarioHeadModel); ModelCache.RemoveModel(m_MarioBodyModel); }
private void LoadROM(string filename) { if (!File.Exists(filename)) { MessageBox.Show("The specified file doesn't exist.", Program.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (Program.m_ROMPath != "") { while (Program.m_LevelEditors.Count > 0) { Program.m_LevelEditors[0].Close(); } lbxLevels.Items.Clear(); Program.m_ROM.EndRW(); } Program.m_ROMPath = filename; try { Program.m_ROM = new NitroROM(Program.m_ROMPath); } catch (Exception ex) { string msg; if (ex is IOException) { msg = "The ROM couldn't be opened. Close any program that may be using it and try again."; } else { msg = "The following error occured while loading the ROM:\n" + ex.Message; } MessageBox.Show(msg, Program.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); if (Program.m_ROM != null) { Program.m_ROM.EndRW(); Program.m_ROMPath = ""; } return; } Program.m_ROM.BeginRW(); if (Program.m_ROM.NeedsPatch()) { DialogResult res = MessageBox.Show( "This ROM needs to be patched before the editor can work with it.\n\n" + "Do you want to first make a backup of it in case the patching\n" + "operation goes wrong somehow?", Program.AppTitle, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); if (res == DialogResult.Yes) { sfdSaveFile.FileName = Program.m_ROMPath.Substring(0, Program.m_ROMPath.Length - 4) + "_bak.nds"; if (sfdSaveFile.ShowDialog(this) == DialogResult.OK) { Program.m_ROM.EndRW(); File.Copy(Program.m_ROMPath, sfdSaveFile.FileName, true); } } else if (res == DialogResult.Cancel) { Program.m_ROM.EndRW(); Program.m_ROMPath = ""; return; } // switch to buffered RW mode (faster for patching) Program.m_ROM.EndRW(); Program.m_ROM.BeginRW(true); try { Program.m_ROM.Patch(); } catch (Exception ex) { MessageBox.Show( "An error occured while patching your ROM.\n" + "No changes have been made to your ROM.\n" + "Try using a different ROM. If the error persists, report it to Mega-Mario, with the details below:\n\n" + ex.Message + "\n" + ex.StackTrace, Program.AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); Program.m_ROM.EndRW(false); Program.m_ROMPath = ""; return; } } Program.m_ROM.LoadTables(); Program.m_ROM.EndRW(); ModelCache.Init(); // Program.m_ShaderCache = new ShaderCache(); lbxLevels.Items.AddRange(Strings.LevelNames); this.tvFileList.Nodes.Clear(); ROMFileSelect.LoadFileList(this.tvFileList); this.tvARM9Overlays.Nodes.Clear(); ROMFileSelect.LoadOverlayList(this.tvARM9Overlays); btnEditTexts.Enabled = true; btnAnimationEditor.Enabled = true; btnMore.Enabled = true; }
private void PrerenderModel() { m_MarioHeadModel = ModelCache.GetModel("data/player/mario_head_cap.bmd"); m_MarioBodyModel = ModelCache.GetModel("data/player/mario_model.bmd"); int[] mheaddl = ModelCache.GetDisplayLists(m_MarioHeadModel); int[] mbodydl = ModelCache.GetDisplayLists(m_MarioBodyModel); Vector3 mariopos = Vector3.Multiply(m_MarioPosition, m_Scale); if (m_DisplayList == 0) { m_DisplayList = GL.GenLists(1); } GL.NewList(m_DisplayList, ListMode.Compile); GL.FrontFace(FrontFaceDirection.Ccw); GL.Disable(EnableCap.Lighting); GL.BindTexture(TextureTarget.Texture2D, 0); GL.Begin(BeginMode.Lines); GL.Color3(1f, 0f, 0f); GL.Vertex3(0f, 0f, 0f); GL.Vertex3(500f, 0f, 0f); GL.Color3(0f, 1f, 0f); GL.Vertex3(0f, 0f, 0f); GL.Vertex3(0f, 500f, 0f); GL.Color3(0f, 0f, 1f); GL.Vertex3(0f, 0f, 0f); GL.Vertex3(0f, 0f, 500f); GL.End(); GL.PushMatrix(); GL.Translate(mariopos); GL.Begin(BeginMode.Lines); GL.Color3(1f, 1f, 0f); GL.Vertex3(0f, 0f, 0f); GL.Vertex3(0f, -500f, 0f); GL.End(); GL.Rotate(m_MarioRotation, Vector3.UnitY); GL.Scale(0.008f, 0.008f, 0.008f); GL.CallList(mbodydl[0]); GL.CallList(mbodydl[1]); GL.Translate(0f, 11.25f, 0f); GL.Rotate(-90f, Vector3.UnitY); GL.Rotate(180f, Vector3.UnitX); GL.CallList(mheaddl[0]); GL.CallList(mheaddl[1]); GL.PopMatrix(); Vector3 previewScale = m_Scale; previewScale = Vector3.Multiply(m_Scale, m_InGameModelScale); if (m_MdlLoaded) { GL.Disable(EnableCap.Lighting); GL.PushMatrix(); GL.Scale(previewScale); GL.FrontFace(FrontFaceDirection.Ccw); m_ImportedModel.PrepareToRender(); // Render model converted to BMD int[] dl = new int[2]; dl[0] = GL.GenLists(1); GL.NewList(dl[0], ListMode.Compile); m_ImportedModel.Render(RenderMode.Opaque, 1f); //GL.EndList(); dl[1] = GL.GenLists(1); GL.NewList(dl[1], ListMode.Compile); m_ImportedModel.Render(RenderMode.Translucent, 1f); GL.EndList(); GL.PopMatrix(); //GL.EndList(); //GL.CallList(dl[0]); //GL.CallList(dl[1]); // End } if (m_PDisplayList == 0) { m_PDisplayList = GL.GenLists(1); } GL.NewList(m_PDisplayList, ListMode.Compile); GL.Color4(Color.FromArgb(0x66666666)); GL.PushMatrix(); GL.Translate(mariopos); GL.Rotate(m_MarioRotation, Vector3.UnitY); GL.Scale(0.008f, 0.008f, 0.008f); GL.CallList(mbodydl[2]); GL.Translate(0f, 11.25f, 0f); GL.Rotate(-90f, Vector3.UnitY); GL.Rotate(180f, Vector3.UnitX); GL.CallList(mheaddl[2]); GL.PopMatrix(); GL.EndList(); }