public Bitmap ConvertBMDTextureToBitmap(BMD.Texture texture) { Bitmap lol = new Bitmap((int)texture.m_Width, (int)texture.m_Height); for (int y = 0; y < (int)texture.m_Height; y++) { for (int x = 0; x < (int)texture.m_Width; x++) { lol.SetPixel(x, y, Color.FromArgb(texture.m_Data[((y * texture.m_Width) + x) * 4 + 3], texture.m_Data[((y * texture.m_Width) + x) * 4 + 2], texture.m_Data[((y * texture.m_Width) + x) * 4 + 1], texture.m_Data[((y * texture.m_Width) + x) * 4])); } } return lol; }
public BTP(NitroFile file, BMD model) { this.m_File = file; this.m_FileName = file.m_Name; this.m_Model = model; m_NumFrames = m_File.Read16(0x00); m_NumTextures = m_File.Read16(0x02); m_TextureHeadersOffset = m_File.Read32(0x04); m_TextureNames = new List<string>(); m_NumPalettes = m_File.Read16(0x08); m_PaletteHeadersOffset = m_File.Read32(0x0C); m_PaletteNames = new List<string>(); m_FrameChangesOffset = m_File.Read32(0x10); m_FrameTextureIDsOffset = m_File.Read32(0x14); m_FramePaletteIDsOffset = m_File.Read32(0x18); m_NumMaterials = m_File.Read16(0x1C); m_MaterialHeadersOffset = m_File.Read32(0x20); m_MaterialNames = new List<string>(); for (int i = 0; i < m_NumTextures; i++) { m_TextureNames.Add(m_File.ReadString(m_File.Read32(m_TextureHeadersOffset + 0x04 + (uint)(i * 8)), 0)); } for (int i = 0; i < m_NumPalettes; i++) { m_PaletteNames.Add(m_File.ReadString(m_File.Read32(m_PaletteHeadersOffset + 0x04 + (uint)(i * 8)), 0)); } // Read in the frames for each material m_MaterialData = new Dictionary<string, BTPMaterialData>(); m_Frames = new List<BTPFrameData>(); for (int i = 0; i < m_NumMaterials; i++) { m_MaterialNames.Add(m_File.ReadString(m_File.Read32(m_MaterialHeadersOffset + 0x04 + (uint)(i * 12)), 0)); ushort matFrameChanges = m_File.Read16(m_MaterialHeadersOffset + 0x08 + (uint)(i * 12)); ushort startOffsetFrameChanges = m_File.Read16(m_MaterialHeadersOffset + 0x0A + (uint)(i * 12)); int matNumFrames = 0; for (int j = 0; j < matFrameChanges; j++) { ushort frameNum = m_File.Read16((uint)(m_FrameChangesOffset + (startOffsetFrameChanges * 2) + (j * 2))); // If not the last frame in the sequence, length = (next frame number - current frame number) else, // length = (number of frames in sequence - current frame number) int nextFrameNum = (j != (matFrameChanges - 1)) ? (int)m_File.Read16((uint)(m_FrameChangesOffset + (startOffsetFrameChanges * 2) + ((j + 1) * 2))) : -1; int length = (nextFrameNum != -1) ? (nextFrameNum - frameNum) : (m_NumFrames - frameNum); ushort texID = m_File.Read16((uint)(m_FrameTextureIDsOffset + (startOffsetFrameChanges * 2) + (j * 2))); ushort palID = m_File.Read16((uint)(m_FramePaletteIDsOffset + (startOffsetFrameChanges * 2) + (j * 2))); AddFrame(matNumFrames, m_Frames.Count, texID, palID, length); matNumFrames += length; } BTPMaterialData matData = new BTPMaterialData(m_MaterialNames[i], matFrameChanges, startOffsetFrameChanges, matNumFrames); m_MaterialData.Add(m_MaterialNames[i], matData); } }
public BMD ConvertDAEToBMD(ref NitroFile modelFile, string fileName, Vector3 scale, BMDExtraImportOptions extraOptions, bool save = true) { BMD importedModel = new BMD(modelFile); if (m_LoadedModel == null) m_LoadedModel = new DAELoader(fileName).LoadModel(scale); importedModel = CallBMDWriter(ref modelFile, m_LoadedModel, extraOptions, save); return importedModel; }
private void ContextMenu_SaveAs() { SaveFileDialog SFD = new SaveFileDialog(); SFD.OverwritePrompt = true; SFD.AddExtension = false; SFD.FileName = PersonaFile.Name.Replace('/', '+'); SFD.Filter = $"RAW(*{Path.GetExtension(SFD.FileName)})|*{Path.GetExtension(SFD.FileName)}"; if (PersonaFile.GameData is IImage) { SFD.Filter += $"|PNG (*.png)|*.png"; } if (PersonaFile.GameData is ITable) { SFD.Filter += $"|XML data table (*.xml)|*.xml"; } if (PersonaFile.GameData is BMD) { SFD.Filter += $"|Persona Text Project (*.ptp)|*.ptp"; } if (PersonaFile.GameData is PTP) { SFD.Filter += $"|BMD Text File (*.bmd)|*.bmd"; } SFD.InitialDirectory = Path.GetDirectoryName(Static.OpenedFile); if (SFD.ShowDialog() == true) { if (SFD.FilterIndex == 1) { File.WriteAllBytes(SFD.FileName, PersonaFile.GameData.GetData()); } else { string ext = Path.GetExtension(SFD.FileName); if (ext.Equals(".png", StringComparison.CurrentCultureIgnoreCase)) { PersonaEditorCMD.PersonaEditorTools.SaveImageFile(PersonaFile, SFD.FileName); } else if (ext.Equals(".ptp", StringComparison.CurrentCultureIgnoreCase)) { var result = ToolBox.Show(ToolBoxType.SaveAsPTP); if (result == ToolBoxResult.Ok) { PersonaEncoding temp = ApplicationSettings.AppSetting.Default.SaveAsPTP_CO2N ? Static.EncodingManager.GetPersonaEncoding(ApplicationSettings.AppSetting.Default.SaveAsPTP_Font) : null; PersonaEditorCMD.PersonaEditorTools.SavePTPFile(PersonaFile, SFD.FileName, temp); } } else if (ext.Equals(".bmd", StringComparison.CurrentCultureIgnoreCase)) { Encoding encoding = Static.EncodingManager.GetPersonaEncoding(ApplicationSettings.AppSetting.Default.PTPNewDefault); BMD bmd = new BMD(PersonaFile.GameData as PTP, encoding); File.WriteAllBytes(SFD.FileName, bmd.GetData()); } else if (ext.Equals(".xml", StringComparison.CurrentCultureIgnoreCase)) { PersonaEditorCMD.PersonaEditorTools.SaveTableFile(PersonaFile, SFD.FileName); } else { throw new Exception("SavePersonaFileDialog"); } } } }
public BMDLoader(string modelFileName, BMD bmd) : base(modelFileName) { m_BMD = bmd; }