From: <sv...@op...> - 2024-04-09 19:50:17
|
Author: sagamusix Date: Tue Apr 9 21:50:02 2024 New Revision: 20547 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=20547 Log: [Mod] Add separate song flag for fast portamentos, similar to fast volume slides. Modified: trunk/OpenMPT/soundlib/Load_669.cpp trunk/OpenMPT/soundlib/Load_med.cpp trunk/OpenMPT/soundlib/Load_okt.cpp trunk/OpenMPT/soundlib/Snd_defs.h trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/soundlib/Load_669.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_669.cpp Tue Apr 9 20:12:09 2024 (r20546) +++ trunk/OpenMPT/soundlib/Load_669.cpp Tue Apr 9 21:50:02 2024 (r20547) @@ -142,6 +142,7 @@ Order().SetDefaultSpeed(4); m_nChannels = 8; m_playBehaviour.set(kPeriodsAreHertz); + m_SongFlags.set(SONG_FASTPORTAS); #ifdef MODPLUG_TRACKER // 669 uses frequencies rather than periods, so linear slides mode will sound better in the higher octaves. //m_SongFlags.set(SONG_LINEARSLIDES); Modified: trunk/OpenMPT/soundlib/Load_med.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_med.cpp Tue Apr 9 20:12:09 2024 (r20546) +++ trunk/OpenMPT/soundlib/Load_med.cpp Tue Apr 9 21:50:02 2024 (r20547) @@ -1209,8 +1209,8 @@ m_nDefaultGlobalVolume = std::min<uint8>(songHeader.masterVol, 64) * 4; m_nSamplePreAmp = m_nVSTiVolume = preamp; - // For MED, this affects both volume and pitch slides m_SongFlags.set(SONG_FASTVOLSLIDES, !(songHeader.flags & MMDSong::FLAG_STSLIDE)); + m_SongFlags.set(SONG_FASTPORTAS, !(songHeader.flags& MMDSong::FLAG_STSLIDE)); if(expData.songNameOffset && file.Seek(expData.songNameOffset)) { Modified: trunk/OpenMPT/soundlib/Load_okt.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_okt.cpp Tue Apr 9 20:12:09 2024 (r20546) +++ trunk/OpenMPT/soundlib/Load_okt.cpp Tue Apr 9 21:50:02 2024 (r20547) @@ -451,6 +451,7 @@ m_nSamplePreAmp = m_nVSTiVolume = 48; m_nMinPeriod = 113 * 4; m_nMaxPeriod = 856 * 4; + m_SongFlags.set(SONG_FASTPORTAS); // Fix orderlist Order().resize(numOrders); Modified: trunk/OpenMPT/soundlib/Snd_defs.h ============================================================================== --- trunk/OpenMPT/soundlib/Snd_defs.h Tue Apr 9 20:12:09 2024 (r20546) +++ trunk/OpenMPT/soundlib/Snd_defs.h Tue Apr 9 21:50:02 2024 (r20547) @@ -245,7 +245,8 @@ // Module flags - contains both song configuration and playback state... Use SONG_FILE_FLAGS and SONG_PLAY_FLAGS distinguish between the two. enum SongFlags { - SONG_FASTVOLSLIDES = 0x02, // Old Scream Tracker 3.0 volume slides + SONG_FASTPORTAS = 0x01, // Portamentos are executed on every tick + SONG_FASTVOLSLIDES = 0x02, // Old Scream Tracker 3.0 volume slides (executed on every tick) SONG_ITOLDEFFECTS = 0x04, // Old Impulse Tracker effect implementations SONG_ITCOMPATGXX = 0x08, // IT "Compatible Gxx" (IT's flag to behave more like other trackers w/r/t portamento effects) SONG_LINEARSLIDES = 0x10, // Linear slides vs. Amiga slides @@ -269,7 +270,7 @@ }; DECLARE_FLAGSET(SongFlags) -#define SONG_FILE_FLAGS (SONG_FASTVOLSLIDES|SONG_ITOLDEFFECTS|SONG_ITCOMPATGXX|SONG_LINEARSLIDES|SONG_EXFILTERRANGE|SONG_AMIGALIMITS|SONG_S3MOLDVIBRATO|SONG_PT_MODE|SONG_ISAMIGA|SONG_IMPORTED) +#define SONG_FILE_FLAGS (SONG_FASTPORTAS|SONG_FASTVOLSLIDES|SONG_ITOLDEFFECTS|SONG_ITCOMPATGXX|SONG_LINEARSLIDES|SONG_EXFILTERRANGE|SONG_AMIGALIMITS|SONG_S3MOLDVIBRATO|SONG_PT_MODE|SONG_ISAMIGA|SONG_IMPORTED) #define SONG_PLAY_FLAGS (~SONG_FILE_FLAGS) // Global Options (Renderer) Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp Tue Apr 9 20:12:09 2024 (r20546) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp Tue Apr 9 21:50:02 2024 (r20547) @@ -3826,8 +3826,7 @@ // Regular Slide if(!chn.isFirstTick || (m_PlayState.m_nMusicSpeed == 1 && m_playBehaviour[kSlidesAtSpeed1]) - || (GetType() & (MOD_TYPE_669 | MOD_TYPE_OKT)) - || (GetType() == MOD_TYPE_MED && m_SongFlags[SONG_FASTVOLSLIDES])) + || m_SongFlags[SONG_FASTPORTAS]) { DoFreqSlide(chn, chn.nPeriod, param * 4); } @@ -3898,8 +3897,7 @@ if(!chn.isFirstTick || (m_PlayState.m_nMusicSpeed == 1 && m_playBehaviour[kSlidesAtSpeed1]) - || (GetType() & (MOD_TYPE_669 | MOD_TYPE_OKT)) - || (GetType() == MOD_TYPE_MED && m_SongFlags[SONG_FASTVOLSLIDES])) + || m_SongFlags[SONG_FASTPORTAS]) { DoFreqSlide(chn, chn.nPeriod, param * -4); } @@ -4226,9 +4224,9 @@ return 0; bool doPorta = !chn.isFirstTick - || (GetType() & (MOD_TYPE_DBM | MOD_TYPE_669)) + || GetType() == MOD_TYPE_DBM || (playState.m_nMusicSpeed == 1 && m_playBehaviour[kSlidesAtSpeed1]) - || (GetType() == MOD_TYPE_MED && m_SongFlags[SONG_FASTVOLSLIDES]); + || m_SongFlags[SONG_FASTPORTAS]; int32 delta = chn.portamentoSlide; if(GetType() == MOD_TYPE_PLM && delta >= 0xF0) |