#include #include #include #include "Textures.h" #include "Game.h" extern unsigned int gSourceID[100]; extern unsigned int gSampleSet[100]; extern Camera camera; extern Skeleton testskeleton; extern Sprites sprites; extern Decals decals; /*********************> InitGame()<*****/ extern Model skeletonmodels[10]; extern Model gunmodels[10]; extern Costume costume[10]; extern Animation animation[30]; extern int visions; extern float rad2deg; extern Fog fog; extern bool blood; extern float fogcolorr; extern float fogcolorg; extern float fogcolorb; extern int environment; extern float precipitationhorz; extern float precipitationvert; extern float precipitationdensity; extern float soundscalefactor; extern int slomo; extern int forwardskey; extern int backwardskey; extern int leftkey; extern int rightkey; extern int aimkey; extern int psychicaimkey; extern int psychickey; void LoadSounds(bool musictoggle) { char *pBuffer1; long lBuffer1Len; ALenum formatBuffer1; ALsizei freqBuffer1; SInt16 iNumSources, iNumSampleSets; // initialize OpenAL alutInit(NULL, 0); // load up some audio data... // generate ten OpenAL sample sets and two sources iNumSources = 37; iNumSampleSets = 37; alGenSources(iNumSources, &gSourceID[0]); alGenBuffers(iNumSampleSets, &gSampleSet[0]); LoadOGG_CFH((char *)":Data:Sounds:underwater.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[visionsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[visionsound], AL_BUFFER, gSampleSet[visionsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:soulin.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[soulinsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[soulinsound], AL_BUFFER, gSampleSet[soulinsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:soulout.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[souloutsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[souloutsound], AL_BUFFER, gSampleSet[souloutsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:footstep1.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[footstepsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[footstepsound], AL_BUFFER, gSampleSet[footstepsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:footstep2.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[footstepsound+1], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[footstepsound+1], AL_BUFFER, gSampleSet[footstepsound+1]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:footstep3.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[footstepsound+2], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[footstepsound+2], AL_BUFFER, gSampleSet[footstepsound+2]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:footstep4.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[footstepsound+3], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[footstepsound+3], AL_BUFFER, gSampleSet[footstepsound+3]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:footstep5.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[footstepsound+4], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[footstepsound+4], AL_BUFFER, gSampleSet[footstepsound+4]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:bodyland.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[bodylandsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[bodylandsound], AL_BUFFER, gSampleSet[bodylandsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:headland.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[headlandsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[headlandsound], AL_BUFFER, gSampleSet[headlandsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:sniperrifle.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[riflesound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[riflesound], AL_BUFFER, gSampleSet[riflesound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:BodyHit.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[bodyhitsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[bodyhitsound], AL_BUFFER, gSampleSet[bodyhitsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:WallHit.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[wallhitsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[wallhitsound], AL_BUFFER, gSampleSet[wallhitsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:machinegun.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[machinegunsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[machinegunsound], AL_BUFFER, gSampleSet[machinegunsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:Nearbullet.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[nearbulletsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[nearbulletsound], AL_BUFFER, gSampleSet[nearbulletsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:riflewhack.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[headwhacksound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[headwhacksound], AL_BUFFER, gSampleSet[headwhacksound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:headshot.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[headshotsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[headshotsound], AL_BUFFER, gSampleSet[headshotsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:reload.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[reloadsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[reloadsound], AL_BUFFER, gSampleSet[reloadsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:click.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[clicksound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[clicksound], AL_BUFFER, gSampleSet[clicksound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:SW.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[pistol1sound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[pistol1sound], AL_BUFFER, gSampleSet[pistol1sound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:glock.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[pistol2sound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[pistol2sound], AL_BUFFER, gSampleSet[pistol2sound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:pinpull.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[pinpullsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[pinpullsound], AL_BUFFER, gSampleSet[pinpullsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:pinreplace.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[pinreplacesound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[pinreplacesound], AL_BUFFER, gSampleSet[pinreplacesound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:handlerelease.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[grenadethrowsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[grenadethrowsound], AL_BUFFER, gSampleSet[grenadethrowsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:bounce.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[bouncesound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[bouncesound], AL_BUFFER, gSampleSet[bouncesound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:bounce2.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[bounce2sound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[bounce2sound], AL_BUFFER, gSampleSet[bounce2sound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:explosion.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[explosionsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[explosionsound], AL_BUFFER, gSampleSet[explosionsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:headland.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[bodywhacksound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[bodywhacksound], AL_BUFFER, gSampleSet[bodywhacksound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:rain.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[rainsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[rainsound], AL_BUFFER, gSampleSet[rainsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:Lose.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[losesound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[losesound], AL_BUFFER, gSampleSet[losesound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:Disguisekill.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[disguisekillsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[disguisekillsound], AL_BUFFER, gSampleSet[disguisekillsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:knifeslash.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[knifeslashsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[knifeslashsound], AL_BUFFER, gSampleSet[knifeslashsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *)":Data:Sounds:shotgun.ogg",&formatBuffer1, (void **) &pBuffer1,(unsigned int *)&lBuffer1Len,&freqBuffer1); alBufferData(gSampleSet[shotgunsound], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[shotgunsound], AL_BUFFER, gSampleSet[shotgunsound]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); if (musictoggle) { LoadOGG_CFH((char *) ":Data:Sounds:mainmenusong.ogg", &formatBuffer1, (void **) &pBuffer1, (unsigned int *) &lBuffer1Len, &freqBuffer1); alBufferData(gSampleSet[mainmenusong], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[mainmenusong], AL_BUFFER, gSampleSet[mainmenusong]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *) ":Data:Sounds:shootsong.ogg", &formatBuffer1, (void **) &pBuffer1, (unsigned int *) &lBuffer1Len, &freqBuffer1); alBufferData(gSampleSet[shootsong], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[shootsong], AL_BUFFER, gSampleSet[shootsong]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *) ":Data:Sounds:zombiesong.ogg", &formatBuffer1, (void **) &pBuffer1, (unsigned int *) &lBuffer1Len, &freqBuffer1); alBufferData(gSampleSet[zombiesong], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[zombiesong], AL_BUFFER, gSampleSet[zombiesong]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); LoadOGG_CFH((char *) ":Data:Sounds:knifesong.ogg", &formatBuffer1, (void **) &pBuffer1, (unsigned int *) &lBuffer1Len, &freqBuffer1); alBufferData(gSampleSet[knifesong], formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); alSourcei(gSourceID[knifesong], AL_BUFFER, gSampleSet[knifesong]); FreeOGG(formatBuffer1, pBuffer1, lBuffer1Len, freqBuffer1); } float gLoc[3]; gLoc[0]=0; gLoc[1]=0; gLoc[2]=0; alSourcefv(gSourceID[visionsound], AL_POSITION, gLoc); alSourcei(gSourceID[visionsound], AL_LOOPING, 1); alSourcef(gSourceID[visionsound], AL_MIN_GAIN, 1); alSourcefv(gSourceID[soulinsound], AL_POSITION, gLoc); alSourcei(gSourceID[soulinsound], AL_LOOPING, 0); alSourcef(gSourceID[soulinsound], AL_MIN_GAIN, 1); alSourcefv(gSourceID[souloutsound], AL_POSITION, gLoc); alSourcei(gSourceID[souloutsound], AL_LOOPING, 0); alSourcef(gSourceID[souloutsound], AL_MIN_GAIN, 1); for(int i=0;i<5;i++){ alSourcefv(gSourceID[footstepsound+i], AL_POSITION, gLoc); alSourcei(gSourceID[footstepsound+i], AL_LOOPING, 0); alSourcef(gSourceID[footstepsound+i], AL_MIN_GAIN, 0); } alSourcefv(gSourceID[bodylandsound], AL_POSITION, gLoc); alSourcei(gSourceID[bodylandsound], AL_LOOPING, 0); alSourcef(gSourceID[bodylandsound], AL_MIN_GAIN, 0); alSourcefv(gSourceID[headlandsound], AL_POSITION, gLoc); alSourcei(gSourceID[headlandsound], AL_LOOPING, 0); alSourcef(gSourceID[headlandsound], AL_MIN_GAIN, 0); alSourcefv(gSourceID[riflesound], AL_POSITION, gLoc); alSourcei(gSourceID[riflesound], AL_LOOPING, 0); alSourcef(gSourceID[riflesound], AL_MIN_GAIN, 0); alSourcefv(gSourceID[bodyhitsound], AL_POSITION, gLoc); alSourcei(gSourceID[bodyhitsound], AL_LOOPING, 0); alSourcef(gSourceID[bodyhitsound], AL_MIN_GAIN, .1); alSourcefv(gSourceID[wallhitsound], AL_POSITION, gLoc); alSourcei(gSourceID[wallhitsound], AL_LOOPING, 0); alSourcef(gSourceID[wallhitsound], AL_MIN_GAIN, 0); alSourcef(gSourceID[wallhitsound], AL_MAX_GAIN, .6); alSourcefv(gSourceID[machinegunsound], AL_POSITION, gLoc); alSourcei(gSourceID[machinegunsound], AL_LOOPING, 0); alSourcef(gSourceID[machinegunsound], AL_MIN_GAIN,0); alSourcefv(gSourceID[nearbulletsound], AL_POSITION, gLoc); alSourcei(gSourceID[nearbulletsound], AL_LOOPING, 0); alSourcef(gSourceID[nearbulletsound], AL_MIN_GAIN,0); alSourcefv(gSourceID[headwhacksound], AL_POSITION, gLoc); alSourcei(gSourceID[headwhacksound], AL_LOOPING, 0); alSourcef(gSourceID[headwhacksound], AL_MIN_GAIN,0); alSourcefv(gSourceID[headshotsound], AL_POSITION, gLoc); alSourcei(gSourceID[headshotsound], AL_LOOPING, 0); alSourcef(gSourceID[headshotsound], AL_MIN_GAIN, 0); alSourcefv(gSourceID[reloadsound], AL_POSITION, gLoc); alSourcei(gSourceID[reloadsound], AL_LOOPING, 0); alSourcef(gSourceID[reloadsound], AL_MIN_GAIN, 0); alSourcefv(gSourceID[clicksound], AL_POSITION, gLoc); alSourcei(gSourceID[clicksound], AL_LOOPING, 0); alSourcef(gSourceID[clicksound], AL_MIN_GAIN, 0); alSourcefv(gSourceID[pistol1sound], AL_POSITION, gLoc); alSourcei(gSourceID[pistol1sound], AL_LOOPING, 0); alSourcef(gSourceID[pistol1sound], AL_MIN_GAIN, 0); alSourcefv(gSourceID[pistol2sound], AL_POSITION, gLoc); alSourcei(gSourceID[pistol2sound], AL_LOOPING, 0); alSourcef(gSourceID[pistol2sound], AL_MIN_GAIN, 0); alSourcefv(gSourceID[pinpullsound], AL_POSITION, gLoc); alSourcei(gSourceID[pinpullsound], AL_LOOPING, 0); alSourcef(gSourceID[pinpullsound], AL_MIN_GAIN,0); alSourcefv(gSourceID[pinreplacesound], AL_POSITION, gLoc); alSourcei(gSourceID[pinreplacesound], AL_LOOPING, 0); alSourcef(gSourceID[pinreplacesound], AL_MIN_GAIN,0); alSourcefv(gSourceID[grenadethrowsound], AL_POSITION, gLoc); alSourcei(gSourceID[grenadethrowsound], AL_LOOPING, 0); alSourcef(gSourceID[grenadethrowsound], AL_MIN_GAIN,0); alSourcefv(gSourceID[bouncesound], AL_POSITION, gLoc); alSourcei(gSourceID[bouncesound], AL_LOOPING, 0); alSourcef(gSourceID[bouncesound], AL_MIN_GAIN,0); alSourcefv(gSourceID[bounce2sound], AL_POSITION, gLoc); alSourcei(gSourceID[bounce2sound], AL_LOOPING, 0); alSourcef(gSourceID[bounce2sound], AL_MIN_GAIN,0); alSourcefv(gSourceID[explosionsound], AL_POSITION, gLoc); alSourcei(gSourceID[explosionsound], AL_LOOPING, 0); alSourcef(gSourceID[explosionsound], AL_MIN_GAIN,0); alSourcefv(gSourceID[bodywhacksound], AL_POSITION, gLoc); alSourcei(gSourceID[bodywhacksound], AL_LOOPING, 0); alSourcef(gSourceID[bodywhacksound], AL_MIN_GAIN, 0); alSourcefv(gSourceID[rainsound], AL_POSITION, gLoc); alSourcei(gSourceID[rainsound], AL_LOOPING, 1); alSourcef(gSourceID[rainsound], AL_MIN_GAIN, .3); alSourcefv(gSourceID[losesound], AL_POSITION, gLoc); alSourcei(gSourceID[losesound], AL_LOOPING, 0); alSourcef(gSourceID[losesound], AL_MIN_GAIN, 1); alSourcefv(gSourceID[disguisekillsound], AL_POSITION, gLoc); alSourcei(gSourceID[disguisekillsound], AL_LOOPING, 0); alSourcef(gSourceID[disguisekillsound], AL_MIN_GAIN, 1); alSourcefv(gSourceID[knifeslashsound], AL_POSITION, gLoc); alSourcei(gSourceID[knifeslashsound], AL_LOOPING, 0); alSourcef(gSourceID[knifeslashsound], AL_MIN_GAIN,0); alSourcefv(gSourceID[shotgunsound], AL_POSITION, gLoc); alSourcei(gSourceID[shotgunsound], AL_LOOPING, 0); alSourcef(gSourceID[shotgunsound], AL_MIN_GAIN, 0); alSourcefv(gSourceID[knifesong], AL_POSITION, gLoc); alSourcei(gSourceID[knifesong], AL_LOOPING, 1); alSourcef(gSourceID[knifesong], AL_MIN_GAIN, 1); alSourcefv(gSourceID[mainmenusong], AL_POSITION, gLoc); alSourcei(gSourceID[mainmenusong], AL_LOOPING, 1); alSourcef(gSourceID[mainmenusong], AL_MIN_GAIN, 1); alSourcefv(gSourceID[zombiesong], AL_POSITION, gLoc); alSourcei(gSourceID[zombiesong], AL_LOOPING, 1); alSourcef(gSourceID[zombiesong], AL_MIN_GAIN, 1); alSourcefv(gSourceID[shootsong], AL_POSITION, gLoc); alSourcei(gSourceID[shootsong], AL_LOOPING, 1); alSourcef(gSourceID[shootsong], AL_MIN_GAIN, 1); } void Game::LoadingScreen(float percent) { glLoadIdentity(); //Clear to black glClearColor(0,0,0,1); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //Background glDisable(GL_TEXTURE_2D); glDisable(GL_DEPTH_TEST); // Disables Depth Testing glDisable(GL_CULL_FACE); glDisable(GL_LIGHTING); glDepthMask(0); glMatrixMode(GL_PROJECTION); // Select The Projection Matrix glPushMatrix(); // Store The Projection Matrix glLoadIdentity(); // Reset The Projection Matrix glOrtho(0,640,0,480,-100,100); // Set Up An Ortho Screen glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glPushMatrix(); // Store The Modelview Matrix for(int i=19;i>=0;i--){ glLoadIdentity(); // Reset The Modelview Matrix glTranslatef(120-i*1,190-i*1,0); glScalef(400+i*2,30+i*2,1); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); if(i)glColor4f(1-(float)i/20-percent/100,1-(float)i/20-percent/100,1-(float)i/20-percent/100,1); if(!i)glColor4f(0,0,0,1); glBegin(GL_QUADS); glVertex3f(0, 0, 0.0f); glVertex3f(1, 0, 0.0f); glVertex3f(1, 1, 0.0f); glVertex3f(0, 1, 0.0f); glEnd(); } glMatrixMode(GL_PROJECTION); // Select The Projection Matrix glPopMatrix(); // Restore The Old Projection Matrix glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glPopMatrix(); // Restore The Old Projection Matrix glDisable(GL_BLEND); glDepthMask(1); //Progress glDisable(GL_DEPTH_TEST); // Disables Depth Testing glDisable(GL_CULL_FACE); glDisable(GL_LIGHTING); glDisable(GL_TEXTURE_2D); glDepthMask(0); glMatrixMode(GL_PROJECTION); // Select The Projection Matrix glPushMatrix(); // Store The Projection Matrix glLoadIdentity(); // Reset The Projection Matrix glOrtho(0,640,0,480,-100,100); // Set Up An Ortho Screen glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glPushMatrix(); // Store The Modelview Matrix for(int i=19;i>=0;i--){ glLoadIdentity(); // Reset The Modelview Matrix glTranslatef(120,190,0); if(4*percent+i*2<400)glScalef(4*percent+i*2,30,1); if(4*percent+i*2>=400)glScalef(400,30,1); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glColor4f(1,0,0,.1); glBegin(GL_QUADS); glVertex3f(0, 0, 0.0f); glVertex3f(1, 0, 0.0f); glVertex3f(1, 1, 0.0f); glVertex3f(0, 1, 0.0f); glEnd(); } glMatrixMode(GL_PROJECTION); // Select The Projection Matrix glPopMatrix(); // Restore The Old Projection Matrix glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glPopMatrix(); // Restore The Old Projection Matrix glDisable(GL_BLEND); glDepthMask(1); //Text glEnable(GL_TEXTURE_2D); glColor4f(.6-.6*percent/100,0,0,1); static char string[256]=""; sprintf (string, "LOADING..."); text.glPrint(280,195,string,1,1,640,480); SDL_GL_SwapBuffers( ); } void LoadPersonSpriteTexture(char *fileName, GLuint *textureid) { *textureid = loadTexture(fileName); glBindTexture(GL_TEXTURE_2D, *textureid); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); } void Game::InitGame() { //Setup loading screen float loadingscreenamount=0; float loadingscreenamounttotal=200; if(initialized)loadingscreenamounttotal=20; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); //Set up rain and snow precipitationhorz=60; precipitationvert=40; precipitationdensity=25; //Bodyguard stats person[0].playercoords=camera.position; person[0].oldplayercoords=person[0].playercoords; person[0].type=playertype; person[0].existing=1; for(int i=0;i<10;i++){ person[0].reloads[i]=0; } //Level setup killedinnocent=0; //Haven't shot any civilians yet... if(customlevels){ //Load custom levels nummissions=1; //Default level in case of load failure type=randomshoot_type; possiblegun[0]=handgun1; possiblegun[1]=handgun2; possiblegun[2]=shotgun; numpossibleguns=3; evilprobability=6; person[0].whichgun=knife; person[0].reloads[person[0].whichgun]=6; if(!gameinprogress)score=0; timeremaining=50; difficulty=.8; ifstream ipstream {"Data/customlevels.txt"}; if (ipstream) { ipstream.ignore(256,'\n');//ignore descriptive text ipstream >> nummissions; for(int j = 0; j < mission + 1; j++) { ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> type; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> environment; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> numpossibleguns; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); for (int i = 0 ;i < numpossibleguns; i++) ipstream >> possiblegun[i]; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> evilprobability; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> person[0].whichgun; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> person[0].reloads[person[0].whichgun]; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> timeremaining; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> difficulty; ipstream.ignore(256,'\n'); } ipstream.close(); } else { customlevels=0; } } if(!customlevels){ //Setup hardcoded default levels if(mission==0){ environment=sunny_environment; type=randomshoot_type; possiblegun[0]=handgun1; possiblegun[1]=handgun2; possiblegun[2]=shotgun; numpossibleguns=3; evilprobability=6; person[0].whichgun=assaultrifle; person[0].reloads[person[0].whichgun]=6; if(!gameinprogress)score=0; timeremaining=50; difficulty=.6; } if(mission==1){ environment=snowy_environment; type=randomshoot_type; possiblegun[0]=knife; possiblegun[1]=assaultrifle; numpossibleguns=2; evilprobability=5; person[0].whichgun=handgun2; person[0].reloads[person[0].whichgun]=3; if(!gameinprogress)score=0; timeremaining=40; difficulty=.6; } if(mission==2){ environment=foggy_environment; type=randomshoot_type; possiblegun[0]=sniperrifle; numpossibleguns=1; evilprobability=5; person[0].whichgun=sniperrifle; person[0].reloads[person[0].whichgun]=4; if(!gameinprogress)score=0; timeremaining=50; difficulty=0.9; } if(mission==3){ environment=firey_environment; type=zombie_type; numpossibleguns=0; evilprobability=5; person[0].whichgun=shotgun; person[0].reloads[person[0].whichgun]=5; if(!gameinprogress)score=0; timeremaining=35; difficulty=.7; } if(mission==4){ environment=snowy_environment; type=randomshoot_type; possiblegun[0]=sniperrifle; possiblegun[1]=assaultrifle; numpossibleguns=2; evilprobability=5; person[0].whichgun=grenade; person[0].reloads[person[0].whichgun]=20; if(!gameinprogress)score=0; timeremaining=30; difficulty=.5; } if(mission==5){ environment=rainy_environment; type=randomshoot_type; possiblegun[0]=handgun1; possiblegun[1]=shotgun; possiblegun[2]=assaultrifle; numpossibleguns=3; evilprobability=6; person[0].whichgun=knife; person[0].reloads[person[0].whichgun]=3; if(!gameinprogress)score=0; timeremaining=40; difficulty=.8; } if(mission==6){ environment=night_environment; type=randomshoot_type; possiblegun[1]=handgun1; possiblegun[2]=handgun2; possiblegun[3]=shotgun; numpossibleguns=3; evilprobability=5; person[0].whichgun=handgun1; person[0].reloads[person[0].whichgun]=4; if(!gameinprogress)score=0; timeremaining=30; difficulty=1; } if(mission==7){ environment=firey_environment; type=zombie_type; person[0].whichgun=assaultrifle; person[0].reloads[person[0].whichgun]=5; if(!gameinprogress)score=0; timeremaining=30; difficulty=1; } if(mission==8){ environment=rainy_environment; type=randomshoot_type; possiblegun[0]=handgun1; possiblegun[1]=handgun2; possiblegun[2]=shotgun; possiblegun[3]=sniperrifle; possiblegun[4]=assaultrifle; numpossibleguns=5; evilprobability=5; person[0].whichgun=nogun; person[0].reloads[person[0].whichgun]=3; if(!gameinprogress)score=0; timeremaining=40; difficulty=.8; } if(mission==9){ environment=snowy_environment; type=randomshoot_type; possiblegun[0]=knife; possiblegun[1]=handgun1; possiblegun[2]=handgun2; possiblegun[3]=shotgun; possiblegun[4]=sniperrifle; possiblegun[5]=assaultrifle; numpossibleguns=6; evilprobability=4; person[0].whichgun=handgun1; person[0].reloads[person[0].whichgun]=3; if(!gameinprogress)score=0; timeremaining=90; difficulty=1; } if(mission==10){ environment=night_environment; type=randomshoot_type; possiblegun[0]=sniperrifle; numpossibleguns=1; evilprobability=5; person[0].whichgun=sniperrifle; person[0].reloads[person[0].whichgun]=4; if(!gameinprogress)score=0; timeremaining=30; difficulty=1.3; } if(mission==11){ environment=sunny_environment; type=randomshoot_type; possiblegun[0]=knife; possiblegun[1]=sniperrifle; numpossibleguns=2; evilprobability=4; person[0].whichgun=knife; if(!gameinprogress)score=0; timeremaining=30; difficulty=1.5; } if(mission==12){ environment=firey_environment; type=zombie_type; possiblegun[0]=knife; possiblegun[1]=sniperrifle; person[0].whichgun=handgun2; person[0].reloads[person[0].whichgun]=10; if(!gameinprogress)score=0; timeremaining=60; difficulty=1.5; } nummissions=13; } //Setup fast radian to degree conversion rad2deg= 56.54866776; visions=0; //Setup bounding cylinder model float boundingscale=3; if(!initialized){ boundingpoints[0]=0; boundingpoints[0].z=boundingscale; boundingpoints[0].y=0; for(int i=1;i<8;i++){ boundingpoints[i]=DoRotation(boundingpoints[0],0,i*360/7,0); } } civkills=0; badkills=0; goodkills=0; enemystate=2; if(!initialized){ if(!azertykeyboard){ forwardskey=MAC_W_KEY; backwardskey=MAC_S_KEY; leftkey=MAC_A_KEY; rightkey=MAC_D_KEY; aimkey=MAC_Q_KEY; psychicaimkey=MAC_E_KEY; psychickey=MAC_Z_KEY; } if(azertykeyboard){ forwardskey=MAC_Z_KEY; backwardskey=MAC_S_KEY; leftkey=MAC_Q_KEY; rightkey=MAC_D_KEY; aimkey=MAC_A_KEY; psychicaimkey=MAC_E_KEY; psychickey=MAC_W_KEY; } soundscalefactor=soundscalefactordefault; //Setup sound falloff gQuit=false; //Sounds LoadSounds(musictoggle); //Play correct song if(environment==rainy_environment)alSourcePlay(gSourceID[rainsound]); if(environment!=rainy_environment)alSourcePause(gSourceID[rainsound]); alSourceStop(gSourceID[whichsong]); alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 0); alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 0); whichsong=mainmenusong; alSourceStop(gSourceID[whichsong]); alSourcef(gSourceID[whichsong], AL_PITCH, 1); alSourcePlay(gSourceID[whichsong]); alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 1); alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 1); } loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); //Setup random seed srand(time(NULL)); gamespeed=1; //Setup camera camera.position=0; camera.position.x=num_blocks/2*block_spacing+block_spacing/2; camera.position.z=num_blocks/2*block_spacing+block_spacing/2; camera.position.y=30; camera.oldposition=camera.position; numpeople=1; //Setup path to walk around blocks path.load((unsigned char *)":Data:Models:path.solid"); path.Rotate(90,0,0); path.Scale(.8,.8,.8); path.CalculateNormals(); loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); person[0].speedmult=1.3; //Add vip person[numpeople].playerrotation=0; person[numpeople].whichcostume=vipcostume; person[numpeople].whichblockx=((person[0].playercoords.x+block_spacing/2)/block_spacing); person[numpeople].whichblocky=((person[0].playercoords.x+block_spacing/2)/block_spacing); person[numpeople].pathnum=-1; person[numpeople].oldpathnum=-1; person[numpeople].oldoldpathnum=-1; person[numpeople].oldoldoldpathnum=-1; while(person[numpeople].pathnum<0||person[numpeople].pathnum>=path.vertexNum||person[numpeople].pathnum==1){ person[numpeople].pathnum=Random()%path.vertexNum; } person[numpeople].pathtarget.x=path.vertex[person[numpeople].pathnum].x; person[numpeople].pathtarget.z=path.vertex[person[numpeople].pathnum].z; person[numpeople].pathsize=.98+float(abs(Random()%20))/400; person[numpeople].pathtarget*=person[numpeople].pathsize; person[numpeople].pathtarget.x+=person[numpeople].whichblockx*block_spacing; person[numpeople].pathtarget.z+=person[numpeople].whichblocky*block_spacing; person[numpeople].playercoords=person[numpeople].pathtarget; person[numpeople].oldplayercoords=person[numpeople].playercoords; person[0].playercoords=person[numpeople].playercoords; person[0].playercoords.x+=1; person[0].playercoords.z+=1; person[0].oldplayercoords=person[0].playercoords; person[numpeople].skeleton.free=0; person[numpeople].targetanimation=walkanim; person[numpeople].speed=1; person[numpeople].existing=0; person[numpeople].speedmult=1; if(type==zombie_type)person[numpeople].speedmult=.8; person[numpeople].health=100; person[numpeople].playerrotation2=0;//20; person[numpeople].lastdistancevictim=200000; if(person[numpeople].skeleton.broken)person[numpeople].skeleton.Load((char *)":Data:Skeleton:Basic Figure"); person[numpeople].type=viptype; person[numpeople].whichgun=nogun; person[numpeople].aiming=0; person[numpeople].killtarget=-1; person[numpeople].existing=1; citypeoplenum[person[numpeople].whichblockx][person[numpeople].whichblocky]++; numpeople++; spawndelay=.1; XYZ vipdistance; vipdistance=0; vipdistance.x=10000000; vipgoal=person[1].playercoords+DoRotation(vipdistance,0,Random()%360,0); //Setup block models if(!initialized){ blocks[0].load((unsigned char *)":Data:Models:Block1.solid"); blocks[0].Rotate(90,0,0); blocks[0].Scale(.8,.8,.8); blocks[0].CalculateNormals(); blocks[1].load((unsigned char *)":Data:Models:Block2.solid"); blocks[1].Rotate(90,0,0); blocks[1].Scale(.8,.8,.8); blocks[1].CalculateNormals(); loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); blocks[2].load((unsigned char *)":Data:Models:Block3.solid"); blocks[2].Rotate(90,0,0); blocks[2].Scale(.8,.8,.8); blocks[2].CalculateNormals(); blocks[3].load((unsigned char *)":Data:Models:Block4.solid"); blocks[3].Rotate(90,0,0); blocks[3].Scale(.8,.8,.8); blocks[3].CalculateNormals(); loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); sidewalkcollide.load((unsigned char *)":Data:Models:Lowheightcollide.solid"); sidewalkcollide.Rotate(90,0,0); sidewalkcollide.Scale(.8,.8,.8); sidewalkcollide.CalculateNormals(); blockwalls[0].load((unsigned char *)":Data:Models:Block1collide.solid"); blockwalls[0].Rotate(90,0,0); blockwalls[0].Scale(.8,.75,.8); blockwalls[0].CalculateNormals(); blockwalls[1].load((unsigned char *)":Data:Models:Block2collide.solid"); blockwalls[1].Rotate(90,0,0); blockwalls[1].Scale(.8,.75,.8); blockwalls[1].CalculateNormals(); blockwalls[2].load((unsigned char *)":Data:Models:Block3collide.solid"); blockwalls[2].Rotate(90,0,0); blockwalls[2].Scale(.8,.75,.8); blockwalls[2].CalculateNormals(); blockwalls[3].load((unsigned char *)":Data:Models:Block4collide.solid"); blockwalls[3].Rotate(90,0,0); blockwalls[3].Scale(.8,.75,.8); blockwalls[3].CalculateNormals(); loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); blockroofs[0].load((unsigned char *)":Data:Models:Highblock1collide.solid"); blockroofs[0].Rotate(90,0,0); blockroofs[0].Scale(.8,.8,.8); blockroofs[0].CalculateNormals(); blockroofs[1].load((unsigned char *)":Data:Models:Highblock2collide.solid"); blockroofs[1].Rotate(90,0,0); blockroofs[1].Scale(.8,.8,.8); blockroofs[1].CalculateNormals(); blockroofs[2].load((unsigned char *)":Data:Models:Highblock3collide.solid"); blockroofs[2].Rotate(90,0,0); blockroofs[2].Scale(.8,.8,.8); blockroofs[2].CalculateNormals(); blockroofs[3].load((unsigned char *)":Data:Models:Highblock4collide.solid"); blockroofs[3].Rotate(90,0,0); blockroofs[3].Scale(.8,.8,.8); blockroofs[3].CalculateNormals(); blockcollide[0].load((unsigned char *)":Data:Models:block1complete.solid"); blockcollide[0].Rotate(90,0,0); blockcollide[0].Scale(.8,.8,.8); blockcollide[0].CalculateNormals(); blockcollide[1].load((unsigned char *)":Data:Models:block2complete.solid"); blockcollide[1].Rotate(90,0,0); blockcollide[1].Scale(.8,.8,.8); blockcollide[1].CalculateNormals(); blockcollide[2].load((unsigned char *)":Data:Models:block3complete.solid"); blockcollide[2].Rotate(90,0,0); blockcollide[2].Scale(.8,.8,.8); blockcollide[2].CalculateNormals(); blockcollide[3].load((unsigned char *)":Data:Models:block4complete.solid"); blockcollide[3].Rotate(90,0,0); blockcollide[3].Scale(.8,.8,.8); blockcollide[3].CalculateNormals(); loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); blocksimplecollide[0].load((unsigned char *)":Data:Models:lowsimplecollide1.solid"); blocksimplecollide[0].Rotate(90,0,0); blocksimplecollide[0].Scale(.8,.8,.8); blocksimplecollide[0].CalculateNormals(); blocksimplecollide[1].load((unsigned char *)":Data:Models:lowsimplecollide2.solid"); blocksimplecollide[1].Rotate(90,0,0); blocksimplecollide[1].Scale(.8,.8,.8); blocksimplecollide[1].CalculateNormals(); blocksimplecollide[2].load((unsigned char *)":Data:Models:lowsimplecollide3.solid"); blocksimplecollide[2].Rotate(90,0,0); blocksimplecollide[2].Scale(.8,.8,.8); blocksimplecollide[2].CalculateNormals(); blocksimplecollide[3].load((unsigned char *)":Data:Models:lowsimplecollide4.solid"); blocksimplecollide[3].Rotate(90,0,0); blocksimplecollide[3].Scale(.8,.8,.8); blocksimplecollide[3].CalculateNormals(); loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); blockocclude.load((unsigned char *)":Data:Models:blockocclude.solid"); blockocclude.Rotate(90,0,0); blockocclude.Scale(.8,.8,.8); blockocclude.CalculateNormals(); blocksimple.load((unsigned char *)":Data:Models:blocksimple.solid"); blocksimple.Rotate(90,0,0); blocksimple.Scale(.8,2,.8); blocksimple.CalculateNormals(); street.load((unsigned char *)":Data:Models:streetsubdivided2.solid"); street.Rotate(90,0,0); street.Scale(.01,.01,.01); street.CalculateNormals(); Bigstreet=street; Bigstreet.Scale(10000,10000,10000); loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); path.load((unsigned char *)":Data:Models:path.solid"); path.Rotate(90,0,0); path.Scale(.8,.8,.8); path.CalculateNormals(); // Fix block radius for (int i = 0; i < 4; i++) { auto center = blocks[i].boundingspherecenter; center.x = center.y = center.z = 0; float radiusqr = 0.0; for (int x = 0; x < blocks[i].vertexNum; x++) { auto distance = findDistancefast(center, blocks[i].vertex[x]); if (distance > radiusqr) radiusqr = distance; } blocks[i].boundingsphereradius = sqrt(radiusqr); } } mousesensitivity=1; //init city block rotations for(int i=0;i3)citytype[i][j]=3; } } if(!initialized){ //Load player model skeletonmodels[0].load((unsigned char *)":Data:Models:Head.solid"); skeletonmodels[0].Rotate(90,0,0); skeletonmodels[0].Scale(.02,.02,.02); skeletonmodels[0].CalculateNormals(); skeletonmodels[1].load((unsigned char *)":Data:Models:Chest.solid"); skeletonmodels[1].Rotate(90,0,0); skeletonmodels[1].Scale(.02,.02,.02); skeletonmodels[1].CalculateNormals(); skeletonmodels[2].load((unsigned char *)":Data:Models:Abdomen.solid"); skeletonmodels[2].Rotate(90,0,0); skeletonmodels[2].Scale(.02,.02,.02); skeletonmodels[2].CalculateNormals(); skeletonmodels[3].load((unsigned char *)":Data:Models:Upper arm.solid"); skeletonmodels[3].Rotate(90,0,0); skeletonmodels[3].Scale(.02,.02,.02); skeletonmodels[3].CalculateNormals(); skeletonmodels[4].load((unsigned char *)":Data:Models:Lower arm.solid"); skeletonmodels[4].Rotate(90,0,0); skeletonmodels[4].Scale(.02,.02,.02); skeletonmodels[4].CalculateNormals(); skeletonmodels[5].load((unsigned char *)":Data:Models:Hand.solid"); skeletonmodels[5].Rotate(90,0,0); skeletonmodels[5].Scale(.02,.02,.02); skeletonmodels[5].CalculateNormals(); skeletonmodels[6].load((unsigned char *)":Data:Models:Upper leg.solid"); skeletonmodels[6].Rotate(90,0,0); skeletonmodels[6].Scale(.02,.02,.02); skeletonmodels[6].CalculateNormals(); skeletonmodels[7].load((unsigned char *)":Data:Models:Lower leg.solid"); skeletonmodels[7].Rotate(90,0,0); skeletonmodels[7].Scale(.02,.02,.02); skeletonmodels[7].CalculateNormals(); skeletonmodels[8].load((unsigned char *)":Data:Models:Foot.solid"); skeletonmodels[8].Rotate(90,0,0); skeletonmodels[8].Scale(.02,.02,.02); skeletonmodels[8].CalculateNormals(); skeletonmodels[9].load((unsigned char *)":Data:Models:Shades.solid"); skeletonmodels[9].Rotate(90,0,0); skeletonmodels[9].Scale(.02,.02,.02); skeletonmodels[9].CalculateNormals(); //Load gun models loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); gunmodels[sniperriflemodel].load((unsigned char *)":Data:Models:sniperrifle.solid"); gunmodels[sniperriflemodel].Rotate(0,0,90); gunmodels[sniperriflemodel].Scale(.001,.001,.001); gunmodels[sniperriflemodel].CalculateNormals(); gunmodels[assaultriflemodel].load((unsigned char *)":Data:Models:assaultrifle.solid"); gunmodels[assaultriflemodel].Rotate(0,0,90); gunmodels[assaultriflemodel].Scale(.01,.01,.01); gunmodels[assaultriflemodel].CalculateNormals(); gunmodels[handgunbasemodel].load((unsigned char *)":Data:Models:Handgunbase.solid"); gunmodels[handgunbasemodel].Rotate(0,0,90); gunmodels[handgunbasemodel].Rotate(180,0,0); gunmodels[handgunbasemodel].Scale(.014,.014,.014); gunmodels[handgunbasemodel].CalculateNormals(); gunmodels[handgunbasemodel].MultColor(.6); loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); gunmodels[handgunslidemodel].load((unsigned char *)":Data:Models:Handgunslide.solid"); gunmodels[handgunslidemodel].Rotate(0,0,90); gunmodels[handgunslidemodel].Rotate(180,0,0); gunmodels[handgunslidemodel].Scale(.014,.014,.014); gunmodels[handgunslidemodel].CalculateNormals(); gunmodels[handgunslidemodel].MultColor(.6); gunmodels[handgun2basemodel].load((unsigned char *)":Data:Models:glockbase.solid"); gunmodels[handgun2basemodel].Rotate(0,0,90); gunmodels[handgun2basemodel].Rotate(180,0,0); gunmodels[handgun2basemodel].Scale(.014,.014,.014); gunmodels[handgun2basemodel].CalculateNormals(); gunmodels[handgun2basemodel].MultColor(.6); gunmodels[handgun2slidemodel].load((unsigned char *)":Data:Models:glockslide.solid"); gunmodels[handgun2slidemodel].Rotate(0,0,90); gunmodels[handgun2slidemodel].Rotate(180,0,0); gunmodels[handgun2slidemodel].Scale(.014,.014,.014); gunmodels[handgun2slidemodel].CalculateNormals(); gunmodels[handgun2slidemodel].MultColor(.6); loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); gunmodels[grenadebasemodel].load((unsigned char *)":Data:Models:grenadebase.solid"); gunmodels[grenadebasemodel].Rotate(0,0,90); gunmodels[grenadebasemodel].Rotate(180,0,0); gunmodels[grenadebasemodel].Scale(.014,.014,.014); gunmodels[grenadebasemodel].CalculateNormals(); gunmodels[grenadepinmodel].load((unsigned char *)":Data:Models:grenadepin.solid"); gunmodels[grenadepinmodel].Rotate(0,0,90); gunmodels[grenadepinmodel].Rotate(180,0,0); gunmodels[grenadepinmodel].Scale(.014,.014,.014); gunmodels[grenadepinmodel].CalculateNormals(); gunmodels[grenadespoonmodel].load((unsigned char *)":Data:Models:grenadespoon.solid"); gunmodels[grenadespoonmodel].Rotate(0,0,90); gunmodels[grenadespoonmodel].Rotate(180,0,0); gunmodels[grenadespoonmodel].Scale(.014,.014,.014); gunmodels[grenadespoonmodel].CalculateNormals(); gunmodels[knifemodel].load((unsigned char *)":Data:Models:Knife.solid"); gunmodels[knifemodel].Rotate(0,0,90); gunmodels[knifemodel].Rotate(180,0,0); gunmodels[knifemodel].Scale(.014,.014,.014); gunmodels[knifemodel].CalculateNormals(); gunmodels[shotgunmodel].load((unsigned char *)":Data:Models:shotgun.solid"); gunmodels[shotgunmodel].Rotate(0,0,90); gunmodels[shotgunmodel].Scale(.001,.001,.001); gunmodels[shotgunmodel].CalculateNormals(); gunmodels[shotgunmodel].MultColor(.6); } loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); //Setup costumes float headcolor[3]; float footcolor[3]; float handcolor[3]; float topcolor[3]; float bottomcolor[3]; //Police headcolor[0]=(float)240/255; headcolor[1]=(float)183/255; headcolor[2]=(float)132/255; footcolor[0]=(float)119/255; footcolor[1]=(float)68/255; footcolor[2]=(float)18/255; handcolor[0]=(float)240/255; handcolor[1]=(float)183/255; handcolor[2]=(float)132/255; topcolor[0]=(float)14/255; topcolor[1]=(float)18/255; topcolor[2]=(float)195/255; bottomcolor[0]=(float)14/255; bottomcolor[1]=(float)18/255; bottomcolor[2]=(float)195/255; //Greenish skin if zombies if(type==zombie_type){ headcolor[0]=(float)223/255; headcolor[1]=(float)243/255; headcolor[2]=(float)197/255; handcolor[0]=(float)223/255; handcolor[1]=(float)243/255; handcolor[2]=(float)197/255; } costume[policecostume].headcolor[0]=headcolor[0]; costume[policecostume].headcolor[1]=headcolor[1]; costume[policecostume].headcolor[2]=headcolor[2]; costume[policecostume].handcolor[0]=handcolor[0]; costume[policecostume].handcolor[1]=handcolor[1]; costume[policecostume].handcolor[2]=handcolor[2]; costume[policecostume].chestcolor[0]=topcolor[0]; costume[policecostume].chestcolor[1]=topcolor[1]; costume[policecostume].chestcolor[2]=topcolor[2]; costume[policecostume].abdomencolor[0]=topcolor[0]; costume[policecostume].abdomencolor[1]=topcolor[1]; costume[policecostume].abdomencolor[2]=topcolor[2]; costume[policecostume].upperarmcolor[0]=topcolor[0]; costume[policecostume].upperarmcolor[1]=topcolor[1]; costume[policecostume].upperarmcolor[2]=topcolor[2]; costume[policecostume].lowerarmcolor[0]=topcolor[0]; costume[policecostume].lowerarmcolor[1]=topcolor[1]; costume[policecostume].lowerarmcolor[2]=topcolor[2]; costume[policecostume].upperlegcolor[0]=bottomcolor[0]; costume[policecostume].upperlegcolor[1]=bottomcolor[1]; costume[policecostume].upperlegcolor[2]=bottomcolor[2]; costume[policecostume].lowerlegcolor[0]=bottomcolor[0]; costume[policecostume].lowerlegcolor[1]=bottomcolor[1]; costume[policecostume].lowerlegcolor[2]=bottomcolor[2]; costume[policecostume].footcolor[0]=footcolor[0]; costume[policecostume].footcolor[1]=footcolor[1]; costume[policecostume].footcolor[2]=footcolor[2]; //casual topcolor[0]=(float)14/255; topcolor[1]=(float)200/255; topcolor[2]=(float)30/255; bottomcolor[0]=(float)14/255; bottomcolor[1]=(float)18/255; bottomcolor[2]=(float)195/255; costume[casualcostumes].headcolor[0]=headcolor[0]; costume[casualcostumes].headcolor[1]=headcolor[1]; costume[casualcostumes].headcolor[2]=headcolor[2]; costume[casualcostumes].handcolor[0]=handcolor[0]; costume[casualcostumes].handcolor[1]=handcolor[1]; costume[casualcostumes].handcolor[2]=handcolor[2]; costume[casualcostumes].chestcolor[0]=topcolor[0]; costume[casualcostumes].chestcolor[1]=topcolor[1]; costume[casualcostumes].chestcolor[2]=topcolor[2]; costume[casualcostumes].abdomencolor[0]=topcolor[0]; costume[casualcostumes].abdomencolor[1]=topcolor[1]; costume[casualcostumes].abdomencolor[2]=topcolor[2]; costume[casualcostumes].upperarmcolor[0]=topcolor[0]; costume[casualcostumes].upperarmcolor[1]=topcolor[1]; costume[casualcostumes].upperarmcolor[2]=topcolor[2]; costume[casualcostumes].lowerarmcolor[0]=handcolor[0]; costume[casualcostumes].lowerarmcolor[1]=handcolor[1]; costume[casualcostumes].lowerarmcolor[2]=handcolor[2]; costume[casualcostumes].upperlegcolor[0]=bottomcolor[0]; costume[casualcostumes].upperlegcolor[1]=bottomcolor[1]; costume[casualcostumes].upperlegcolor[2]=bottomcolor[2]; costume[casualcostumes].lowerlegcolor[0]=bottomcolor[0]; costume[casualcostumes].lowerlegcolor[1]=bottomcolor[1]; costume[casualcostumes].lowerlegcolor[2]=bottomcolor[2]; costume[casualcostumes].footcolor[0]=footcolor[0]; costume[casualcostumes].footcolor[1]=footcolor[1]; costume[casualcostumes].footcolor[2]=footcolor[2]; //casual 2 topcolor[0]=(float)140/255; topcolor[1]=(float)55/255; topcolor[2]=(float)4/255; bottomcolor[0]=(float)14/255; bottomcolor[1]=(float)18/255; bottomcolor[2]=(float)135/255; costume[casualcostumes+1].headcolor[0]=headcolor[0]; costume[casualcostumes+1].headcolor[1]=headcolor[1]; costume[casualcostumes+1].headcolor[2]=headcolor[2]; costume[casualcostumes+1].handcolor[0]=handcolor[0]; costume[casualcostumes+1].handcolor[1]=handcolor[1]; costume[casualcostumes+1].handcolor[2]=handcolor[2]; costume[casualcostumes+1].chestcolor[0]=topcolor[0]; costume[casualcostumes+1].chestcolor[1]=topcolor[1]; costume[casualcostumes+1].chestcolor[2]=topcolor[2]; costume[casualcostumes+1].abdomencolor[0]=topcolor[0]; costume[casualcostumes+1].abdomencolor[1]=topcolor[1]; costume[casualcostumes+1].abdomencolor[2]=topcolor[2]; costume[casualcostumes+1].upperarmcolor[0]=topcolor[0]; costume[casualcostumes+1].upperarmcolor[1]=topcolor[1]; costume[casualcostumes+1].upperarmcolor[2]=topcolor[2]; costume[casualcostumes+1].lowerarmcolor[0]=topcolor[0]; costume[casualcostumes+1].lowerarmcolor[1]=topcolor[1]; costume[casualcostumes+1].lowerarmcolor[2]=topcolor[2]; costume[casualcostumes+1].upperlegcolor[0]=bottomcolor[0]; costume[casualcostumes+1].upperlegcolor[1]=bottomcolor[1]; costume[casualcostumes+1].upperlegcolor[2]=bottomcolor[2]; costume[casualcostumes+1].lowerlegcolor[0]=bottomcolor[0]; costume[casualcostumes+1].lowerlegcolor[1]=bottomcolor[1]; costume[casualcostumes+1].lowerlegcolor[2]=bottomcolor[2]; costume[casualcostumes+1].footcolor[0]=footcolor[0]; costume[casualcostumes+1].footcolor[1]=footcolor[1]; costume[casualcostumes+1].footcolor[2]=footcolor[2]; //casual 3 topcolor[0]=(float)134/255; topcolor[1]=(float)80/255; topcolor[2]=(float)3/255; bottomcolor[0]=(float)30/255; bottomcolor[1]=(float)30/255; bottomcolor[2]=(float)30/255; footcolor[0]=(float)20/255; footcolor[1]=(float)20/255; footcolor[2]=(float)20/255; costume[casualcostumes+2].headcolor[0]=headcolor[0]; costume[casualcostumes+2].headcolor[1]=headcolor[1]; costume[casualcostumes+2].headcolor[2]=headcolor[2]; costume[casualcostumes+2].handcolor[0]=handcolor[0]; costume[casualcostumes+2].handcolor[1]=handcolor[1]; costume[casualcostumes+2].handcolor[2]=handcolor[2]; costume[casualcostumes+2].chestcolor[0]=topcolor[0]; costume[casualcostumes+2].chestcolor[1]=topcolor[1]; costume[casualcostumes+2].chestcolor[2]=topcolor[2]; costume[casualcostumes+2].abdomencolor[0]=topcolor[0]; costume[casualcostumes+2].abdomencolor[1]=topcolor[1]; costume[casualcostumes+2].abdomencolor[2]=topcolor[2]; costume[casualcostumes+2].upperarmcolor[0]=topcolor[0]; costume[casualcostumes+2].upperarmcolor[1]=topcolor[1]; costume[casualcostumes+2].upperarmcolor[2]=topcolor[2]; costume[casualcostumes+2].lowerarmcolor[0]=topcolor[0]; costume[casualcostumes+2].lowerarmcolor[1]=topcolor[1]; costume[casualcostumes+2].lowerarmcolor[2]=topcolor[2]; costume[casualcostumes+2].upperlegcolor[0]=bottomcolor[0]; costume[casualcostumes+2].upperlegcolor[1]=bottomcolor[1]; costume[casualcostumes+2].upperlegcolor[2]=bottomcolor[2]; costume[casualcostumes+2].lowerlegcolor[0]=bottomcolor[0]; costume[casualcostumes+2].lowerlegcolor[1]=bottomcolor[1]; costume[casualcostumes+2].lowerlegcolor[2]=bottomcolor[2]; costume[casualcostumes+2].footcolor[0]=footcolor[0]; costume[casualcostumes+2].footcolor[1]=footcolor[1]; costume[casualcostumes+2].footcolor[2]=footcolor[2]; //casual 4 topcolor[0]=(float)228/255; topcolor[1]=(float)220/255; topcolor[2]=(float)0/255; bottomcolor[0]=(float)20/255; bottomcolor[1]=(float)20/255; bottomcolor[2]=(float)20/255; footcolor[0]=(float)119/255; footcolor[1]=(float)68/255; footcolor[2]=(float)18/255; costume[casualcostumes+3].headcolor[0]=headcolor[0]; costume[casualcostumes+3].headcolor[1]=headcolor[1]; costume[casualcostumes+3].headcolor[2]=headcolor[2]; costume[casualcostumes+3].handcolor[0]=handcolor[0]; costume[casualcostumes+3].handcolor[1]=handcolor[1]; costume[casualcostumes+3].handcolor[2]=handcolor[2]; costume[casualcostumes+3].chestcolor[0]=topcolor[0]; costume[casualcostumes+3].chestcolor[1]=topcolor[1]; costume[casualcostumes+3].chestcolor[2]=topcolor[2]; costume[casualcostumes+3].abdomencolor[0]=topcolor[0]; costume[casualcostumes+3].abdomencolor[1]=topcolor[1]; costume[casualcostumes+3].abdomencolor[2]=topcolor[2]; costume[casualcostumes+3].upperarmcolor[0]=topcolor[0]; costume[casualcostumes+3].upperarmcolor[1]=topcolor[1]; costume[casualcostumes+3].upperarmcolor[2]=topcolor[2]; costume[casualcostumes+3].lowerarmcolor[0]=handcolor[0]; costume[casualcostumes+3].lowerarmcolor[1]=handcolor[1]; costume[casualcostumes+3].lowerarmcolor[2]=handcolor[2]; costume[casualcostumes+3].upperlegcolor[0]=bottomcolor[0]; costume[casualcostumes+3].upperlegcolor[1]=bottomcolor[1]; costume[casualcostumes+3].upperlegcolor[2]=bottomcolor[2]; costume[casualcostumes+3].lowerlegcolor[0]=bottomcolor[0]; costume[casualcostumes+3].lowerlegcolor[1]=bottomcolor[1]; costume[casualcostumes+3].lowerlegcolor[2]=bottomcolor[2]; costume[casualcostumes+3].footcolor[0]=footcolor[0]; costume[casualcostumes+3].footcolor[1]=footcolor[1]; costume[casualcostumes+3].footcolor[2]=footcolor[2]; if(!initialized){ //vip topcolor[0]=(float)235/255; topcolor[1]=(float)235/255; topcolor[2]=(float)235/255; bottomcolor[0]=(float)200/255; bottomcolor[1]=(float)200/255; bottomcolor[2]=(float)200/255; footcolor[0]=(float)119/255; footcolor[1]=(float)68/255; footcolor[2]=(float)18/255; headcolor[0]=(float)240/255; headcolor[1]=(float)183/255; headcolor[2]=(float)132/255; footcolor[0]=(float)119/255; footcolor[1]=(float)68/255; footcolor[2]=(float)18/255; handcolor[0]=(float)240/255; handcolor[1]=(float)183/255; handcolor[2]=(float)132/255; costume[vipcostume].headcolor[0]=headcolor[0]; costume[vipcostume].headcolor[1]=headcolor[1]; costume[vipcostume].headcolor[2]=headcolor[2]; costume[vipcostume].handcolor[0]=handcolor[0]; costume[vipcostume].handcolor[1]=handcolor[1]; costume[vipcostume].handcolor[2]=handcolor[2]; costume[vipcostume].chestcolor[0]=topcolor[0]; costume[vipcostume].chestcolor[1]=topcolor[1]; costume[vipcostume].chestcolor[2]=topcolor[2]; costume[vipcostume].abdomencolor[0]=topcolor[0]; costume[vipcostume].abdomencolor[1]=topcolor[1]; costume[vipcostume].abdomencolor[2]=topcolor[2]; costume[vipcostume].upperarmcolor[0]=topcolor[0]; costume[vipcostume].upperarmcolor[1]=topcolor[1]; costume[vipcostume].upperarmcolor[2]=topcolor[2]; costume[vipcostume].lowerarmcolor[0]=topcolor[0]; costume[vipcostume].lowerarmcolor[1]=topcolor[1]; costume[vipcostume].lowerarmcolor[2]=topcolor[2]; costume[vipcostume].upperlegcolor[0]=bottomcolor[0]; costume[vipcostume].upperlegcolor[1]=bottomcolor[1]; costume[vipcostume].upperlegcolor[2]=bottomcolor[2]; costume[vipcostume].lowerlegcolor[0]=bottomcolor[0]; costume[vipcostume].lowerlegcolor[1]=bottomcolor[1]; costume[vipcostume].lowerlegcolor[2]=bottomcolor[2]; costume[vipcostume].footcolor[0]=footcolor[0]; costume[vipcostume].footcolor[1]=footcolor[1]; costume[vipcostume].footcolor[2]=footcolor[2]; //Bodyguard topcolor[0]=(float)50/255; topcolor[1]=(float)50/255; topcolor[2]=(float)50/255; bottomcolor[0]=(float)30/255; bottomcolor[1]=(float)30/255; bottomcolor[2]=(float)30/255; footcolor[0]=(float)20/255; footcolor[1]=(float)20/255; footcolor[2]=(float)20/255; costume[bodyguardcostume].headcolor[0]=headcolor[0]; costume[bodyguardcostume].headcolor[1]=headcolor[1]; costume[bodyguardcostume].headcolor[2]=headcolor[2]; costume[bodyguardcostume].handcolor[0]=handcolor[0]; costume[bodyguardcostume].handcolor[1]=handcolor[1]; costume[bodyguardcostume].handcolor[2]=handcolor[2]; costume[bodyguardcostume].chestcolor[0]=topcolor[0]; costume[bodyguardcostume].chestcolor[1]=topcolor[1]; costume[bodyguardcostume].chestcolor[2]=topcolor[2]; costume[bodyguardcostume].abdomencolor[0]=topcolor[0]; costume[bodyguardcostume].abdomencolor[1]=topcolor[1]; costume[bodyguardcostume].abdomencolor[2]=topcolor[2]; costume[bodyguardcostume].upperarmcolor[0]=topcolor[0]; costume[bodyguardcostume].upperarmcolor[1]=topcolor[1]; costume[bodyguardcostume].upperarmcolor[2]=topcolor[2]; costume[bodyguardcostume].lowerarmcolor[0]=topcolor[0]; costume[bodyguardcostume].lowerarmcolor[1]=topcolor[1]; costume[bodyguardcostume].lowerarmcolor[2]=topcolor[2]; costume[bodyguardcostume].upperlegcolor[0]=bottomcolor[0]; costume[bodyguardcostume].upperlegcolor[1]=bottomcolor[1]; costume[bodyguardcostume].upperlegcolor[2]=bottomcolor[2]; costume[bodyguardcostume].lowerlegcolor[0]=bottomcolor[0]; costume[bodyguardcostume].lowerlegcolor[1]=bottomcolor[1]; costume[bodyguardcostume].lowerlegcolor[2]=bottomcolor[2]; costume[bodyguardcostume].footcolor[0]=footcolor[0]; costume[bodyguardcostume].footcolor[1]=footcolor[1]; costume[bodyguardcostume].footcolor[2]=footcolor[2]; //Load animations loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); testskeleton.Load((char *)":Data:Skeleton:Basic Figure"); animation[idleanim].Load((char *)":Data:Animations:Breathe"); animation[joganim].Load((char *)":Data:Animations:Run"); animation[pistolaimanim].Load((char *)":Data:Animations:PistolAim"); loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); animation[walkanim].Load((char *)":Data:Animations:Walk"); animation[rifleholdanim].Load((char *)":Data:Animations:Riflehold"); animation[rifleaimanim].Load((char *)":Data:Animations:Rifleaim"); animation[assaultrifleaimanim].Load((char *)":Data:Animations:AssaultRifleaim"); animation[crouchanim].Load((char *)":Data:Animations:Crouch"); loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); animation[headpainanim].Load((char *)":Data:Animations:Headshot"); animation[chestpainanim].Load((char *)":Data:Animations:Chestshot"); animation[stomachpainanim].Load((char *)":Data:Animations:Stomachshot"); animation[rightarmpainanim].Load((char *)":Data:Animations:Rightarmshot"); animation[leftarmpainanim].Load((char *)":Data:Animations:Leftarmshot"); loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); animation[rightlegpainanim].Load((char *)":Data:Animations:Rightlegshot"); animation[leftlegpainanim].Load((char *)":Data:Animations:Leftlegshot"); animation[riflehitanim].Load((char *)":Data:Animations:Riflehit"); animation[grenadeaimanim].Load((char *)":Data:Animations:grenadeaim"); animation[grenadechargeanim].Load((char *)":Data:Animations:grenadecharge"); loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); animation[grenadethrowanim].Load((char *)":Data:Animations:grenadethrow"); animation[zombieeatanim].Load((char *)":Data:Animations:Zombiemunch"); animation[zombiejoganim].Load((char *)":Data:Animations:ZombieRun"); animation[zombiewalkanim].Load((char *)":Data:Animations:Zombiewalk"); loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); animation[getupfrontanim].Load((char *)":Data:Animations:Getupfromfront"); animation[getupbackanim].Load((char *)":Data:Animations:Getupfromback",180); animation[diveanim].Load((char *)":Data:Animations:Dive"); animation[throwanim].Load((char *)":Data:Animations:Aikidothrow"); animation[thrownanim].Load((char *)":Data:Animations:Aikidothrown"); } //Setup people for(int i=0;i1){ person[i].whichcostume=casualcostumes+abs(Random())%numcasual; } //person[i].firstlongdead=0; person[i].dead=0; person[i].health=100; person[i].skeleton.free=0; person[i].ammo=0; person[i].velocity=0; //Load skeleton structure if(!initialized)person[i].skeleton.Load((char *)":Data:Skeleton:Basic Figure"); if(i%5==0){ loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); } } loadingscreenamount+=5; if(!initialized)LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); if(initialized)person[0].skeleton.Load((char *)":Data:Skeleton:Basic Figure"); person[0].attackframe=-1; spawndelay=0; fog.SetFog(fogcolorr,fogcolorg,fogcolorb,0,viewdistance*.8,.1); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //light GLfloat LightAmbient[]= { .3, .3, .3, 1.0f}; GLfloat LightDiffuse[]= { 1, 1, 1, 1.0f }; glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient); glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse); glEnable(GL_LIGHT0); loadingscreenamount+=5; //Load some textures if(!initialized){ LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); LoadPersonSpriteTexture(":Data:Textures:Personsprite.png",&personspritetextureptr); LoadPersonSpriteTexture(":Data:Textures:DeadPersonsprite.png",&deadpersonspritetextureptr); LoadPersonSpriteTexture(":Data:Textures:Scope.png",&scopetextureptr); LoadPersonSpriteTexture(":Data:Textures:Flare.png",&flaretextureptr); sprites.LoadFlareTexture(":Data:Textures:HitFlash.png"); sprites.LoadMuzzleFlareTexture(":Data:Textures:MuzzleFlash.png"); sprites.LoadSmokeTexture(":Data:Textures:Smoke.png"); sprites.LoadBloodTexture(":Data:Textures:Blood.png"); sprites.LoadRainTexture(":Data:Textures:rain.png"); sprites.LoadSnowTexture(":Data:Textures:snow.png"); decals.LoadBulletHoleTexture(":Data:Textures:BulletHole.png"); decals.LoadCraterTexture(":Data:Textures:Crater.png"); decals.LoadBloodTexture(":Data:Textures:Blood:Blood1.png",0); decals.LoadBloodTexture(":Data:Textures:Blood:Blood2.png",1); decals.LoadBloodTexture(":Data:Textures:Blood:Blood3.png",2); decals.LoadBloodTexture(":Data:Textures:Blood:Blood4.png",3); decals.LoadBloodTexture(":Data:Textures:Blood:Blood5.png",4); decals.LoadBloodTexture(":Data:Textures:Blood:Blood6.png",5); decals.LoadBloodTexture(":Data:Textures:Blood:Blood7.png",6); decals.LoadBloodTexture(":Data:Textures:Blood:Blood8.png",7); decals.LoadBloodTexture(":Data:Textures:Blood:Blood9.png",8); decals.LoadBloodTexture(":Data:Textures:Blood:Blood10.png",9); decals.LoadBloodTexture(":Data:Textures:Blood:Blood11.png",10); } //Setup clip plane equation eqn[0]=0; eqn[1]=1; eqn[2]=0; eqn[3]=0; glClearColor(fogcolorr,fogcolorg,fogcolorb,1); if(!initialized)InitMouse(); //Draw city one frame to fix evil menu bug if(!initialized)mainmenu=2; if(!initialized){ LoadingScreen(loadingscreenamount/loadingscreenamounttotal*100); flashamount=1; flashr=1;flashg=1;flashb=1; alSourcePlay(gSourceID[soulinsound]); } initialized=1; loadingscreenamount+=5; //Sync to refresh rate if(vblsync) GLint swapInt = 1; /* for(int i=0;i InitGL() <*****/ int Game::InitGL(void) { //Config if(!initialized){ //Default config in case config is not found STUB_FUNCTION; screenwidth = 640; screenheight = 480; usermousesensitivity=.7; debug=0; vblsync=1; blood = 1; blurness = 0; mainmenuness=1; customlevels=0; musictoggle=1; //If no config, write one ifstream ipstream("config.txt"); if(!ipstream) { ofstream opstream("config.txt"); opstream << "Screenwidth:\n"; opstream << screenwidth; opstream << "\nScreenheight:\n"; opstream << screenheight; opstream << "\nMouse sensitivity:\n"; opstream << usermousesensitivity; opstream << "\nShow fps and other info:\n"; opstream << debug; opstream << "\nVBL sync:\n"; opstream << vblsync; opstream << "\nBlood:\n"; opstream << blood; opstream << "\nBlur:\n"; opstream << blurness; opstream << "\nMain Menu:\n"; opstream << mainmenuness; opstream << "\nCustom levels:\n"; opstream << customlevels; opstream << "\nMusic:\n"; opstream << musictoggle; opstream << "\azerty keyboard:\n"; opstream << azertykeyboard; opstream.close(); } //Read config if(ipstream){ ipstream.ignore(256,'\n'); ipstream >> screenwidth; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> screenheight; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> usermousesensitivity; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> debug; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> vblsync; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> blood; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> blurness; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> mainmenuness; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> customlevels; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> musictoggle; ipstream.ignore(256,'\n'); ipstream.ignore(256,'\n'); ipstream >> azertykeyboard; ipstream.close(); } // TODO: Read high score ifstream ipstream2("Data/Highscore"); if(!ipstream2) { highscore=0; beatgame=0; ofstream opstream("Data/Highscore"); opstream << highscore; opstream << "\n"; opstream << beatgame; opstream.close(); } if(ipstream2){ ipstream2 >> highscore; ipstream.ignore(256,'\n'); ipstream2 >> beatgame; ipstream2.close(); } sps=40; maxfps=90; disttest=1; cubetest=1; } //Setup screen if (SDL_Init(SDL_INIT_VIDEO) == -1) { fprintf(stderr, "SDL Init Video failed: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } atexit(SDL_Quit); SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); if(screenwidth<640||screenheight<480) { #ifdef FULLSCREEN if (SDL_SetVideoMode(640, 480, 0, SDL_OPENGL | SDL_FULLSCREEN) == NULL) { #else if (SDL_SetVideoMode(640, 480, 0, SDL_OPENGL) == NULL) { #endif fprintf(stderr, "(OpenGL) SDL SetVideoMode failed: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } } else { #ifdef FULLSCREEN if (SDL_SetVideoMode(screenwidth, screenheight, 0, SDL_OPENGL | SDL_FULLSCREEN) == NULL) { #else if (SDL_SetVideoMode(screenwidth, screenheight, 0, SDL_OPENGL) == NULL) { #endif fprintf(stderr, "(OpenGL) SDL SetVideoMode failed: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } } SDL_WM_SetCaption("Black Shades", "Black Shades"); SDL_EnableUNICODE(1); /* toggle it to ON */ #ifdef FULLSCREEN SDL_WM_GrabInput(SDL_GRAB_ON); SDL_ShowCursor(0); #endif text.LoadFontTexture(":Data:Textures:Font.png"); text.BuildFont(); glAlphaFunc(GL_GREATER, 0.01); glDepthFunc(GL_LESS); glPolygonOffset(-8,0); glPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); return TRUE; } //***************> Dispose() <******/ void Game::Dispose() { //Delete sound sources alDeleteSources(100, gSourceID); } //***************> ResizeGLScene() <******/ GLvoid Game::ReSizeGLScene(float fov, float near) { if (screenheight==0) screenheight=1; glViewport(0,0,screenwidth,screenheight); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(fov,(GLfloat)screenwidth/(GLfloat)screenheight,near,viewdistance); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }