From: <sv...@op...> - 2024-11-10 15:24:16
|
Author: sagamusix Date: Sun Nov 10 16:24:04 2024 New Revision: 22141 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22141 Log: [Imp] When creating a new MOD file, it is now possible to specifiy whether it should be an Amiga MOD (4 channels, enable PT quirks and Amiga resampler) or a PC MOD (8 channels, disable PT quirks and Amiga resampler). Fixes https://bugs.openmpt.org/view.php?id=1830 Modified: trunk/OpenMPT/mptrack/GeneralConfigDlg.cpp trunk/OpenMPT/mptrack/Moddoc.cpp trunk/OpenMPT/mptrack/Mptrack.cpp trunk/OpenMPT/mptrack/Mptrack.h trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/mptrack/mptrack.rc trunk/OpenMPT/mptrack/resource.h trunk/OpenMPT/soundlib/Snd_defs.h Modified: trunk/OpenMPT/mptrack/GeneralConfigDlg.cpp ============================================================================== --- trunk/OpenMPT/mptrack/GeneralConfigDlg.cpp Sun Nov 10 15:58:27 2024 (r22140) +++ trunk/OpenMPT/mptrack/GeneralConfigDlg.cpp Sun Nov 10 16:24:04 2024 (r22141) @@ -95,13 +95,14 @@ m_defaultArtist.SetWindowText(mpt::ToCString(TrackerSettings::Instance().defaultArtist.Get())); - const struct + static constexpr struct { MODTYPE type; const TCHAR *str; } formats[] = { - { MOD_TYPE_MOD, _T("MOD") }, + { MOD_TYPE_MOD, _T("MOD (Amiga)") }, + { MOD_TYPE_MOD_PC, _T("MOD (PC)")}, { MOD_TYPE_XM, _T("XM") }, { MOD_TYPE_S3M, _T("S3M") }, { MOD_TYPE_IT, _T("IT") }, Modified: trunk/OpenMPT/mptrack/Moddoc.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Moddoc.cpp Sun Nov 10 15:58:27 2024 (r22140) +++ trunk/OpenMPT/mptrack/Moddoc.cpp Sun Nov 10 16:24:04 2024 (r22141) @@ -625,6 +625,10 @@ case MOD_TYPE_MOD: m_SndFile.ChnSettings.resize(4); break; + case MOD_TYPE_MOD_PC: + m_SndFile.ChangeModTypeTo(MOD_TYPE_MOD); + m_SndFile.ChnSettings.resize(8); + break; case MOD_TYPE_S3M: m_SndFile.ChnSettings.resize(16); break; @@ -661,6 +665,17 @@ m_SndFile.m_nSamplePreAmp = m_SndFile.m_nVSTiVolume = 48; // Setup LRRL panning scheme for MODs m_SndFile.SetupMODPanning(); + + if(GetModType() == MOD_TYPE_MOD) + { + const bool isAmiga = GetNumChannels() == 4; + m_SndFile.m_SongFlags.set(SONG_ISAMIGA | SONG_AMIGALIMITS | SONG_PT_MODE, isAmiga); + m_SndFile.m_playBehaviour.set(kMODOneShotLoops, isAmiga); + m_SndFile.m_playBehaviour.set(kMODSampleSwap, isAmiga); + m_SndFile.m_playBehaviour.set(kMODOutOfRangeNoteDelay, isAmiga); + m_SndFile.m_playBehaviour.set(kMODTempoOnSecondTick, isAmiga); + m_SndFile.m_playBehaviour.set(kFT2MODTremoloRampWaveform); + } } if (!m_SndFile.m_nSamples) { Modified: trunk/OpenMPT/mptrack/Mptrack.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Mptrack.cpp Sun Nov 10 15:58:27 2024 (r22140) +++ trunk/OpenMPT/mptrack/Mptrack.cpp Sun Nov 10 16:24:04 2024 (r22141) @@ -620,15 +620,16 @@ BEGIN_MESSAGE_MAP(CTrackApp, CWinApp) //{{AFX_MSG_MAP(CTrackApp) - ON_COMMAND(ID_FILE_NEW, &CTrackApp::OnFileNew) - ON_COMMAND(ID_FILE_NEWMOD, &CTrackApp::OnFileNewMOD) - ON_COMMAND(ID_FILE_NEWS3M, &CTrackApp::OnFileNewS3M) - ON_COMMAND(ID_FILE_NEWXM, &CTrackApp::OnFileNewXM) - ON_COMMAND(ID_FILE_NEWIT, &CTrackApp::OnFileNewIT) - ON_COMMAND(ID_NEW_MPT, &CTrackApp::OnFileNewMPT) - ON_COMMAND(ID_FILE_OPEN, &CTrackApp::OnFileOpen) - ON_COMMAND(ID_FILE_CLOSEALL, &CTrackApp::OnFileCloseAll) - ON_COMMAND(ID_APP_ABOUT, &CTrackApp::OnAppAbout) + ON_COMMAND(ID_FILE_NEW, &CTrackApp::OnFileNew) + ON_COMMAND(ID_FILE_NEWMOD, &CTrackApp::OnFileNewMOD_Amiga) + ON_COMMAND(ID_FILE_NEWMOD_PC, &CTrackApp::OnFileNewMOD_PC) + ON_COMMAND(ID_FILE_NEWS3M, &CTrackApp::OnFileNewS3M) + ON_COMMAND(ID_FILE_NEWXM, &CTrackApp::OnFileNewXM) + ON_COMMAND(ID_FILE_NEWIT, &CTrackApp::OnFileNewIT) + ON_COMMAND(ID_NEW_MPT, &CTrackApp::OnFileNewMPT) + ON_COMMAND(ID_FILE_OPEN, &CTrackApp::OnFileOpen) + ON_COMMAND(ID_FILE_CLOSEALL, &CTrackApp::OnFileCloseAll) + ON_COMMAND(ID_APP_ABOUT, &CTrackApp::OnAppAbout) ON_UPDATE_COMMAND_UI(ID_FILE_CLOSEALL, &CTrackApp::OnUpdateAnyDocsOpen) //}}AFX_MSG_MAP END_MESSAGE_MAP() Modified: trunk/OpenMPT/mptrack/Mptrack.h ============================================================================== --- trunk/OpenMPT/mptrack/Mptrack.h Sun Nov 10 15:58:27 2024 (r22140) +++ trunk/OpenMPT/mptrack/Mptrack.h Sun Nov 10 16:24:04 2024 (r22141) @@ -329,7 +329,8 @@ CModDoc *NewDocument(MODTYPE newType = MOD_TYPE_NONE); afx_msg void OnFileNew() { NewDocument(); } - afx_msg void OnFileNewMOD() { NewDocument(MOD_TYPE_MOD); } + afx_msg void OnFileNewMOD_Amiga() { NewDocument(MOD_TYPE_MOD); } + afx_msg void OnFileNewMOD_PC() { NewDocument(MOD_TYPE_MOD_PC); } afx_msg void OnFileNewS3M() { NewDocument(MOD_TYPE_S3M); } afx_msg void OnFileNewXM() { NewDocument(MOD_TYPE_XM); } afx_msg void OnFileNewIT() { NewDocument(MOD_TYPE_IT); } Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp ============================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp Sun Nov 10 15:58:27 2024 (r22140) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp Sun Nov 10 16:24:04 2024 (r22141) @@ -77,12 +77,18 @@ mpt::ustring SettingsModTypeToString(MODTYPE modtype) { - return CSoundFile::GetModSpecifications(modtype).GetFileExtension(); + if(modtype == MOD_TYPE_MOD_PC) + return UL_("mod-pc"); + else + return CSoundFile::GetModSpecifications(modtype).GetFileExtension(); } MODTYPE SettingsStringToModType(const mpt::ustring &str) { - return CModSpecifications::ExtensionToType(str); + if(str == UL_("mod-pc")) + return MOD_TYPE_MOD_PC; + else + return CModSpecifications::ExtensionToType(str); } Modified: trunk/OpenMPT/mptrack/mptrack.rc ============================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc Sun Nov 10 15:58:27 2024 (r22140) +++ trunk/OpenMPT/mptrack/mptrack.rc Sun Nov 10 16:24:04 2024 (r22141) @@ -2778,7 +2778,8 @@ MENUITEM "&IT", ID_FILE_NEWIT MENUITEM "&XM", ID_FILE_NEWXM MENUITEM "&S3M", ID_FILE_NEWS3M - MENUITEM "M&OD", ID_FILE_NEWMOD + MENUITEM "M&OD (Amiga)", ID_FILE_NEWMOD + MENUITEM "MOD (&PC)", ID_FILE_NEWMOD_PC MENUITEM "Open&MPT Module", ID_NEW_MPT END MENUITEM "&Open...\tCtrl+O", ID_FILE_OPEN Modified: trunk/OpenMPT/mptrack/resource.h ============================================================================== --- trunk/OpenMPT/mptrack/resource.h Sun Nov 10 15:58:27 2024 (r22140) +++ trunk/OpenMPT/mptrack/resource.h Sun Nov 10 16:24:04 2024 (r22141) @@ -1148,6 +1148,7 @@ // From here: Command range [ID_PLUGSELECT, ID_PLUGSELECT + MAX_MIXPLUGINS] #define ID_VSTMACRO_INFO 36002 #define ID_VSTINPUT_INFO 36003 +#define ID_FILE_NEWMOD_PC 36004 #define ID_APPROX_BPM 36007 #define ID_FACTORY_MENU 36008 #define ID_PLUG_BYPASS 36009 Modified: trunk/OpenMPT/soundlib/Snd_defs.h ============================================================================== --- trunk/OpenMPT/soundlib/Snd_defs.h Sun Nov 10 15:58:27 2024 (r22140) +++ trunk/OpenMPT/soundlib/Snd_defs.h Sun Nov 10 16:24:04 2024 (r22141) @@ -104,6 +104,8 @@ MOD_TYPE_STP = 0x8000000, MOD_TYPE_PLM = 0x10000000, MOD_TYPE_SFX = 0x20000000, + + MOD_TYPE_MOD_PC = MOD_TYPE_MOD | MOD_TYPE_XM, }; DECLARE_FLAGSET(MODTYPE) |