]> git.jsancho.org Git - lugaru.git/blobdiff - Source/Weapons.cpp
More PlaySoundEx eradication
[lugaru.git] / Source / Weapons.cpp
index 6d6d2649e537ce2ecca1163e0009d40afdaf7263..48fbbf6d5a9fc926e0d0dc875d5c448542f464ce 100644 (file)
@@ -22,10 +22,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 /**> HEADER FILES <**/
 #include "Weapons.h"
 #include "openal_wrapper.h"
+#include "Animation.h"
+#include "Sounds.h"
+#include "Game.h"
+#include "Awards.h"
 
 extern float multiplier;
-extern Animation animation[animation_count];
-extern OPENAL_SAMPLE   *samp[100];
 extern int channels[100];
 extern Terrain terrain;
 extern float gravity;
@@ -49,16 +51,9 @@ extern float terraindetail;
 extern float viewdistance;
 extern float blackout;
 extern int difficulty;
-extern Person player[maxplayers];
-extern int numplayers;
 extern bool freeze;
-extern int bonus;
-extern float bonusvalue;
-extern float bonustotal;
-extern float bonustime;
 extern int tutoriallevel;
 extern int numthrowkill;
-extern "C"     void PlaySoundEx(int channel, OPENAL_SAMPLE *sptr, OPENAL_DSPUNIT *dsp, signed char startpaused);
 
 void   Weapons::DoStuff(){
        static int i,whichpatchx,whichpatchz,j,k,whichhit,m;
@@ -89,18 +84,7 @@ void Weapons::DoStuff(){
                        oldowner[i]=owner[i];
                }
                if(damage[i]>=2&&type[i]==staff&&owner[i]!=-1){
-                       float gLoc[3];
-                       float vel[3];
-                       gLoc[0]=tippoint[i].x;
-                       gLoc[1]=tippoint[i].y;
-                       gLoc[2]=tippoint[i].z;
-                       vel[0]=0;
-                       vel[1]=0;
-                       vel[2]=0;
-                       PlaySoundEx( staffbreaksound, samp[staffbreaksound], NULL, true);
-                       OPENAL_3D_SetAttributes(channels[staffbreaksound], gLoc, vel);
-                       OPENAL_SetVolume(channels[staffbreaksound], 256);
-                       OPENAL_SetPaused(channels[staffbreaksound], false);
+                       emit_sound_at(staffbreaksound, tippoint[i]);
                        XYZ tempvel;
                        XYZ speed;
                        //speed=(tippoint[i]-oldtippoint[i])/multiplier/6;
@@ -173,18 +157,7 @@ void       Weapons::DoStuff(){
                                                                bigtilt2[i]=0;
                                                                bigrotation[i]=0;
 
-                                                               float gLoc[3];
-                                                               float vel[3];
-                                                               gLoc[0]=position[i].x;
-                                                               gLoc[1]=position[i].y;
-                                                               gLoc[2]=position[i].z;
-                                                               vel[0]=0;
-                                                               vel[1]=0;
-                                                               vel[2]=0;
-                                                               PlaySoundEx( knifesheathesound, samp[knifesheathesound], NULL, true);
-                                                               OPENAL_3D_SetAttributes(channels[knifesheathesound], gLoc, vel);
-                                                               OPENAL_SetVolume(channels[knifesheathesound], 128);
-                                                               OPENAL_SetPaused(channels[knifesheathesound], false);
+                                                               emit_sound_at(knifesheathesound, position[i], 128.);
 
                                                                bloody[i]=0;
 
@@ -208,18 +181,7 @@ void       Weapons::DoStuff(){
                                                        if((player[j].aitype!=attacktypecutoff||abs(Random()%6)==0||(player[j].targetanimation!=backhandspringanim&&player[j].targetanimation!=rollanim&&player[j].targetanimation!=flipanim&&Random()%2==0))&&!missed[i]){
                                                                bool caught=0;
                                                                if((player[j].creature==wolftype&&Random()%3!=0&&player[j].weaponactive==-1&&(player[j].isIdle()||player[j].isRun()||player[j].targetanimation==walkanim))||(player[j].creature==rabbittype&&Random()%2==0&&player[j].aitype==attacktypecutoff&&player[j].weaponactive==-1)){
-                                                                       float gLoc[3];
-                                                                       float vel[3];
-                                                                       gLoc[0]=player[j].coords.x;
-                                                                       gLoc[1]=player[j].coords.y;
-                                                                       gLoc[2]=player[j].coords.z;
-                                                                       vel[0]=player[j].velocity.x;
-                                                                       vel[1]=player[j].velocity.y;
-                                                                       vel[2]=player[j].velocity.z;
-                                                                       PlaySoundEx( knifedrawsound, samp[knifedrawsound], NULL, true);
-                                                                       OPENAL_3D_SetAttributes(channels[knifedrawsound], gLoc, vel);
-                                                                       OPENAL_SetVolume(channels[knifedrawsound], 128);
-                                                                       OPENAL_SetPaused(channels[knifedrawsound], false);
+                                                                       emit_sound_at(knifedrawsound, player[j].coords, 128.);
 
                                                                        player[j].weaponactive=0;
                                                                        player[j].targetanimation=removeknifeanim;
@@ -266,29 +228,12 @@ void      Weapons::DoStuff(){
                                                                                blooddrip[i]=5;
                                                                        }
 
-                                                                       float gLoc[3];
-                                                                       float vel[3];
-                                                                       gLoc[0]=position[i].x;
-                                                                       gLoc[1]=position[i].y;
-                                                                       gLoc[2]=position[i].z;
-                                                                       vel[0]=0;
-                                                                       vel[1]=0;
-                                                                       vel[2]=0;
-                                                                       PlaySoundEx( fleshstabsound, samp[fleshstabsound], NULL, true);
-                                                                       OPENAL_3D_SetAttributes(channels[fleshstabsound], gLoc, vel);
-                                                                       OPENAL_SetVolume(channels[fleshstabsound], 128);
-                                                                       OPENAL_SetPaused(channels[fleshstabsound], false);
-
-                                                                       if(animation[player[0].targetanimation].height==highheight){
-                                                                               bonus=ninja;
-                                                                               bonustime=0;
-                                                                               bonusvalue=60;
-                                                                       }
-                                                                       else{
-                                                                               bonus=Bullseyebonus;
-                                                                               bonustime=0;
-                                                                               bonusvalue=30;
-                                                                       }
+                                                                       emit_sound_at(fleshstabsound, position[i], 128.);
+
+                                                                       if(animation[player[0].targetanimation].height==highheight)
+                                                                         award_bonus(0, ninja);
+                                                                       else
+                                                                         award_bonus(0, Bullseyebonus);
                                                                }
                                                        }
                                                        else missed[i]=1;
@@ -335,18 +280,7 @@ void       Weapons::DoStuff(){
                                                        bigtilt2[i]=0;
                                                        bigrotation[i]=0;
 
-                                                       float gLoc[3];
-                                                       float vel[3];
-                                                       gLoc[0]=position[i].x;
-                                                       gLoc[1]=position[i].y;
-                                                       gLoc[2]=position[i].z;
-                                                       vel[0]=0;
-                                                       vel[1]=0;
-                                                       vel[2]=0;
-                                                       PlaySoundEx( knifesheathesound, samp[knifesheathesound], NULL, true);
-                                                       OPENAL_3D_SetAttributes(channels[knifesheathesound], gLoc, vel);
-                                                       OPENAL_SetVolume(channels[knifesheathesound], 128);
-                                                       OPENAL_SetPaused(channels[knifesheathesound], false);
+                                                       emit_sound_at(knifesheathesound, position[i], 128.);
 
                                                        XYZ terrainlight;
                                                        terrainlight=terrain.getLighting(position[i].x,position[i].z);
@@ -483,21 +417,10 @@ void      Weapons::DoStuff(){
                                                                velocity[i]+=bounceness*elasticity;
 
                                                                if(findLengthfast(&bounceness)>1){
-                                                                       float gLoc[3];
-                                                                       float vel[3];
-                                                                       //int whichsound=clank1sound+abs(Random()%4);
                                                                        int whichsound;
                                                                        if(type[i]==staff)whichsound=footstepsound3+abs(Random()%2);
-                                                                       if(type[i]!=staff)whichsound=clank1sound+abs(Random()%4);gLoc[0]=position[i].x;
-                                                                       gLoc[1]=position[i].y;
-                                                                       gLoc[2]=position[i].z;
-                                                                       vel[0]=0;
-                                                                       vel[1]=0;
-                                                                       vel[2]=0;
-                                                                       PlaySoundEx( whichsound, samp[whichsound], NULL, true);
-                                                                       OPENAL_3D_SetAttributes(channels[whichsound], gLoc, vel);
-                                                                       OPENAL_SetVolume(channels[whichsound], 128*findLengthfast(&bounceness));
-                                                                       OPENAL_SetPaused(channels[whichsound], false);
+                                                                       if(type[i]!=staff)whichsound=clank1sound+abs(Random()%4);
+                                                                       emit_sound_at(whichsound, position[i], 128*findLengthfast(&bounceness));
                                                                }
                                                        }
                                                        start=oldtippoint[i];
@@ -519,22 +442,10 @@ void      Weapons::DoStuff(){
                                                                tipvelocity[i]+=bounceness*elasticity;
 
                                                                if(findLengthfast(&bounceness)>1){
-                                                                       float gLoc[3];
-                                                                       float vel[3];
-                                                                       //int whichsound=clank1sound+abs(Random()%4);
                                                                        int whichsound;
                                                                        if(type[i]==staff)whichsound=footstepsound3+abs(Random()%2);
-                                                                       if(type[i]!=staff)whichsound=clank1sound+abs(Random()%4);gLoc[0]=position[i].x;
-                                                                       gLoc[0]=position[i].x;
-                                                                       gLoc[1]=position[i].y;
-                                                                       gLoc[2]=position[i].z;
-                                                                       vel[0]=0;
-                                                                       vel[1]=0;
-                                                                       vel[2]=0;
-                                                                       PlaySoundEx( whichsound, samp[whichsound], NULL, true);
-                                                                       OPENAL_3D_SetAttributes(channels[whichsound], gLoc, vel);
-                                                                       OPENAL_SetVolume(channels[whichsound], 128*findLengthfast(&bounceness));
-                                                                       OPENAL_SetPaused(channels[whichsound], false);
+                                                                       if(type[i]!=staff)whichsound=clank1sound+abs(Random()%4);
+                                                                       emit_sound_at(whichsound, position[i], 128*findLengthfast(&bounceness));
                                                                }
                                                        }
 
@@ -562,21 +473,10 @@ void      Weapons::DoStuff(){
                                                                                velocity[i]+=bounceness*elasticity;
 
                                                                                if(findLengthfast(&bounceness)>1){
-                                                                                       float gLoc[3];
-                                                                                       float vel[3];
-                                                                                       //int whichsound=clank1sound+abs(Random()%4);
                                                                                        int whichsound;
                                                                                        if(type[i]==staff)whichsound=footstepsound3+abs(Random()%2);
-                                                                                       if(type[i]!=staff)whichsound=clank1sound+abs(Random()%4);gLoc[0]=mid.x;
-                                                                                       gLoc[1]=mid.y;
-                                                                                       gLoc[2]=mid.z;
-                                                                                       vel[0]=0;
-                                                                                       vel[1]=0;
-                                                                                       vel[2]=0;
-                                                                                       PlaySoundEx( whichsound, samp[whichsound], NULL, true);
-                                                                                       OPENAL_3D_SetAttributes(channels[whichsound], gLoc, vel);
-                                                                                       OPENAL_SetVolume(channels[whichsound], 128*findLengthfast(&bounceness));
-                                                                                       OPENAL_SetPaused(channels[whichsound], false);
+                                                                                       if(type[i]!=staff)whichsound=clank1sound+abs(Random()%4);
+                                                                                       emit_sound_at(whichsound, mid, 128*findLengthfast(&bounceness));
                                                                                }
                                                                                position[i]+=(mid-oldmid2)*(20/(1+(float)m*10));
                                                                        }
@@ -603,21 +503,10 @@ void      Weapons::DoStuff(){
                                                                                tipvelocity[i]+=bounceness*elasticity;
 
                                                                                if(findLengthfast(&bounceness)>1){
-                                                                                       float gLoc[3];
-                                                                                       float vel[3];
-                                                                                       //int whichsound=clank1sound+abs(Random()%4);
                                                                                        int whichsound;
                                                                                        if(type[i]==staff)whichsound=footstepsound3+abs(Random()%2);
-                                                                                       if(type[i]!=staff)whichsound=clank1sound+abs(Random()%4);gLoc[0]=mid.x;
-                                                                                       gLoc[1]=mid.y;
-                                                                                       gLoc[2]=mid.z;
-                                                                                       vel[0]=0;
-                                                                                       vel[1]=0;
-                                                                                       vel[2]=0;
-                                                                                       PlaySoundEx( whichsound, samp[whichsound], NULL, true);
-                                                                                       OPENAL_3D_SetAttributes(channels[whichsound], gLoc, vel);
-                                                                                       OPENAL_SetVolume(channels[whichsound], 128*findLengthfast(&bounceness));
-                                                                                       OPENAL_SetPaused(channels[whichsound], false);
+                                                                                       if(type[i]!=staff)whichsound=clank1sound+abs(Random()%4);
+                                                                                       emit_sound_at(whichsound, mid, 128*findLengthfast(&bounceness));
                                                                                }
                                                                                tippoint[i]+=(mid-oldmid2)*(20/(1+(float)m*10));
                                                                        }
@@ -686,25 +575,17 @@ void      Weapons::DoStuff(){
                                                else velocity[i]+=bounceness*elasticity;
 //if (type[i]==knife) printf("velocity of knife %d now %f,%f,%f.\n", i, velocity[i].x, velocity[i].y, velocity[i].z);
                                                if(findLengthfast(&bounceness)>1){
-                                                       float gLoc[3];
-                                                       float vel[3];
                                                        int whichsound;
                                                        if(terrain.getOpacity(position[i].x,position[i].z)>.2){
                                                                if(type[i]==staff)whichsound=footstepsound3+abs(Random()%2);
                                                                if(type[i]!=staff)whichsound=clank1sound+abs(Random()%4);
                                                        }
                                                        else whichsound=footstepsound+abs(Random()%2);
-                                                       gLoc[0]=position[i].x;
-                                                       gLoc[1]=position[i].y;
-                                                       gLoc[2]=position[i].z;
-                                                       vel[0]=0;
-                                                       vel[1]=0;
-                                                       vel[2]=0;
-                                                       PlaySoundEx( whichsound, samp[whichsound], NULL, true);
-                                                       OPENAL_3D_SetAttributes(channels[whichsound], gLoc, vel);
-                                                       if(terrain.getOpacity(position[i].x,position[i].z)>.2)OPENAL_SetVolume(channels[whichsound], 128*findLengthfast(&bounceness));
-                                                       else OPENAL_SetVolume(channels[whichsound], 32*findLengthfast(&bounceness));
-                                                       OPENAL_SetPaused(channels[whichsound], false);
+                                                       emit_sound_at(whichsound, position[i],
+                                                                     findLengthfast(&bounceness)
+                                                                     * (terrain.getOpacity(position[i].x,position[i].z) > .2
+                                                                        ? 128.
+                                                                        : 32.));
 
                                                        if(terrain.getOpacity(position[i].x,position[i].z)<.2){
                                                                XYZ terrainlight;
@@ -740,25 +621,17 @@ void      Weapons::DoStuff(){
 //if (type[i]==knife) printf("tipvelocity of knife %d now %f,%f,%f.\n", i, tipvelocity[i].x, tipvelocity[i].y, tipvelocity[i].z);
 
                                                if(findLengthfast(&bounceness)>1){
-                                                       float gLoc[3];
-                                                       float vel[3];
                                                        int whichsound;
                                                        if(terrain.getOpacity(tippoint[i].x,tippoint[i].z)>.2){
                                                                if(type[i]==staff)whichsound=footstepsound3+abs(Random()%2);
                                                                if(type[i]!=staff)whichsound=clank1sound+abs(Random()%4);
                                                        }
                                                        else whichsound=footstepsound+abs(Random()%2);
-                                                       gLoc[0]=tippoint[i].x;
-                                                       gLoc[1]=tippoint[i].y;
-                                                       gLoc[2]=tippoint[i].z;
-                                                       vel[0]=0;
-                                                       vel[1]=0;
-                                                       vel[2]=0;
-                                                       PlaySoundEx( whichsound, samp[whichsound], NULL, true);
-                                                       OPENAL_3D_SetAttributes(channels[whichsound], gLoc, vel);
-                                                       if(terrain.getOpacity(tippoint[i].x,tippoint[i].z)>.2)OPENAL_SetVolume(channels[whichsound], 128*findLengthfast(&bounceness));
-                                                       else OPENAL_SetVolume(channels[whichsound], 32*findLengthfast(&bounceness));
-                                                       OPENAL_SetPaused(channels[whichsound], false);
+                                                       emit_sound_at(whichsound, tippoint[i],
+                                                                     findLengthfast(&bounceness)
+                                                                     * (terrain.getOpacity(tippoint[i].x,tippoint[i].z) > .2
+                                                                        ? 128.
+                                                                        : 32.));
 
                                                        if(terrain.getOpacity(tippoint[i].x,tippoint[i].z)<.2){
                                                                XYZ terrainlight;
@@ -798,25 +671,17 @@ void      Weapons::DoStuff(){
                                                else velocity[i]+=bounceness*elasticity;
 
                                                if(findLengthfast(&bounceness)>1){
-                                                       float gLoc[3];
-                                                       float vel[3];
                                                        int whichsound;
                                                        if(terrain.getOpacity(mid.x,mid.z)>.2){
                                                                if(type[i]==staff)whichsound=footstepsound3+abs(Random()%2);
                                                                if(type[i]!=staff)whichsound=clank1sound+abs(Random()%4);
                                                        }
                                                        else whichsound=footstepsound+abs(Random()%2);
-                                                       gLoc[0]=mid.x;
-                                                       gLoc[1]=mid.y;
-                                                       gLoc[2]=mid.z;
-                                                       vel[0]=0;
-                                                       vel[1]=0;
-                                                       vel[2]=0;
-                                                       PlaySoundEx( whichsound, samp[whichsound], NULL, true);
-                                                       OPENAL_3D_SetAttributes(channels[whichsound], gLoc, vel);
-                                                       if(terrain.getOpacity(position[i].x,position[i].z)>.2)OPENAL_SetVolume(channels[whichsound], 128*findLengthfast(&bounceness));
-                                                       else OPENAL_SetVolume(channels[whichsound], 32*findLengthfast(&bounceness));
-                                                       OPENAL_SetPaused(channels[whichsound], false);
+                                                       emit_sound_at(whichsound, mid,
+                                                                     findLengthfast(&bounceness)
+                                                                     * (terrain.getOpacity(position[i].x,position[i].z) > .2
+                                                                        ? 128.
+                                                                        : 32.));
                                                }
                                                position[i]+=(mid-oldmid)*20;
                                        }
@@ -842,25 +707,17 @@ void      Weapons::DoStuff(){
                                                else tipvelocity[i]+=bounceness*elasticity;
 
                                                if(findLengthfast(&bounceness)>1){
-                                                       float gLoc[3];
-                                                       float vel[3];
                                                        int whichsound;
                                                        if(terrain.getOpacity(mid.x,mid.z)>.2){
                                                                if(type[i]==staff)whichsound=footstepsound3+abs(Random()%2);
                                                                if(type[i]!=staff)whichsound=clank1sound+abs(Random()%4);
                                                        }
                                                        else whichsound=footstepsound+abs(Random()%2);
-                                                       gLoc[0]=mid.x;
-                                                       gLoc[1]=mid.y;
-                                                       gLoc[2]=mid.z;
-                                                       vel[0]=0;
-                                                       vel[1]=0;
-                                                       vel[2]=0;
-                                                       PlaySoundEx( whichsound, samp[whichsound], NULL, true);
-                                                       OPENAL_3D_SetAttributes(channels[whichsound], gLoc, vel);
-                                                       if(terrain.getOpacity(position[i].x,position[i].z)>.2)OPENAL_SetVolume(channels[whichsound], 128*findLengthfast(&bounceness));
-                                                       else OPENAL_SetVolume(channels[whichsound], 32*findLengthfast(&bounceness));
-                                                       OPENAL_SetPaused(channels[whichsound], false);
+                                                       emit_sound_at(whichsound, mid,
+                                                                     findLengthfast(&bounceness)
+                                                                     * (terrain.getOpacity(position[i].x,position[i].z) > .2
+                                                                        ? 128.
+                                                                        : 32.));
                                                }
                                                tippoint[i]+=(mid-oldmid)*20;
                                        }