Skip to content

Commit

Permalink
[Mod] Add separate song flag for fast portamentos, similar to fast vo…
Browse files Browse the repository at this point in the history
…lume slides.

git-svn-id: https://source.openmpt.org/svn/openmpt/trunk/OpenMPT@20547 56274372-70c3-4bfc-bfc3-4c3a0b034d27
  • Loading branch information
sagamusix committed Apr 9, 2024
1 parent 9117bfa commit 491b32e
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 9 deletions.
1 change: 1 addition & 0 deletions soundlib/Load_669.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ bool CSoundFile::Read669(FileReader &file, ModLoadingFlags loadFlags)
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);
Expand Down
2 changes: 1 addition & 1 deletion soundlib/Load_med.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1209,8 +1209,8 @@ bool CSoundFile::ReadMED(FileReader &file, ModLoadingFlags loadFlags)
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))
{
Expand Down
1 change: 1 addition & 0 deletions soundlib/Load_okt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,7 @@ bool CSoundFile::ReadOKT(FileReader &file, ModLoadingFlags loadFlags)
m_nSamplePreAmp = m_nVSTiVolume = 48;
m_nMinPeriod = 113 * 4;
m_nMaxPeriod = 856 * 4;
m_SongFlags.set(SONG_FASTPORTAS);

// Fix orderlist
Order().resize(numOrders);
Expand Down
5 changes: 3 additions & 2 deletions soundlib/Snd_defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,8 @@ enum class DuplicateNoteAction : uint8
// 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
Expand All @@ -269,7 +270,7 @@ enum SongFlags
};
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)
Expand Down
10 changes: 4 additions & 6 deletions soundlib/Snd_fx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3826,8 +3826,7 @@ void CSoundFile::PortamentoUp(PlayState &playState, CHANNELINDEX nChn, ModComman
// 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);
}
Expand Down Expand Up @@ -3898,8 +3897,7 @@ void CSoundFile::PortamentoDown(PlayState &playState, CHANNELINDEX nChn, ModComm

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);
}
Expand Down Expand Up @@ -4226,9 +4224,9 @@ int32 CSoundFile::TonePortamento(PlayState &playState, CHANNELINDEX nChn, uint16
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)
Expand Down

0 comments on commit 491b32e

Please sign in to comment.