version 1.1 | | version 1.2 |
---|
| | |
#include "newdemo.h" | | #include "newdemo.h" |
#include "kconfig.h" | | #include "kconfig.h" |
| | |
| | #include "altsound.h" |
| | |
//edited 05/17/99 Matt Mueller - added ifndef NO_ASM | | //edited 05/17/99 Matt Mueller - added ifndef NO_ASM |
//added on 980905 by adb to add inline fixmul for mixer on i386 | | //added on 980905 by adb to add inline fixmul for mixer on i386 |
#ifndef NO_ASM | | #ifndef NO_ASM |
| | |
pthread_cancel(thread_id); | | pthread_cancel(thread_id); |
} | | } |
| | |
/* Find the sound which actually equates to a sound number */ | | |
int digi_xlat_sound(int soundno) | | |
{ | | |
if ( soundno < 0 ) return -1; | | |
| | |
if ( digi_lomem ) { | | |
soundno = AltSounds[soundno]; | | |
if ( soundno == 255 ) return -1; | | |
} | | |
return Sounds[soundno]; | | |
} | | |
| | |
static int get_free_slot() | | static int get_free_slot() |
{ | | { |
int i; | | int i; |
| | |
if (slot<0) return -1; | | if (slot<0) return -1; |
| | |
SoundSlots[slot].soundno = soundnum; | | SoundSlots[slot].soundno = soundnum; |
SoundSlots[slot].samples = GameSounds[soundnum].data; | | SoundSlots[slot].samples = Sounddat(soundnum)->data; |
SoundSlots[slot].length = GameSounds[soundnum].length; | | SoundSlots[slot].length = Sounddat(soundnum)->length; |
SoundSlots[slot].volume = fixmul(digi_volume, volume); | | SoundSlots[slot].volume = fixmul(digi_volume, volume); |
SoundSlots[slot].pan = pan; | | SoundSlots[slot].pan = pan; |
SoundSlots[slot].position = 0; | | SoundSlots[slot].position = 0; |
| | |
| | |
| | |
SoundSlots[slot].soundno = SoundObjects[obj].soundnum; | | SoundSlots[slot].soundno = SoundObjects[obj].soundnum; |
SoundSlots[slot].samples = GameSounds[SoundObjects[obj].soundnum].data; | | SoundSlots[slot].samples = Sounddat(SoundObjects[obj].soundnum)->data; |
SoundSlots[slot].length = GameSounds[SoundObjects[obj].soundnum].length; | | SoundSlots[slot].length = Sounddat(SoundObjects[obj].soundnum)->length; |
SoundSlots[slot].volume = fixmul(digi_volume, SoundObjects[obj].volume); | | SoundSlots[slot].volume = fixmul(digi_volume, SoundObjects[obj].volume); |
SoundSlots[slot].pan = SoundObjects[obj].pan; | | SoundSlots[slot].pan = SoundObjects[obj].pan; |
SoundSlots[slot].position = 0; | | SoundSlots[slot].position = 0; |
| | |
if ( Newdemo_state == ND_STATE_RECORDING ) | | if ( Newdemo_state == ND_STATE_RECORDING ) |
newdemo_record_sound( soundno ); | | newdemo_record_sound( soundno ); |
#endif | | #endif |
soundno = digi_xlat_sound(soundno); | | |
| | |
if (!digi_initialised) return; | | if (!digi_initialised) return; |
| | |
if (soundno < 0 ) return; | | if (digi_xlat_sound(soundno) < 0 ) return; |
| | |
digi_start_sound(soundno, max_volume, F0_5); | | digi_start_sound(soundno, max_volume, F0_5); |
} | | } |
| | |
if ( Newdemo_state == ND_STATE_RECORDING ) | | if ( Newdemo_state == ND_STATE_RECORDING ) |
newdemo_record_sound( soundno ); | | newdemo_record_sound( soundno ); |
#endif | | #endif |
soundno = digi_xlat_sound(soundno); | | |
| | |
if (!digi_initialised) return; | | if (!digi_initialised) return; |
| | |
if (soundno < 0 ) return; | | if (digi_xlat_sound(soundno) < 0 ) return; |
| | |
LOCK(); | | LOCK(); |
for (i=0; i < MAX_SOUND_SLOTS; i++) | | for (i=0; i < MAX_SOUND_SLOTS; i++) |
| | |
SoundSlots[i].playing = 0; | | SoundSlots[i].playing = 0; |
UNLOCK(); | | UNLOCK(); |
digi_start_sound(soundno, max_volume, F0_5); | | digi_start_sound(soundno, max_volume, F0_5); |
| | |
} | | } |
| | |
void digi_play_sample_3d( int soundno, int angle, int volume, int no_dups ) // Volume from 0-0x7fff | | void digi_play_sample_3d( int soundno, int angle, int volume, int no_dups ) // Volume from 0-0x7fff |
| | |
newdemo_record_sound_3d( soundno, angle, volume ); | | newdemo_record_sound_3d( soundno, angle, volume ); |
} | | } |
#endif | | #endif |
soundno = digi_xlat_sound(soundno); | | |
| | |
if (!digi_initialised) return; | | if (!digi_initialised) return; |
if (soundno < 0 ) return; | | if (digi_xlat_sound(soundno) < 0 ) return; |
| | |
if (volume < MIN_VOLUME ) return; | | if (volume < MIN_VOLUME ) return; |
digi_start_sound(soundno, volume, angle); | | digi_start_sound(soundno, volume, angle); |
| | |
} | | } |
} | | } |
| | |
int digi_link_sound_to_object2( int org_soundnum, short objnum, int forever, fix max_volume, fix max_distance ) | | int digi_link_sound_to_object2( int soundnum, short objnum, int forever, fix max_volume, fix max_distance ) |
{ | | { |
int i,volume,pan; | | int i,volume,pan; |
object * objp; | | object * objp; |
int soundnum; | | |
| | |
soundnum = digi_xlat_sound(org_soundnum); | | |
| | |
if ( max_volume < 0 ) return -1; | | if ( max_volume < 0 ) return -1; |
// if ( max_volume > F1_0 ) max_volume = F1_0; | | // if ( max_volume > F1_0 ) max_volume = F1_0; |
| | |
if (!digi_initialised) return -1; | | if (!digi_initialised) return -1; |
if (soundnum < 0 ) return -1; | | if (digi_xlat_sound(soundnum) < 0 ) return -1; |
if (GameSounds[soundnum].data==NULL) { | | if (Sounddat(soundnum)->data==NULL) { |
Int3(); | | Int3(); |
return -1; | | return -1; |
} | | } |
| | |
if ( !forever ) { | | if ( !forever ) { |
// Hack to keep sounds from building up... | | // Hack to keep sounds from building up... |
digi_get_sound_loc( &Viewer->orient, &Viewer->pos, Viewer->segnum, &Objects[objnum].pos, Objects[objnum].segnum, max_volume,&volume, &pan, max_distance ); | | digi_get_sound_loc( &Viewer->orient, &Viewer->pos, Viewer->segnum, &Objects[objnum].pos, Objects[objnum].segnum, max_volume,&volume, &pan, max_distance ); |
digi_play_sample_3d( org_soundnum, pan, volume, 0 ); | | digi_play_sample_3d( soundnum, pan, volume, 0 ); |
return -1; | | return -1; |
} | | } |
| | |
| | |
int digi_link_sound_to_object( int soundnum, short objnum, int forever, fix max_volume ) | | int digi_link_sound_to_object( int soundnum, short objnum, int forever, fix max_volume ) |
{ return digi_link_sound_to_object2( soundnum, objnum, forever, max_volume, 256*F1_0); } | | { return digi_link_sound_to_object2( soundnum, objnum, forever, max_volume, 256*F1_0); } |
| | |
int digi_link_sound_to_pos2( int org_soundnum, short segnum, short sidenum, vms_vector * pos, int forever, fix max_volume, fix max_distance ) | | int digi_link_sound_to_pos2( int soundnum, short segnum, short sidenum, vms_vector * pos, int forever, fix max_volume, fix max_distance ) |
{ | | { |
int i, volume, pan; | | int i, volume, pan; |
int soundnum; | | int soundnum; |
| | |
soundnum = digi_xlat_sound(org_soundnum); | | |
| | |
if ( max_volume < 0 ) return -1; | | if ( max_volume < 0 ) return -1; |
// if ( max_volume > F1_0 ) max_volume = F1_0; | | // if ( max_volume > F1_0 ) max_volume = F1_0; |
| | |
if (!digi_initialised) return -1; | | if (!digi_initialised) return -1; |
if (soundnum < 0 ) return -1; | | if (digi_xlat_sound(soundnum) < 0 ) return -1; |
if (GameSounds[soundnum].data==NULL) { | | if (Sounddat(soundnum)->data==NULL) { |
Int3(); | | Int3(); |
return -1; | | return -1; |
} | | } |
| | |
if ( !forever ) { | | if ( !forever ) { |
// Hack to keep sounds from building up... | | // Hack to keep sounds from building up... |
digi_get_sound_loc( &Viewer->orient, &Viewer->pos, Viewer->segnum, pos, segnum, max_volume, &volume, &pan, max_distance ); | | digi_get_sound_loc( &Viewer->orient, &Viewer->pos, Viewer->segnum, pos, segnum, max_volume, &volume, &pan, max_distance ); |
digi_play_sample_3d( org_soundnum, pan, volume, 0 ); | | digi_play_sample_3d( soundnum, pan, volume, 0 ); |
return -1; | | return -1; |
} | | } |
| | |
| | |
{ | | { |
int i,killed; | | int i,killed; |
| | |
soundnum = digi_xlat_sound(soundnum); | | |
| | |
if (!digi_initialised) return; | | if (!digi_initialised) return; |
| | |
killed = 0; | | killed = 0; |
| | |
{ | | { |
int i; | | int i; |
| | |
soundno = digi_xlat_sound(soundno); | | |
| | |
LOCK(); | | LOCK(); |
for (i = 0; i < MAX_SOUND_SLOTS; i++) | | for (i = 0; i < MAX_SOUND_SLOTS; i++) |
//changed on 980905 by adb: added SoundSlots[i].playing && | | //changed on 980905 by adb: added SoundSlots[i].playing && |
| | |
next_handle = 0; | | next_handle = 0; |
//end edit by adb | | //end edit by adb |
} | | } |
| | |
| | |
// MIDI stuff follows. | | |
//added/killed on 11/25/98 by Matthew Mueller | | |
//void digi_set_midi_volume( int mvolume ) { } | | |
//void digi_play_midi_song( char * filename, char * melodic_bank, char * drum_bank, int loop ) {} | | |
//void digi_stop_current_song() | | |
//{ | | |
//#ifdef HMIPLAY | | |
// char buf[10]; | | |
// | | |
// sprintf(buf,"s"); | | |
// send_ipc(buf); | | |
//#endif | | |
//} | | |
//end this section kill - MM | | |