Added AvP-Style attenuation code.

This commit is contained in:
Steven Fuller 2001-08-28 10:40:40 +00:00 committed by Patryk Obara
parent ab5897ec78
commit 35d91a5da3
5 changed files with 237 additions and 227 deletions

View file

@ -115,7 +115,6 @@ void SoundSys_Management(void)
if(PlatSoundHasStopped(i) && !ActiveSounds[i].paused)
{
printf("SoundSys_Management: %d\n", i);
Sound_Stop(i);
continue;
}
@ -489,7 +488,7 @@ void Sound_Play(SOUNDINDEX soundNumber, char *format, ...)
db_log3("Failed to find a lower priority sound.");
return; /* give up */
}
printf("Play We cannot be here already: %d!\n", newIndex);
/* remove it, and use it's slot */
db_log3("Stopping a lower priority sound.");
Sound_Stop(newIndex);
@ -511,8 +510,10 @@ printf("Play We cannot be here already: %d!\n", newIndex);
ActiveSounds[newIndex].reverb_off=reverb_off;
if(loop) ActiveSounds[newIndex].loop = 1;
else ActiveSounds[newIndex].loop = 0;
//printf("Play: new = %d. num = %d, p = %d, v = %d, pi = %d, l = %d, mi = %d, rev = %d\n", newIndex, soundNumber, priority, volume, pitch, loop, marine_ignore, reverb_off);
printf("Play: new = %d. num = %d, p = %d, v = %d, pi = %d, l = %d, mi = %d, rev = %d\n", newIndex, soundNumber, priority, volume, pitch, loop, marine_ignore, reverb_off);
printf("Play: %d %d %s l:%d\n", newIndex, soundNumber, GameSounds[soundNumber].wavName, loop);
if(worldPosn)
{
VECTORCH zeroPosn = {0,0,0};
@ -553,19 +554,21 @@ printf("Play: %d %d %s l:%d\n", newIndex, soundNumber, GameSounds[soundNumber].w
GameSounds[soundNumber].activeInstances++;
if(externalRef) *externalRef = newIndex;
/* only will happen because of savegames */
// if(soundStartPosition && ActiveSounds[newIndex].dsBufferP)
// {
// //sound starts part of the way in
// IDirectSoundBuffer_SetCurrentPosition(ActiveSounds[newIndex].dsBufferP,soundStartPosition);
// }
if (soundStartPosition)
printf("Sound_Play: sound starts part of the way in (%d)\n", soundStartPosition);
fprintf(stderr, "Sound_Play: sound starts part of the way in (%d)\n", soundStartPosition);
}
void Sound_Stop(int activeSoundNumber)
{
SOUNDINDEX soundNo;
int buf;
if(!SoundSwitchedOn) return;
/* validate argument */
if(activeSoundNumber<0) return;
@ -589,11 +592,9 @@ void Sound_Stop(int activeSoundNumber)
printf("Stop: %d %d %s\n", activeSoundNumber, soundNo, GameSounds[soundNo].wavName);
/* release the active sound slot */
{ /* CEM - FIXME: hack */
int buf = ActiveSounds[activeSoundNumber].ds3DBufferP;
ActiveSounds[activeSoundNumber] = BlankActiveSound;
ActiveSounds[activeSoundNumber].ds3DBufferP = buf;
}
buf = ActiveSounds[activeSoundNumber].ds3DBufferP;
ActiveSounds[activeSoundNumber] = BlankActiveSound;
ActiveSounds[activeSoundNumber].ds3DBufferP = buf;
}
void Sound_ChangeVolume(int activeSoundNumber, int volume)
@ -844,12 +845,13 @@ void Save_SoundState(int* soundHandle)
//by Sound_Play
block->volume<<=7;
block->volume/=VOLUME_PLAT2DSCALE;
/* only for savegames */
// if(sound->dsBufferP)
// IDirectSoundBuffer_GetCurrentPosition(sound->dsBufferP,(LPDWORD)&block->position,NULL);
// else
block->position = 0;
printf("Save_SoundState: GetCurrentPosition!\n");
fprintf(stderr, "Save_SoundState: GetCurrentPosition!\n");
strcpy((char*)(block+1),name);
@ -935,11 +937,12 @@ void Save_SoundsWithNoReference()
block->volume<<=7;
block->volume/=VOLUME_PLAT2DSCALE;
/* savegames */
// if(sound->dsBufferP)
// IDirectSoundBuffer_GetCurrentPosition(sound->dsBufferP,(LPDWORD)&block->position,NULL);
// else
block->position = 0;
printf("Save_SoundsWithNoReference: GetCurrentPosition!\n");
fprintf(stderr, "Save_SoundsWithNoReference: GetCurrentPosition!\n");
strcpy((char*)(block+1),name);
}

View file

@ -471,7 +471,9 @@ void KRenderItems(VIEWDESCRIPTORBLOCK *VDBPtr)
ProfileStart();
{
#if FOG_ON
int fogDistance = 0x7f000000;
#endif
int o = numVisObjs;
while(o--)
@ -519,9 +521,10 @@ void KRenderItems(VIEWDESCRIPTORBLOCK *VDBPtr)
VisibleObjects[o].DrawBeforeEnvironment = 0;
}
}
#if FOG_ON
if (fogDistance<0) fogDistance=0;
SetFogDistance(fogDistance);
#endif
}
ProfileStop("OBJS IN MOD TESTS");
DrawingAReflection=0;

View file

@ -1,6 +1,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <AL/al.h>
#include <AL/alc.h>
@ -21,7 +22,6 @@
#include "dynblock.h"
#include "stratdef.h"
/* psndplat.cpp */
ACTIVESOUNDSAMPLE ActiveSounds[SOUND_MAXACTIVE];
ACTIVESOUNDSAMPLE BlankActiveSound = {SID_NOSOUND,ASP_Minimum,0,0,NULL,0,0,0,0,0, { {0,0,0},{0,0,0},0,0 }, 0, 0, { 0.0, 0.0, 0.0 }, { 0.0, 0.0, 0.0 }, NULL, NULL, NULL};
SOUNDSAMPLEDATA BlankGameSound = {0,0,0,0,0,NULL,0,0,NULL,0};
@ -30,19 +30,27 @@ SOUNDSAMPLEDATA GameSounds[SID_MAXIMUM];
ALCdevice *AvpSoundDevice;
ALvoid *AvpSoundContext;
/*
TODO
Three problems:
1. AL_PITCH code does not work right.
a. bug in openal (causes a sound to keep repeating)
b. i probably don't give it the right value anyway.
2. there is currently no stereo separation. either openal or my error.
3. There is no EAX/Reverb. But there's probably not much I can do...
*/
int PlatStartSoundSys()
{
int i;
ALfloat pos[] = { 0.0, 0.0, 0.0 },
vel[] = { 0.0, 0.0, 0.0 },
or[] = { 0.0, 0.0, 1.0, 0.0, -1.0, 0.0 };
vel[] = { 0.0, 0.0, 0.0 },
or[] = { 0.0, 0.0, 1.0, 0.0, -1.0, 0.0 };
int attrlist[] = {
ALC_FREQUENCY, 22050,
ALC_SYNC, AL_FALSE,
0
};
fprintf(stderr, "PlatStartSoundSys()\n");
AvpSoundDevice = alcOpenDevice ("'( (sampling-rate 22050 ))");
AvpSoundContext = alcCreateContext (AvpSoundDevice, attrlist);
@ -60,8 +68,8 @@ int PlatStartSoundSys()
for (i = 0; i < SOUND_MAXACTIVE; i++) {
ALuint p;
alGenSources (1, &(ActiveSounds[i].ds3DBufferP));
p = ActiveSounds[i].ds3DBufferP;
alGenSources (1, &p);
ActiveSounds[i].ds3DBufferP = p;
ActiveSounds[i].PropSetP_pos[0] = 0.0;
ActiveSounds[i].PropSetP_pos[1] = 0.0;
@ -75,14 +83,12 @@ int PlatStartSoundSys()
return -1;
}
alSourcef (p, AL_PITCH, 1.0f);
alSourcef (p, AL_GAIN, 1.0f);
alSourcefv (p, AL_POSITION, ActiveSounds[i].PropSetP_pos);
alSourcefv (p, AL_VELOCITY, ActiveSounds[i].PropSetP_vel);
/* these are just guessed values for now */
alSourcef (p, AL_REFERENCE_DISTANCE, 5200.0f);
alSourcef (p, AL_ROLLOFF_FACTOR, 2.0f);
alSourcef(p, AL_PITCH, 1.0f);
alSourcef(p, AL_GAIN, 1.0f);
alSourcefv(p, AL_POSITION, ActiveSounds[i].PropSetP_pos);
alSourcefv(p, AL_VELOCITY, ActiveSounds[i].PropSetP_vel);
alSourcef(p, AL_ROLLOFF_FACTOR, 0);
}
return 1;
@ -90,22 +96,14 @@ int PlatStartSoundSys()
void PlatEndSoundSys()
{
fprintf(stderr, "PlatEndSoundSys()\n");
}
int PlatChangeGlobalVolume(int volume)
{
fprintf(stderr, "PlatChangeGlobalVolume(%d)\n", volume);
return 1;
/* TODO - free everything */
printf("PlatEndSoundSys()\n");
}
int PlatPlaySound(int activeIndex)
{
int si;
fprintf(stderr, "PlatPlaySound(%d)\n", activeIndex);
if ((activeIndex < 0) || (activeIndex >= SOUND_MAXACTIVE))
return 0;
si = ActiveSounds[activeIndex].soundIndex;
@ -127,49 +125,37 @@ int PlatPlaySound(int activeIndex)
if (ActiveSounds[activeIndex].pitch != GameSounds[si].pitch) {
int ok = PlatChangeSoundPitch (activeIndex, ActiveSounds[activeIndex].pitch);
if (ok == SOUND_PLATFORMERROR) {
PlatStopSound (activeIndex);
return ok;
}
PlatChangeSoundPitch (activeIndex, ActiveSounds[activeIndex].pitch);
}
if (ActiveSounds[activeIndex].threedee) {
if (ActiveSounds[activeIndex].threedee) {
alSourcei(ActiveSounds[activeIndex].ds3DBufferP, AL_SOURCE_RELATIVE, AL_FALSE);
alSourcef(ActiveSounds[activeIndex].ds3DBufferP, AL_GAIN, 1.0f);
PlatDo3dSound (activeIndex);
PlatDo3dSound (activeIndex);
} else {
ALfloat zero[3] = { 0.0f, 0.0f, 0.0f };
int newVolume, ok;
int newVolume;
alSourcei(ActiveSounds[activeIndex].ds3DBufferP, AL_SOURCE_RELATIVE, AL_TRUE);
alSourcef(ActiveSounds[activeIndex].ds3DBufferP, AL_GAIN, 0.7f);
alSourcefv(ActiveSounds[activeIndex].ds3DBufferP, AL_POSITION, zero);
alSourcefv(ActiveSounds[activeIndex].ds3DBufferP, AL_VELOCITY, zero);
newVolume = ActiveSounds[activeIndex].volume;
newVolume = (newVolume * VOLUME_PLAT2DSCALE) >> 7;
ActiveSounds[activeIndex].volume = newVolume;
ok = PlatChangeSoundVolume (activeIndex, ActiveSounds[activeIndex].volume);
if (ok == SOUND_PLATFORMERROR) {
PlatStopSound (activeIndex);
return ok;
}
PlatChangeSoundVolume (activeIndex, ActiveSounds[activeIndex].volume);
}
if (!ActiveSounds[activeIndex].paused) {
alSourcePlay (ActiveSounds[activeIndex].ds3DBufferP);
if (ActiveSounds[activeIndex].loop) {
fprintf (stderr, "Playing sound %i %s looping in slot %i\n",
printf("Playing sound %i %s looping in slot %i\n",
si, GameSounds[si].wavName, activeIndex);
} else {
fprintf (stderr, "Playing sound %i %s once in slot %i\n",
printf("Playing sound %i %s once in slot %i\n",
si, GameSounds[si].wavName, activeIndex);
}
}
@ -179,7 +165,7 @@ int PlatPlaySound(int activeIndex)
void PlatStopSound(int activeIndex)
{
fprintf(stderr, "PlatStopSound(%d)\n", activeIndex);
printf("PlatStopSound(%d)\n", activeIndex);
// if (ActiveSounds[activeIndex].paused)
// alSourcePause (ActiveSounds[activeIndex].ds3DBufferP);
@ -189,18 +175,41 @@ void PlatStopSound(int activeIndex)
alSourceStop (ActiveSounds[activeIndex].ds3DBufferP);
}
/* table generated by:
c = -600.0 / log10(.5);
x = pow(10, (double)vol_to_atten_table[volume]/c);
*/
static float vol_to_gain_table[] = {
0.000000f, 0.000011f, 0.000054f, 0.000142f, 0.000279f, 0.000474f, 0.000730f, 0.001052f,
0.001441f, 0.001904f, 0.002444f, 0.003061f, 0.003764f, 0.004544f, 0.005417f, 0.006382f,
0.007434f, 0.008579f, 0.009820f, 0.011164f, 0.012604f, 0.014147f, 0.015788f, 0.017538f,
0.019393f, 0.021369f, 0.023438f, 0.025619f, 0.027937f, 0.030360f, 0.032880f, 0.035526f,
0.038296f, 0.041187f, 0.044194f, 0.047366f, 0.050649f, 0.054034f, 0.057512f, 0.061143f,
0.064929f, 0.068869f, 0.072880f, 0.077035f, 0.081428f, 0.085872f, 0.090454f, 0.095171f,
0.100018f, 0.104991f, 0.110083f, 0.115423f, 0.120882f, 0.126452f, 0.132127f, 0.138057f,
0.143919f, 0.150205f, 0.156402f, 0.162856f, 0.169576f, 0.176369f, 0.183222f, 0.190342f,
0.197510f, 0.204948f, 0.212421f, 0.220166f, 0.227931f, 0.235969f, 0.244008f, 0.252613f,
0.260918f, 0.269496f, 0.278355f, 0.287507f, 0.296616f, 0.306013f, 0.315344f, 0.324960f,
0.334869f, 0.344681f, 0.355191f, 0.365177f, 0.375877f, 0.386445f, 0.397309f, 0.408479f,
0.419478f, 0.430773f, 0.442372f, 0.454284f, 0.465978f, 0.477973f, 0.490276f, 0.502896f,
0.515246f, 0.528509f, 0.541488f, 0.554144f, 0.567752f, 0.581023f, 0.595291f, 0.609205f,
0.622725f, 0.637280f, 0.651423f, 0.666649f, 0.681444f, 0.695762f, 0.711203f, 0.726986f,
0.742262f, 0.757858f, 0.773782f, 0.790041f, 0.806642f, 0.823591f, 0.839926f, 0.856584f,
0.873573f, 0.890899f, 0.908568f, 0.926588f, 0.944965f, 0.962594f, 0.980552f, 1.000000f
};
int PlatChangeGlobalVolume(int volume)
{
alListenerf(AL_GAIN, vol_to_gain_table[volume]);
return 1;
}
int PlatChangeSoundVolume(int activeIndex, int volume)
{
// float nv = 127.0f / (float) volume;
fprintf(stderr, "PlatChangeSoundVolume(%d, %d)\n", activeIndex, volume);
// if (nv > 1.0)
// nv = 1.0;
// alSourcef (ActiveSounds[activeIndex].ds3DBufferP,
// AL_MAX_GAIN, nv);
alSourcef(ActiveSounds[activeIndex].ds3DBufferP,
AL_GAIN, vol_to_gain_table[volume]);
return 1;
}
@ -208,7 +217,7 @@ int PlatChangeSoundPitch(int activeIndex, int pitch)
{
float frequency;
fprintf(stderr, "PlatChangeSoundPitch(%d, %d)\n", activeIndex, pitch);
printf("FREQ PlatChangeSoundPitch(%d, %d)\n", activeIndex, pitch);
if ((pitch < PITCH_MIN) || (pitch >= PITCH_MAX))
return 0;
@ -219,12 +228,11 @@ int PlatChangeSoundPitch(int activeIndex, int pitch)
// SOUNDINDEX gsi = ActiveSounds[activeIndex].soundIndex;
// frequency = ToneToFrequency (GameSounds[gsi].dsFrequency,
// GameSounds[gsi].pitch, pitch);
frequency = (128.0f / ((float)pitch + 127.0));
}
ActiveSounds[activeIndex].pitch = pitch;
// alSourcei (ActiveSounds[activeIndex].ds3DBufferP, AL_PITCH, frequency);
// alSourcei (ActiveSounds[activeIndex].ds3DBufferP, AL_PITCH, pow(12, (double)pitch/5506.502401107));
return 1;
}
@ -233,7 +241,7 @@ int PlatSoundHasStopped(int activeIndex)
{
ALint val;
fprintf(stderr, "PlatSoundHasStopped(%d)\n", activeIndex);
printf("PlatSoundHasStopped(%d)\n", activeIndex);
alGetSourceiv (ActiveSounds[activeIndex].ds3DBufferP,
AL_SOURCE_STATE, &val);
@ -251,10 +259,8 @@ int PlatDo3dSound(int activeIndex)
{
int distance;
VECTORCH relativePosn;
int newPan, newVolume;
int newVolume;
fprintf(stderr, "PlatDo3dSound(%d)\n", activeIndex);
if (ActiveSounds[activeIndex].threedee == 0)
return 1;
@ -265,7 +271,7 @@ int PlatDo3dSound(int activeIndex)
relativePosn.vz = ActiveSounds[activeIndex].threedeedata.position.vz -
Global_VDB_Ptr->VDB_World.vz;
distance = Magnitude (&relativePosn);
distance = Magnitude(&relativePosn);
if (ActiveSounds[activeIndex].paused) {
if (distance < (ActiveSounds[activeIndex].threedeedata.outer_range + SOUND_DEACTIVATERANGE)) {
@ -313,25 +319,18 @@ int PlatDo3dSound(int activeIndex)
if (newVolume < VOLUME_MIN)
newVolume = VOLUME_MIN;
printf("PlatDo3dSound: idx = %d, volume = %d, distance = %d\n", activeIndex, newVolume, distance);
if (PlatChangeSoundVolume (activeIndex, newVolume) == SOUND_PLATFORMERROR) {
return SOUND_PLATFORMERROR;
}
if (1 || distance < ActiveSounds[activeIndex].threedeedata.outer_range) {
// ActiveSounds[activeIndex].PropSetP_pos[0] =
// relativePosn.vx;
// ActiveSounds[activeIndex].PropSetP_pos[1] =
// relativePosn.vy;
// ActiveSounds[activeIndex].PropSetP_pos[2] =
// relativePosn.vz;
// alSourcefv (ActiveSounds[activeIndex].ds3DBufferP,
// AL_POSITION, ActiveSounds[activeIndex].PropSetP_pos);
alSourcef(ActiveSounds[activeIndex].ds3DBufferP, AL_GAIN, 1.0f);
ActiveSounds[activeIndex].PropSetP_pos[0] = ActiveSounds[activeIndex].threedeedata.position.vx;
ActiveSounds[activeIndex].PropSetP_pos[1] = ActiveSounds[activeIndex].threedeedata.position.vy;
ActiveSounds[activeIndex].PropSetP_pos[2] = ActiveSounds[activeIndex].threedeedata.position.vz;
if (distance < ActiveSounds[activeIndex].threedeedata.outer_range) {
ActiveSounds[activeIndex].PropSetP_pos[0] = ActiveSounds[activeIndex].threedeedata.position.vx; // 10000.0;
ActiveSounds[activeIndex].PropSetP_pos[1] = ActiveSounds[activeIndex].threedeedata.position.vy; // 10000.0;
ActiveSounds[activeIndex].PropSetP_pos[2] = ActiveSounds[activeIndex].threedeedata.position.vz; // 10000.0;
alSourcefv (ActiveSounds[activeIndex].ds3DBufferP, AL_POSITION, ActiveSounds[activeIndex].PropSetP_pos);
printf("Sound : (%f, %f, %f) [%d]\n", ActiveSounds[activeIndex].PropSetP_pos[0], ActiveSounds[activeIndex].PropSetP_pos[1], ActiveSounds[activeIndex].PropSetP_pos[2], activeIndex);
printf("Sound : (%f, %f, %f) [%d] [%d,%d]\n", ActiveSounds[activeIndex].PropSetP_pos[0], ActiveSounds[activeIndex].PropSetP_pos[1], ActiveSounds[activeIndex].PropSetP_pos[2], activeIndex, ActiveSounds[activeIndex].threedeedata.inner_range, ActiveSounds[activeIndex].threedeedata.outer_range);
ActiveSounds[activeIndex].PropSetP_vel[0] =
ActiveSounds[activeIndex].threedeedata.velocity.vx;
@ -341,44 +340,135 @@ printf("Sound : (%f, %f, %f) [%d]\n", ActiveSounds[activeIndex].PropSetP_pos[0],
ActiveSounds[activeIndex].threedeedata.velocity.vz;
// alSourcefv (ActiveSounds[activeIndex].ds3DBufferP,
// AL_VELOCITY, ActiveSounds[activeIndex].PropSetP_vel);
} else {
int angle;
Normalise (&relativePosn);
angle = ArcTan (relativePosn.vx, relativePosn.vz);
if (angle >= Player->ObEuler.EulerY)
angle -= Player->ObEuler.EulerY;
else
angle += (4096 - Player->ObEuler.EulerY);
// LOCALASSERT ((angle>=0)&&(angle<=4095))
if (angle > 1024) {
if (angle < 3072)
angle = (2048-angle);
else
angle = (angle-4096);
}
// LOCALASSERT((angle>=-1024)&&(angle<=1024));
newPan = (PAN_MAXPLAT * angle) >> 10;
if ((distance < ActiveSounds[activeIndex].threedeedata.inner_range) && (newPan != 0)) {
newPan = (newPan * distance) / ActiveSounds[activeIndex].threedeedata.inner_range;
}
if (PlatChangeSoundPan (activeIndex, newPan) == SOUND_PLATFORMERROR) {
return SOUND_PLATFORMERROR;
}
}
return 1;
}
void PlatUpdatePlayer()
{
ALfloat vel[3], or[6], pos[3];
if (Global_VDB_Ptr) {
extern int NormalFrameTime;
extern int DopplerShiftIsOn;
if (AvP.PlayerType != I_Alien) {
or[0] = (float) ((Global_VDB_Ptr->VDB_Mat.mat13) / 65536.0F);
or[1] = 0.0;
or[2] = (float) ((Global_VDB_Ptr->VDB_Mat.mat33) / 65536.0F);
or[3] = 0.0;
or[4] = 1.0;
or[5] = 0.0;
} else {
or[0] = (float) ((Global_VDB_Ptr->VDB_Mat.mat13) / 65536.0F);
or[1] = (float) ((Global_VDB_Ptr->VDB_Mat.mat23) / 65536.0F);
or[2] = (float) ((Global_VDB_Ptr->VDB_Mat.mat33) / 65536.0F);
or[3] = (float) ((Global_VDB_Ptr->VDB_Mat.mat12) / 65536.0F);
or[4] = (float) ((Global_VDB_Ptr->VDB_Mat.mat22) / 65536.0F);
or[5] = (float) ((Global_VDB_Ptr->VDB_Mat.mat32) / 65536.0F);
}
if ((AvP.PlayerType == I_Alien && DopplerShiftIsOn && NormalFrameTime)) {
DYNAMICSBLOCK *dynPtr = Player->ObStrategyBlock->DynPtr;
float invFrameTime = 100000.0f/(float)NormalFrameTime;
vel[0] = (float)(dynPtr->Position.vx - dynPtr->PrevPosition.vx) * invFrameTime;
vel[1] = (float)(dynPtr->Position.vy - dynPtr->PrevPosition.vy) * invFrameTime;
vel[2] = (float)(dynPtr->Position.vz - dynPtr->PrevPosition.vz) * invFrameTime;
} else {
vel[0] = 0.0;
vel[1] = 0.0;
vel[2] = 0.0;
}
pos[0] = Global_VDB_Ptr->VDB_World.vx; // 10000.0;
pos[1] = Global_VDB_Ptr->VDB_World.vy; // 10000.0;
pos[2] = Global_VDB_Ptr->VDB_World.vz; // 10000.0;
}
printf("Player: (%f, %f, %f) (%f, %f, %f %f, %f, %f)\n", pos[0], pos[1], pos[2], or[0], or[1], or[2], or[3], or[4], or[5]);
// fixme: add reverb check
alListenerfv (AL_ORIENTATION, or);
// alListenerfv (AL_VELOCITY, vel);
alListenerfv (AL_POSITION, pos);
}
void PlatEndGameSound(SOUNDINDEX index)
{
printf("PlatEndGameSound(%d)\n", index);
if((index<0)||(index>=SID_MAXIMUM)) return; /* no such sound */
if (GameSounds[index].dsBufferP) {
alDeleteBuffers(1, &(GameSounds[index].dsBufferP));
GameSounds[index].dsBufferP = 0;
}
GameSounds[index].loaded = 0;
GameSounds[index].dsFrequency = 0;
if (GameSounds[index].wavName) {
DeallocateMem(GameSounds[index].wavName);
GameSounds[index].wavName = NULL;
}
}
unsigned int PlatMaxHWSounds()
{
printf("PlatMaxHWSounds()\n");
return 32;
}
void InitialiseBaseFrequency(SOUNDINDEX soundNum)
{
printf("FREQ InitialiseBaseFrequency(%d) [%d]\n", soundNum, GameSounds[soundNum].pitch==PITCH_DEFAULTPLAT);
}
void PlatSetEnviroment(unsigned int env_index, float reverb_mix)
{
printf("PlatSetEnvironment(%d, %f)\n", env_index, reverb_mix);
}
void UpdateSoundFrequencies()
{
extern int SoundSwitchedOn;
extern int TimeScale;
int i;
printf("FREQ UpdateSoundFreqncies()\n");
if (!SoundSwitchedOn)
return;
for (i = 0; i < SOUND_MAXACTIVE; i++) {
int gameIndex = ActiveSounds[i].soundIndex;
if (gameIndex == SID_NOSOUND)
continue;
printf("FREQ UpdateSoundFreqncies %d, f = %d\n", i, MUL_FIXED(GameSounds[gameIndex].dsFrequency,TimeScale));
if(ActiveSounds[i].pitch != GameSounds[gameIndex].pitch)
PlatChangeSoundPitch(i,ActiveSounds[i].pitch);
}
}
// In libopenal
extern void *acLoadWAV (void *data, ALuint *size, void **udata,
ALushort *fmt, ALushort *chan, ALushort *freq);
int LoadWavFile(int soundNum, char * wavFileName)
{
ALsizei size, freq, bits;
ALenum format;
ALvoid *data;
fprintf(stderr, "LoadWavFile(%d, %s) - sound\n", soundNum, wavFileName);
printf("LoadWavFile(%d, %s) - sound\n", soundNum, wavFileName);
alutLoadWAV (wavFileName, &data, &format, &size, &bits, &freq);
alGenBuffers (1, &(GameSounds[soundNum].dsBufferP));
@ -406,92 +496,6 @@ static unsigned char *Force8to16 (unsigned char *buf, int *len)
*len *= 2;
return nbuf;
}
void PlatUpdatePlayer()
{
ALfloat vel[3], or[6], pos[3];
fprintf(stderr, "PlatUpdatePlayer()\n");
if (Global_VDB_Ptr) {
extern int NormalFrameTime;
extern int DopplerShiftIsOn;
if (AvP.PlayerType != I_Alien) {
or[0] = (float) ((Global_VDB_Ptr->VDB_Mat.mat13) / 65536.0F);
or[1] = 0.0;
or[2] = (float) ((Global_VDB_Ptr->VDB_Mat.mat33) / 65536.0F);
or[3] = 0.0;
or[4] = 1.0;
or[5] = 0.0;
} else {
or[0] = (float) ((Global_VDB_Ptr->VDB_Mat.mat13) / 65536.0F);
or[1] = (float) ((Global_VDB_Ptr->VDB_Mat.mat23) / 65536.0F);
or[2] = (float) ((Global_VDB_Ptr->VDB_Mat.mat33) / 65536.0F);
or[3] = (float) ((Global_VDB_Ptr->VDB_Mat.mat12) / 65536.0F);
or[4] = (float) ((Global_VDB_Ptr->VDB_Mat.mat22) / 65536.0F);
or[5] = (float) ((Global_VDB_Ptr->VDB_Mat.mat32) / 65536.0F);
}
if (1 || (AvP.PlayerType == I_Alien && DopplerShiftIsOn && NormalFrameTime)) {
DYNAMICSBLOCK *dynPtr = Player->ObStrategyBlock->DynPtr;
float invFrameTime = 100000.0f/(float)NormalFrameTime;
vel[0] = (float)(dynPtr->Position.vx - dynPtr->PrevPosition.vx) * invFrameTime;
vel[1] = (float)(dynPtr->Position.vy - dynPtr->PrevPosition.vy) * invFrameTime;
vel[2] = (float)(dynPtr->Position.vz - dynPtr->PrevPosition.vz) * invFrameTime;
} else {
vel[0] = 0.0;
vel[1] = 0.0;
vel[2] = 0.0;
}
pos[0] = Global_VDB_Ptr->VDB_World.vx;
pos[1] = Global_VDB_Ptr->VDB_World.vy;
pos[2] = Global_VDB_Ptr->VDB_World.vz;
}
printf("Player: (%f, %f, %f) (%f, %f, %f %f, %f, %f)\n", pos[0], pos[1], pos[2], or[0], or[1], or[2], or[3], or[4], or[5]);
// fixme: add reverb check
alListenerfv (AL_ORIENTATION, or);
// alListenerfv (AL_VELOCITY, vel);
alListenerfv (AL_POSITION, pos);
}
void PlatEndGameSound(SOUNDINDEX index)
{
fprintf(stderr, "PlatEndGameSound(%d)\n", index);
}
unsigned int PlatMaxHWSounds()
{
fprintf(stderr, "PlatMaxHWSounds()\n");
return 256;
}
void InitialiseBaseFrequency(SOUNDINDEX soundNum)
{
fprintf(stderr, "InitialiseBaseFrequency(%d)\n", soundNum);
}
void PlatSetEnviroment(unsigned int env_index, float reverb_mix)
{
fprintf(stderr, "PlatSetEnvironment(%d, %f)\n", env_index, reverb_mix);
}
void UpdateSoundFrequencies()
{
fprintf(stderr, "UpdateSoundFreqncies()\n");
}
int PlatChangeSoundPan (int activeIndex, int pan)
{
return 1;
}
// In libopenal
extern void *acLoadWAV (void *data, ALuint *size, void **udata,
ALushort *fmt, ALushort *chan, ALushort *freq);
unsigned char *ExtractWavFile(int soundIndex, unsigned char *bufferPtr)
{
@ -500,25 +504,26 @@ unsigned char *ExtractWavFile(int soundIndex, unsigned char *bufferPtr)
void *udata;
ALushort rfmt, rchan, rfreq;
ALuint rsize;
int slen;
fprintf(stderr, "ExtractWavFile(%d, %p)\n", soundIndex, bufferPtr);
printf("ExtractWavFile(%d, %p)\n", soundIndex, bufferPtr);
{
int slen = strlen (bufferPtr) + 1;
GameSounds[soundIndex].wavName = (char *)AllocateMem (slen);
strcpy (GameSounds[soundIndex].wavName, bufferPtr);
bufferPtr += slen;
fprintf (stderr, "Loaded %s\n", GameSounds[soundIndex].wavName);
}
slen = strlen (bufferPtr) + 1;
GameSounds[soundIndex].wavName = (char *)AllocateMem (slen);
strcpy (GameSounds[soundIndex].wavName, bufferPtr);
bufferPtr += slen;
printf("Loaded %s\n", GameSounds[soundIndex].wavName);
if (acLoadWAV (bufferPtr, &rsize, &udata, &rfmt,
&rchan, &rfreq) == NULL) {
fprintf (stderr, "Unable to convert data\n");
printf("Unable to convert data\n");
return (unsigned char *)0;
}
len = rsize;
/* openal conv. 8->16 is not good at all */
if ((rfmt == AUDIO_U8)) {
nb = Force8to16 (udata, &len);
rfmt = AUDIO_S16LSB;
@ -566,7 +571,7 @@ int LoadWavFromFastFile(int soundNum, char * wavFileName)
unsigned char *buf;
unsigned int len = 0;
fprintf(stderr, "LoadWavFromFastFile(%d, %s)\n", soundNum, wavFileName);
printf("LoadWavFromFastFile(%d, %s)\n", soundNum, wavFileName);
if ((fp = ffopen (wavFileName, "rb")) != NULL) {
ffseek (fp, 0, SEEK_END);

View file

@ -437,6 +437,15 @@ GLuint CreateOGLTexture(D3DTexture *tex, unsigned char *buf)
return h;
}
void ReleaseD3DTexture(void *tex)
{
D3DTexture *TextureHandle = (D3DTexture *)tex;
glDeleteTextures(1, &(TextureHandle->id));
free(TextureHandle);
}
/* ** */
void ThisFramesRenderingHasBegun()
@ -473,7 +482,7 @@ void D3D_DecalSystem_Setup()
/* this does stop zfighting with bulletmarks on walls... */
glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(-10.0, -10.0);
glPolygonOffset(-8.0, -8.0);
}
void D3D_DecalSystem_End()

View file

@ -246,11 +246,6 @@ void InitDrawTest()
fprintf(stderr, "InitDrawTest()\n");
}
void SetFogDistance(int fogDistance)
{
fprintf(stderr, "SetFontDistance(%d)\n", fogDistance);
}
void CheckWireFrameMode(int shouldBeOn)
{
// fprintf(stderr, "CheckWireFrameMode(%d)\n", shouldBeOn);
@ -290,11 +285,6 @@ void ReleaseDirect3D()
fprintf(stderr, "ReleaseDirect3D()\n");
}
void ReleaseD3DTexture(void* D3DTexture)
{
fprintf(stderr, "ReleaseD3DTexture(%p)\n", D3DTexture);
}
BOOL ExecuteBuffer()
{
// fprintf(stderr, "ExecuteBuffer()\n");