X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FWeapons.cpp;h=496e0fee431acf410cf0770bfc8e4d10386cd1b7;hb=decb00e82a2e65e25dbcdd8f16fff5a6a07d31d6;hp=2916ddfe23ea89f59016d164984f75d59a394e27;hpb=85c66654b25752485c9a4b4c534263df78e0ff78;p=lugaru.git diff --git a/Source/Weapons.cpp b/Source/Weapons.cpp index 2916ddf..496e0fe 100644 --- a/Source/Weapons.cpp +++ b/Source/Weapons.cpp @@ -1,9 +1,31 @@ +/* +Copyright (C) 2003, 2010 - Wolfire Games + +This file is part of Lugaru. + +Lugaru is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + /**> HEADER FILES <**/ #include "Weapons.h" +#include "openal_wrapper.h" extern float multiplier; extern Animation animation[animation_count]; -extern FSOUND_SAMPLE *samp[100]; +extern OPENAL_SAMPLE *samp[100]; extern int channels[100]; extern Terrain terrain; extern float gravity; @@ -37,9 +59,9 @@ extern float bonustotal; extern float bonustime; extern int tutoriallevel; extern int numthrowkill; -extern "C" void PlaySoundEx(int channel, FSOUND_SAMPLE *sptr, FSOUND_DSPUNIT *dsp, signed char startpaused); +extern "C" void PlaySoundEx(int channel, OPENAL_SAMPLE *sptr, OPENAL_DSPUNIT *dsp, signed char startpaused); -void Weapons::DoStuff(){ +void Weapons::DoStuff(){ static int i,whichpatchx,whichpatchz,j,k,whichhit,m; static XYZ start,end,colpoint,normalrot,footvel,footpoint; static XYZ terrainnormal; @@ -76,21 +98,14 @@ void Weapons::DoStuff(){ vel[0]=0; vel[1]=0; vel[2]=0; - PlaySoundEx( staffbreaksound, samp[staffbreaksound], NULL, TRUE); - FSOUND_3D_SetAttributes(channels[staffbreaksound], gLoc, vel); - FSOUND_SetVolume(channels[staffbreaksound], 256); - FSOUND_SetPaused(channels[staffbreaksound], FALSE); + PlaySoundEx( staffbreaksound, samp[staffbreaksound], NULL, true); + OPENAL_3D_SetAttributes(channels[staffbreaksound], gLoc, vel); + OPENAL_SetVolume(channels[staffbreaksound], 256); + OPENAL_SetPaused(channels[staffbreaksound], false); XYZ tempvel; XYZ speed; //speed=(tippoint[i]-oldtippoint[i])/multiplier/6; speed=0; - /*for(j=0;j<10;j++){ - tempvel.x=float(abs(Random()%100)-50)/20; - tempvel.y=float(abs(Random()%100)-50)/20; - tempvel.z=float(abs(Random()%100)-50)/20; - tempvel+=speed; - sprites.MakeSprite(cloudimpactsprite, position[i]+(tippoint[i]-position[i])*((float)j-2)/8,tempvel*.5, 115/255,73/255,12/255, .15+float(abs(Random()%100)-50)/1000, .7); - }*/ for(j=0;j<40;j++){ tempvel.x=float(abs(Random()%100)-50)/20; tempvel.y=float(abs(Random()%100)-50)/20; @@ -167,14 +182,14 @@ void Weapons::DoStuff(){ vel[0]=0; vel[1]=0; vel[2]=0; - PlaySoundEx( knifesheathesound, samp[knifesheathesound], NULL, TRUE); - FSOUND_3D_SetAttributes(channels[knifesheathesound], gLoc, vel); - FSOUND_SetVolume(channels[knifesheathesound], 128); - FSOUND_SetPaused(channels[knifesheathesound], FALSE); + PlaySoundEx( knifesheathesound, samp[knifesheathesound], NULL, true); + OPENAL_3D_SetAttributes(channels[knifesheathesound], gLoc, vel); + OPENAL_SetVolume(channels[knifesheathesound], 128); + OPENAL_SetPaused(channels[knifesheathesound], false); bloody[i]=0; - sprites.MakeSprite(cloudimpactsprite, position[i],velocity[i], 1,1,1, .8, .3); + sprites.MakeSprite(cloudimpactsprite, position[i],velocity[i], 1,1,1, .8, .3); } else { physics[i]=1; @@ -183,13 +198,13 @@ void Weapons::DoStuff(){ tippoint[i]-=velocity[i]*multiplier; tipvelocity[i]=velocity[i]; } - } + } } } if(velocity[i].x||velocity[i].y||velocity[i].z) for(j=0;j1){ float gLoc[3]; float vel[3]; @@ -686,11 +701,11 @@ void Weapons::DoStuff(){ vel[0]=0; vel[1]=0; vel[2]=0; - PlaySoundEx( whichsound, samp[whichsound], NULL, TRUE); - FSOUND_3D_SetAttributes(channels[whichsound], gLoc, vel); - if(terrain.getOpacity(position[i].x,position[i].z)>.2)FSOUND_SetVolume(channels[whichsound], 128*findLengthfast(&bounceness)); - else FSOUND_SetVolume(channels[whichsound], 32*findLengthfast(&bounceness)); - FSOUND_SetPaused(channels[whichsound], FALSE); + 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); if(terrain.getOpacity(position[i].x,position[i].z)<.2){ XYZ terrainlight; @@ -723,6 +738,7 @@ void Weapons::DoStuff(){ else tipvelocity[i]=0; if(terrain.getOpacity(tippoint[i].x,tippoint[i].z)<.2)tipvelocity[i]+=bounceness*elasticity*.3; else tipvelocity[i]+=bounceness*elasticity; +//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]; @@ -739,11 +755,11 @@ void Weapons::DoStuff(){ vel[0]=0; vel[1]=0; vel[2]=0; - PlaySoundEx( whichsound, samp[whichsound], NULL, TRUE); - FSOUND_3D_SetAttributes(channels[whichsound], gLoc, vel); - if(terrain.getOpacity(tippoint[i].x,tippoint[i].z)>.2)FSOUND_SetVolume(channels[whichsound], 128*findLengthfast(&bounceness)); - else FSOUND_SetVolume(channels[whichsound], 32*findLengthfast(&bounceness)); - FSOUND_SetPaused(channels[whichsound], FALSE); + 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); if(terrain.getOpacity(tippoint[i].x,tippoint[i].z)<.2){ XYZ terrainlight; @@ -797,11 +813,11 @@ void Weapons::DoStuff(){ vel[0]=0; vel[1]=0; vel[2]=0; - PlaySoundEx( whichsound, samp[whichsound], NULL, TRUE); - FSOUND_3D_SetAttributes(channels[whichsound], gLoc, vel); - if(terrain.getOpacity(position[i].x,position[i].z)>.2)FSOUND_SetVolume(channels[whichsound], 128*findLengthfast(&bounceness)); - else FSOUND_SetVolume(channels[whichsound], 32*findLengthfast(&bounceness)); - FSOUND_SetPaused(channels[whichsound], FALSE); + 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); } position[i]+=(mid-oldmid)*20; } @@ -841,11 +857,11 @@ void Weapons::DoStuff(){ vel[0]=0; vel[1]=0; vel[2]=0; - PlaySoundEx( whichsound, samp[whichsound], NULL, TRUE); - FSOUND_3D_SetAttributes(channels[whichsound], gLoc, vel); - if(terrain.getOpacity(position[i].x,position[i].z)>.2)FSOUND_SetVolume(channels[whichsound], 128*findLengthfast(&bounceness)); - else FSOUND_SetVolume(channels[whichsound], 32*findLengthfast(&bounceness)); - FSOUND_SetPaused(channels[whichsound], FALSE); + 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); } tippoint[i]+=(mid-oldmid)*20; } @@ -883,11 +899,11 @@ void Weapons::DoStuff(){ vel[0]=0; vel[1]=0; vel[2]=0; - PlaySoundEx( whichsound, samp[whichsound], NULL, TRUE); - FSOUND_3D_SetAttributes(channels[whichsound], gLoc, vel); - if(terrain.getOpacity(position[i].x,position[i].z)>.2)FSOUND_SetVolume(channels[whichsound], 128*findLengthfast(&bounceness)); - else FSOUND_SetVolume(channels[whichsound], 32*findLengthfast(&bounceness)); - FSOUND_SetPaused(channels[whichsound], FALSE); + 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); } } @@ -922,11 +938,11 @@ void Weapons::DoStuff(){ vel[0]=0; vel[1]=0; vel[2]=0; - PlaySoundEx( whichsound, samp[whichsound], NULL, TRUE); - FSOUND_3D_SetAttributes(channels[whichsound], gLoc, vel); - if(terrain.getOpacity(tippoint[i].x,tippoint[i].z)>.2)FSOUND_SetVolume(channels[whichsound], 128*findLengthfast(&bounceness)); - else FSOUND_SetVolume(channels[whichsound], 32*findLengthfast(&bounceness)); - FSOUND_SetPaused(channels[whichsound], FALSE); + 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); } }*/ @@ -1038,7 +1054,7 @@ void Weapons::DoStuff(){ } //velocity[i]=(position[i]-oldposition[i])/multiplier; - //tipvelocity[i]==(tippoint[i-+oldtippoint[i])/multiplier; + //tipvelocity[i]==(tippoint[i-+oldtippoint[i])/multiplier; if(freetime[i]>.4){ velocity[i]=0; tipvelocity[i]=0; @@ -1061,7 +1077,7 @@ void Weapons::DoStuff(){ if(bloodtoggle){ bloodvel=0; sprites.MakeSprite(bloodsprite, bloodloc,bloodvel, 1,1,1, .03, 1); - } + } } } if(onfire[i]){ @@ -1160,8 +1176,8 @@ int Weapons::Draw() glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glPushMatrix(); glColor4f(terrainlight.x,terrainlight.y,terrainlight.z,j/drawhowmany[i]); - if(owner[i]!=-1)glTranslatef(position[i].x*(((float)(j))/drawhowmany[i])+lastdrawnposition[i].x*(1-((float)(j))/drawhowmany[i]),position[i].y*(((float)(j))/drawhowmany[i])-.02+lastdrawnposition[i].y*(1-((float)(j))/drawhowmany[i]),position[i].z*(((float)(j))/drawhowmany[i])+lastdrawnposition[i].z*(1-((float)(j))/drawhowmany[i])); - if(owner[i]==-1)glTranslatef(position[i].x*(((float)(j))/drawhowmany[i])+lastdrawnposition[i].x*(1-((float)(j))/drawhowmany[i]),position[i].y*(((float)(j))/drawhowmany[i])+lastdrawnposition[i].y*(1-((float)(j))/drawhowmany[i]),position[i].z*(((float)(j))/drawhowmany[i])+lastdrawnposition[i].z*(1-((float)(j))/drawhowmany[i])); + if(owner[i]!=-1)glTranslatef(position[i].x*(((float)(j))/drawhowmany[i])+lastdrawnposition[i].x*(1-((float)(j))/drawhowmany[i]),position[i].y*(((float)(j))/drawhowmany[i])-.02+lastdrawnposition[i].y*(1-((float)(j))/drawhowmany[i]),position[i].z*(((float)(j))/drawhowmany[i])+lastdrawnposition[i].z*(1-((float)(j))/drawhowmany[i])); + if(owner[i]==-1)glTranslatef(position[i].x*(((float)(j))/drawhowmany[i])+lastdrawnposition[i].x*(1-((float)(j))/drawhowmany[i]),position[i].y*(((float)(j))/drawhowmany[i])+lastdrawnposition[i].y*(1-((float)(j))/drawhowmany[i]),position[i].z*(((float)(j))/drawhowmany[i])+lastdrawnposition[i].z*(1-((float)(j))/drawhowmany[i])); //glTranslatef(position[i].x,position[i].y-.02,position[i].z); glRotatef(bigrotation[i]*(((float)(j))/drawhowmany[i])+lastdrawnbigrotation[i]*(1-((float)(j))/drawhowmany[i]),0,1,0); glRotatef(bigtilt2[i]*(((float)(j))/drawhowmany[i])+lastdrawnbigtilt2[i]*(1-((float)(j))/drawhowmany[i]),1,0,0); @@ -1191,7 +1207,7 @@ int Weapons::Draw() if(type[i]==knife) { - glEnable(GL_LIGHTING); + glEnable(GL_LIGHTING); if(!bloody[i]||!bloodtoggle)throwingknifemodel.drawdifftex(knifetextureptr); if(bloodtoggle) { @@ -1201,7 +1217,7 @@ int Weapons::Draw() } if(type[i]==sword) { - glEnable(GL_LIGHTING); + glEnable(GL_LIGHTING); if(!bloody[i]||!bloodtoggle)swordmodel.drawdifftex(swordtextureptr); if(bloodtoggle) { @@ -1211,7 +1227,7 @@ int Weapons::Draw() } if(type[i]==staff) { - glEnable(GL_LIGHTING); + glEnable(GL_LIGHTING); staffmodel.drawdifftex(stafftextureptr); } @@ -1244,7 +1260,7 @@ int Weapons::Draw() glRotatef(-rotation3[i],0,1,0); glRotatef(smallrotation[i],1,0,0); glRotatef(smallrotation2[i],0,1,0); - glTranslatef(0,0,length[i]); + glTranslatef(0,0,length[i]); glGetFloatv(GL_MODELVIEW_MATRIX,M); tippoint[i].x=M[12]; tippoint[i].y=M[13]; @@ -1269,53 +1285,7 @@ int Weapons::Draw() Weapons::Weapons() { - rotation1.resize(max_weaponinstances); - rotation2.resize(max_weaponinstances); - rotation3.resize(max_weaponinstances); - bigrotation.resize(max_weaponinstances); - bigtilt.resize(max_weaponinstances); - bigtilt2.resize(max_weaponinstances); - smallrotation.resize(max_weaponinstances); - smallrotation2.resize(max_weaponinstances); - damage.resize(max_weaponinstances); - numweapons = 0; - tippoint.resize(max_weaponinstances); - oldtippoint.resize(max_weaponinstances); - position.resize(max_weaponinstances); - lastmult.resize(max_weaponinstances); - oldposition.resize(max_weaponinstances); - velocity.resize(max_weaponinstances); - tipvelocity.resize(max_weaponinstances); - type.resize(max_weaponinstances); - oldowner.resize(max_weaponinstances); - owner.resize(max_weaponinstances); - bloody.resize(max_weaponinstances); - blooddrip.resize(max_weaponinstances); - blooddripdelay.resize(max_weaponinstances); - onfire.resize(max_weaponinstances); - flamedelay.resize(max_weaponinstances); - missed.resize(max_weaponinstances); - mass.resize(max_weaponinstances); - tipmass.resize(max_weaponinstances); - length.resize(max_weaponinstances); - freetime.resize(max_weaponinstances); - firstfree.resize(max_weaponinstances); - physics.resize(max_weaponinstances); - drawhowmany.resize(max_weaponinstances); - hitsomething.resize(max_weaponinstances); - - lastdrawnposition.resize(max_weaponinstances); - lastdrawntippoint.resize(max_weaponinstances); - lastdrawnrotation1.resize(max_weaponinstances); - lastdrawnrotation2.resize(max_weaponinstances); - lastdrawnrotation3.resize(max_weaponinstances); - lastdrawnbigrotation.resize(max_weaponinstances); - lastdrawnbigtilt.resize(max_weaponinstances); - lastdrawnbigtilt2.resize(max_weaponinstances); - lastdrawnsmallrotation.resize(max_weaponinstances); - lastdrawnsmallrotation2.resize(max_weaponinstances); - lastdrawnanim.resize(max_weaponinstances); // Model throwingknifemodel; knifetextureptr = 0;