Skip to content

Commit fc35244

Browse files
committed
s_xmp_startPattern - makes the tracker song play a different pattern (for use with sub-songs)
1 parent de7dcf2 commit fc35244

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

code/client/snd_codec_xmp.c

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,10 @@ void sound_deinit(void);
4343

4444

4545

46-
46+
static float fadey;
47+
extern cvar_t *s_xmp_startPattern;
48+
static int startpat;
49+
static int gopat;
4750
extern int samplingrate; // from snd_dma
4851

4952
void S_XMP_StartSong ( void )
@@ -58,6 +61,29 @@ void S_XMP_EndSong ( void )
5861

5962

6063

64+
}
65+
66+
67+
// TODO: A callback to set this appropriately from game context (monster sight, level triggers)
68+
void S_XMP_CheckForFade ( void )
69+
{
70+
gopat = s_xmp_startPattern->integer;
71+
72+
if ((gopat != startpat))
73+
{
74+
fadey -= 0.025f;
75+
// Com_Printf("AHHHFADING TO PATTERN %i!!! %f\n", startpat, fadey);
76+
xmp_set_player(xmpsong, XMP_PLAYER_VOLUME, (fadey * 128));
77+
}
78+
79+
if ((startpat != gopat) && (fadey < 0.01))
80+
{
81+
startpat = gopat;
82+
xmp_set_position(xmpsong, startpat);
83+
xmp_set_player(xmpsong, XMP_PLAYER_VOLUME, 128);
84+
fadey = 1;
85+
}
86+
6187
}
6288

6389
int aintistreaming = 0;
@@ -79,7 +105,7 @@ S_XMP_CodecOpenStream
79105
=================
80106
*/
81107

82-
// FIXME: there's a memory leak here if you start the same song many many many many times.
108+
// FIXME: there's a memory leak here if you start the same song many many many many times?
83109
snd_stream_t *S_XMP_CodecOpenStream(const char *filename)
84110
{
85111
// First let's close whatever song we had....
@@ -130,7 +156,14 @@ snd_stream_t *S_XMP_CodecOpenStream(const char *filename)
130156
FS_FCloseFile(file); // unfortunately these do not help with the leak
131157

132158
if (itsloaded == 0)
133-
itsloaded = xmp_start_player(xmpsong, xmpspeed, 0); // TODO: do sample rate of the mixer.
159+
{
160+
itsloaded = xmp_start_player(xmpsong, xmpspeed, 0);
161+
startpat=s_xmp_startPattern->integer;
162+
gopat = startpat;
163+
fadey = 1.0;
164+
xmp_set_player(xmpsong, XMP_PLAYER_VOLUME, 128);
165+
xmp_set_position(xmpsong, startpat);
166+
}
134167

135168
if (itsloaded == 0) {
136169
// Com_Printf("XMP loaded our buffer of the file %s which is %i long \n", filename, thelength);
@@ -197,6 +230,8 @@ int S_XMP_CodecReadStream(snd_stream_t *stream, int bytes, void *buffer)
197230
return 0;
198231
}
199232

233+
S_XMP_CheckForFade();
234+
200235
return bytes;
201236
}
202237

code/client/snd_local.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,8 @@ extern short *sfxScratchBuffer;
241241
extern sfx_t *sfxScratchPointer;
242242
extern int sfxScratchIndex;
243243

244+
extern cvar_t *s_xmp_startPattern;
245+
244246
qboolean S_Base_Init( soundInterface_t *si );
245247

246248
// OpenAL stuff

code/client/snd_main.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ cvar_t *s_muteWhenMinimized;
3535
cvar_t *s_muteWhenUnfocused;
3636

3737
cvar_t *s_interrupts;
38+
cvar_t *s_xmp_startPattern;
3839

3940
static soundInterface_t si;
4041

@@ -490,7 +491,7 @@ void S_Init( void )
490491
s_interrupts = Cvar_Get( "s_interrupts", "0", CVAR_ARCHIVE ); // leilei - pre-1.25 sound behavior
491492
s_muteWhenMinimized = Cvar_Get( "s_muteWhenMinimized", "0", CVAR_ARCHIVE );
492493
s_muteWhenUnfocused = Cvar_Get( "s_muteWhenUnfocused", "0", CVAR_ARCHIVE );
493-
494+
s_xmp_startPattern = Cvar_Get( "s_xmp_startPattern", "0", CVAR_CHEAT ); // leilei - starting pattern for song
494495
cv = Cvar_Get( "s_initsound", "1", 0 );
495496
if( !cv->integer ) {
496497
Com_Printf( "Sound disabled.\n" );

0 commit comments

Comments
 (0)