aboutsummaryrefslogtreecommitdiff
path: root/src/GameTick.cpp
diff options
context:
space:
mode:
authorNguyễn Gia Phong <mcsinyx@disroot.org>2021-07-24 21:37:53 +0700
committerNguyễn Gia Phong <mcsinyx@disroot.org>2021-07-25 00:16:29 +0700
commit280dc7237c09dbe2163f0a75bcaf21566dcf0d1f (patch)
treeb5eacae8dd1495ad761074554ce293a29517337e /src/GameTick.cpp
parent49719536811998a600d49ba13a57ce30a439d065 (diff)
downloadblackshades-280dc7237c09dbe2163f0a75bcaf21566dcf0d1f.tar.gz
Reindent GameTick
Diffstat (limited to 'src/GameTick.cpp')
-rw-r--r--src/GameTick.cpp4278
1 files changed, 2138 insertions, 2140 deletions
diff --git a/src/GameTick.cpp b/src/GameTick.cpp
index a0534a7..697d799 100644
--- a/src/GameTick.cpp
+++ b/src/GameTick.cpp
@@ -180,1947 +180,1944 @@ void Game::Tick()
return;
}
- if (!mainmenu) {
- XYZ facing;
- XYZ flatfacing;
+ XYZ facing;
+ XYZ flatfacing;
- if(person[1].health<=0||person[0].health<=0||killedinnocent){
- losedelay-=multiplier/6;
- }
-
- if(person[1].health>0&&person[0].health>0&&!killedinnocent)timeremaining-=multiplier*25/40;
+ if(person[1].health<=0||person[0].health<=0||killedinnocent){
+ losedelay-=multiplier/6;
+ }
- if(timeremaining<=0){
+ if(person[1].health>0&&person[0].health>0&&!killedinnocent)timeremaining-=multiplier*25/40;
- flashamount=1;
+ if(timeremaining<=0){
- flashr=0;flashg=1;flashb=0;
+ flashamount=1;
- mission++;
+ flashr=0;flashg=1;flashb=0;
- alSourcePlay(gSourceID[souloutsound]);
+ mission++;
- score+=100+(mission*50);
+ alSourcePlay(gSourceID[souloutsound]);
- if(mission>=nummissions){
+ score+=100+(mission*50);
- beatgame=1;
+ if(mission>=nummissions){
- mainmenu=1;
+ beatgame=1;
- gameinprogress=0;
+ mainmenu=1;
- alSourcePause(gSourceID[rainsound]);
+ gameinprogress=0;
- alSourceStop(gSourceID[visionsound]);
+ alSourcePause(gSourceID[rainsound]);
- alSourceStop(gSourceID[whichsong]);
+ alSourceStop(gSourceID[visionsound]);
- alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 0);
+ alSourceStop(gSourceID[whichsong]);
- alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 0);
+ alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 0);
- whichsong=mainmenusong;
+ alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 0);
- alSourceStop(gSourceID[whichsong]);
+ whichsong=mainmenusong;
- alSourcef(gSourceID[whichsong], AL_PITCH, 1);
+ alSourceStop(gSourceID[whichsong]);
- alSourcePlay(gSourceID[whichsong]);
+ alSourcef(gSourceID[whichsong], AL_PITCH, 1);
- alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 1);
+ alSourcePlay(gSourceID[whichsong]);
- alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 1);
+ alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 1);
- saveHighScore();
- }
+ alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 1);
- if(!mainmenu){
+ saveHighScore();
+ }
- InitGame();
+ if(!mainmenu){
- if(environment==rainy_environment)alSourcePlay(gSourceID[rainsound]);
+ InitGame();
- if(environment!=rainy_environment)alSourcePause(gSourceID[rainsound]);
+ if(environment==rainy_environment)alSourcePlay(gSourceID[rainsound]);
- alSourceStop(gSourceID[visionsound]);
+ if(environment!=rainy_environment)alSourcePause(gSourceID[rainsound]);
- alSourceStop(gSourceID[whichsong]);
+ alSourceStop(gSourceID[visionsound]);
- if(person[0].whichgun==knife)whichsong=knifesong;
+ alSourceStop(gSourceID[whichsong]);
- if(person[0].whichgun!=knife)whichsong=shootsong;
+ if(person[0].whichgun==knife)whichsong=knifesong;
- if(type==zombie_type)whichsong=zombiesong;
+ if(person[0].whichgun!=knife)whichsong=shootsong;
- alSourcef(gSourceID[whichsong], AL_PITCH, 1);
+ if(type==zombie_type)whichsong=zombiesong;
- alSourcePlay(gSourceID[whichsong]);
+ alSourcef(gSourceID[whichsong], AL_PITCH, 1);
- alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 1);
+ alSourcePlay(gSourceID[whichsong]);
- alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 1);
+ alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 1);
- }
+ alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 1);
}
- if(losedelay<=0){
+ }
- flashamount=1;
+ if(losedelay<=0){
- flashr=0;flashg=0;flashb=0;
+ flashamount=1;
- if(person[murderer].health>0)score=oldscore-200;
+ flashr=0;flashg=0;flashb=0;
- if(person[murderer].health<=0)score=oldscore-100;
+ if(person[murderer].health>0)score=oldscore-200;
- InitGame();
+ if(person[murderer].health<=0)score=oldscore-100;
- alSourceStop(gSourceID[whichsong]);
+ InitGame();
- if(person[0].whichgun==knife)whichsong=knifesong;
+ alSourceStop(gSourceID[whichsong]);
- if(person[0].whichgun!=knife)whichsong=shootsong;
+ if(person[0].whichgun==knife)whichsong=knifesong;
- if(type==zombie_type)whichsong=zombiesong;
+ if(person[0].whichgun!=knife)whichsong=shootsong;
- alSourcef(gSourceID[whichsong], AL_PITCH, 1);
+ if(type==zombie_type)whichsong=zombiesong;
- alSourcePlay(gSourceID[whichsong]);
+ alSourcef(gSourceID[whichsong], AL_PITCH, 1);
- alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 1);
+ alSourcePlay(gSourceID[whichsong]);
- alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 1);
+ alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 1);
- alSourcePlay(gSourceID[soulinsound]);
+ alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 1);
- }
+ alSourcePlay(gSourceID[soulinsound]);
- unsigned char theKeyMap[16];
+ }
- GetKeys( ( unsigned long * )theKeyMap );
+ unsigned char theKeyMap[16];
- //Sprites
+ GetKeys( ( unsigned long * )theKeyMap );
- sprites.DoStuff();
+ //Sprites
- //Decals
+ sprites.DoStuff();
- decals.DoStuff();
+ //Decals
- //Facing
+ decals.DoStuff();
- facing=0;
+ //Facing
- facing.z=-1;
+ facing=0;
- facing=DoRotation(facing,-camera.rotation2,0,0);
+ facing.z=-1;
- facing=DoRotation(facing,0,0-camera.rotation,0);
+ facing=DoRotation(facing,-camera.rotation2,0,0);
- flatfacing=facing;
+ facing=DoRotation(facing,0,0-camera.rotation,0);
- flatfacing.y=0;
+ flatfacing=facing;
- Normalise(&flatfacing);
+ flatfacing.y=0;
- if(IsKeyDown(theKeyMap, psychickey)&&!oldvisionkey){
+ Normalise(&flatfacing);
- oldvisionkey=1;
+ if(IsKeyDown(theKeyMap, psychickey)&&!oldvisionkey){
- visions++;
+ oldvisionkey=1;
- if(visions==2)visions=0;
+ visions++;
- if(visions==0){
- flashamount=1;
- flashr=1;flashg=1;flashb=1;
+ if(visions==2)visions=0;
- if(person[0].playercoords.x!=bodycoords.x||person[0].playercoords.z!=bodycoords.z){
+ if(visions==0){
+ flashamount=1;
+ flashr=1;flashg=1;flashb=1;
- XYZ towards;
+ if(person[0].playercoords.x!=bodycoords.x||person[0].playercoords.z!=bodycoords.z){
- towards=person[0].playercoords-bodycoords;
+ XYZ towards;
- Normalise(&towards);
+ towards=person[0].playercoords-bodycoords;
- camera.rotation=-asin(0-towards.x);
+ Normalise(&towards);
- camera.rotation*=360/6.28;
+ camera.rotation=-asin(0-towards.x);
- if(towards.z>0)camera.rotation=180-camera.rotation;
+ camera.rotation*=360/6.28;
- camera.visrotation=camera.rotation;
+ if(towards.z>0)camera.rotation=180-camera.rotation;
- camera.oldrotation=camera.rotation;
+ camera.visrotation=camera.rotation;
- camera.oldoldrotation=camera.rotation;
+ camera.oldrotation=camera.rotation;
- }
+ camera.oldoldrotation=camera.rotation;
- person[0].playercoords=bodycoords;
+ }
- person[0].oldplayercoords=bodycoords;
+ person[0].playercoords=bodycoords;
- person[0].velocity=0;
+ person[0].oldplayercoords=bodycoords;
- alSourcePlay(gSourceID[soulinsound]);
+ person[0].velocity=0;
- alSourceStop(gSourceID[visionsound]);
+ alSourcePlay(gSourceID[soulinsound]);
- alSourcef(gSourceID[knifesong], AL_PITCH, (ALfloat)(1));
+ alSourceStop(gSourceID[visionsound]);
- alSourcef(gSourceID[shootsong], AL_PITCH, (ALfloat)(1));
+ alSourcef(gSourceID[knifesong], AL_PITCH, (ALfloat)(1));
- alSourcef(gSourceID[zombiesong], AL_PITCH, (ALfloat)(1));
+ alSourcef(gSourceID[shootsong], AL_PITCH, (ALfloat)(1));
- }
+ alSourcef(gSourceID[zombiesong], AL_PITCH, (ALfloat)(1));
- if(visions==1){
+ }
- alSourceStop(gSourceID[visionsound]);
+ if(visions==1){
- flashamount=1;
+ alSourceStop(gSourceID[visionsound]);
- flashr=1;flashg=0;flashb=0;
+ flashamount=1;
- bodycoords=person[0].oldplayercoords;
+ flashr=1;flashg=0;flashb=0;
- alSourcePlay(gSourceID[souloutsound]);
+ bodycoords=person[0].oldplayercoords;
- alSourcef(gSourceID[knifesong], AL_PITCH, (ALfloat)(.5));
+ alSourcePlay(gSourceID[souloutsound]);
- alSourcef(gSourceID[shootsong], AL_PITCH, (ALfloat)(.5));
+ alSourcef(gSourceID[knifesong], AL_PITCH, (ALfloat)(.5));
- alSourcef(gSourceID[zombiesong], AL_PITCH, (ALfloat)(.5));
+ alSourcef(gSourceID[shootsong], AL_PITCH, (ALfloat)(.5));
- alSourcePlay(gSourceID[visionsound]);
+ alSourcef(gSourceID[zombiesong], AL_PITCH, (ALfloat)(.5));
- }
+ alSourcePlay(gSourceID[visionsound]);
}
- if(!IsKeyDown(theKeyMap, psychickey)){
+ }
- oldvisionkey=0;
+ if(!IsKeyDown(theKeyMap, psychickey)){
- }
+ oldvisionkey=0;
- if(IsKeyDown(theKeyMap, MAC_TAB_KEY)&&!tabkeydown&&debug){
+ }
- thirdperson++;
+ if(IsKeyDown(theKeyMap, MAC_TAB_KEY)&&!tabkeydown&&debug){
- if(thirdperson>2)thirdperson=0;
+ thirdperson++;
- tabkeydown=1;
+ if(thirdperson>2)thirdperson=0;
- }
+ tabkeydown=1;
- if(!IsKeyDown(theKeyMap, MAC_TAB_KEY))
+ }
- tabkeydown=0;
+ if(!IsKeyDown(theKeyMap, MAC_TAB_KEY))
- if(IsKeyDown(theKeyMap, aimkey)&&!aimtoggle){
+ tabkeydown=0;
- person[0].aiming=1-person[0].aiming;
+ if(IsKeyDown(theKeyMap, aimkey)&&!aimtoggle){
- aimtoggle=1;
+ person[0].aiming=1-person[0].aiming;
- }
+ aimtoggle=1;
- if(!IsKeyDown(theKeyMap, aimkey))
+ }
- aimtoggle=0;
+ if(!IsKeyDown(theKeyMap, aimkey))
- if(IsKeyDown(theKeyMap, MAC_R_KEY)&&!reloadtoggle){
+ aimtoggle=0;
- if(person[0].reloads[person[0].whichgun]>0&&person[0].reloading<=0)person[0].ammo=-1;
+ if(IsKeyDown(theKeyMap, MAC_R_KEY)&&!reloadtoggle){
- reloadtoggle=1;
+ if(person[0].reloads[person[0].whichgun]>0&&person[0].reloading<=0)person[0].ammo=-1;
- }
+ reloadtoggle=1;
- if(!IsKeyDown(theKeyMap, MAC_R_KEY))
+ }
- reloadtoggle=0;
+ if(!IsKeyDown(theKeyMap, MAC_R_KEY))
- if(IsKeyDown(theKeyMap, psychicaimkey)&&!slomokeydown&&slomo==0){
+ reloadtoggle=0;
- alSourcePlay(gSourceID[souloutsound]);
+ if(IsKeyDown(theKeyMap, psychicaimkey)&&!slomokeydown&&slomo==0){
- slomo=2;
+ alSourcePlay(gSourceID[souloutsound]);
- flashamount=.5;
+ slomo=2;
- flashr=1;flashg=0;flashb=0;
+ flashamount=.5;
- slomokeydown=1;
+ flashr=1;flashg=0;flashb=0;
- score-=20;
+ slomokeydown=1;
- alSourcef(gSourceID[knifesong], AL_PITCH, (ALfloat)(.5));
+ score-=20;
- alSourcef(gSourceID[shootsong], AL_PITCH, (ALfloat)(.5));
+ alSourcef(gSourceID[knifesong], AL_PITCH, (ALfloat)(.5));
- alSourcef(gSourceID[zombiesong], AL_PITCH, (ALfloat)(.5));
+ alSourcef(gSourceID[shootsong], AL_PITCH, (ALfloat)(.5));
- }
+ alSourcef(gSourceID[zombiesong], AL_PITCH, (ALfloat)(.5));
- if(!IsKeyDown(theKeyMap, psychicaimkey))
+ }
- slomokeydown=0;
+ if(!IsKeyDown(theKeyMap, psychicaimkey))
- //Mouse look
+ slomokeydown=0;
- if((person[0].aimamount<=0&&person[0].targetanimation!=crouchanim)){
+ //Mouse look
- camera.rotation=camera.visrotation;
+ if((person[0].aimamount<=0&&person[0].targetanimation!=crouchanim)){
- camera.rotation2=camera.visrotation2;
+ camera.rotation=camera.visrotation;
- mousesensitivity=usermousesensitivity;
+ camera.rotation2=camera.visrotation2;
- }
+ mousesensitivity=usermousesensitivity;
- if(person[0].aimamount>=1&&zoom==0){
+ }
- mousesensitivity=usermousesensitivity*.8;
+ if(person[0].aimamount>=1&&zoom==0){
- }
+ mousesensitivity=usermousesensitivity*.8;
- if(slomo==2){
+ }
- mousesensitivity*=.6;
+ if(slomo==2){
- }
+ mousesensitivity*=.6;
-#if 0 // DDOI
- GetMouse(&mouseloc);
+ }
- if (mouseloc.h>600){MoveMouse(mouseloc.h-500,mouseloc.v,&mouseloc);}
+// DDOI
+ GetMouse(&mouseloc);
- if (mouseloc.h<100){MoveMouse(mouseloc.h+500,mouseloc.v,&mouseloc);}
+ if (mouseloc.h>600){MoveMouse(mouseloc.h-500,mouseloc.v,&mouseloc);}
- GetMouse(&mouseloc);
+ if (mouseloc.h<100){MoveMouse(mouseloc.h+500,mouseloc.v,&mouseloc);}
- if (mouseloc.v>400){MoveMouse(mouseloc.h,mouseloc.v-300,&mouseloc);}
+ GetMouse(&mouseloc);
- if (mouseloc.v<100){MoveMouse(mouseloc.h,mouseloc.v+300,&mouseloc);}
+ if (mouseloc.v>400){MoveMouse(mouseloc.h,mouseloc.v-300,&mouseloc);}
- GetMouse(&mouseloc);
+ if (mouseloc.v<100){MoveMouse(mouseloc.h,mouseloc.v+300,&mouseloc);}
-#else
- GetMouseRel(&mouseloc);
-#endif
+ GetMouse(&mouseloc);
-#if 0 // DDOI
- oldmouserotation=(oldmouseloc.h/1.3888)*mousesensitivity;
- oldmouserotation2=(oldmouseloc.v/1.3888)*mousesensitivity;
-#endif
+ GetMouseRel(&mouseloc);
- mouserotation=(mouseloc.h/1.3888)*mousesensitivity;
- mouserotation2=(mouseloc.v/1.3888)*mousesensitivity;
+// DDOI
+ oldmouserotation=(oldmouseloc.h/1.3888)*mousesensitivity;
-#if 0 // DDOI
- if(abs(oldmouseloc.h-mouseloc.h)<400)camera.rotation+=mouserotation-oldmouserotation;
+ oldmouserotation2=(oldmouseloc.v/1.3888)*mousesensitivity;
- if(abs(oldmouseloc.v-mouseloc.v)<200)camera.rotation2+=mouserotation2-oldmouserotation2;
- if(mouseloc.h-oldmouseloc.h>400)camera.rotation+=mouserotation-oldmouserotation-(500/1.3888*mousesensitivity);
+ mouserotation=(mouseloc.h/1.3888)*mousesensitivity;
- if(mouseloc.h-oldmouseloc.h<-400)camera.rotation+=mouserotation-oldmouserotation+(500/1.3888*mousesensitivity);
+ mouserotation2=(mouseloc.v/1.3888)*mousesensitivity;
- if(mouseloc.v-oldmouseloc.v>200)camera.rotation2+=mouserotation2-oldmouserotation2-(300/1.3888*mousesensitivity);
+// DDOI
+ if(abs(oldmouseloc.h-mouseloc.h)<400)camera.rotation+=mouserotation-oldmouserotation;
- if(mouseloc.v-oldmouseloc.v<-200)camera.rotation2+=mouserotation2-oldmouserotation2+(300/1.3888*mousesensitivity);
-#else
- if(abs(mouseloc.h)<400)camera.rotation+=mouserotation;
- if(abs(mouseloc.v)<200)camera.rotation2+=mouserotation2;
- if(mouseloc.h>400)camera.rotation+=mouserotation-(500/1.3888*mousesensitivity);
- if(mouseloc.h<-400)camera.rotation+=mouserotation+(500/1.3888*mousesensitivity);
+ if(abs(oldmouseloc.v-mouseloc.v)<200)camera.rotation2+=mouserotation2-oldmouserotation2;
- if(mouseloc.v>200)camera.rotation2+=mouserotation2-(300/1.3888*mousesensitivity);
+ if(mouseloc.h-oldmouseloc.h>400)camera.rotation+=mouserotation-oldmouserotation-(500/1.3888*mousesensitivity);
- if(mouseloc.v<-200)camera.rotation2+=mouserotation2+(300/1.3888*mousesensitivity);
-#endif
+ if(mouseloc.h-oldmouseloc.h<-400)camera.rotation+=mouserotation-oldmouserotation+(500/1.3888*mousesensitivity);
- if(camera.rotation2>89){camera.rotation2=89;}
+ if(mouseloc.v-oldmouseloc.v>200)camera.rotation2+=mouserotation2-oldmouserotation2-(300/1.3888*mousesensitivity);
- if(camera.rotation2<-89){camera.rotation2=-89;}
+ if(mouseloc.v-oldmouseloc.v<-200)camera.rotation2+=mouserotation2-oldmouserotation2+(300/1.3888*mousesensitivity);
- //Smooth
+ if(abs(mouseloc.h)<400)camera.rotation+=mouserotation;
+ if(abs(mouseloc.v)<200)camera.rotation2+=mouserotation2;
+ if(mouseloc.h>400)camera.rotation+=mouserotation-(500/1.3888*mousesensitivity);
+ if(mouseloc.h<-400)camera.rotation+=mouserotation+(500/1.3888*mousesensitivity);
- camera.rotation=(camera.oldoldrotation+((camera.rotation-camera.oldoldrotation)*.7+(camera.oldrotation-camera.oldoldrotation)*.3));
+ if(mouseloc.v>200)camera.rotation2+=mouserotation2-(300/1.3888*mousesensitivity);
- camera.rotation2=(camera.oldoldrotation2+((camera.rotation2-camera.oldoldrotation2)*.7+(camera.oldrotation2-camera.oldoldrotation2)*.3));
+ if(mouseloc.v<-200)camera.rotation2+=mouserotation2+(300/1.3888*mousesensitivity);
- if(camera.visrotation<camera.rotation-7)camera.visrotation=camera.rotation-7;
- if(camera.visrotation>camera.rotation+7)camera.visrotation=camera.rotation+7;
+ if(camera.rotation2>89){camera.rotation2=89;}
- if(camera.visrotation2<camera.rotation2-15)camera.visrotation2=camera.rotation2-15;
+ if(camera.rotation2<-89){camera.rotation2=-89;}
- if(camera.visrotation2>camera.rotation2+15)camera.visrotation2=camera.rotation2+15;
+ //Smooth
- if(zoom||person[0].aimamount<=0||person[0].whichgun==nogun||visions||person[0].whichgun==grenade||person[0].whichgun==knife){
+ camera.rotation=(camera.oldoldrotation+((camera.rotation-camera.oldoldrotation)*.7+(camera.oldrotation-camera.oldoldrotation)*.3));
- camera.visrotation=camera.rotation;
+ camera.rotation2=(camera.oldoldrotation2+((camera.rotation2-camera.oldoldrotation2)*.7+(camera.oldrotation2-camera.oldoldrotation2)*.3));
- camera.visrotation2=camera.rotation2;
+ if(camera.visrotation<camera.rotation-7)camera.visrotation=camera.rotation-7;
- }
+ if(camera.visrotation>camera.rotation+7)camera.visrotation=camera.rotation+7;
- oldzoom=zoom;
+ if(camera.visrotation2<camera.rotation2-15)camera.visrotation2=camera.rotation2-15;
- camera.oldoldrotation=camera.oldrotation;
+ if(camera.visrotation2>camera.rotation2+15)camera.visrotation2=camera.rotation2+15;
- camera.oldoldrotation2=camera.oldrotation2;
+ if(zoom||person[0].aimamount<=0||person[0].whichgun==nogun||visions||person[0].whichgun==grenade||person[0].whichgun==knife){
- camera.oldrotation=camera.rotation;
+ camera.visrotation=camera.rotation;
- camera.oldrotation2=camera.rotation2;
+ camera.visrotation2=camera.rotation2;
- //Check collision with buildings
+ }
- int beginx,endx;
+ oldzoom=zoom;
- int beginz,endz;
+ camera.oldoldrotation=camera.oldrotation;
- XYZ collpoint;
+ camera.oldoldrotation2=camera.oldrotation2;
- XYZ move;
+ camera.oldrotation=camera.rotation;
- int whichtri;
+ camera.oldrotation2=camera.rotation2;
- XYZ underpoint;
+ //Check collision with buildings
- XYZ overpoint;
+ int beginx,endx;
- int pointnum;
+ int beginz,endz;
- float depth;
+ XYZ collpoint;
- XYZ normalrotated;
+ XYZ move;
- bool inblock;
+ int whichtri;
- person[0].playerrotation=180-camera.rotation;
+ XYZ underpoint;
- //Check people collisions
+ XYZ overpoint;
- for(int k=0;k<numpeople;k++){
- // SBF - backing up the old coordinates makes
- // the most sense here.
- person[k].oldplayercoords=person[k].playercoords;
+ int pointnum;
- person[k].DoStuff(k);
+ float depth;
- if(person[k].skeleton.free<1){
+ XYZ normalrotated;
- if(1==1){
+ bool inblock;
- person[k].onground=0;
+ person[0].playerrotation=180-camera.rotation;
- overpoint=person[k].playercoords;
+ //Check people collisions
- overpoint.y+=3000;
+ for(int k=0;k<numpeople;k++){
+ // SBF - backing up the old coordinates makes
+ // the most sense here.
+ person[k].oldplayercoords=person[k].playercoords;
- underpoint=person[k].playercoords;
+ person[k].DoStuff(k);
- underpoint.y-=3000;
+ if(person[k].skeleton.free<1){
- beginx=(person[k].playercoords.x+block_spacing/2)/block_spacing;
+ if(1==1){
- if(beginx<0)beginx=0;
+ person[k].onground=0;
- beginz=(person[k].playercoords.z+block_spacing/2)/block_spacing;
+ overpoint=person[k].playercoords;
- if(beginz<0)beginz=0;
+ overpoint.y+=3000;
- endx=(person[k].playercoords.x+block_spacing/2)/block_spacing+1;
+ underpoint=person[k].playercoords;
- if(endx>num_blocks-1)endx=num_blocks-1;
+ underpoint.y-=3000;
- endz=(person[k].playercoords.z+block_spacing/2)/block_spacing+1;
+ beginx=(person[k].playercoords.x+block_spacing/2)/block_spacing;
- if(endz>num_blocks-1)endz=num_blocks-1;
+ if(beginx<0)beginx=0;
- if(k!=0){
- /* TODO: huh? */
- beginx==person[k].whichblockx;
+ beginz=(person[k].playercoords.z+block_spacing/2)/block_spacing;
- beginz==person[k].whichblocky;
+ if(beginz<0)beginz=0;
- endx==person[k].whichblockx;
+ endx=(person[k].playercoords.x+block_spacing/2)/block_spacing+1;
- endz==person[k].whichblocky;
+ if(endx>num_blocks-1)endx=num_blocks-1;
- }
+ endz=(person[k].playercoords.z+block_spacing/2)/block_spacing+1;
- if(beginx<=endx&&beginz<=endz)
+ if(endz>num_blocks-1)endz=num_blocks-1;
- for(int i=beginx;i<=endx;i++)
+ if(k!=0){
+ /* TODO: huh? */
+ beginx==person[k].whichblockx;
- for(int j=beginz;j<=endz;j++){
+ beginz==person[k].whichblocky;
- inblock=0;
+ endx==person[k].whichblockx;
- //Ground collision
+ endz==person[k].whichblocky;
- move=0;
+ }
- move.x=i*block_spacing;
+ if(beginx<=endx&&beginz<=endz)
- move.z=j*block_spacing;
+ for(int i=beginx;i<=endx;i++)
- whichtri=sidewalkcollide.LineCheck2(overpoint,underpoint,&collpoint,move,cityrotation[i][j]*90);
+ for(int j=beginz;j<=endz;j++){
- if(whichtri!=-1&&person[k].playercoords.y<=collpoint.y&&person[k].velocity.y<=0){
+ inblock=0;
- person[k].playercoords.y=collpoint.y;
+ //Ground collision
- person[k].onground=1;
+ move=0;
- if(person[k].velocity.y<-maxfallvel)Splat(k);
+ move.x=i*block_spacing;
- else person[k].velocity.y=0;
+ move.z=j*block_spacing;
- }
+ whichtri=sidewalkcollide.LineCheck2(overpoint,underpoint,&collpoint,move,cityrotation[i][j]*90);
- if(whichtri!=-1){
+ if(whichtri!=-1&&person[k].playercoords.y<=collpoint.y&&person[k].velocity.y<=0){
- inblock=1;
+ person[k].playercoords.y=collpoint.y;
- if(k==0){onblockx=i;onblocky=j;}
+ person[k].onground=1;
- }
+ if(person[k].velocity.y<-maxfallvel)Splat(k);
- //Wall collision
+ else person[k].velocity.y=0;
- if(k==0){
+ }
- if(inblock){
+ if(whichtri!=-1){
- for(int l=0;l<8;l++){
+ inblock=1;
- move=0;
+ if(k==0){onblockx=i;onblocky=j;}
- move.x=i*block_spacing;
+ }
- move.z=j*block_spacing;
+ //Wall collision
- whichtri=blockwalls[citytype[i][j]].LineCheck3(person[k].oldplayercoords+boundingpoints[l],person[k].playercoords+boundingpoints[l],&collpoint,move,cityrotation[i][j]*90,&depth);
+ if(k==0){
- if(whichtri!=-1){
+ if(inblock){
- normalrotated=DoRotation(blockwalls[citytype[i][j]].normals[whichtri],0,cityrotation[i][j]*90,0);
+ for(int l=0;l<8;l++){
- person[k].playercoords+=normalrotated*(-(dotproduct(normalrotated,person[k].playercoords-person[k].oldplayercoords))-depth);
+ move=0;
- }
+ move.x=i*block_spacing;
+
+ move.z=j*block_spacing;
+
+ whichtri=blockwalls[citytype[i][j]].LineCheck3(person[k].oldplayercoords+boundingpoints[l],person[k].playercoords+boundingpoints[l],&collpoint,move,cityrotation[i][j]*90,&depth);
+
+ if(whichtri!=-1){
+
+ normalrotated=DoRotation(blockwalls[citytype[i][j]].normals[whichtri],0,cityrotation[i][j]*90,0);
+
+ person[k].playercoords+=normalrotated*(-(dotproduct(normalrotated,person[k].playercoords-person[k].oldplayercoords))-depth);
}
- for(int l=0;l<8;l++){
+ }
- pointnum=k+1;
+ for(int l=0;l<8;l++){
- if(pointnum>3)pointnum=0;
+ pointnum=k+1;
- move=0;
+ if(pointnum>3)pointnum=0;
- move.x=i*block_spacing;
+ move=0;
- move.z=j*block_spacing;
+ move.x=i*block_spacing;
- whichtri=blockwalls[citytype[i][j]].LineCheck3(person[k].playercoords+boundingpoints[l],person[k].playercoords+boundingpoints[pointnum],&collpoint,move,cityrotation[i][j]*90,&depth);
+ move.z=j*block_spacing;
- if(whichtri!=-1){
+ whichtri=blockwalls[citytype[i][j]].LineCheck3(person[k].playercoords+boundingpoints[l],person[k].playercoords+boundingpoints[pointnum],&collpoint,move,cityrotation[i][j]*90,&depth);
- normalrotated=DoRotation(blockwalls[citytype[i][j]].normals[whichtri],0,cityrotation[i][j]*90,0);
+ if(whichtri!=-1){
- person[k].playercoords+=normalrotated;
+ normalrotated=DoRotation(blockwalls[citytype[i][j]].normals[whichtri],0,cityrotation[i][j]*90,0);
- }
+ person[k].playercoords+=normalrotated;
}
}
- //Roof collision
-
- if(inblock&&person[k].playercoords.y>30){
+ }
- if(!person[k].onground){
+ //Roof collision
- move=0;
+ if(inblock&&person[k].playercoords.y>30){
- move.x=i*block_spacing;
+ if(!person[k].onground){
- move.z=j*block_spacing;
+ move=0;
- whichtri=blockroofs[citytype[i][j]].LineCheck2(overpoint,underpoint,&collpoint,move,cityrotation[i][j]*90);
+ move.x=i*block_spacing;
- if(whichtri!=-1&&person[k].playercoords.y<=collpoint.y&&person[k].velocity.y<=0){
+ move.z=j*block_spacing;
- person[k].playercoords.y=collpoint.y;
+ whichtri=blockroofs[citytype[i][j]].LineCheck2(overpoint,underpoint,&collpoint,move,cityrotation[i][j]*90);
- person[k].onground=1;
+ if(whichtri!=-1&&person[k].playercoords.y<=collpoint.y&&person[k].velocity.y<=0){
- if(person[k].velocity.y<-maxfallvel)Splat(k);
+ person[k].playercoords.y=collpoint.y;
- else person[k].velocity.y=0;
+ person[k].onground=1;
- }
+ if(person[k].velocity.y<-maxfallvel)Splat(k);
- if(whichtri!=-1)inblock=1;
+ else person[k].velocity.y=0;
}
+ if(whichtri!=-1)inblock=1;
+
}
}
}
- if(person[k].playercoords.y<=0){
+ }
- person[k].onground=1;
+ if(person[k].playercoords.y<=0){
- person[k].playercoords.y=0;
+ person[k].onground=1;
- if(person[k].velocity.y<-maxfallvel)Splat(k);
+ person[k].playercoords.y=0;
- else person[k].velocity.y=0;
+ if(person[k].velocity.y<-maxfallvel)Splat(k);
- if(k==0)onblockx=-1;onblocky=-1;
+ else person[k].velocity.y=0;
- }
+ if(k==0)onblockx=-1;onblocky=-1;
- // SBF - this is definately in the wrong spot!
- //person[k].oldplayercoords=person[k].playercoords;
+ }
- }
+ // SBF - this is definately in the wrong spot!
+ //person[k].oldplayercoords=person[k].playercoords;
- }
+ }
}
- if(IsKeyDown( theKeyMap, MAC_SPACE_KEY )){
+ }
- if(visions==0&&person[0].targetanimation==joganim&&person[0].currentanimation==joganim&&person[0].backwardsanim==0&&person[0].playerrotation==person[0].playerlowrotation){
+ if(IsKeyDown( theKeyMap, MAC_SPACE_KEY )){
- person[0].targetanimation=diveanim;
+ if(visions==0&&person[0].targetanimation==joganim&&person[0].currentanimation==joganim&&person[0].backwardsanim==0&&person[0].playerrotation==person[0].playerlowrotation){
- person[0].targetframe=0;
+ person[0].targetanimation=diveanim;
- person[0].target=0;
+ person[0].targetframe=0;
- person[0].aimamount=0;
+ person[0].target=0;
- }
+ person[0].aimamount=0;
}
- //Camera
- camera.oldposition=camera.position;
- camera.targetoffset=0;
- camera.targetoffset.z=-5;
+ }
- // Spawn people
- int cyclenum = 0;
- int blockspawnx = 0, blockspawny = 0;
- do {
- auto block = person[0].playercoords / block_spacing;
- blockspawnx = block.x + 0.5f + Random() % 2;
- blockspawny = block.z + 0.5f + Random() % 2;
+ //Camera
+ camera.oldposition=camera.position;
+ camera.targetoffset=0;
+ camera.targetoffset.z=-5;
- auto& people = citypeoplenum[blockspawnx][blockspawny];
- if (people < max_people_block)
- break;
- } while (++cyclenum < 10);
+ // Spawn people
+ int cyclenum = 0;
+ int blockspawnx = 0, blockspawny = 0;
+ do {
+ auto block = person[0].playercoords / block_spacing;
+ blockspawnx = block.x + 0.5f + Random() % 2;
+ blockspawny = block.z + 0.5f + Random() % 2;
- spawndelay -= multiplier;
- if(cyclenum<10){
+ auto& people = citypeoplenum[blockspawnx][blockspawny];
+ if (people < max_people_block)
+ break;
+ } while (++cyclenum < 10);
- if(spawndelay<0&&numpeople<max_people){
+ spawndelay -= multiplier;
+ if(cyclenum<10){
- if(type==randomshoot_type){
+ if(spawndelay<0&&numpeople<max_people){
- if(abs(Random()%evilprobability)==0)person[numpeople].type=eviltype;
+ if(type==randomshoot_type){
- else person[numpeople].type=civiliantype;
+ if(abs(Random()%evilprobability)==0)person[numpeople].type=eviltype;
- }
+ else person[numpeople].type=civiliantype;
- if(type==zombie_type){
+ }
- person[numpeople].type=zombietype;
+ if(type==zombie_type){
- }
+ person[numpeople].type=zombietype;
- if(person[numpeople].type!=civiliantype&&blockspawnx==person[1].whichblockx&&blockspawny==person[1].whichblocky){
+ }
- while((citypeoplenum[blockspawnx][blockspawny]>=max_people_block&&cyclenum<10)||blockspawnx==0||(blockspawnx==person[1].whichblockx&&blockspawny==person[1].whichblocky)){
+ if(person[numpeople].type!=civiliantype&&blockspawnx==person[1].whichblockx&&blockspawny==person[1].whichblocky){
- blockspawnx=((person[0].playercoords.x+block_spacing/2)/block_spacing)+Random()%2;
+ while((citypeoplenum[blockspawnx][blockspawny]>=max_people_block&&cyclenum<10)||blockspawnx==0||(blockspawnx==person[1].whichblockx&&blockspawny==person[1].whichblocky)){
- blockspawny=((person[0].playercoords.z+block_spacing/2)/block_spacing)+Random()%2;
+ blockspawnx=((person[0].playercoords.x+block_spacing/2)/block_spacing)+Random()%2;
- cyclenum++;
+ blockspawny=((person[0].playercoords.z+block_spacing/2)/block_spacing)+Random()%2;
- }
+ cyclenum++;
}
- person[numpeople].playerrotation=0;
+ }
- person[numpeople].whichcostume=casualcostumes+abs(Random())%numcasual;
+ person[numpeople].playerrotation=0;
- person[numpeople].whichblockx=blockspawnx;
+ person[numpeople].whichcostume=casualcostumes+abs(Random())%numcasual;
- person[numpeople].whichblocky=blockspawny;
+ person[numpeople].whichblockx=blockspawnx;
- person[numpeople].pathnum=-1;
+ person[numpeople].whichblocky=blockspawny;
- person[numpeople].oldpathnum=-1;
+ person[numpeople].pathnum=-1;
- person[numpeople].oldoldpathnum=-1;
+ person[numpeople].oldpathnum=-1;
- person[numpeople].oldoldoldpathnum=-1;
+ person[numpeople].oldoldpathnum=-1;
- while(person[numpeople].pathnum<0||person[numpeople].pathnum>=path.vertexNum||person[numpeople].pathnum==1){
+ person[numpeople].oldoldoldpathnum=-1;
- person[numpeople].pathnum=Random()%path.vertexNum;
+ 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].pathtarget.x=path.vertex[person[numpeople].pathnum].x;
- person[numpeople].pathsize=.98+float(abs(Random()%20))/400;
+ person[numpeople].pathtarget.z=path.vertex[person[numpeople].pathnum].z;
- person[numpeople].pathtarget*=person[numpeople].pathsize;
+ person[numpeople].pathsize=.98+float(abs(Random()%20))/400;
- person[numpeople].pathtarget.x+=person[numpeople].whichblockx*block_spacing;
+ person[numpeople].pathtarget*=person[numpeople].pathsize;
- person[numpeople].pathtarget.z+=person[numpeople].whichblocky*block_spacing;
+ person[numpeople].pathtarget.x+=person[numpeople].whichblockx*block_spacing;
- person[numpeople].playercoords=person[numpeople].pathtarget;
+ person[numpeople].pathtarget.z+=person[numpeople].whichblocky*block_spacing;
- person[numpeople].oldplayercoords=person[numpeople].playercoords;
+ person[numpeople].playercoords=person[numpeople].pathtarget;
- person[numpeople].skeleton.free=0;
+ person[numpeople].oldplayercoords=person[numpeople].playercoords;
- person[numpeople].targetanimation=walkanim;
+ person[numpeople].skeleton.free=0;
- if(person[numpeople].type==zombietype)person[numpeople].targetanimation=zombiewalkanim;
+ person[numpeople].targetanimation=walkanim;
- person[numpeople].speed=1;
+ if(person[numpeople].type==zombietype)person[numpeople].targetanimation=zombiewalkanim;
- person[numpeople].existing=0;
+ person[numpeople].speed=1;
- person[numpeople].speedmult=.8+float(abs(Random()%20))/50;
+ person[numpeople].existing=0;
- person[numpeople].health=100;
+ person[numpeople].speedmult=.8+float(abs(Random()%20))/50;
- person[numpeople].maxhealth=100;
+ person[numpeople].health=100;
- person[numpeople].playerrotation2=0;
+ person[numpeople].maxhealth=100;
- person[numpeople].lastdistancevictim=200000;
+ person[numpeople].playerrotation2=0;
- if(person[numpeople].skeleton.broken)person[numpeople].skeleton.Load((char *)":Data:Skeleton:Basic Figure");
+ person[numpeople].lastdistancevictim=200000;
- if(numpeople==1)person[numpeople].type=viptype;
+ if(person[numpeople].skeleton.broken)person[numpeople].skeleton.Load((char *)":Data:Skeleton:Basic Figure");
- person[numpeople].killtarget=-1;
+ if(numpeople==1)person[numpeople].type=viptype;
- if(person[numpeople].type==eviltype){person[numpeople].existing=1; person[numpeople].pathsize=1.04; person[numpeople].whichgun=nogun; person[numpeople].aiming=1; person[numpeople].killtarget=-1; person[numpeople].speedmult=1+.3*difficulty;}
+ person[numpeople].killtarget=-1;
- if(person[numpeople].type==zombietype){person[numpeople].existing=1; person[numpeople].pathsize=1.04; person[numpeople].whichgun=nogun; person[numpeople].aiming=0; person[numpeople].killtarget=-1; person[numpeople].speedmult=0.7+.2*difficulty;}
+ if(person[numpeople].type==eviltype){person[numpeople].existing=1; person[numpeople].pathsize=1.04; person[numpeople].whichgun=nogun; person[numpeople].aiming=1; person[numpeople].killtarget=-1; person[numpeople].speedmult=1+.3*difficulty;}
- else {person[numpeople].whichgun=nogun; person[numpeople].aiming=0; person[numpeople].killtarget=-1;}
+ if(person[numpeople].type==zombietype){person[numpeople].existing=1; person[numpeople].pathsize=1.04; person[numpeople].whichgun=nogun; person[numpeople].aiming=0; person[numpeople].killtarget=-1; person[numpeople].speedmult=0.7+.2*difficulty;}
- if(person[numpeople].type==viptype){person[numpeople].existing=1;}
+ else {person[numpeople].whichgun=nogun; person[numpeople].aiming=0; person[numpeople].killtarget=-1;}
- if(enemystate==2)person[numpeople].killtarget=1;
+ if(person[numpeople].type==viptype){person[numpeople].existing=1;}
- numpeople++;
+ if(enemystate==2)person[numpeople].killtarget=1;
- citypeoplenum[blockspawnx][blockspawny]++;
+ numpeople++;
- spawndelay=.1;
+ citypeoplenum[blockspawnx][blockspawny]++;
- }
+ spawndelay=.1;
- if(spawndelay<0&&numpeople>=max_people){
+ }
- if(cycle>=max_people)cycle=0;
+ if(spawndelay<0&&numpeople>=max_people){
- cyclenum=0;
+ if(cycle>=max_people)cycle=0;
- while(cyclenum<max_people&&(person[cycle].type==playertype||person[cycle].type==viptype||(abs(person[cycle].whichblockx-((person[0].playercoords.x+block_spacing/2)/block_spacing))<2&&abs(person[cycle].whichblocky-((person[0].playercoords.z+block_spacing/2)/block_spacing))<2))){
+ cyclenum=0;
- cycle++;
+ while(cyclenum<max_people&&(person[cycle].type==playertype||person[cycle].type==viptype||(abs(person[cycle].whichblockx-((person[0].playercoords.x+block_spacing/2)/block_spacing))<2&&abs(person[cycle].whichblocky-((person[0].playercoords.z+block_spacing/2)/block_spacing))<2))){
- cyclenum++;
+ cycle++;
- if(cycle>=max_people)cycle=0;
+ cyclenum++;
- }
+ if(cycle>=max_people)cycle=0;
- if(cycle<max_people&&cyclenum<max_people){
+ }
- if(type==randomshoot_type){
+ if(cycle<max_people&&cyclenum<max_people){
- if(abs(Random()%evilprobability)==0)person[cycle].type=eviltype;
+ if(type==randomshoot_type){
- else person[cycle].type=civiliantype;
+ if(abs(Random()%evilprobability)==0)person[cycle].type=eviltype;
- }
+ else person[cycle].type=civiliantype;
- if(type==zombie_type){
+ }
- person[cycle].type=zombietype;
+ if(type==zombie_type){
- }
+ person[cycle].type=zombietype;
- if(person[cycle].type!=civiliantype&&blockspawnx==person[1].whichblockx&&blockspawny==person[1].whichblocky){
+ }
- while((citypeoplenum[blockspawnx][blockspawny]>=max_people_block&&cyclenum<10)||blockspawnx==0||(blockspawnx==person[1].whichblockx&&blockspawny==person[1].whichblocky)){
+ if(person[cycle].type!=civiliantype&&blockspawnx==person[1].whichblockx&&blockspawny==person[1].whichblocky){
- blockspawnx=((person[0].playercoords.x+block_spacing/2)/block_spacing)+Random()%2;
+ while((citypeoplenum[blockspawnx][blockspawny]>=max_people_block&&cyclenum<10)||blockspawnx==0||(blockspawnx==person[1].whichblockx&&blockspawny==person[1].whichblocky)){
- blockspawny=((person[0].playercoords.z+block_spacing/2)/block_spacing)+Random()%2;
+ blockspawnx=((person[0].playercoords.x+block_spacing/2)/block_spacing)+Random()%2;
- cyclenum++;
+ blockspawny=((person[0].playercoords.z+block_spacing/2)/block_spacing)+Random()%2;
- }
+ cyclenum++;
}
- person[cycle].playerrotation=0;
+ }
- person[cycle].whichcostume=casualcostumes+abs(Random())%numcasual;
+ person[cycle].playerrotation=0;
- citypeoplenum[person[cycle].whichblockx][person[cycle].whichblocky]--;
+ person[cycle].whichcostume=casualcostumes+abs(Random())%numcasual;
- person[cycle].whichblockx=blockspawnx;
+ citypeoplenum[person[cycle].whichblockx][person[cycle].whichblocky]--;
- person[cycle].whichblocky=blockspawny;
+ person[cycle].whichblockx=blockspawnx;
- person[cycle].pathnum=-1;
+ person[cycle].whichblocky=blockspawny;
- person[cycle].oldpathnum=-1;
+ person[cycle].pathnum=-1;
- person[cycle].oldoldpathnum=-1;
+ person[cycle].oldpathnum=-1;
- person[cycle].oldoldoldpathnum=-1;
+ person[cycle].oldoldpathnum=-1;
- while(person[cycle].pathnum<0||person[cycle].pathnum>=path.vertexNum||person[cycle].pathnum==1){
+ person[cycle].oldoldoldpathnum=-1;
- person[cycle].pathnum=Random()%path.vertexNum;
+ while(person[cycle].pathnum<0||person[cycle].pathnum>=path.vertexNum||person[cycle].pathnum==1){
- }
+ person[cycle].pathnum=Random()%path.vertexNum;
- person[cycle].pathtarget.x=path.vertex[person[cycle].pathnum].x;
+ }
- person[cycle].pathtarget.z=path.vertex[person[cycle].pathnum].z;
+ person[cycle].pathtarget.x=path.vertex[person[cycle].pathnum].x;
- person[cycle].pathsize=.98+float(abs(Random()%20))/400;
+ person[cycle].pathtarget.z=path.vertex[person[cycle].pathnum].z;
- person[cycle].pathtarget*=person[cycle].pathsize;
+ person[cycle].pathsize=.98+float(abs(Random()%20))/400;
- person[cycle].pathtarget.x+=person[cycle].whichblockx*block_spacing;
+ person[cycle].pathtarget*=person[cycle].pathsize;
- person[cycle].pathtarget.z+=person[cycle].whichblocky*block_spacing;
+ person[cycle].pathtarget.x+=person[cycle].whichblockx*block_spacing;
- person[cycle].playercoords=person[cycle].pathtarget;
+ person[cycle].pathtarget.z+=person[cycle].whichblocky*block_spacing;
- person[cycle].oldplayercoords=person[cycle].playercoords;
+ person[cycle].playercoords=person[cycle].pathtarget;
- person[cycle].skeleton.free=0;
+ person[cycle].oldplayercoords=person[cycle].playercoords;
- person[cycle].targetanimation=walkanim;
+ person[cycle].skeleton.free=0;
- if(person[cycle].type==zombietype)person[cycle].targetanimation=zombiewalkanim;
+ person[cycle].targetanimation=walkanim;
- person[cycle].speed=1;
+ if(person[cycle].type==zombietype)person[cycle].targetanimation=zombiewalkanim;
- person[cycle].existing=0;
+ person[cycle].speed=1;
- person[cycle].speedmult=.8+float(abs(Random()%20))/50;
+ person[cycle].existing=0;
- person[cycle].health=100;
+ person[cycle].speedmult=.8+float(abs(Random()%20))/50;
- person[cycle].maxhealth=100;
+ person[cycle].health=100;
- person[cycle].playerrotation2=0;
+ person[cycle].maxhealth=100;
- if(person[cycle].skeleton.broken)person[cycle].skeleton.Load((char *)":Data:Skeleton:Basic Figure");
+ person[cycle].playerrotation2=0;
- if(enemystate==1)person[cycle].killtarget=-1;
+ if(person[cycle].skeleton.broken)person[cycle].skeleton.Load((char *)":Data:Skeleton:Basic Figure");
- if(person[cycle].type==eviltype){person[cycle].existing=1; person[cycle].pathsize=1.04; person[cycle].whichgun=nogun; person[cycle].aiming=1; person[cycle].killtarget=-1; person[cycle].speedmult=1+.3*difficulty;}
+ if(enemystate==1)person[cycle].killtarget=-1;
- if(person[cycle].type==zombietype){person[cycle].existing=1; person[cycle].pathsize=1.04; person[cycle].whichgun=nogun; person[cycle].aiming=0; person[cycle].killtarget=-1; person[cycle].speedmult=.7+.2*difficulty;}
+ if(person[cycle].type==eviltype){person[cycle].existing=1; person[cycle].pathsize=1.04; person[cycle].whichgun=nogun; person[cycle].aiming=1; person[cycle].killtarget=-1; person[cycle].speedmult=1+.3*difficulty;}
- else {person[cycle].whichgun=nogun; person[cycle].aiming=0; person[cycle].killtarget=-1;}
+ if(person[cycle].type==zombietype){person[cycle].existing=1; person[cycle].pathsize=1.04; person[cycle].whichgun=nogun; person[cycle].aiming=0; person[cycle].killtarget=-1; person[cycle].speedmult=.7+.2*difficulty;}
- person[cycle].lastdistancevictim=200000;
+ else {person[cycle].whichgun=nogun; person[cycle].aiming=0; person[cycle].killtarget=-1;}
- if(enemystate==2)person[cycle].killtarget=1;
+ person[cycle].lastdistancevictim=200000;
- if(numpeople<max_people)numpeople++;
+ if(enemystate==2)person[cycle].killtarget=1;
- citypeoplenum[blockspawnx][blockspawny]++;
+ if(numpeople<max_people)numpeople++;
- cycle++;
+ citypeoplenum[blockspawnx][blockspawny]++;
- spawndelay=.1;
+ cycle++;
- }
-
- }}
-
- XYZ towards;
- XYZ finaltarget;
- XYZ blah;
- int closesttarget = 0;
- float leastdistance = 0.0;
- XYZ bleedloc;
- XYZ vel;
- float tooclose;
- float toofar;
-
- //People
- for(int i=0;i<numpeople;i++){
- if(person[i].health<0&&person[i].longdead<0&&person[i].firstlongdead==0){
- if(person[i].type!=zombietype){
- overpoint=person[i].skeleton.joints[person[i].skeleton.jointlabels[abdomen]].position;
- overpoint.y+=3000;
- underpoint=person[i].skeleton.joints[person[i].skeleton.jointlabels[abdomen]].position;
- underpoint.y-=3000;
+ spawndelay=.1;
- move=0;
- move.x=person[i].whichblockx*block_spacing;
- move.z=person[i].whichblocky*block_spacing;
+ }
- XYZ temp;
- whichtri=sidewalkcollide.LineCheck2(overpoint,underpoint,&temp,move,cityrotation[person[i].whichblockx][person[i].whichblocky]*90);
+ }}
+
+ XYZ towards;
+ XYZ finaltarget;
+ XYZ blah;
+ int closesttarget = 0;
+ float leastdistance = 0.0;
+ XYZ bleedloc;
+ XYZ vel;
+ float tooclose;
+ float toofar;
+
+ //People
+ for(int i=0;i<numpeople;i++){
+ if(person[i].health<0&&person[i].longdead<0&&person[i].firstlongdead==0){
+ if(person[i].type!=zombietype){
+ overpoint=person[i].skeleton.joints[person[i].skeleton.jointlabels[abdomen]].position;
+ overpoint.y+=3000;
+ underpoint=person[i].skeleton.joints[person[i].skeleton.jointlabels[abdomen]].position;
+ underpoint.y-=3000;
- XYZ normish;
- normish=0;
- normish.y=1;
+ move=0;
+ move.x=person[i].whichblockx*block_spacing;
+ move.z=person[i].whichblocky*block_spacing;
- if(whichtri>=0){
- decals.MakeDecal(bloodpool,temp,12,normish, whichtri, &sidewalkcollide, move, cityrotation[person[i].whichblockx][person[i].whichblocky]*90);
- }
- if(whichtri==-1){
- temp=person[i].skeleton.joints[person[i].skeleton.jointlabels[abdomen]].position;
- temp.y=-.5;
- move=0;
- decals.MakeDecal(bloodpool,temp,12,normish, 0, &sidewalkcollide, move, 0);
- }
+ XYZ temp;
+ whichtri=sidewalkcollide.LineCheck2(overpoint,underpoint,&temp,move,cityrotation[person[i].whichblockx][person[i].whichblocky]*90);
- person[i].firstlongdead=1;
+ XYZ normish;
+ normish=0;
+ normish.y=1;
+ if(whichtri>=0){
+ decals.MakeDecal(bloodpool,temp,12,normish, whichtri, &sidewalkcollide, move, cityrotation[person[i].whichblockx][person[i].whichblocky]*90);
+ }
+ if(whichtri==-1){
+ temp=person[i].skeleton.joints[person[i].skeleton.jointlabels[abdomen]].position;
+ temp.y=-.5;
+ move=0;
+ decals.MakeDecal(bloodpool,temp,12,normish, 0, &sidewalkcollide, move, 0);
}
- }
+ person[i].firstlongdead=1;
- if(person[i].health<100&&person[i].type!=zombietype){
- person[i].health-=multiplier*120;
}
- if(person[i].health<100&&person[i].type==zombietype){
- person[i].health+=multiplier*10;
- if(person[i].health>person[i].maxhealth)person[i].health=person[i].maxhealth;
- }
+ }
- if(person[i].health<100&&person[i].type==zombietype&&person[i].skeleton.free==1){
- person[i].health+=multiplier*10;
- if(person[i].health>person[i].maxhealth)person[i].health=person[i].maxhealth;
- }
+ if(person[i].health<100&&person[i].type!=zombietype){
+ person[i].health-=multiplier*120;
+ }
- if(person[i].health<40&&person[i].type==zombietype){
- person[i].speedmult-=multiplier/20;
- if(person[i].speedmult<.6){
- person[i].speedmult=.6;
- person[i].killtarget=-1;
- }
- }
+ if(person[i].health<100&&person[i].type==zombietype){
+ person[i].health+=multiplier*10;
+ if(person[i].health>person[i].maxhealth)person[i].health=person[i].maxhealth;
+ }
- if(person[i].health>=40&&person[i].type==zombietype){
- person[i].speedmult+=multiplier/40;
- if(person[i].speedmult>.7+difficulty*.2){
- person[i].speedmult=.7+difficulty*.2;
- person[i].killtarget=1;
- }
- }
+ if(person[i].health<100&&person[i].type==zombietype&&person[i].skeleton.free==1){
+ person[i].health+=multiplier*10;
+ if(person[i].health>person[i].maxhealth)person[i].health=person[i].maxhealth;
+ }
- if(person[i].maxhealth<100&&person[i].type==zombietype){
- person[i].maxhealth+=multiplier*2;
- if(person[i].maxhealth>100)person[i].maxhealth=100;
- }
+ if(person[i].health<40&&person[i].type==zombietype){
+ person[i].speedmult-=multiplier/20;
+ if(person[i].speedmult<.6){
+ person[i].speedmult=.6;
+ person[i].killtarget=-1;
+ }
+ }
- if(person[i].bleeding>0){
- person[i].bleeding-=multiplier;
- person[i].bleeddelay-=multiplier*10;
- if(person[i].bleeddelay<=0){
- person[i].bleeddelay=1;
- if(person[i].skeleton.free==0){
- bleedloc=DoRotation((person[i].bjoint1->position+person[i].bjoint2->position)/2,0,person[i].playerrotation,0)+person[i].playercoords;
- }
- if(person[i].skeleton.free>0){
- bleedloc=(person[i].bjoint1->position+person[i].bjoint2->position)/2;
- }
- vel=0;
- sprites.MakeSprite(bloodspritedown, .6, 1, .2, .2,bleedloc, vel, 3*person[i].bleeding);
+ if(person[i].health>=40&&person[i].type==zombietype){
+ person[i].speedmult+=multiplier/40;
+ if(person[i].speedmult>.7+difficulty*.2){
+ person[i].speedmult=.7+difficulty*.2;
+ person[i].killtarget=1;
}
+ }
+ if(person[i].maxhealth<100&&person[i].type==zombietype){
+ person[i].maxhealth+=multiplier*2;
+ if(person[i].maxhealth>100)person[i].maxhealth=100;
+ }
+
+ if(person[i].bleeding>0){
+ person[i].bleeding-=multiplier;
+ person[i].bleeddelay-=multiplier*10;
+ if(person[i].bleeddelay<=0){
+ person[i].bleeddelay=1;
+ if(person[i].skeleton.free==0){
+ bleedloc=DoRotation((person[i].bjoint1->position+person[i].bjoint2->position)/2,0,person[i].playerrotation,0)+person[i].playercoords;
+ }
+ if(person[i].skeleton.free>0){
+ bleedloc=(person[i].bjoint1->position+person[i].bjoint2->position)/2;
+ }
+ vel=0;
+ sprites.MakeSprite(bloodspritedown, .6, 1, .2, .2,bleedloc, vel, 3*person[i].bleeding);
}
- if(person[i].skeleton.free==0){
- //Gun
- if(person[i].type==playertype||person[i].type==eviltype){
- if(i==0){
- if(person[i].whichgun==shotgun)person[i].recoil-=multiplier*4;
- if(person[i].whichgun==sniperrifle)person[i].recoil-=multiplier*2;
- if(person[i].whichgun==handgun1)person[i].recoil-=multiplier*5;
- if(person[i].whichgun==handgun2)person[i].recoil-=multiplier*5;
- if(person[i].whichgun==assaultrifle)person[i].recoil-=multiplier*10;
- }
-
- if(i!=0){
- if(person[i].whichgun==shotgun)person[i].recoil-=multiplier*1;
- if(person[i].whichgun==sniperrifle)person[i].recoil-=multiplier*1;
- if(person[i].whichgun==handgun1)person[i].recoil-=multiplier*2;
- if(person[i].whichgun==handgun2)person[i].recoil-=multiplier*2;
- if(person[i].whichgun==assaultrifle)person[i].recoil-=multiplier*10;
- }
-
- if(person[i].recoil<0)person[i].recoil=0;
-
- if(i==0){
- if(zoom){
- mousesensitivity=.05*usermousesensitivity;
- if(person[i].targetanimation!=crouchanim||person[i].currentanimation!=crouchanim||person[i].aiming<1){
- zoom=0;
- }
- if(visions==1)zoom=0;
- }
+ }
- if(person[i].currentanimation==crouchanim&&person[i].targetanimation==crouchanim&&person[i].aiming>=1&&person[i].whichgun==sniperrifle){
- zoom=1;
- if(zoom&&!oldzoom)camera.rotation2-=6;
- }
+ if(person[i].skeleton.free==0){
+ //Gun
+ if(person[i].type==playertype||person[i].type==eviltype){
+ if(i==0){
+ if(person[i].whichgun==shotgun)person[i].recoil-=multiplier*4;
+ if(person[i].whichgun==sniperrifle)person[i].recoil-=multiplier*2;
+ if(person[i].whichgun==handgun1)person[i].recoil-=multiplier*5;
+ if(person[i].whichgun==handgun2)person[i].recoil-=multiplier*5;
+ if(person[i].whichgun==assaultrifle)person[i].recoil-=multiplier*10;
+ }
- if(!zoom)mousesensitivity=1*usermousesensitivity;
+ if(i!=0){
+ if(person[i].whichgun==shotgun)person[i].recoil-=multiplier*1;
+ if(person[i].whichgun==sniperrifle)person[i].recoil-=multiplier*1;
+ if(person[i].whichgun==handgun1)person[i].recoil-=multiplier*2;
+ if(person[i].whichgun==handgun2)person[i].recoil-=multiplier*2;
+ if(person[i].whichgun==assaultrifle)person[i].recoil-=multiplier*10;
+ }
+
+ if(person[i].recoil<0)person[i].recoil=0;
- if(person[i].whichgun!=sniperrifle)zoom=0;
+ if(i==0){
+ if(zoom){
+ mousesensitivity=.05*usermousesensitivity;
+ if(person[i].targetanimation!=crouchanim||person[i].currentanimation!=crouchanim||person[i].aiming<1){
+ zoom=0;
+ }
+ if(visions==1)zoom=0;
}
- }
- //Zombie eat
- if(i > 0
- && person[i].targetanimation == zombieeatanim
- && person[person[i].killtarget].eaten == i) {
- person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[head]].locked=1;
- person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[rightshoulder]].locked=1;
-
- for(int k=0;k<2;k++){
- person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[head]].position=DoRotation(person[i].skeleton.joints[person[i].skeleton.jointlabels[righthand]].position,0,person[i].playerrotation,0)+person[i].playercoords;
- person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[head]].velocity=0;
- person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[rightshoulder]].position=DoRotation(person[i].skeleton.joints[person[i].skeleton.jointlabels[lefthand]].position,0,person[i].playerrotation,0)+person[i].playercoords;
- person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[rightshoulder]].velocity=0;
- person[person[i].killtarget].skeleton.DoConstraints();
- person[person[i].killtarget].skeleton.DoConstraints(&blocksimplecollide[citytype[person[i].whichblockx][person[i].whichblocky]],&move,cityrotation[person[i].whichblockx][person[i].whichblocky]*90);
+ if(person[i].currentanimation==crouchanim&&person[i].targetanimation==crouchanim&&person[i].aiming>=1&&person[i].whichgun==sniperrifle){
+ zoom=1;
+ if(zoom&&!oldzoom)camera.rotation2-=6;
}
- person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[head]].locked=0;
- person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[rightshoulder]].locked=0;
- person[person[i].killtarget].longdead=1;
- }
+ if(!zoom)mousesensitivity=1*usermousesensitivity;
- if(i>0&&enemystate!=1&&person[i].type==zombietype&&person[i].speedmult>.7){
- if(findDistancefast(person[i].playercoords,person[1].playercoords)<20000)person[i].killtarget=1;
- else person[i].killtarget=-1;
+ if(person[i].whichgun!=sniperrifle)zoom=0;
}
+ }
- if(i>0&&enemystate!=1&&person[i].type==zombietype&&person[i].speedmult<.7){
- person[i].killtarget=-1;
+ //Zombie eat
+ if(i > 0
+ && person[i].targetanimation == zombieeatanim
+ && person[person[i].killtarget].eaten == i) {
+ person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[head]].locked=1;
+ person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[rightshoulder]].locked=1;
+
+ for(int k=0;k<2;k++){
+ person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[head]].position=DoRotation(person[i].skeleton.joints[person[i].skeleton.jointlabels[righthand]].position,0,person[i].playerrotation,0)+person[i].playercoords;
+ person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[head]].velocity=0;
+ person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[rightshoulder]].position=DoRotation(person[i].skeleton.joints[person[i].skeleton.jointlabels[lefthand]].position,0,person[i].playerrotation,0)+person[i].playercoords;
+ person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[rightshoulder]].velocity=0;
+ person[person[i].killtarget].skeleton.DoConstraints();
+ person[person[i].killtarget].skeleton.DoConstraints(&blocksimplecollide[citytype[person[i].whichblockx][person[i].whichblocky]],&move,cityrotation[person[i].whichblockx][person[i].whichblocky]*90);
}
- bool realcheck = false;
-
- //Pathfinding
- if(i>0&&person[i].targetanimation!=getupfrontanim&&person[i].targetanimation!=thrownanim&&person[i].targetanimation!=getupbackanim&&person[i].currentanimation!=getupfrontanim&&person[i].currentanimation!=getupbackanim){
+ person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[head]].locked=0;
+ person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[rightshoulder]].locked=0;
+ person[person[i].killtarget].longdead=1;
+ }
- person[i].pathcheckdelay-=multiplier;
+ if(i>0&&enemystate!=1&&person[i].type==zombietype&&person[i].speedmult>.7){
+ if(findDistancefast(person[i].playercoords,person[1].playercoords)<20000)person[i].killtarget=1;
+ else person[i].killtarget=-1;
+ }
- // Realcheck tells us
- // a) we've got close to the end of our path or
- // b) we're moving away from our target
- realcheck=(abs(person[i].playercoords.x-person[i].pathtarget.x)<1&&abs(person[i].playercoords.z-person[i].pathtarget.z)<1)
- ||findDistancefast(person[i].playercoords,person[i].pathtarget)>findDistancefast(person[i].oldplayercoords,person[i].pathtarget);
+ if(i>0&&enemystate!=1&&person[i].type==zombietype&&person[i].speedmult<.7){
+ person[i].killtarget=-1;
+ }
- if(person[i].targetanimation==idleanim&&person[i].killtargetvisible==0){
- person[i].targetanimation=walkanim;
- if(person[i].type==zombietype)person[i].targetanimation=zombiewalkanim;
- realcheck=1;
- }
+ bool realcheck = false;
- if((realcheck||((person[i].killtarget>-1&&person[i].type!=civiliantype)&&person[i].pathcheckdelay<=0)||person[i].killtargetvisible)){
- person[i].pathcheckdelay=1.2;
-
- if((person[i].killtarget==-1||person[i].type==civiliantype)&&!person[i].running){
- person[i].killtargetvisible=0;
- leastdistance=2000000;
- for(int j=0;j<path.vertexNum;j++){
- person[i].pathtarget.x=path.vertex[j].x;
- person[i].pathtarget.z=path.vertex[j].z;
- person[i].pathtarget.y=path.vertex[j].y;
- person[i].pathtarget*=person[i].pathsize;
- person[i].pathtarget.x+=person[i].whichblockx*block_spacing;
- person[i].pathtarget.z+=person[i].whichblocky*block_spacing;
-
- if(findDistancefast(person[i].playercoords,person[i].pathtarget)<leastdistance&&j!=1&&j!=person[i].oldpathnum&&j!=person[i].oldoldpathnum&&j!=person[i].oldoldoldpathnum){
- leastdistance=findDistancefast(person[i].playercoords,person[i].pathtarget);
- closesttarget=j;
- }
- }
-
- if(closesttarget>=0&&closesttarget<path.vertexNum){
- person[i].oldoldoldpathnum=person[i].oldoldpathnum;
- person[i].oldoldpathnum=person[i].oldpathnum;
- person[i].oldpathnum=person[i].pathnum;
- person[i].pathnum=closesttarget;
- person[i].pathtarget.x=path.vertex[person[i].pathnum].x;
- person[i].pathtarget.z=path.vertex[person[i].pathnum].z;
- person[i].pathtarget*=person[i].pathsize;
- person[i].pathtarget.x+=person[i].whichblockx*block_spacing;
- person[i].pathtarget.z+=person[i].whichblocky*block_spacing;
- }
- }
+ //Pathfinding
+ if(i>0&&person[i].targetanimation!=getupfrontanim&&person[i].targetanimation!=thrownanim&&person[i].targetanimation!=getupbackanim&&person[i].currentanimation!=getupfrontanim&&person[i].currentanimation!=getupbackanim){
- if(person[i].running&&realcheck){
- person[i].killtargetvisible=0;
- person[i].targetanimation=joganim;
+ person[i].pathcheckdelay-=multiplier;
- //Dead target?
- if(person[person[i].killtarget].health<=0){
- person[i].running=0;
- }
+ // Realcheck tells us
+ // a) we've got close to the end of our path or
+ // b) we're moving away from our target
+ realcheck=(abs(person[i].playercoords.x-person[i].pathtarget.x)<1&&abs(person[i].playercoords.z-person[i].pathtarget.z)<1)
+ ||findDistancefast(person[i].playercoords,person[i].pathtarget)>findDistancefast(person[i].oldplayercoords,person[i].pathtarget);
- person[i].killtarget=1;
-
- //If pathfind
- if(realcheck){
- leastdistance=2000000;
- person[i].lastdistancevictim=0;
- closesttarget=-1;
-
- //Check best path
- closesttarget=person[i].pathnum;
-
- //Check other blocks?
- if ((closesttarget==person[i].pathnum)){
- beginx=person[i].whichblockx-2;
- if(beginx<0)beginx=0;
- beginz=person[i].whichblocky-2;
- if(beginz<0)beginz=0;
- endx=person[i].whichblockx+2;
- if(endx>num_blocks-1)endx=num_blocks-1;
- endz=person[i].whichblocky+2;
- if(endz>num_blocks-1)endz=num_blocks-1;
- leastdistance=2000000;
-
- for(int l=beginx;l<=endx;l++){
- for(int m=beginx;m<=endx;m++){
- for(int j=0;j<path.vertexNum;j++){
- person[i].pathtarget.x=path.vertex[j].x;
- person[i].pathtarget.y=path.vertex[j].y;
- person[i].pathtarget.z=path.vertex[j].z;
- person[i].pathtarget*=person[i].pathsize;
- person[i].pathtarget.x+=l*block_spacing;
- person[i].pathtarget.z+=m*block_spacing;
-
- if(findDistancefast(person[i].playercoords,person[i].pathtarget)<leastdistance&&findDistancefast(person[i].pathtarget,person[person[i].killtarget].playercoords)>findDistancefast(person[i].playercoords,person[person[i].killtarget].playercoords)&&j!=1&&blocksimple.LineCheck2(person[i].playercoords,person[i].pathtarget,&blah,move,cityrotation[person[i].whichblockx][person[i].whichblocky])==-1&&blocksimple.LineCheck2(person[i].playercoords,person[i].pathtarget,&blah,move,cityrotation[l][m])==-1){
- person[i].lastdistancevictim=findDistancefast(person[i].pathtarget,person[person[i].killtarget].playercoords);
- leastdistance=findDistancefast(person[i].playercoords,person[i].pathtarget);
- closesttarget=j;
- finaltarget=person[i].pathtarget;
- person[i].whichblockx=l;
- person[i].whichblocky=m;
- }
- }
- }
- }
- }
+ if(person[i].targetanimation==idleanim&&person[i].killtargetvisible==0){
+ person[i].targetanimation=walkanim;
+ if(person[i].type==zombietype)person[i].targetanimation=zombiewalkanim;
+ realcheck=1;
+ }
- if(closesttarget!=-1){
- person[i].pathnum=closesttarget;
- person[i].pathtarget=finaltarget;
- }
+ if((realcheck||((person[i].killtarget>-1&&person[i].type!=civiliantype)&&person[i].pathcheckdelay<=0)||person[i].killtargetvisible)){
+ person[i].pathcheckdelay=1.2;
+
+ if((person[i].killtarget==-1||person[i].type==civiliantype)&&!person[i].running){
+ person[i].killtargetvisible=0;
+ leastdistance=2000000;
+ for(int j=0;j<path.vertexNum;j++){
+ person[i].pathtarget.x=path.vertex[j].x;
+ person[i].pathtarget.z=path.vertex[j].z;
+ person[i].pathtarget.y=path.vertex[j].y;
+ person[i].pathtarget*=person[i].pathsize;
+ person[i].pathtarget.x+=person[i].whichblockx*block_spacing;
+ person[i].pathtarget.z+=person[i].whichblocky*block_spacing;
+
+ if(findDistancefast(person[i].playercoords,person[i].pathtarget)<leastdistance&&j!=1&&j!=person[i].oldpathnum&&j!=person[i].oldoldpathnum&&j!=person[i].oldoldoldpathnum){
+ leastdistance=findDistancefast(person[i].playercoords,person[i].pathtarget);
+ closesttarget=j;
}
+ }
+
+ if(closesttarget>=0&&closesttarget<path.vertexNum){
+ person[i].oldoldoldpathnum=person[i].oldoldpathnum;
+ person[i].oldoldpathnum=person[i].oldpathnum;
+ person[i].oldpathnum=person[i].pathnum;
+ person[i].pathnum=closesttarget;
+ person[i].pathtarget.x=path.vertex[person[i].pathnum].x;
+ person[i].pathtarget.z=path.vertex[person[i].pathnum].z;
+ person[i].pathtarget*=person[i].pathsize;
+ person[i].pathtarget.x+=person[i].whichblockx*block_spacing;
+ person[i].pathtarget.z+=person[i].whichblocky*block_spacing;
}
+ }
- //Assassin
- if((person[i].killtarget>-1&&person[i].type!=civiliantype)&&!person[i].running){
- //Dead target?
- if(person[person[i].killtarget].health<=0&&person[i].type==eviltype){
- person[i].playerrotation2=0;
- person[i].whichgun=nogun;
- person[i].targetanimation=walkanim;
- person[i].lastdistancevictim=200000;
- person[i].pathnum=-1;
- enemystate=1;
- person[i].killtarget=-1;
- realcheck=1;
+ if(person[i].running&&realcheck){
+ person[i].killtargetvisible=0;
+ person[i].targetanimation=joganim;
+
+ //Dead target?
+ if(person[person[i].killtarget].health<=0){
+ person[i].running=0;
+ }
+
+ person[i].killtarget=1;
+
+ //If pathfind
+ if(realcheck){
+ leastdistance=2000000;
+ person[i].lastdistancevictim=0;
+ closesttarget=-1;
+
+ //Check best path
+ closesttarget=person[i].pathnum;
+
+ //Check other blocks?
+ if ((closesttarget==person[i].pathnum)){
+ beginx=person[i].whichblockx-2;
+ if(beginx<0)beginx=0;
+ beginz=person[i].whichblocky-2;
+ if(beginz<0)beginz=0;
+ endx=person[i].whichblockx+2;
+ if(endx>num_blocks-1)endx=num_blocks-1;
+ endz=person[i].whichblocky+2;
+ if(endz>num_blocks-1)endz=num_blocks-1;
+ leastdistance=2000000;
+
+ for(int l=beginx;l<=endx;l++){
+ for(int m=beginx;m<=endx;m++){
+ for(int j=0;j<path.vertexNum;j++){
+ person[i].pathtarget.x=path.vertex[j].x;
+ person[i].pathtarget.y=path.vertex[j].y;
+ person[i].pathtarget.z=path.vertex[j].z;
+ person[i].pathtarget*=person[i].pathsize;
+ person[i].pathtarget.x+=l*block_spacing;
+ person[i].pathtarget.z+=m*block_spacing;
+
+ if(findDistancefast(person[i].playercoords,person[i].pathtarget)<leastdistance&&findDistancefast(person[i].pathtarget,person[person[i].killtarget].playercoords)>findDistancefast(person[i].playercoords,person[person[i].killtarget].playercoords)&&j!=1&&blocksimple.LineCheck2(person[i].playercoords,person[i].pathtarget,&blah,move,cityrotation[person[i].whichblockx][person[i].whichblocky])==-1&&blocksimple.LineCheck2(person[i].playercoords,person[i].pathtarget,&blah,move,cityrotation[l][m])==-1){
+ person[i].lastdistancevictim=findDistancefast(person[i].pathtarget,person[person[i].killtarget].playercoords);
+ leastdistance=findDistancefast(person[i].playercoords,person[i].pathtarget);
+ closesttarget=j;
+ finaltarget=person[i].pathtarget;
+ person[i].whichblockx=l;
+ person[i].whichblocky=m;
+ }
+ }
+ }
+ }
}
- if(person[i].type==zombietype&&person[person[i].killtarget].health<=0){
- if(person[person[i].killtarget].eaten!=i){
- person[i].playerrotation2=0;
- person[i].targetanimation=zombiewalkanim;
- person[i].lastdistancevictim=200000;
- person[i].pathnum=-1;
- realcheck=1;
- person[i].killtarget=-1;
- }
+ if(closesttarget!=-1){
+ person[i].pathnum=closesttarget;
+ person[i].pathtarget=finaltarget;
+ }
+ }
+ }
- if(person[person[i].killtarget].eaten==i&&person[i].targetanimation!=zombieeatanim){
- person[i].targetanimation=zombieeatanim;
- person[i].targetframe=0;
- person[i].target=0;
+ //Assassin
+ if((person[i].killtarget>-1&&person[i].type!=civiliantype)&&!person[i].running){
+ //Dead target?
+ if(person[person[i].killtarget].health<=0&&person[i].type==eviltype){
+ person[i].playerrotation2=0;
+ person[i].whichgun=nogun;
+ person[i].targetanimation=walkanim;
+ person[i].lastdistancevictim=200000;
+ person[i].pathnum=-1;
+ enemystate=1;
+ person[i].killtarget=-1;
+ realcheck=1;
+ }
+
+ if(person[i].type==zombietype&&person[person[i].killtarget].health<=0){
+ if(person[person[i].killtarget].eaten!=i){
+ person[i].playerrotation2=0;
+ person[i].targetanimation=zombiewalkanim;
+ person[i].lastdistancevictim=200000;
+ person[i].pathnum=-1;
+ realcheck=1;
+ person[i].killtarget=-1;
+ }
+
+ if(person[person[i].killtarget].eaten==i&&person[i].targetanimation!=zombieeatanim){
+ person[i].targetanimation=zombieeatanim;
+ person[i].targetframe=0;
+ person[i].target=0;
+ }
+ enemystate=1;
+ }
+
+ if(person[person[i].killtarget].health>0){
+ if(person[person[i].killtarget].skeleton.free){
+ person[person[i].killtarget].playercoords=person[person[i].killtarget].averageloc;
+ }
+
+ //If pathfind
+ if(realcheck){
+ leastdistance=2000000;
+ person[i].lastdistancevictim=2000000;
+ closesttarget=-1;
+
+ //Check best path
+ for(int j=0;j<path.vertexNum;j++){
+ person[i].pathtarget.x=path.vertex[j].x;
+ person[i].pathtarget.z=path.vertex[j].z;
+ person[i].pathtarget.y=path.vertex[j].y;
+ person[i].pathtarget*=person[i].pathsize;
+ person[i].pathtarget.x+=person[i].whichblockx*block_spacing;
+ person[i].pathtarget.z+=person[i].whichblocky*block_spacing;
+
+ if(findDistancefast(person[i].playercoords,person[i].pathtarget)<leastdistance&&findDistancefast(person[i].pathtarget,person[person[i].killtarget].playercoords)<person[i].lastdistancevictim&&j!=1&&blocksimple.LineCheck2(person[i].playercoords,person[i].pathtarget,&blah,move,cityrotation[person[i].whichblockx][person[i].whichblocky])==-1){
+ leastdistance=findDistancefast(person[i].playercoords,person[i].pathtarget);
+ person[i].lastdistancevictim=findDistancefast(person[i].pathtarget,person[person[i].killtarget].playercoords);
+ closesttarget=j;
+ finaltarget=person[i].pathtarget;
+ }
+ }
+
+ leastdistance=2000000;
+ for(int j=0;j<path.vertexNum;j++){
+ person[i].pathtarget.x=path.vertex[j].x;
+ person[i].pathtarget.z=path.vertex[j].z;
+ person[i].pathtarget.y=path.vertex[j].y;
+ person[i].pathtarget*=person[i].pathsize;
+ person[i].pathtarget.x+=person[i].whichblockx*block_spacing;
+ person[i].pathtarget.z+=person[i].whichblocky*block_spacing;
+
+ if(findDistancefast(person[i].playercoords,person[i].pathtarget)<leastdistance&&findDistancefast(person[i].pathtarget,person[person[i].killtarget].playercoords)<person[i].lastdistancevictim&&j!=1&&blocksimple.LineCheck2(person[i].playercoords,person[i].pathtarget,&blah,move,cityrotation[person[i].whichblockx][person[i].whichblocky])==-1){
+ leastdistance=findDistancefast(person[i].playercoords,person[i].pathtarget);
+ person[i].lastdistancevictim=findDistancefast(person[i].pathtarget,person[person[i].killtarget].playercoords);
+ closesttarget=j;
+ finaltarget=person[i].pathtarget;
+ }
+ }
+
+ //Check other blocks?
+ if((closesttarget==person[i].pathnum)||closesttarget==-1){
+ beginx=person[i].whichblockx-2;
+ if(beginx<0)beginx=0;
+ beginz=person[i].whichblocky-2;
+ if(beginz<0)beginz=0;
+ endx=person[i].whichblockx+2;
+ if(endx>num_blocks-1)endx=num_blocks-1;
+ endz=person[i].whichblocky+2;
+ if(endz>num_blocks-1)endz=num_blocks-1;
+ leastdistance=2000000;
+
+ for(int l=beginx;l<=endx;l++){
+ for(int m=beginx;m<=endx;m++){
+ if(l!=person[i].whichblockx||m!=person[i].whichblocky){
+
+ for(int j=0;j<path.vertexNum;j++){
+ person[i].pathtarget.x=path.vertex[j].x;
+ person[i].pathtarget.y=path.vertex[j].y;
+ person[i].pathtarget.z=path.vertex[j].z;
+ person[i].pathtarget*=person[i].pathsize;
+ person[i].pathtarget.x+=l*block_spacing;
+ person[i].pathtarget.z+=m*block_spacing;
+
+ if(findDistancefast(person[i].playercoords,person[i].pathtarget)<leastdistance&&findDistancefast(person[i].pathtarget,person[person[i].killtarget].playercoords)<findDistancefast(person[i].playercoords,person[person[i].killtarget].playercoords)&&j!=1&&blocksimple.LineCheck2(person[i].playercoords,person[i].pathtarget,&blah,move,cityrotation[l][m])==-1&&blocksimple.LineCheck2(person[i].playercoords,person[i].pathtarget,&blah,move,cityrotation[person[i].whichblockx][person[i].whichblocky])==-1){
+ leastdistance=findDistancefast(person[i].playercoords,person[i].pathtarget);
+ closesttarget=j;
+ finaltarget=person[i].pathtarget;
+ person[i].whichblockx=l;
+ person[i].whichblocky=m;
+ }
+ }
+ }
}
- enemystate=1;
- }
-
- if(person[person[i].killtarget].health>0){
- if(person[person[i].killtarget].skeleton.free){
- person[person[i].killtarget].playercoords=person[person[i].killtarget].averageloc;
}
+ }
- //If pathfind
- if(realcheck){
- leastdistance=2000000;
- person[i].lastdistancevictim=2000000;
- closesttarget=-1;
-
- //Check best path
- for(int j=0;j<path.vertexNum;j++){
- person[i].pathtarget.x=path.vertex[j].x;
- person[i].pathtarget.z=path.vertex[j].z;
- person[i].pathtarget.y=path.vertex[j].y;
- person[i].pathtarget*=person[i].pathsize;
- person[i].pathtarget.x+=person[i].whichblockx*block_spacing;
- person[i].pathtarget.z+=person[i].whichblocky*block_spacing;
-
- if(findDistancefast(person[i].playercoords,person[i].pathtarget)<leastdistance&&findDistancefast(person[i].pathtarget,person[person[i].killtarget].playercoords)<person[i].lastdistancevictim&&j!=1&&blocksimple.LineCheck2(person[i].playercoords,person[i].pathtarget,&blah,move,cityrotation[person[i].whichblockx][person[i].whichblocky])==-1){
- leastdistance=findDistancefast(person[i].playercoords,person[i].pathtarget);
- person[i].lastdistancevictim=findDistancefast(person[i].pathtarget,person[person[i].killtarget].playercoords);
- closesttarget=j;
- finaltarget=person[i].pathtarget;
- }
- }
-
- leastdistance=2000000;
- for(int j=0;j<path.vertexNum;j++){
- person[i].pathtarget.x=path.vertex[j].x;
- person[i].pathtarget.z=path.vertex[j].z;
- person[i].pathtarget.y=path.vertex[j].y;
- person[i].pathtarget*=person[i].pathsize;
- person[i].pathtarget.x+=person[i].whichblockx*block_spacing;
- person[i].pathtarget.z+=person[i].whichblocky*block_spacing;
-
- if(findDistancefast(person[i].playercoords,person[i].pathtarget)<leastdistance&&findDistancefast(person[i].pathtarget,person[person[i].killtarget].playercoords)<person[i].lastdistancevictim&&j!=1&&blocksimple.LineCheck2(person[i].playercoords,person[i].pathtarget,&blah,move,cityrotation[person[i].whichblockx][person[i].whichblocky])==-1){
- leastdistance=findDistancefast(person[i].playercoords,person[i].pathtarget);
- person[i].lastdistancevictim=findDistancefast(person[i].pathtarget,person[person[i].killtarget].playercoords);
- closesttarget=j;
- finaltarget=person[i].pathtarget;
- }
- }
-
- //Check other blocks?
- if((closesttarget==person[i].pathnum)||closesttarget==-1){
- beginx=person[i].whichblockx-2;
- if(beginx<0)beginx=0;
- beginz=person[i].whichblocky-2;
- if(beginz<0)beginz=0;
- endx=person[i].whichblockx+2;
- if(endx>num_blocks-1)endx=num_blocks-1;
- endz=person[i].whichblocky+2;
- if(endz>num_blocks-1)endz=num_blocks-1;
- leastdistance=2000000;
-
- for(int l=beginx;l<=endx;l++){
- for(int m=beginx;m<=endx;m++){
- if(l!=person[i].whichblockx||m!=person[i].whichblocky){
-
- for(int j=0;j<path.vertexNum;j++){
- person[i].pathtarget.x=path.vertex[j].x;
- person[i].pathtarget.y=path.vertex[j].y;
- person[i].pathtarget.z=path.vertex[j].z;
- person[i].pathtarget*=person[i].pathsize;
- person[i].pathtarget.x+=l*block_spacing;
- person[i].pathtarget.z+=m*block_spacing;
-
- if(findDistancefast(person[i].playercoords,person[i].pathtarget)<leastdistance&&findDistancefast(person[i].pathtarget,person[person[i].killtarget].playercoords)<findDistancefast(person[i].playercoords,person[person[i].killtarget].playercoords)&&j!=1&&blocksimple.LineCheck2(person[i].playercoords,person[i].pathtarget,&blah,move,cityrotation[l][m])==-1&&blocksimple.LineCheck2(person[i].playercoords,person[i].pathtarget,&blah,move,cityrotation[person[i].whichblockx][person[i].whichblocky])==-1){
- leastdistance=findDistancefast(person[i].playercoords,person[i].pathtarget);
- closesttarget=j;
- finaltarget=person[i].pathtarget;
- person[i].whichblockx=l;
- person[i].whichblocky=m;
- }
- }
- }
- }
- }
- }
+ if(closesttarget!=-1){
+ person[i].onpath=1;
+ person[i].pathnum=closesttarget;
+ person[i].pathtarget=finaltarget;
+ }
+ }
- if(closesttarget!=-1){
- person[i].onpath=1;
- person[i].pathnum=closesttarget;
- person[i].pathtarget=finaltarget;
- }
+ //Check killtargetvisible
+ person[i].killtargetvisible=1;
+
+ if(person[person[i].killtarget].health<=0)person[i].killtargetvisible=0;
+
+ if(closesttarget!=-1&&findDistancefast(person[i].playercoords, person[person[i].killtarget].playercoords)>30000)person[i].killtargetvisible=0;
+
+ if(person[i].killtarget==0&&visions==1)person[i].killtargetvisible=0;
+
+ if(person[i].killtargetvisible){
+ beginx=person[i].whichblockx-2;
+ if(beginx<0)beginx=0;
+ beginz=person[i].whichblocky-2;
+ if(beginz<0)beginz=0;
+ endx=person[i].whichblockx+2;
+ if(endx>num_blocks-1)endx=num_blocks-1;
+ endz=person[i].whichblocky+2;
+ if(endz>num_blocks-1)endz=num_blocks-1;
+
+ for(int l=beginx;l<=endx;l++){
+ for(int m=beginx;m<=endx;m++){
+ move.x=l*block_spacing;
+ move.z=m*block_spacing;
+ move.y=-3;
+ if(person[i].killtargetvisible){
+ if(blocksimple.LineCheck2(person[i].playercoords,person[person[i].killtarget].playercoords,&blah,move,cityrotation[l][m])!=-1)
+ {
+ person[i].killtargetvisible=0;
+ }
+ }
+ }
+ }
}
- //Check killtargetvisible
- person[i].killtargetvisible=1;
-
- if(person[person[i].killtarget].health<=0)person[i].killtargetvisible=0;
-
- if(closesttarget!=-1&&findDistancefast(person[i].playercoords, person[person[i].killtarget].playercoords)>30000)person[i].killtargetvisible=0;
-
- if(person[i].killtarget==0&&visions==1)person[i].killtargetvisible=0;
-
- if(person[i].killtargetvisible){
- beginx=person[i].whichblockx-2;
- if(beginx<0)beginx=0;
- beginz=person[i].whichblocky-2;
- if(beginz<0)beginz=0;
- endx=person[i].whichblockx+2;
- if(endx>num_blocks-1)endx=num_blocks-1;
- endz=person[i].whichblocky+2;
- if(endz>num_blocks-1)endz=num_blocks-1;
-
- for(int l=beginx;l<=endx;l++){
- for(int m=beginx;m<=endx;m++){
- move.x=l*block_spacing;
- move.z=m*block_spacing;
- move.y=-3;
- if(person[i].killtargetvisible){
- if(blocksimple.LineCheck2(person[i].playercoords,person[person[i].killtarget].playercoords,&blah,move,cityrotation[l][m])!=-1)
- {
- person[i].killtargetvisible=0;
- }
- }
- }
+ if(person[i].type==eviltype){
+ if(!person[i].killtargetvisible&&person[i].targetanimation==idleanim){
+ person[i].targetanimation=joganim;
}
- }
-
- if(person[i].type==eviltype){
- if(!person[i].killtargetvisible&&person[i].targetanimation==idleanim){
- person[i].targetanimation=joganim;
- }
- if(!person[i].killtargetvisible){
- person[i].aiming=0;
- }
+ if(!person[i].killtargetvisible){
+ person[i].aiming=0;
+ }
- if(person[i].killtargetvisible){
- person[i].onpath=0;
- person[i].lastdistancevictim=200000;
- person[i].pathnum=-1;
+ if(person[i].killtargetvisible){
+ person[i].onpath=0;
+ person[i].lastdistancevictim=200000;
+ person[i].pathnum=-1;
- if(person[i].whichgun==nogun){
- person[i].whichgun=possiblegun[abs(Random()%numpossibleguns)];
- person[i].reloads[person[i].whichgun]=1;
- if(person[i].whichgun==knife)person[i].speedmult=.8+.5*difficulty;
- }
+ if(person[i].whichgun==nogun){
+ person[i].whichgun=possiblegun[abs(Random()%numpossibleguns)];
+ person[i].reloads[person[i].whichgun]=1;
+ if(person[i].whichgun==knife)person[i].speedmult=.8+.5*difficulty;
+ }
- if(person[i].aiming==0)person[i].shotdelay=shotdelayamount/difficulty;
+ if(person[i].aiming==0)person[i].shotdelay=shotdelayamount/difficulty;
- person[i].aiming=1;
+ person[i].aiming=1;
- if(person[i].reloading>0)person[i].aiming=0;
+ if(person[i].reloading>0)person[i].aiming=0;
- if(person[i].whichgun==handgun1||person[i].whichgun==handgun2)person[i].playerrotation2=-10;
+ if(person[i].whichgun==handgun1||person[i].whichgun==handgun2)person[i].playerrotation2=-10;
- if(person[i].whichgun==assaultrifle||person[i].whichgun==sniperrifle||person[i].whichgun==shotgun)person[i].playerrotation2=20;
+ if(person[i].whichgun==assaultrifle||person[i].whichgun==sniperrifle||person[i].whichgun==shotgun)person[i].playerrotation2=20;
- tooclose=1300;
- toofar=3000;
+ tooclose=1300;
+ toofar=3000;
- if(person[i].whichgun==shotgun){
- tooclose=1400;
- toofar=5000;
- }
+ if(person[i].whichgun==shotgun){
+ tooclose=1400;
+ toofar=5000;
+ }
- if(person[i].whichgun==assaultrifle){
- tooclose=5000;
- toofar=9000;
- }
+ if(person[i].whichgun==assaultrifle){
+ tooclose=5000;
+ toofar=9000;
+ }
- if(person[i].whichgun==sniperrifle){
- tooclose=10000;
- toofar=20000;
- }
+ if(person[i].whichgun==sniperrifle){
+ tooclose=10000;
+ toofar=20000;
+ }
- if(person[i].whichgun==knife){
- tooclose=20;
- toofar=20000;
- }
+ if(person[i].whichgun==knife){
+ tooclose=20;
+ toofar=20000;
+ }
- if(findDistancefast(person[i].playercoords, person[person[i].killtarget].playercoords)>toofar)
- person[i].targetanimation=joganim;
+ if(findDistancefast(person[i].playercoords, person[person[i].killtarget].playercoords)>toofar)
+ person[i].targetanimation=joganim;
- if((findDistancefast(person[i].playercoords, person[person[i].killtarget].playercoords)<=tooclose&&person[person[i].killtarget].skeleton.free==0)||(tooclose>200&&findDistancefast(person[i].playercoords, person[person[i].killtarget].playercoords)<=200)||(tooclose<=200&&findDistancefast(person[i].playercoords, person[person[i].killtarget].playercoords)<tooclose)){
- if(person[i].targetanimation!=idleanim){
- person[i].targetanimation=idleanim;
- person[i].targetframe=0;
- person[i].target=0;
- }
+ if((findDistancefast(person[i].playercoords, person[person[i].killtarget].playercoords)<=tooclose&&person[person[i].killtarget].skeleton.free==0)||(tooclose>200&&findDistancefast(person[i].playercoords, person[person[i].killtarget].playercoords)<=200)||(tooclose<=200&&findDistancefast(person[i].playercoords, person[person[i].killtarget].playercoords)<tooclose)){
+ if(person[i].targetanimation!=idleanim){
+ person[i].targetanimation=idleanim;
+ person[i].targetframe=0;
+ person[i].target=0;
+ }
- if(person[i].whichgun==knife&&person[person[i].killtarget].health==100){
- murderer=i;
- person[i].attacktarget=0;
- person[i].attackframe=0;
-
- float gLoc[3];
- gLoc[0]=(camera.position.x+((person[i].playercoords.x+flatfacing.x)-camera.position.x)/2)/soundscalefactor;
- gLoc[1]=(camera.position.y+((person[i].playercoords.y+flatfacing.y)-camera.position.y)/2)/soundscalefactor;
- gLoc[2]=(camera.position.z+((person[i].playercoords.z+flatfacing.z)-camera.position.z)/2)/soundscalefactor;
-
- if(person[person[i].killtarget].type!=zombietype)
- {
- alSourcefv(gSourceID[knifeslashsound], AL_POSITION, gLoc);
- alSourcePlay(gSourceID[knifeslashsound]);
- person[person[i].killtarget].bjoint1=&person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[neck]];
- person[person[i].killtarget].bjoint2=&person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[neck]];
- person[person[i].killtarget].bleeding=1;
- person[person[i].killtarget].bleeddelay=1;
- person[person[i].killtarget].health-=20;
- person[person[i].killtarget].targetanimation=chestpainanim;
- person[person[i].killtarget].targetframe=0;
- person[person[i].killtarget].target=0;
- person[person[i].killtarget].longdead=1;
- }
+ if(person[i].whichgun==knife&&person[person[i].killtarget].health==100){
+ murderer=i;
+ person[i].attacktarget=0;
+ person[i].attackframe=0;
+
+ float gLoc[3];
+ gLoc[0]=(camera.position.x+((person[i].playercoords.x+flatfacing.x)-camera.position.x)/2)/soundscalefactor;
+ gLoc[1]=(camera.position.y+((person[i].playercoords.y+flatfacing.y)-camera.position.y)/2)/soundscalefactor;
+ gLoc[2]=(camera.position.z+((person[i].playercoords.z+flatfacing.z)-camera.position.z)/2)/soundscalefactor;
+
+ if(person[person[i].killtarget].type!=zombietype)
+ {
+ alSourcefv(gSourceID[knifeslashsound], AL_POSITION, gLoc);
+ alSourcePlay(gSourceID[knifeslashsound]);
+ person[person[i].killtarget].bjoint1=&person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[neck]];
+ person[person[i].killtarget].bjoint2=&person[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[neck]];
+ person[person[i].killtarget].bleeding=1;
+ person[person[i].killtarget].bleeddelay=1;
+ person[person[i].killtarget].health-=20;
+ person[person[i].killtarget].targetanimation=chestpainanim;
+ person[person[i].killtarget].targetframe=0;
+ person[person[i].killtarget].target=0;
+ person[person[i].killtarget].longdead=1;
}
}
- finaltarget=person[person[i].killtarget].playercoords;
- }
- }
-
- if(person[i].type==zombietype&&person[person[i].killtarget].health>0){
- if(!person[i].killtargetvisible&&person[i].targetanimation==idleanim){
- person[i].targetanimation=zombiejoganim;
- }
+ }
+ finaltarget=person[person[i].killtarget].playercoords;
+ }
+ }
- if(!person[i].killtargetvisible){
- person[i].aiming=0;
- }
+ if(person[i].type==zombietype&&person[person[i].killtarget].health>0){
+ if(!person[i].killtargetvisible&&person[i].targetanimation==idleanim){
+ person[i].targetanimation=zombiejoganim;
+ }
- if(person[i].killtargetvisible){
- person[i].onpath=0;
- person[i].lastdistancevictim=200000;
- person[i].pathnum=-1;
+ if(!person[i].killtargetvisible){
+ person[i].aiming=0;
+ }
- if(person[i].aiming==0)person[i].shotdelay=shotdelayamount/difficulty;
+ if(person[i].killtargetvisible){
+ person[i].onpath=0;
+ person[i].lastdistancevictim=200000;
+ person[i].pathnum=-1;
- if(findDistancefast(person[i].playercoords, person[person[i].killtarget].playercoords)>20||person[i].targetanimation!=idleanim)
- person[i].targetanimation=zombiejoganim;
+ if(person[i].aiming==0)person[i].shotdelay=shotdelayamount/difficulty;
- if(findDistancefast(person[i].playercoords, person[person[i].killtarget].playercoords)<=20){
- murderer=i;
- person[person[i].killtarget].health=0;
- person[person[i].killtarget].eaten=i;
- }
- finaltarget=person[person[i].killtarget].playercoords;
- }
- }
+ if(findDistancefast(person[i].playercoords, person[person[i].killtarget].playercoords)>20||person[i].targetanimation!=idleanim)
+ person[i].targetanimation=zombiejoganim;
- if(person[i].killtargetvisible||realcheck)person[i].pathtarget=finaltarget;
- if(realcheck)person[i].lastdistancevictim=findDistancefast(person[i].pathtarget,person[person[i].killtarget].playercoords);
+ if(findDistancefast(person[i].playercoords, person[person[i].killtarget].playercoords)<=20){
+ murderer=i;
+ person[person[i].killtarget].health=0;
+ person[person[i].killtarget].eaten=i;
+ }
+ finaltarget=person[person[i].killtarget].playercoords;
+ }
}
- }
- if(person[i].targetanimation!=zombieeatanim||person[i].type!=zombietype){
- towards=person[i].playercoords-person[i].pathtarget;
- Normalise(&towards);
- person[i].playerrotation=asin(0-towards.x)*360/6.28;
- if(towards.z>0)person[i].playerrotation=180-person[i].playerrotation;
+ if(person[i].killtargetvisible||realcheck)person[i].pathtarget=finaltarget;
+ if(realcheck)person[i].lastdistancevictim=findDistancefast(person[i].pathtarget,person[person[i].killtarget].playercoords);
}
}
- }
- person[i].whichblockx=((person[i].playercoords.x+block_spacing/2)/block_spacing);
- person[i].whichblocky=((person[i].playercoords.z+block_spacing/2)/block_spacing);
- if(!person[i].onground)person[i].velocity.y+=multiplier*gravity;
- if(!person[i].onground&&(i!=0||visions!=1))person[i].playercoords+=person[i].velocity*multiplier;
-
- //Death by bleeding/shock
- if(person[i].health<=0){
- person[i].skeleton.offset=0;
- person[i].skeleton.free=1;
- person[i].longdead=1;
-
- for(int j=0;j<person[i].skeleton.num_joints;j++){
- person[i].skeleton.joints[j].position+=person[i].skeleton.joints[j].offset;
- person[i].skeleton.joints[j].position=DoRotation(person[i].skeleton.joints[j].position,0,person[i].playerrotation,0);
- person[i].skeleton.joints[j].position+=person[i].playercoords;
- person[i].skeleton.joints[j].realoldposition=person[i].skeleton.joints[j].position;
- person[i].skeleton.joints[j].velocity=DoRotation(person[i].skeleton.joints[j].velocity,0,person[i].playerrotation,0);
- person[i].skeleton.joints[j].velocity+=person[i].velocity;
- person[i].skeleton.joints[j].velocity+=person[i].facing*4;
+ if(person[i].targetanimation!=zombieeatanim||person[i].type!=zombietype){
+ towards=person[i].playercoords-person[i].pathtarget;
+ Normalise(&towards);
+ person[i].playerrotation=asin(0-towards.x)*360/6.28;
+ if(towards.z>0)person[i].playerrotation=180-person[i].playerrotation;
}
}
- }
-
- //Rag doll
- if(person[i].skeleton.free==1&&person[i].longdead>0){
- person[i].whichblockx=((person[i].skeleton.joints[0].position.x+block_spacing/2)/block_spacing);
- person[i].whichblocky=((person[i].skeleton.joints[0].position.z+block_spacing/2)/block_spacing);
+ }
- move=0;
- move.x=person[i].whichblockx*block_spacing;
- move.z=person[i].whichblocky*block_spacing;
- person[i].skeleton.DoGravity();
+ person[i].whichblockx=((person[i].playercoords.x+block_spacing/2)/block_spacing);
+ person[i].whichblocky=((person[i].playercoords.z+block_spacing/2)/block_spacing);
+ if(!person[i].onground)person[i].velocity.y+=multiplier*gravity;
+ if(!person[i].onground&&(i!=0||visions!=1))person[i].playercoords+=person[i].velocity*multiplier;
- if(person[i].averageloc.y<=50)person[i].skeleton.DoConstraints(&blocksimplecollide[citytype[person[i].whichblockx][person[i].whichblocky]],&move,cityrotation[person[i].whichblockx][person[i].whichblocky]*90);
- if(person[i].averageloc.y>50)person[i].skeleton.DoConstraints(&blockcollide[citytype[person[i].whichblockx][person[i].whichblocky]],&move,cityrotation[person[i].whichblockx][person[i].whichblocky]*90);
-
- person[i].oldaverageloc=person[i].averageloc;
- person[i].averageloc=0;
+ //Death by bleeding/shock
+ if(person[i].health<=0){
+ person[i].skeleton.offset=0;
+ person[i].skeleton.free=1;
+ person[i].longdead=1;
for(int j=0;j<person[i].skeleton.num_joints;j++){
- person[i].averageloc+=person[i].skeleton.joints[j].position;
+ person[i].skeleton.joints[j].position+=person[i].skeleton.joints[j].offset;
+ person[i].skeleton.joints[j].position=DoRotation(person[i].skeleton.joints[j].position,0,person[i].playerrotation,0);
+ person[i].skeleton.joints[j].position+=person[i].playercoords;
+ person[i].skeleton.joints[j].realoldposition=person[i].skeleton.joints[j].position;
+ person[i].skeleton.joints[j].velocity=DoRotation(person[i].skeleton.joints[j].velocity,0,person[i].playerrotation,0);
+ person[i].skeleton.joints[j].velocity+=person[i].velocity;
+ person[i].skeleton.joints[j].velocity+=person[i].facing*4;
}
-
- person[i].averageloc/=person[i].skeleton.num_joints;
- person[i].playercoords=person[i].averageloc;
- if(person[i].longdead<multiplier/2&&person[i].longdead>0)person[i].DrawSkeleton(i);
- if(findDistancefast(person[i].averageloc,person[i].oldaverageloc)<.2*multiplier)person[i].longdead-=multiplier/2;
}
+ }
- if(person[i].skeleton.free==1&&person[i].longdead<=0&&person[i].health>0&&person[i].longdead!=-1){
- person[i].longdead=1;
- person[i].skeleton.free=0;
- person[i].currentanimation=lyinganim;
- person[i].target=0;
- person[i].targetframe=0;
-
- //Get up from front or back?
- if(person[i].skeleton.forward.y>0)
- person[i].targetanimation=getupfrontanim;
- else
- person[i].targetanimation=getupbackanim;
-
- //Find playercoords
- person[i].playercoords=person[i].averageloc;
- for(int j=0;j<person[i].skeleton.num_joints;j++){
- if(person[i].skeleton.joints[j].position.y>person[i].playercoords.y)person[i].playercoords.y=person[i].skeleton.joints[j].position.y;
- }
+ //Rag doll
+ if(person[i].skeleton.free==1&&person[i].longdead>0){
+ person[i].whichblockx=((person[i].skeleton.joints[0].position.x+block_spacing/2)/block_spacing);
+ person[i].whichblocky=((person[i].skeleton.joints[0].position.z+block_spacing/2)/block_spacing);
- //Find orientation
- XYZ firsttop=person[i].skeleton.joints[person[i].skeleton.jointlabels[neck]].position-person[i].skeleton.joints[person[i].skeleton.jointlabels[groin]].position;
- Normalise(&firsttop);
- person[i].playerrotation=acos(0-firsttop.z);
- person[i].playerrotation*=360/6.28;
- if(0>firsttop.x)person[i].playerrotation=360-person[i].playerrotation;
- person[i].playerrotation*=-1;
- person[i].playervelocity=0;
- if(person[i].targetanimation==getupfrontanim)person[i].playerrotation+=180;
+ move=0;
+ move.x=person[i].whichblockx*block_spacing;
+ move.z=person[i].whichblocky*block_spacing;
+ person[i].skeleton.DoGravity();
- for(int j=0;j<person[i].skeleton.num_joints;j++){
- person[i].tempanimation.position[j][0]=person[i].skeleton.joints[j].position-person[i].playercoords;
- person[i].tempanimation.position[j][0]=DoRotation(person[i].tempanimation.position[j][0],0,-person[i].playerrotation,0);
- }
+ if(person[i].averageloc.y<=50)person[i].skeleton.DoConstraints(&blocksimplecollide[citytype[person[i].whichblockx][person[i].whichblocky]],&move,cityrotation[person[i].whichblockx][person[i].whichblocky]*90);
+ if(person[i].averageloc.y>50)person[i].skeleton.DoConstraints(&blockcollide[citytype[person[i].whichblockx][person[i].whichblocky]],&move,cityrotation[person[i].whichblockx][person[i].whichblocky]*90);
+
+ person[i].oldaverageloc=person[i].averageloc;
+ person[i].averageloc=0;
+
+ for(int j=0;j<person[i].skeleton.num_joints;j++){
+ person[i].averageloc+=person[i].skeleton.joints[j].position;
}
+
+ person[i].averageloc/=person[i].skeleton.num_joints;
+ person[i].playercoords=person[i].averageloc;
+ if(person[i].longdead<multiplier/2&&person[i].longdead>0)person[i].DrawSkeleton(i);
+ if(findDistancefast(person[i].averageloc,person[i].oldaverageloc)<.2*multiplier)person[i].longdead-=multiplier/2;
}
- //Grenade
- if(Button()&&person[0].whichgun==grenade&&person[0].ammo>0&&person[0].reloading<=0&&person[0].attackframe<0&&person[0].targetanimation!=crouchanim){
- if(person[0].grenphase==0){
- XYZ soundsource=DoRotation(person[0].skeleton.joints[person[0].skeleton.jointlabels[righthand]].position,0,person[0].playerrotation,0)+person[0].playercoords;
- float gLoc[3];
- gLoc[0]=soundsource.x/soundscalefactor;
- gLoc[1]=soundsource.y/soundscalefactor;
- gLoc[2]=soundsource.z/soundscalefactor;
- alSourcefv(gSourceID[pinpullsound], AL_POSITION, gLoc);
- alSourcePlay(gSourceID[pinpullsound]);
- person[0].grenphase=1;
+ if(person[i].skeleton.free==1&&person[i].longdead<=0&&person[i].health>0&&person[i].longdead!=-1){
+ person[i].longdead=1;
+ person[i].skeleton.free=0;
+ person[i].currentanimation=lyinganim;
+ person[i].target=0;
+ person[i].targetframe=0;
+
+ //Get up from front or back?
+ if(person[i].skeleton.forward.y>0)
+ person[i].targetanimation=getupfrontanim;
+ else
+ person[i].targetanimation=getupbackanim;
+
+ //Find playercoords
+ person[i].playercoords=person[i].averageloc;
+ for(int j=0;j<person[i].skeleton.num_joints;j++){
+ if(person[i].skeleton.joints[j].position.y>person[i].playercoords.y)person[i].playercoords.y=person[i].skeleton.joints[j].position.y;
}
- }
- if((!Button())&&person[0].whichgun==grenade){
- if(person[0].grenphase==1){
- person[0].grenphase=0;
- person[0].attackframe=0;
- person[0].attacktarget=0;
- person[0].killtarget=0;
+ //Find orientation
+ XYZ firsttop=person[i].skeleton.joints[person[i].skeleton.jointlabels[neck]].position-person[i].skeleton.joints[person[i].skeleton.jointlabels[groin]].position;
+ Normalise(&firsttop);
+ person[i].playerrotation=acos(0-firsttop.z);
+ person[i].playerrotation*=360/6.28;
+ if(0>firsttop.x)person[i].playerrotation=360-person[i].playerrotation;
+ person[i].playerrotation*=-1;
+ person[i].playervelocity=0;
+ if(person[i].targetanimation==getupfrontanim)person[i].playerrotation+=180;
+
+ for(int j=0;j<person[i].skeleton.num_joints;j++){
+ person[i].tempanimation.position[j][0]=person[i].skeleton.joints[j].position-person[i].playercoords;
+ person[i].tempanimation.position[j][0]=DoRotation(person[i].tempanimation.position[j][0],0,-person[i].playerrotation,0);
}
}
+ }
- if(person[0].targetanimation==crouchanim){
- if(person[0].grenphase==1){
- person[0].grenphase=0;
- XYZ soundsource=DoRotation(person[0].skeleton.joints[person[0].skeleton.jointlabels[righthand]].position,0,person[0].playerrotation,0)+person[0].playercoords;
- float gLoc[3];
- gLoc[0]=soundsource.x/soundscalefactor;
- gLoc[1]=soundsource.y/soundscalefactor;
- gLoc[2]=soundsource.z/soundscalefactor;
- alSourcefv(gSourceID[pinreplacesound], AL_POSITION, gLoc);
- alSourcePlay(gSourceID[pinreplacesound]);
- }
+ //Grenade
+ if(Button()&&person[0].whichgun==grenade&&person[0].ammo>0&&person[0].reloading<=0&&person[0].attackframe<0&&person[0].targetanimation!=crouchanim){
+ if(person[0].grenphase==0){
+ XYZ soundsource=DoRotation(person[0].skeleton.joints[person[0].skeleton.jointlabels[righthand]].position,0,person[0].playerrotation,0)+person[0].playercoords;
+ float gLoc[3];
+ gLoc[0]=soundsource.x/soundscalefactor;
+ gLoc[1]=soundsource.y/soundscalefactor;
+ gLoc[2]=soundsource.z/soundscalefactor;
+ alSourcefv(gSourceID[pinpullsound], AL_POSITION, gLoc);
+ alSourcePlay(gSourceID[pinpullsound]);
+ person[0].grenphase=1;
}
+ }
- //Get gun
- int temp;
- int temp2;
- bool switched=0;
- if(Button()&&!oldbutton&&(person[0].aiming==0||person[0].whichgun==grenade||person[0].whichgun==nogun||person[0].whichgun==knife)&&person[0].currentanimation==crouchanim){
+ if((!Button())&&person[0].whichgun==grenade){
+ if(person[0].grenphase==1){
+ person[0].grenphase=0;
+ person[0].attackframe=0;
+ person[0].attacktarget=0;
+ person[0].killtarget=0;
+ }
+ }
- for(int i=0;i<max_people;i++){
+ if(person[0].targetanimation==crouchanim){
+ if(person[0].grenphase==1){
+ person[0].grenphase=0;
+ XYZ soundsource=DoRotation(person[0].skeleton.joints[person[0].skeleton.jointlabels[righthand]].position,0,person[0].playerrotation,0)+person[0].playercoords;
+ float gLoc[3];
+ gLoc[0]=soundsource.x/soundscalefactor;
+ gLoc[1]=soundsource.y/soundscalefactor;
+ gLoc[2]=soundsource.z/soundscalefactor;
+ alSourcefv(gSourceID[pinreplacesound], AL_POSITION, gLoc);
+ alSourcePlay(gSourceID[pinreplacesound]);
+ }
+ }
- if(!switched&&person[i].skeleton.free==1&&findDistancefast(person[0].playercoords,person[i].averageloc)<200){
+ //Get gun
+ int temp;
+ int temp2;
+ bool switched=0;
+ if(Button()&&!oldbutton&&(person[0].aiming==0||person[0].whichgun==grenade||person[0].whichgun==nogun||person[0].whichgun==knife)&&person[0].currentanimation==crouchanim){
- float gLoc[3];
+ for(int i=0;i<max_people;i++){
+
+ if(!switched&&person[i].skeleton.free==1&&findDistancefast(person[0].playercoords,person[i].averageloc)<200){
- gLoc[0]=person[0].playercoords.x/soundscalefactor;
+ float gLoc[3];
- gLoc[1]=person[0].playercoords.y/soundscalefactor;
+ gLoc[0]=person[0].playercoords.x/soundscalefactor;
- gLoc[2]=person[0].playercoords.z/soundscalefactor;
+ gLoc[1]=person[0].playercoords.y/soundscalefactor;
- alSourcefv(gSourceID[clicksound], AL_POSITION, gLoc);
+ gLoc[2]=person[0].playercoords.z/soundscalefactor;
- alSourcePlay(gSourceID[clicksound]);
+ alSourcefv(gSourceID[clicksound], AL_POSITION, gLoc);
- temp=person[0].whichgun;
+ alSourcePlay(gSourceID[clicksound]);
- temp2=person[0].ammo;
+ temp=person[0].whichgun;
- person[0].whichgun=person[i].whichgun;
+ temp2=person[0].ammo;
- person[0].ammo=person[i].ammo;
+ person[0].whichgun=person[i].whichgun;
- person[i].whichgun=temp;
+ person[0].ammo=person[i].ammo;
- person[i].ammo=temp2;
+ person[i].whichgun=temp;
- person[0].aiming=1;
+ person[i].ammo=temp2;
- person[0].aimamount=0;
+ person[0].aiming=1;
- switched=1;
+ person[0].aimamount=0;
- }
+ switched=1;
}
}
- //Throw
+ }
- if(Button()&&person[0].attackframe<0&&((person[0].whichgun==nogun||person[0].aiming==0)&&person[0].whichgun!=knife)&&person[0].currentanimation!=crouchanim&&person[0].targetanimation!=crouchanim&&person[0].targetanimation!=throwanim&&visions==0){
+ //Throw
- if(person[0].targetanimation==idleanim||person[0].targetanimation==walkanim){
+ if(Button()&&person[0].attackframe<0&&((person[0].whichgun==nogun||person[0].aiming==0)&&person[0].whichgun!=knife)&&person[0].currentanimation!=crouchanim&&person[0].targetanimation!=crouchanim&&person[0].targetanimation!=throwanim&&visions==0){
- bool attacking=0;
+ if(person[0].targetanimation==idleanim||person[0].targetanimation==walkanim){
- person[0].killtarget=-1;
+ bool attacking=0;
- float closedistance=-1;
+ person[0].killtarget=-1;
- for(int i=1;i<numpeople;i++){
+ float closedistance=-1;
- if(person[i].skeleton.free<1&&(person[i].whichgun!=nogun)&&findDistancefast(person[i].playercoords,person[0].playercoords+flatfacing)<12){
+ for(int i=1;i<numpeople;i++){
- attacking=1;
+ if(person[i].skeleton.free<1&&(person[i].whichgun!=nogun)&&findDistancefast(person[i].playercoords,person[0].playercoords+flatfacing)<12){
- if(person[0].killtarget==-1||findDistancefast(person[i].playercoords,person[0].playercoords)<closedistance){
+ attacking=1;
- person[0].killtarget=i;
+ if(person[0].killtarget==-1||findDistancefast(person[i].playercoords,person[0].playercoords)<closedistance){
- closedistance=findDistancefast(person[i].playercoords,person[0].playercoords);
+ person[0].killtarget=i;
- }
+ closedistance=findDistancefast(person[i].playercoords,person[0].playercoords);
}
}
- if(attacking){
+ }
- score+=150;
+ if(attacking){
- person[0].aiming=1;
+ score+=150;
- person[0].whichgun=person[person[0].killtarget].whichgun;
+ person[0].aiming=1;
- person[0].ammo=person[person[0].killtarget].ammo;
+ person[0].whichgun=person[person[0].killtarget].whichgun;
- person[person[0].killtarget].whichgun=nogun;
+ person[0].ammo=person[person[0].killtarget].ammo;
- person[person[0].killtarget].killtarget=-1;
+ person[person[0].killtarget].whichgun=nogun;
- person[0].targetframe=0;
+ person[person[0].killtarget].killtarget=-1;
- person[0].targetanimation=throwanim;
+ person[0].targetframe=0;
- person[0].target=1;
+ person[0].targetanimation=throwanim;
- person[0].speed=1;
+ person[0].target=1;
- person[person[0].killtarget].targetframe=0;
+ person[0].speed=1;
- person[person[0].killtarget].targetanimation=thrownanim;
+ person[person[0].killtarget].targetframe=0;
- person[person[0].killtarget].target=1;
+ person[person[0].killtarget].targetanimation=thrownanim;
- person[person[0].killtarget].playercoords=person[0].playercoords;
+ person[person[0].killtarget].target=1;
- person[person[0].killtarget].playerrotation=person[0].playerrotation;
+ person[person[0].killtarget].playercoords=person[0].playercoords;
- person[person[0].killtarget].speed=person[0].speed;
+ person[person[0].killtarget].playerrotation=person[0].playerrotation;
- person[person[0].killtarget].speedmult=1;
+ person[person[0].killtarget].speed=person[0].speed;
- }
+ person[person[0].killtarget].speedmult=1;
}
}
- //Gun whacking
+ }
- if(Button()&&(person[0].aiming==0||person[0].ammo<=0||person[0].whichgun==nogun||person[0].whichgun==knife||person[0].targetanimation==joganim)&&person[0].currentanimation!=crouchanim&&person[0].targetanimation!=throwanim&&person[0].whichgun!=grenade&&person[0].targetanimation!=crouchanim&&visions==0){
+ //Gun whacking
- if(person[0].attackframe==-1||person[person[0].killtarget].skeleton.free==1){
+ if(Button()&&(person[0].aiming==0||person[0].ammo<=0||person[0].whichgun==nogun||person[0].whichgun==knife||person[0].targetanimation==joganim)&&person[0].currentanimation!=crouchanim&&person[0].targetanimation!=throwanim&&person[0].whichgun!=grenade&&person[0].targetanimation!=crouchanim&&visions==0){
- bool attacking=0;
+ if(person[0].attackframe==-1||person[person[0].killtarget].skeleton.free==1){
- person[0].killtarget=-1;
+ bool attacking=0;
- float closedistance=-1;
+ person[0].killtarget=-1;
- for(int i=1;i<numpeople;i++){
+ float closedistance=-1;
- if(person[i].existing&&person[i].type!=viptype&&person[i].skeleton.free<1&&findDistancefast(person[i].playercoords,person[0].playercoords+flatfacing)<12+(person[0].whichgun==knife)*10){
+ for(int i=1;i<numpeople;i++){
- if(person[0].killtarget==-1||findDistancefast(person[i].playercoords,person[0].playercoords)<closedistance){
+ if(person[i].existing&&person[i].type!=viptype&&person[i].skeleton.free<1&&findDistancefast(person[i].playercoords,person[0].playercoords+flatfacing)<12+(person[0].whichgun==knife)*10){
- attacking=1;
+ if(person[0].killtarget==-1||findDistancefast(person[i].playercoords,person[0].playercoords)<closedistance){
- person[0].killtarget=i;
+ attacking=1;
- closedistance=findDistancefast(person[i].playercoords,person[0].playercoords);
+ person[0].killtarget=i;
- }
+ closedistance=findDistancefast(person[i].playercoords,person[0].playercoords);
}
}
- if(attacking){
-
- person[0].attacktarget=0;
+ }
- person[0].attackframe=0;
+ if(attacking){
- }
+ person[0].attacktarget=0;
- whacked=0;
+ person[0].attackframe=0;
}
+ whacked=0;
+
}
- XYZ velocity;
+ }
- if(person[0].attackframe>1||(person[0].attackframe>=0&&person[0].currentanimation==joganim)){
+ XYZ velocity;
- if(person[person[0].killtarget].skeleton.free<1&&person[0].killtarget!=0&&(person[0].aiming<1||person[0].whichgun==nogun||person[0].whichgun==knife||person[0].targetanimation==joganim)){
+ if(person[0].attackframe>1||(person[0].attackframe>=0&&person[0].currentanimation==joganim)){
- float gLoc[3];
+ if(person[person[0].killtarget].skeleton.free<1&&person[0].killtarget!=0&&(person[0].aiming<1||person[0].whichgun==nogun||person[0].whichgun==knife||person[0].targetanimation==joganim)){
- gLoc[0]=(camera.position.x+((person[0].playercoords.x+flatfacing.x)-camera.position.x)/2)/soundscalefactor;
+ float gLoc[3];
- gLoc[1]=(camera.position.y+((person[0].playercoords.y+flatfacing.y)-camera.position.y)/2)/soundscalefactor;
+ gLoc[0]=(camera.position.x+((person[0].playercoords.x+flatfacing.x)-camera.position.x)/2)/soundscalefactor;
- gLoc[2]=(camera.position.z+((person[0].playercoords.z+flatfacing.z)-camera.position.z)/2)/soundscalefactor;
+ gLoc[1]=(camera.position.y+((person[0].playercoords.y+flatfacing.y)-camera.position.y)/2)/soundscalefactor;
- if(person[person[0].killtarget].type!=zombietype)
+ gLoc[2]=(camera.position.z+((person[0].playercoords.z+flatfacing.z)-camera.position.z)/2)/soundscalefactor;
- {
+ if(person[person[0].killtarget].type!=zombietype)
- if(person[0].whichgun!=knife){
+ {
- alSourcefv(gSourceID[headwhacksound], AL_POSITION, gLoc);
+ if(person[0].whichgun!=knife){
- alSourcePlay(gSourceID[headwhacksound]);
+ alSourcefv(gSourceID[headwhacksound], AL_POSITION, gLoc);
- }
+ alSourcePlay(gSourceID[headwhacksound]);
- if(person[0].whichgun==knife){
+ }
- alSourcefv(gSourceID[knifeslashsound], AL_POSITION, gLoc);
+ if(person[0].whichgun==knife){
- alSourcePlay(gSourceID[knifeslashsound]);
+ alSourcefv(gSourceID[knifeslashsound], AL_POSITION, gLoc);
- person[person[0].killtarget].bjoint1=&person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]];
+ alSourcePlay(gSourceID[knifeslashsound]);
- person[person[0].killtarget].bjoint2=&person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]];
+ person[person[0].killtarget].bjoint1=&person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]];
- person[person[0].killtarget].bleeding=1;
+ person[person[0].killtarget].bjoint2=&person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]];
- person[person[0].killtarget].bleeddelay=1;
+ person[person[0].killtarget].bleeding=1;
- person[0].bjoint1=&person[0].skeleton.joints[person[0].skeleton.jointlabels[righthand]];
+ person[person[0].killtarget].bleeddelay=1;
- person[0].bjoint2=&person[0].skeleton.joints[person[0].skeleton.jointlabels[righthand]];
+ person[0].bjoint1=&person[0].skeleton.joints[person[0].skeleton.jointlabels[righthand]];
- person[0].bleeding=1;
+ person[0].bjoint2=&person[0].skeleton.joints[person[0].skeleton.jointlabels[righthand]];
- person[0].bleeddelay=1;
+ person[0].bleeding=1;
- velocity=DoRotation(flatfacing,0,70,0)*50+person[0].velocity*2;
+ person[0].bleeddelay=1;
- velocity.y+=30;
+ velocity=DoRotation(flatfacing,0,70,0)*50+person[0].velocity*2;
- sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,DoRotation(person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]].position,0,person[person[0].killtarget].playerrotation,0)+person[person[0].killtarget].playercoords, velocity*.3, 2);
+ velocity.y+=30;
- sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,DoRotation(person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]].position,0,person[person[0].killtarget].playerrotation,0)+person[person[0].killtarget].playercoords, velocity*.2, 3);
+ sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,DoRotation(person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]].position,0,person[person[0].killtarget].playerrotation,0)+person[person[0].killtarget].playercoords, velocity*.3, 2);
- sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,DoRotation(person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]].position,0,person[person[0].killtarget].playerrotation,0)+person[person[0].killtarget].playercoords, velocity*.1, 4);
+ sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,DoRotation(person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]].position,0,person[person[0].killtarget].playerrotation,0)+person[person[0].killtarget].playercoords, velocity*.2, 3);
- }
+ sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,DoRotation(person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]].position,0,person[person[0].killtarget].playerrotation,0)+person[person[0].killtarget].playercoords, velocity*.1, 4);
- person[person[0].killtarget].health-=100;
+ }
- person[person[0].killtarget].skeleton.free=1;
+ person[person[0].killtarget].health-=100;
- person[person[0].killtarget].longdead=1;
+ person[person[0].killtarget].skeleton.free=1;
- for(int j=0;j<person[person[0].killtarget].skeleton.num_joints;j++){
+ person[person[0].killtarget].longdead=1;
- person[person[0].killtarget].skeleton.joints[j].position=DoRotation(person[person[0].killtarget].skeleton.joints[j].position,0,person[person[0].killtarget].playerrotation,0);
+ for(int j=0;j<person[person[0].killtarget].skeleton.num_joints;j++){
- person[person[0].killtarget].skeleton.joints[j].position+=person[person[0].killtarget].playercoords;
+ person[person[0].killtarget].skeleton.joints[j].position=DoRotation(person[person[0].killtarget].skeleton.joints[j].position,0,person[person[0].killtarget].playerrotation,0);
- person[person[0].killtarget].skeleton.joints[j].realoldposition=person[person[0].killtarget].skeleton.joints[j].position;
+ person[person[0].killtarget].skeleton.joints[j].position+=person[person[0].killtarget].playercoords;
- person[person[0].killtarget].skeleton.joints[j].velocity=person[person[0].killtarget].velocity;
+ person[person[0].killtarget].skeleton.joints[j].realoldposition=person[person[0].killtarget].skeleton.joints[j].position;
- person[person[0].killtarget].skeleton.joints[j].velocity.x+=abs(Random()%10)-5;
+ person[person[0].killtarget].skeleton.joints[j].velocity=person[person[0].killtarget].velocity;
- person[person[0].killtarget].skeleton.joints[j].velocity.y+=abs(Random()%10)-5;
+ person[person[0].killtarget].skeleton.joints[j].velocity.x+=abs(Random()%10)-5;
- person[person[0].killtarget].skeleton.joints[j].velocity.z+=abs(Random()%10)-5;
+ person[person[0].killtarget].skeleton.joints[j].velocity.y+=abs(Random()%10)-5;
- }
+ person[person[0].killtarget].skeleton.joints[j].velocity.z+=abs(Random()%10)-5;
- if(person[0].whichgun!=knife){
+ }
- person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[head]].velocity+=DoRotation(flatfacing,0,40,0)*50;
+ if(person[0].whichgun!=knife){
- person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[head]].velocity+=person[0].velocity*2;
+ person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[head]].velocity+=DoRotation(flatfacing,0,40,0)*50;
- }
+ person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[head]].velocity+=person[0].velocity*2;
}
- else
+ }
- {
+ else
- if(whacked==0){
+ {
- whacked=1;
+ if(whacked==0){
- if(person[0].whichgun!=knife){
+ whacked=1;
- alSourcefv(gSourceID[headwhacksound], AL_POSITION, gLoc);
+ if(person[0].whichgun!=knife){
- alSourcePlay(gSourceID[headwhacksound]);
+ alSourcefv(gSourceID[headwhacksound], AL_POSITION, gLoc);
- }
+ alSourcePlay(gSourceID[headwhacksound]);
- if(person[0].whichgun==knife){
+ }
- alSourcefv(gSourceID[knifeslashsound], AL_POSITION, gLoc);
+ if(person[0].whichgun==knife){
- alSourcePlay(gSourceID[knifeslashsound]);
+ alSourcefv(gSourceID[knifeslashsound], AL_POSITION, gLoc);
- person[person[0].killtarget].bjoint1=&person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]];
+ alSourcePlay(gSourceID[knifeslashsound]);
- person[person[0].killtarget].bjoint2=&person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]];
+ person[person[0].killtarget].bjoint1=&person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]];
- person[person[0].killtarget].bleeding=1;
+ person[person[0].killtarget].bjoint2=&person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]];
- person[person[0].killtarget].bleeddelay=1;
+ person[person[0].killtarget].bleeding=1;
- person[0].bjoint1=&person[0].skeleton.joints[person[0].skeleton.jointlabels[righthand]];
+ person[person[0].killtarget].bleeddelay=1;
- person[0].bjoint2=&person[0].skeleton.joints[person[0].skeleton.jointlabels[righthand]];
+ person[0].bjoint1=&person[0].skeleton.joints[person[0].skeleton.jointlabels[righthand]];
- person[0].bleeding=1;
+ person[0].bjoint2=&person[0].skeleton.joints[person[0].skeleton.jointlabels[righthand]];
- person[0].bleeddelay=1;
+ person[0].bleeding=1;
- velocity=DoRotation(flatfacing,0,70,0)*50+person[0].velocity*2;
+ person[0].bleeddelay=1;
- velocity.y+=30;
+ velocity=DoRotation(flatfacing,0,70,0)*50+person[0].velocity*2;
- sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,DoRotation(person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]].position,0,person[person[0].killtarget].playerrotation,0)+person[person[0].killtarget].playercoords, velocity*.3, 2);
+ velocity.y+=30;
- sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,DoRotation(person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]].position,0,person[person[0].killtarget].playerrotation,0)+person[person[0].killtarget].playercoords, velocity*.2, 3);
+ sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,DoRotation(person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]].position,0,person[person[0].killtarget].playerrotation,0)+person[person[0].killtarget].playercoords, velocity*.3, 2);
- sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,DoRotation(person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]].position,0,person[person[0].killtarget].playerrotation,0)+person[person[0].killtarget].playercoords, velocity*.1, 4);
+ sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,DoRotation(person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]].position,0,person[person[0].killtarget].playerrotation,0)+person[person[0].killtarget].playercoords, velocity*.2, 3);
- }
+ sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,DoRotation(person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[neck]].position,0,person[person[0].killtarget].playerrotation,0)+person[person[0].killtarget].playercoords, velocity*.1, 4);
- person[person[0].killtarget].health-=200;
+ }
- person[person[0].killtarget].maxhealth-=20;
+ person[person[0].killtarget].health-=200;
- person[person[0].killtarget].skeleton.free=1;
+ person[person[0].killtarget].maxhealth-=20;
- person[person[0].killtarget].longdead=1;
+ person[person[0].killtarget].skeleton.free=1;
- for(int j=0;j<person[person[0].killtarget].skeleton.num_joints;j++){
+ person[person[0].killtarget].longdead=1;
- person[person[0].killtarget].skeleton.joints[j].position=DoRotation(person[person[0].killtarget].skeleton.joints[j].position,0,person[person[0].killtarget].playerrotation,0);
+ for(int j=0;j<person[person[0].killtarget].skeleton.num_joints;j++){
- person[person[0].killtarget].skeleton.joints[j].position+=person[person[0].killtarget].playercoords;
+ person[person[0].killtarget].skeleton.joints[j].position=DoRotation(person[person[0].killtarget].skeleton.joints[j].position,0,person[person[0].killtarget].playerrotation,0);
- person[person[0].killtarget].skeleton.joints[j].realoldposition=person[person[0].killtarget].skeleton.joints[j].position;
+ person[person[0].killtarget].skeleton.joints[j].position+=person[person[0].killtarget].playercoords;
- person[person[0].killtarget].skeleton.joints[j].velocity=person[person[0].killtarget].velocity;
+ person[person[0].killtarget].skeleton.joints[j].realoldposition=person[person[0].killtarget].skeleton.joints[j].position;
- person[person[0].killtarget].skeleton.joints[j].velocity.x+=abs(Random()%10)-5;
+ person[person[0].killtarget].skeleton.joints[j].velocity=person[person[0].killtarget].velocity;
- person[person[0].killtarget].skeleton.joints[j].velocity.y+=abs(Random()%10)-5;
+ person[person[0].killtarget].skeleton.joints[j].velocity.x+=abs(Random()%10)-5;
- person[person[0].killtarget].skeleton.joints[j].velocity.z+=abs(Random()%10)-5;
+ person[person[0].killtarget].skeleton.joints[j].velocity.y+=abs(Random()%10)-5;
- }
+ person[person[0].killtarget].skeleton.joints[j].velocity.z+=abs(Random()%10)-5;
- if(person[0].whichgun!=knife){
+ }
- person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[head]].velocity+=DoRotation(flatfacing,0,40,0)*50;
+ if(person[0].whichgun!=knife){
- person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[head]].velocity+=person[0].velocity*2;
+ person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[head]].velocity+=DoRotation(flatfacing,0,40,0)*50;
- }
+ person[person[0].killtarget].skeleton.joints[person[person[0].killtarget].skeleton.jointlabels[head]].velocity+=person[0].velocity*2;
}
@@ -2130,400 +2127,400 @@ void Game::Tick()
}
- //Tackle
- if (person[0].currentanimation == diveanim && visions == 0) {
- for (int i = 1; i < numpeople; i++) {
- if (person[i].skeleton.free > 0
- || findDistancefast(person[i].playercoords,
- person[0].playercoords
- + flatfacing) > 22)
- continue;
-
- float gLoc[3] {
- (camera.position.x
- + person[0].playercoords.x
- + flatfacing.x) / soundscalefactor / 2,
- (camera.position.y
- + person[0].playercoords.y
- + flatfacing.y) / soundscalefactor / 2,
- (camera.position.z
- + person[0].playercoords.z
- + flatfacing.z) / soundscalefactor / 2,
- };
-
- alSourcefv(gSourceID[headwhacksound],
- AL_POSITION, gLoc);
- alSourcePlay(gSourceID[headwhacksound]);
- person[i].skeleton.free = 1;
- person[i].longdead = 1;
-
- for (auto& joint : person[i].skeleton.joints) {
- joint.position = DoRotation(joint.position, 0, person[i].playerrotation, 0);
- joint.position += person[i].playercoords;
- joint.realoldposition = joint.position;
- joint.velocity = person[0].velocity;
- joint.velocity.y = -10;
- joint.velocity.x += abs(Random() % 10) - 5;
- joint.velocity.y += abs(Random() % 10) - 5;
- joint.velocity.z += abs(Random() % 10) - 5;
- }
- }
- }
+ }
+
+ //Tackle
+ if (person[0].currentanimation == diveanim && visions == 0) {
+ for (int i = 1; i < numpeople; i++) {
+ if (person[i].skeleton.free > 0
+ || findDistancefast(person[i].playercoords,
+ person[0].playercoords
+ + flatfacing) > 22)
+ continue;
- // Fire/wing
- bool firing = false;
- if (!Button()) {
- oldbutton = 0;
- } else if (oldbutton) {
- } else if (person[0].ammo <= 0 && person[0].aiming
- && person[0].targetanimation != joganim
- && person[0].whichgun != nogun
- && person[0].whichgun != knife
- && person[0].whichgun != grenade) {
- auto& coords = person[0].playercoords;
float gLoc[3] {
- coords.x / soundscalefactor,
- coords.y / soundscalefactor,
- coords.z / soundscalefactor,
+ (camera.position.x
+ + person[0].playercoords.x
+ + flatfacing.x) / soundscalefactor / 2,
+ (camera.position.y
+ + person[0].playercoords.y
+ + flatfacing.y) / soundscalefactor / 2,
+ (camera.position.z
+ + person[0].playercoords.z
+ + flatfacing.z) / soundscalefactor / 2,
};
- alSourcefv(gSourceID[clicksound], AL_POSITION, gLoc);
- alSourcePlay(gSourceID[clicksound]);
- oldbutton = 1;
- } else if (visions == 1) {
- alSourcePlay(gSourceID[soulinsound]);
- } else {
- firing = true;
- // Assault rifles are automatic.
- if (person[0].whichgun != assaultrifle)
- oldbutton = 1;
- }
- XYZ wallhit;
- XYZ start;
- XYZ finalwallhit;
- float inaccuracy = 0.0;
- int numshots;
- XYZ hitnorm;
- XYZ hitmove;
- int hitpoly = 0;
- float hitrotation = 0.0f;
- Model* model = NULL;
-
- for (int j = 0; j < numpeople; j++) {
- if (j && person[j].type != eviltype)
- continue;
-
- if (person[j].ammo <= 0
- || person[j].reloading > 0
- || person[j].targetanimation == joganim
- || person[j].aimamount < 1)
- firing = false;
- else if (j)
- firing = person[j].whichgun != nogun
- && person[j].whichgun != knife
- && person[j].killtargetvisible
- && person[j].shotdelay < 0;
-
- if (j && person[j].killtargetvisible
- && person[j].whichgun != nogun
- && person[j].whichgun != knife) {
- person[j].aiming = 1;
- if (person[j].shotdelay > 0)
- person[j].shotdelay -= multiplier * 0.9;
+ alSourcefv(gSourceID[headwhacksound],
+ AL_POSITION, gLoc);
+ alSourcePlay(gSourceID[headwhacksound]);
+ person[i].skeleton.free = 1;
+ person[i].longdead = 1;
+
+ for (auto& joint : person[i].skeleton.joints) {
+ joint.position = DoRotation(joint.position, 0, person[i].playerrotation, 0);
+ joint.position += person[i].playercoords;
+ joint.realoldposition = joint.position;
+ joint.velocity = person[0].velocity;
+ joint.velocity.y = -10;
+ joint.velocity.x += abs(Random() % 10) - 5;
+ joint.velocity.y += abs(Random() % 10) - 5;
+ joint.velocity.z += abs(Random() % 10) - 5;
}
+ }
+ }
- if (person[j].skeleton.free == 1
- || person[j].targetanimation == getupfrontanim
- || person[j].targetanimation == getupbackanim)
- person[j].shotdelay = shotdelayamount
- / difficulty;
+ // Fire/wing
+ bool firing = false;
+ if (!Button()) {
+ oldbutton = 0;
+ } else if (oldbutton) {
+ } else if (person[0].ammo <= 0 && person[0].aiming
+ && person[0].targetanimation != joganim
+ && person[0].whichgun != nogun
+ && person[0].whichgun != knife
+ && person[0].whichgun != grenade) {
+ auto& coords = person[0].playercoords;
+ float gLoc[3] {
+ coords.x / soundscalefactor,
+ coords.y / soundscalefactor,
+ coords.z / soundscalefactor,
+ };
+ alSourcefv(gSourceID[clicksound], AL_POSITION, gLoc);
+ alSourcePlay(gSourceID[clicksound]);
+ oldbutton = 1;
+ } else if (visions == 1) {
+ alSourcePlay(gSourceID[soulinsound]);
+ } else {
+ firing = true;
+ // Assault rifles are automatic.
+ if (person[0].whichgun != assaultrifle)
+ oldbutton = 1;
+ }
- if (person[j].ammo == 0
- && person[j].reloads[person[j].whichgun] > 0) {
- person[j].ammo = -1;
- person[j].aiming = 0;
- }
+ XYZ wallhit;
+ XYZ start;
+ XYZ finalwallhit;
+ float inaccuracy = 0.0;
+ int numshots;
+ XYZ hitnorm;
+ XYZ hitmove;
+ int hitpoly = 0;
+ float hitrotation = 0.0f;
+ Model* model = NULL;
+
+ for (int j = 0; j < numpeople; j++) {
+ if (j && person[j].type != eviltype)
+ continue;
+
+ if (person[j].ammo <= 0
+ || person[j].reloading > 0
+ || person[j].targetanimation == joganim
+ || person[j].aimamount < 1)
+ firing = false;
+ else if (j)
+ firing = person[j].whichgun != nogun
+ && person[j].whichgun != knife
+ && person[j].killtargetvisible
+ && person[j].shotdelay < 0;
+
+ if (j && person[j].killtargetvisible
+ && person[j].whichgun != nogun
+ && person[j].whichgun != knife) {
+ person[j].aiming = 1;
+ if (person[j].shotdelay > 0)
+ person[j].shotdelay -= multiplier * 0.9;
+ }
- if (firing) {
- if(person[j].whichgun==handgun1||person[j].whichgun==handgun2)inaccuracy=8;
+ if (person[j].skeleton.free == 1
+ || person[j].targetanimation == getupfrontanim
+ || person[j].targetanimation == getupbackanim)
+ person[j].shotdelay = shotdelayamount
+ / difficulty;
- if(person[j].whichgun==assaultrifle)inaccuracy=6;
+ if (person[j].ammo == 0
+ && person[j].reloads[person[j].whichgun] > 0) {
+ person[j].ammo = -1;
+ person[j].aiming = 0;
+ }
- if(person[j].whichgun==sniperrifle)inaccuracy=2;
+ if (firing) {
+ if(person[j].whichgun==handgun1||person[j].whichgun==handgun2)inaccuracy=8;
- if(person[j].whichgun==shotgun)inaccuracy=6;
+ if(person[j].whichgun==assaultrifle)inaccuracy=6;
- if(person[person[j].killtarget].skeleton.free==1)inaccuracy*=3;
+ if(person[j].whichgun==sniperrifle)inaccuracy=2;
- person[j].shotdelay=shotdelayamount/difficulty;
+ if(person[j].whichgun==shotgun)inaccuracy=6;
- if(person[j].aiming>=1&&person[j].recoil<=0){
+ if(person[person[j].killtarget].skeleton.free==1)inaccuracy*=3;
- //Firing
+ person[j].shotdelay=shotdelayamount/difficulty;
- person[j].litup=1;
+ if(person[j].aiming>=1&&person[j].recoil<=0){
- person[j].recoil=1;
+ //Firing
- XYZ end, aim, oldend;
+ person[j].litup=1;
- HitStruct hitstruct,temphitstruct;
+ person[j].recoil=1;
- float olddistance = 0.0f;
+ XYZ end, aim, oldend;
- float distance = 0.0f;
+ HitStruct hitstruct,temphitstruct;
- float totalarea = 0.0f;
+ float olddistance = 0.0f;
- int whichhit=-1;
+ float distance = 0.0f;
- if(person[j].whichgun==shotgun)numshots=7;
+ float totalarea = 0.0f;
- if(person[j].whichgun!=shotgun)numshots=1;
+ int whichhit=-1;
- if(person[j].whichgun!=grenade)person[j].ammo--;
+ if(person[j].whichgun==shotgun)numshots=7;
- for(int p=0;p<numshots;p++){
+ if(person[j].whichgun!=shotgun)numshots=1;
- if(!zoom||j!=0){
+ if(person[j].whichgun!=grenade)person[j].ammo--;
- if(person[j].whichgun==assaultrifle)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position-person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position,0,person[j].playerrotation-2.5,0);
+ for(int p=0;p<numshots;p++){
- if(person[j].whichgun==sniperrifle)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position-person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position,0,person[j].playerrotation+4,0);
+ if(!zoom||j!=0){
- if(person[j].whichgun==shotgun)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position-person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position,2+(float)(Random()%1000)/500,0,0);
+ if(person[j].whichgun==assaultrifle)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position-person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position,0,person[j].playerrotation-2.5,0);
- if(person[j].whichgun==shotgun)aim=DoRotation(aim,0,person[j].playerrotation-1+(float)(Random()%1000)/500,0);
+ if(person[j].whichgun==sniperrifle)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position-person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position,0,person[j].playerrotation+4,0);
- if(person[j].whichgun==handgun1&&!thirdperson&&j==0)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position-(person[j].skeleton.joints[person[j].skeleton.jointlabels[head]].position*.65+person[j].skeleton.joints[person[j].skeleton.jointlabels[neck]].position*.35),0,person[j].playerrotation-.9,0);
+ if(person[j].whichgun==shotgun)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position-person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position,2+(float)(Random()%1000)/500,0,0);
- if(person[j].whichgun==handgun1&&(thirdperson||j!=0))aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position-(person[j].skeleton.joints[person[j].skeleton.jointlabels[head]].position*.35+person[j].skeleton.joints[person[j].skeleton.jointlabels[neck]].position*.65),0,person[j].playerrotation-.9,0);
+ if(person[j].whichgun==shotgun)aim=DoRotation(aim,0,person[j].playerrotation-1+(float)(Random()%1000)/500,0);
- if(person[j].whichgun==handgun2&&!thirdperson&&j==0)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position-(person[j].skeleton.joints[person[j].skeleton.jointlabels[head]].position*.65+person[j].skeleton.joints[person[j].skeleton.jointlabels[neck]].position*.35),0,person[j].playerrotation-.9,0);
+ if(person[j].whichgun==handgun1&&!thirdperson&&j==0)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position-(person[j].skeleton.joints[person[j].skeleton.jointlabels[head]].position*.65+person[j].skeleton.joints[person[j].skeleton.jointlabels[neck]].position*.35),0,person[j].playerrotation-.9,0);
- if(person[j].whichgun==handgun2&&(thirdperson||j!=0))aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position-(person[j].skeleton.joints[person[j].skeleton.jointlabels[head]].position*.35+person[j].skeleton.joints[person[j].skeleton.jointlabels[neck]].position*.65),0,person[j].playerrotation-.9,0);
+ if(person[j].whichgun==handgun1&&(thirdperson||j!=0))aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position-(person[j].skeleton.joints[person[j].skeleton.jointlabels[head]].position*.35+person[j].skeleton.joints[person[j].skeleton.jointlabels[neck]].position*.65),0,person[j].playerrotation-.9,0);
- if(j!=0&&person[person[j].killtarget].skeleton.free==0)aim=(DoRotation(person[person[j].killtarget].skeleton.joints[person[person[j].killtarget].skeleton.jointlabels[abdomen]].position,0,person[person[j].killtarget].playerrotation,0)+person[person[j].killtarget].playercoords)-(DoRotation(person[j].skeleton.joints[person[j].skeleton.jointlabels[lefthand]].position,0,person[j].playerrotation,0)+person[j].playercoords);
+ if(person[j].whichgun==handgun2&&!thirdperson&&j==0)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position-(person[j].skeleton.joints[person[j].skeleton.jointlabels[head]].position*.65+person[j].skeleton.joints[person[j].skeleton.jointlabels[neck]].position*.35),0,person[j].playerrotation-.9,0);
- if(j!=0&&person[person[j].killtarget].skeleton.free!=0)aim=person[person[j].killtarget].skeleton.joints[person[person[j].killtarget].skeleton.jointlabels[abdomen]].position-(DoRotation(person[j].skeleton.joints[person[j].skeleton.jointlabels[lefthand]].position,0,person[j].playerrotation,0)+person[j].playercoords);
+ if(person[j].whichgun==handgun2&&(thirdperson||j!=0))aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position-(person[j].skeleton.joints[person[j].skeleton.jointlabels[head]].position*.35+person[j].skeleton.joints[person[j].skeleton.jointlabels[neck]].position*.65),0,person[j].playerrotation-.9,0);
- if(j!=0)aim=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),(float)(abs(Random()%2000))/2000*inaccuracy-inaccuracy/2,(float)(abs(Random()%2000))/2000*inaccuracy-inaccuracy/2,0),0,person[j].playerrotation,0);
+ if(j!=0&&person[person[j].killtarget].skeleton.free==0)aim=(DoRotation(person[person[j].killtarget].skeleton.joints[person[person[j].killtarget].skeleton.jointlabels[abdomen]].position,0,person[person[j].killtarget].playerrotation,0)+person[person[j].killtarget].playercoords)-(DoRotation(person[j].skeleton.joints[person[j].skeleton.jointlabels[lefthand]].position,0,person[j].playerrotation,0)+person[j].playercoords);
- }
+ if(j!=0&&person[person[j].killtarget].skeleton.free!=0)aim=person[person[j].killtarget].skeleton.joints[person[person[j].killtarget].skeleton.jointlabels[abdomen]].position-(DoRotation(person[j].skeleton.joints[person[j].skeleton.jointlabels[lefthand]].position,0,person[j].playerrotation,0)+person[j].playercoords);
- if(zoom&&j==0){
+ if(j!=0)aim=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),(float)(abs(Random()%2000))/2000*inaccuracy-inaccuracy/2,(float)(abs(Random()%2000))/2000*inaccuracy-inaccuracy/2,0),0,person[j].playerrotation,0);
- start=camera.position;
+ }
- aim=facing;
+ if(zoom&&j==0){
- }
+ start=camera.position;
- Normalise(&aim);
+ aim=facing;
- if(person[j].whichgun==sniperrifle){
+ }
- start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position,0,person[j].playerrotation,0);
+ Normalise(&aim);
- float gLoc[3];
+ if(person[j].whichgun==sniperrifle){
- start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*.35;
+ start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position,0,person[j].playerrotation,0);
- gLoc[0]=(camera.position.x+(start.x-camera.position.x)/4)/soundscalefactor;
+ float gLoc[3];
- gLoc[1]=(camera.position.y+(start.y-camera.position.y)/4)/soundscalefactor;
+ start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*.35;
- gLoc[2]=(camera.position.z+(start.z-camera.position.z)/4)/soundscalefactor;
+ gLoc[0]=(camera.position.x+(start.x-camera.position.x)/4)/soundscalefactor;
- alSourcefv(gSourceID[riflesound], AL_POSITION, gLoc);
+ gLoc[1]=(camera.position.y+(start.y-camera.position.y)/4)/soundscalefactor;
- alSourcePlay(gSourceID[riflesound]);
+ gLoc[2]=(camera.position.z+(start.z-camera.position.z)/4)/soundscalefactor;
- if(j==0){
+ alSourcefv(gSourceID[riflesound], AL_POSITION, gLoc);
- if(person[j].currentanimation!=crouchanim)camera.rotation2-=7;
+ alSourcePlay(gSourceID[riflesound]);
- if(person[j].currentanimation==crouchanim)camera.rotation2-=3;
+ if(j==0){
- }
+ if(person[j].currentanimation!=crouchanim)camera.rotation2-=7;
+
+ if(person[j].currentanimation==crouchanim)camera.rotation2-=3;
}
- if(person[j].whichgun==shotgun){
+ }
- start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position,0,person[j].playerrotation,0);
+ if(person[j].whichgun==shotgun){
- float gLoc[3];
+ start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position,0,person[j].playerrotation,0);
- start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*.35;
+ float gLoc[3];
- if(p==numshots-1){
+ start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*.35;
- gLoc[0]=(camera.position.x+(start.x-camera.position.x)/4)/soundscalefactor;
+ if(p==numshots-1){
- gLoc[1]=(camera.position.y+(start.y-camera.position.y)/4)/soundscalefactor;
+ gLoc[0]=(camera.position.x+(start.x-camera.position.x)/4)/soundscalefactor;
- gLoc[2]=(camera.position.z+(start.z-camera.position.z)/4)/soundscalefactor;
+ gLoc[1]=(camera.position.y+(start.y-camera.position.y)/4)/soundscalefactor;
- alSourcefv(gSourceID[shotgunsound], AL_POSITION, gLoc);
+ gLoc[2]=(camera.position.z+(start.z-camera.position.z)/4)/soundscalefactor;
- alSourcePlay(gSourceID[shotgunsound]);
+ alSourcefv(gSourceID[shotgunsound], AL_POSITION, gLoc);
- if(j==0){
+ alSourcePlay(gSourceID[shotgunsound]);
- if(person[j].currentanimation!=crouchanim)camera.rotation2-=7;
+ if(j==0){
- if(person[j].currentanimation==crouchanim)camera.rotation2-=3;
+ if(person[j].currentanimation!=crouchanim)camera.rotation2-=7;
- }
+ if(person[j].currentanimation==crouchanim)camera.rotation2-=3;
- }
+ }
}
- if(person[j].whichgun==handgun1){
+ }
- start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[rightwrist])].position,0,person[j].playerrotation,0);
+ if(person[j].whichgun==handgun1){
- start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*.55;
+ start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[rightwrist])].position,0,person[j].playerrotation,0);
- float gLoc[3];
+ start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*.55;
- gLoc[0]=(camera.position.x+(start.x-camera.position.x)/4)/soundscalefactor;
+ float gLoc[3];
- gLoc[1]=(camera.position.y+(start.y-camera.position.y)/4)/soundscalefactor;
+ gLoc[0]=(camera.position.x+(start.x-camera.position.x)/4)/soundscalefactor;
- gLoc[2]=(camera.position.z+(start.z-camera.position.z)/4)/soundscalefactor;
+ gLoc[1]=(camera.position.y+(start.y-camera.position.y)/4)/soundscalefactor;
- alSourcefv(gSourceID[pistol1sound], AL_POSITION, gLoc);
+ gLoc[2]=(camera.position.z+(start.z-camera.position.z)/4)/soundscalefactor;
- alSourcePlay(gSourceID[pistol1sound]);
+ alSourcefv(gSourceID[pistol1sound], AL_POSITION, gLoc);
- if(j==0){
+ alSourcePlay(gSourceID[pistol1sound]);
- if(person[j].currentanimation!=crouchanim)camera.rotation2-=6;
+ if(j==0){
- if(person[j].currentanimation==crouchanim)camera.rotation2-=4;
+ if(person[j].currentanimation!=crouchanim)camera.rotation2-=6;
- }
+ if(person[j].currentanimation==crouchanim)camera.rotation2-=4;
}
- if(person[j].whichgun==handgun2){
+ }
- start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[rightwrist])].position,0,person[j].playerrotation,0);
+ if(person[j].whichgun==handgun2){
- start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*.55;
+ start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[rightwrist])].position,0,person[j].playerrotation,0);
- float gLoc[3];
+ start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*.55;
- gLoc[0]=(camera.position.x+(start.x-camera.position.x)/4)/soundscalefactor;
+ float gLoc[3];
- gLoc[1]=(camera.position.y+(start.y-camera.position.y)/4)/soundscalefactor;
+ gLoc[0]=(camera.position.x+(start.x-camera.position.x)/4)/soundscalefactor;
- gLoc[2]=(camera.position.z+(start.z-camera.position.z)/4)/soundscalefactor;
+ gLoc[1]=(camera.position.y+(start.y-camera.position.y)/4)/soundscalefactor;
- alSourcefv(gSourceID[pistol2sound], AL_POSITION, gLoc);
+ gLoc[2]=(camera.position.z+(start.z-camera.position.z)/4)/soundscalefactor;
- alSourcePlay(gSourceID[pistol2sound]);
+ alSourcefv(gSourceID[pistol2sound], AL_POSITION, gLoc);
- if(j==0){
+ alSourcePlay(gSourceID[pistol2sound]);
- if(person[j].currentanimation!=crouchanim)camera.rotation2-=5;
+ if(j==0){
- if(person[j].currentanimation==crouchanim)camera.rotation2-=3;
+ if(person[j].currentanimation!=crouchanim)camera.rotation2-=5;
- }
+ if(person[j].currentanimation==crouchanim)camera.rotation2-=3;
}
- if(person[j].whichgun==assaultrifle){
+ }
- start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position,0,person[j].playerrotation,0);
+ if(person[j].whichgun==assaultrifle){
- start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*.25;
+ start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position,0,person[j].playerrotation,0);
- float gLoc[3];
+ start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*.25;
- gLoc[0]=(camera.position.x+(start.x-camera.position.x)/4)/soundscalefactor;
+ float gLoc[3];
- gLoc[1]=(camera.position.y+(start.y-camera.position.y)/4)/soundscalefactor;
+ gLoc[0]=(camera.position.x+(start.x-camera.position.x)/4)/soundscalefactor;
- gLoc[2]=(camera.position.z+(start.z-camera.position.z)/4)/soundscalefactor;
+ gLoc[1]=(camera.position.y+(start.y-camera.position.y)/4)/soundscalefactor;
- alSourcefv(gSourceID[machinegunsound], AL_POSITION, gLoc);
+ gLoc[2]=(camera.position.z+(start.z-camera.position.z)/4)/soundscalefactor;
- alSourcePlay(gSourceID[machinegunsound]);
+ alSourcefv(gSourceID[machinegunsound], AL_POSITION, gLoc);
- if(j==0){
+ alSourcePlay(gSourceID[machinegunsound]);
- if(person[j].currentanimation!=crouchanim){
+ if(j==0){
- camera.rotation2-=2.3;
+ if(person[j].currentanimation!=crouchanim){
- camera.rotation+=(float)(Random()%100)/50;
+ camera.rotation2-=2.3;
- }
+ camera.rotation+=(float)(Random()%100)/50;
- if(person[j].currentanimation==crouchanim){
+ }
- camera.rotation2-=1.5;
+ if(person[j].currentanimation==crouchanim){
- camera.rotation+=(float)(Random()%100)/60;
+ camera.rotation2-=1.5;
- }
+ camera.rotation+=(float)(Random()%100)/60;
}
}
- end=start+aim*1000;
+ }
- if(debug){
+ end=start+aim*1000;
- if(IsKeyDown(theKeyMap, MAC_G_KEY)&&j==0){
+ if(debug){
- sprites.MakeSprite(grenadesprite, 1, 1, 1, 1, start, aim*200, 1.01);
+ if(IsKeyDown(theKeyMap, MAC_G_KEY)&&j==0){
- }
+ sprites.MakeSprite(grenadesprite, 1, 1, 1, 1, start, aim*200, 1.01);
- }
+ }
- if(!IsKeyDown(theKeyMap, MAC_G_KEY)||j!=0||!debug){
+ }
- int bulletstrength=1;
+ if(!IsKeyDown(theKeyMap, MAC_G_KEY)||j!=0||!debug){
- int firstpass=-1;
+ int bulletstrength=1;
- bool penetrate;
+ int firstpass=-1;
- for(int m=0;m<bulletstrength;m++){
+ bool penetrate;
- //People
+ for(int m=0;m<bulletstrength;m++){
- whichhit=-1;
+ //People
- for(int i=0;i<numpeople;i++){
+ whichhit=-1;
- if(i!=j&&i!=firstpass&&person[i].existing){
+ for(int i=0;i<numpeople;i++){
- temphitstruct=person[i].BulletCollideWithPlayer(i, start, end);
+ if(i!=j&&i!=firstpass&&person[i].existing){
- if(temphitstruct.collision){
+ temphitstruct=person[i].BulletCollideWithPlayer(i, start, end);
- distance=findDistancefast(start,temphitstruct.hitlocation);
+ if(temphitstruct.collision){
- if(distance<olddistance||whichhit==-1){
+ distance=findDistancefast(start,temphitstruct.hitlocation);
- end=temphitstruct.hitlocation;
+ if(distance<olddistance||whichhit==-1){
- olddistance=distance;
+ end=temphitstruct.hitlocation;
- hitstruct=temphitstruct;
+ olddistance=distance;
- whichhit=i;
+ hitstruct=temphitstruct;
- }
+ whichhit=i;
}
@@ -2531,387 +2528,387 @@ void Game::Tick()
}
- //Blocks
+ }
- wallhit=0;
+ //Blocks
- beginx=(person[j].playercoords.x+block_spacing/2)/block_spacing-3;
+ wallhit=0;
- if(beginx<0)beginx=0;
+ beginx=(person[j].playercoords.x+block_spacing/2)/block_spacing-3;
- beginz=(person[j].playercoords.z+block_spacing/2)/block_spacing-3;
+ if(beginx<0)beginx=0;
- if(beginz<0)beginz=0;
+ beginz=(person[j].playercoords.z+block_spacing/2)/block_spacing-3;
- endx=(person[j].playercoords.x+block_spacing/2)/block_spacing+3;
+ if(beginz<0)beginz=0;
- if(endx>num_blocks-1)endx=num_blocks-1;
+ endx=(person[j].playercoords.x+block_spacing/2)/block_spacing+3;
- endz=(person[j].playercoords.z+block_spacing/2)/block_spacing+3;
+ if(endx>num_blocks-1)endx=num_blocks-1;
- if(endz>num_blocks-1)endz=num_blocks-1;
+ endz=(person[j].playercoords.z+block_spacing/2)/block_spacing+3;
- if(beginx<endx&&beginz<endz)
+ if(endz>num_blocks-1)endz=num_blocks-1;
- finalwallhit=0;
+ if(beginx<endx&&beginz<endz)
- for(int i=beginx;i<=endx;i++)
+ finalwallhit=0;
- for(int j=beginz;j<=endz;j++){
+ for(int i=beginx;i<=endx;i++)
- move=0;
+ for(int j=beginz;j<=endz;j++){
- move.x=i*block_spacing;
+ move=0;
- move.z=j*block_spacing;
+ move.x=i*block_spacing;
- whichtri=blocks[citytype[i][j]].LineCheck2(start,end,&wallhit,move,cityrotation[i][j]*90);
+ move.z=j*block_spacing;
- if(whichtri!=-1){
+ whichtri=blocks[citytype[i][j]].LineCheck2(start,end,&wallhit,move,cityrotation[i][j]*90);
- whichhit=-1;
+ if(whichtri!=-1){
- end=wallhit;
+ whichhit=-1;
- finalwallhit=wallhit;
+ end=wallhit;
- hitnorm=DoRotation(blocks[citytype[i][j]].normals[whichtri],0,cityrotation[i][j]*90,0);
+ finalwallhit=wallhit;
- hitmove=move;
+ hitnorm=DoRotation(blocks[citytype[i][j]].normals[whichtri],0,cityrotation[i][j]*90,0);
- hitrotation=cityrotation[i][j]*90;
+ hitmove=move;
- hitpoly=whichtri;
+ hitrotation=cityrotation[i][j]*90;
- model=&blocks[citytype[i][j]];
+ hitpoly=whichtri;
- if(j==0&&blocks[citytype[i][j]].normals[whichtri].y>.9)bulletstrength=2;
+ model=&blocks[citytype[i][j]];
- }
+ if(j==0&&blocks[citytype[i][j]].normals[whichtri].y>.9)bulletstrength=2;
}
- wallhit=0;
+ }
- wallhit.x=camera.position.x;
+ wallhit=0;
- wallhit.z=camera.position.z;
+ wallhit.x=camera.position.x;
- whichtri=Bigstreet.LineCheck2(start,end,&wallhit,wallhit,0);
+ wallhit.z=camera.position.z;
- if(whichtri!=-1){
+ whichtri=Bigstreet.LineCheck2(start,end,&wallhit,wallhit,0);
- end.y-=.5;
+ if(whichtri!=-1){
- end=wallhit;
+ end.y-=.5;
- finalwallhit=wallhit;
+ end=wallhit;
- bulletstrength=2;
+ finalwallhit=wallhit;
- hitnorm=0;
+ bulletstrength=2;
- hitnorm.y=1;
+ hitnorm=0;
- hitmove=0;
+ hitnorm.y=1;
- hitrotation=0;
+ hitmove=0;
- }
+ hitrotation=0;
- if(m==0){
+ }
- if(j==0&&slomo==2){
+ if(m==0){
- soundscalefactor=soundscalefactordefault;
+ if(j==0&&slomo==2){
- alSourceStop(gSourceID[whichsong]);
+ soundscalefactor=soundscalefactordefault;
- alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 0);
+ alSourceStop(gSourceID[whichsong]);
- alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 0);
+ alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 0);
- if(person[0].whichgun==knife)whichsong=knifesong;
+ alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 0);
- if(person[0].whichgun!=knife)whichsong=shootsong;
+ if(person[0].whichgun==knife)whichsong=knifesong;
- if(type==zombie_type)whichsong=zombiesong;
+ if(person[0].whichgun!=knife)whichsong=shootsong;
- alSourcef(gSourceID[whichsong], AL_PITCH, 1);
+ if(type==zombie_type)whichsong=zombiesong;
- alSourcePlay(gSourceID[whichsong]);
+ alSourcef(gSourceID[whichsong], AL_PITCH, 1);
- alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 1);
+ alSourcePlay(gSourceID[whichsong]);
- alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 1);
+ alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 1);
- slomo=0;
+ alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 1);
- if(whichhit==-1)alSourcePlay(gSourceID[disguisekillsound]);
+ slomo=0;
- flashamount=.5;
+ if(whichhit==-1)alSourcePlay(gSourceID[disguisekillsound]);
- flashr=1;flashg=1;flashb=1;
+ flashamount=.5;
- }
+ flashr=1;flashg=1;flashb=1;
}
- //Impact
+ }
- oldend=end;
+ //Impact
- //with person
+ oldend=end;
- if(whichhit!=-1&&whichhit!=firstpass){
+ //with person
- if(j==0)person[whichhit].dead=1;
+ if(whichhit!=-1&&whichhit!=firstpass){
- if(whichhit==1){
+ if(j==0)person[whichhit].dead=1;
- murderer=j;
+ if(whichhit==1){
- }
+ murderer=j;
- if(person[whichhit].health==100&&j==0){
+ }
- if(person[whichhit].type==civiliantype)civkills++;
+ if(person[whichhit].health==100&&j==0){
- if(person[whichhit].type==eviltype)goodkills++;
+ if(person[whichhit].type==civiliantype)civkills++;
- }
+ if(person[whichhit].type==eviltype)goodkills++;
- if(person[whichhit].health==100&&j!=0){
+ }
- badkills++;
+ if(person[whichhit].health==100&&j!=0){
- }
+ badkills++;
- //penetrate
+ }
- penetrate=abs(Random()%2)==1;
+ //penetrate
- if(numshots>1)penetrate=0;
+ penetrate=abs(Random()%2)==1;
- if(penetrate){bulletstrength=2;
+ if(numshots>1)penetrate=0;
- firstpass=whichhit;
+ if(penetrate){bulletstrength=2;
- end=start+aim*1000;}
+ firstpass=whichhit;
- if(person[j].whichgun==assaultrifle)person[whichhit].health-=20;
+ end=start+aim*1000;}
- if(person[j].whichgun==assaultrifle&&person[whichhit].type==zombietype)person[whichhit].health-=60;
+ if(person[j].whichgun==assaultrifle)person[whichhit].health-=20;
- if(person[j].whichgun==handgun1){
+ if(person[j].whichgun==assaultrifle&&person[whichhit].type==zombietype)person[whichhit].health-=60;
- if(person[whichhit].type!=zombietype)person[whichhit].health-=100;
+ if(person[j].whichgun==handgun1){
- if(person[whichhit].type==zombietype)person[whichhit].health-=100;
+ if(person[whichhit].type!=zombietype)person[whichhit].health-=100;
- person[whichhit].DoAnimations(whichhit);
+ if(person[whichhit].type==zombietype)person[whichhit].health-=100;
- }
+ person[whichhit].DoAnimations(whichhit);
- if(person[j].whichgun==handgun2)person[whichhit].health-=20;
+ }
- if(person[j].whichgun==handgun2&&person[whichhit].type==zombietype)person[whichhit].health-=60;
+ if(person[j].whichgun==handgun2)person[whichhit].health-=20;
- if(person[j].whichgun==sniperrifle&&m!=0)person[whichhit].health-=30;
+ if(person[j].whichgun==handgun2&&person[whichhit].type==zombietype)person[whichhit].health-=60;
- if(person[j].whichgun==shotgun)person[whichhit].health-=60;
+ if(person[j].whichgun==sniperrifle&&m!=0)person[whichhit].health-=30;
- if(person[j].whichgun==sniperrifle&&m==0){
+ if(person[j].whichgun==shotgun)person[whichhit].health-=60;
- if(person[whichhit].type!=zombietype)person[whichhit].health-=100;
+ if(person[j].whichgun==sniperrifle&&m==0){
- if(person[whichhit].type==zombietype)person[whichhit].health-=120;
+ if(person[whichhit].type!=zombietype)person[whichhit].health-=100;
- person[whichhit].DoAnimations(whichhit);
+ if(person[whichhit].type==zombietype)person[whichhit].health-=120;
- }
+ person[whichhit].DoAnimations(whichhit);
- if(hitstruct.joint1->modelnum==headmodel&&person[whichhit].type!=zombietype){
+ }
- person[whichhit].health-=60;
+ if(hitstruct.joint1->modelnum==headmodel&&person[whichhit].type!=zombietype){
- }
+ person[whichhit].health-=60;
- if(person[whichhit].type==zombietype)person[whichhit].speedmult-=.05;
+ }
- if(person[whichhit].type==zombietype)person[whichhit].maxhealth-=10;
+ if(person[whichhit].type==zombietype)person[whichhit].speedmult-=.05;
- if(whichhit==0){
+ if(person[whichhit].type==zombietype)person[whichhit].maxhealth-=10;
- bulletstrength=1;
+ if(whichhit==0){
- person[0].health=100;
+ bulletstrength=1;
- flashr=0;
+ person[0].health=100;
- flashg=0;
+ flashr=0;
- flashb=0;
+ flashg=0;
- flashamount=1;
+ flashb=0;
- float gLoc[3];
+ flashamount=1;
- gLoc[0]=hitstruct.hitlocation.x/soundscalefactor;
+ float gLoc[3];
- gLoc[1]=hitstruct.hitlocation.y/soundscalefactor;
+ gLoc[0]=hitstruct.hitlocation.x/soundscalefactor;
- gLoc[2]=hitstruct.hitlocation.z/soundscalefactor;
+ gLoc[1]=hitstruct.hitlocation.y/soundscalefactor;
- alSourcefv(gSourceID[bodywhacksound], AL_POSITION, gLoc);
+ gLoc[2]=hitstruct.hitlocation.z/soundscalefactor;
- alSourcePlay(gSourceID[bodywhacksound]);
+ alSourcefv(gSourceID[bodywhacksound], AL_POSITION, gLoc);
- }
+ alSourcePlay(gSourceID[bodywhacksound]);
- person[whichhit].longdead=1;
+ }
- if(person[whichhit].health<=0){
+ person[whichhit].longdead=1;
- person[whichhit].skeleton.offset=0;
+ if(person[whichhit].health<=0){
- if(person[whichhit].skeleton.free!=1){
+ person[whichhit].skeleton.offset=0;
- person[whichhit].skeleton.free=1;
+ if(person[whichhit].skeleton.free!=1){
- totalarea=0;
+ person[whichhit].skeleton.free=1;
- for(int j=0;j<person[whichhit].skeleton.num_joints;j++){
+ totalarea=0;
- person[whichhit].skeleton.joints[j].position=DoRotation(person[whichhit].skeleton.joints[j].position,0,person[whichhit].playerrotation,0);
+ for(int j=0;j<person[whichhit].skeleton.num_joints;j++){
- person[whichhit].skeleton.joints[j].position+=person[whichhit].playercoords;
+ person[whichhit].skeleton.joints[j].position=DoRotation(person[whichhit].skeleton.joints[j].position,0,person[whichhit].playerrotation,0);
- person[whichhit].skeleton.joints[j].realoldposition=person[whichhit].skeleton.joints[j].position;
+ person[whichhit].skeleton.joints[j].position+=person[whichhit].playercoords;
- person[whichhit].skeleton.joints[j].velocity=person[whichhit].velocity;
+ person[whichhit].skeleton.joints[j].realoldposition=person[whichhit].skeleton.joints[j].position;
- person[whichhit].skeleton.joints[j].velocity.x+=(float)(abs(Random()%20)-10)/2;
+ person[whichhit].skeleton.joints[j].velocity=person[whichhit].velocity;
- person[whichhit].skeleton.joints[j].velocity.y+=(float)(abs(Random()%20)-10)/2;
+ person[whichhit].skeleton.joints[j].velocity.x+=(float)(abs(Random()%20)-10)/2;
- person[whichhit].skeleton.joints[j].velocity.z+=(float)(abs(Random()%20)-10)/2;
+ person[whichhit].skeleton.joints[j].velocity.y+=(float)(abs(Random()%20)-10)/2;
- }
+ person[whichhit].skeleton.joints[j].velocity.z+=(float)(abs(Random()%20)-10)/2;
}
- for(int j=0;j<person[whichhit].skeleton.num_joints;j++){
+ }
- if(findDistancefast(person[whichhit].skeleton.joints[j].position,hitstruct.hitlocation)<200){
+ for(int j=0;j<person[whichhit].skeleton.num_joints;j++){
- totalarea+=(200/findDistancefast(person[whichhit].skeleton.joints[j].position,hitstruct.hitlocation));
+ if(findDistancefast(person[whichhit].skeleton.joints[j].position,hitstruct.hitlocation)<200){
- }
+ totalarea+=(200/findDistancefast(person[whichhit].skeleton.joints[j].position,hitstruct.hitlocation));
}
- for(int j=0;j<person[whichhit].skeleton.num_joints;j++){
+ }
- if(findDistancefast(person[whichhit].skeleton.joints[j].position,hitstruct.hitlocation)<200){
+ for(int j=0;j<person[whichhit].skeleton.num_joints;j++){
- person[whichhit].skeleton.joints[j].velocity+=aim*((200/findDistancefast(person[whichhit].skeleton.joints[j].position,hitstruct.hitlocation))/totalarea*200);
+ if(findDistancefast(person[whichhit].skeleton.joints[j].position,hitstruct.hitlocation)<200){
- }
+ person[whichhit].skeleton.joints[j].velocity+=aim*((200/findDistancefast(person[whichhit].skeleton.joints[j].position,hitstruct.hitlocation))/totalarea*200);
}
}
- if(person[whichhit].health>0){
+ }
- if(person[whichhit].killtargetvisible==0&&person[whichhit].type!=zombietype&&person[whichhit].currentanimation!=getupfrontanim&person[whichhit].currentanimation!=getupbackanim){
+ if(person[whichhit].health>0){
- if(hitstruct.joint1->modelnum==headmodel)person[whichhit].targetanimation=headpainanim;
+ if(person[whichhit].killtargetvisible==0&&person[whichhit].type!=zombietype&&person[whichhit].currentanimation!=getupfrontanim&person[whichhit].currentanimation!=getupbackanim){
- if(hitstruct.joint1->modelnum==chestmodel)person[whichhit].targetanimation=chestpainanim;
+ if(hitstruct.joint1->modelnum==headmodel)person[whichhit].targetanimation=headpainanim;
- if(hitstruct.joint1->modelnum==abdomenmodel)person[whichhit].targetanimation=stomachpainanim;
+ if(hitstruct.joint1->modelnum==chestmodel)person[whichhit].targetanimation=chestpainanim;
- if(hitstruct.joint1->label==rightelbow||hitstruct.joint1->label==rightshoulder||hitstruct.joint1->label==rightwrist||hitstruct.joint1->label==righthand)person[whichhit].targetanimation=rightarmpainanim;
+ if(hitstruct.joint1->modelnum==abdomenmodel)person[whichhit].targetanimation=stomachpainanim;
- if(hitstruct.joint1->label==leftelbow||hitstruct.joint1->label==leftshoulder||hitstruct.joint1->label==leftwrist||hitstruct.joint1->label==lefthand)person[whichhit].targetanimation=leftarmpainanim;
+ if(hitstruct.joint1->label==rightelbow||hitstruct.joint1->label==rightshoulder||hitstruct.joint1->label==rightwrist||hitstruct.joint1->label==righthand)person[whichhit].targetanimation=rightarmpainanim;
- if(hitstruct.joint1->label==rightknee||hitstruct.joint1->label==righthip||hitstruct.joint1->label==rightankle||hitstruct.joint1->label==rightfoot)person[whichhit].targetanimation=rightlegpainanim;
+ if(hitstruct.joint1->label==leftelbow||hitstruct.joint1->label==leftshoulder||hitstruct.joint1->label==leftwrist||hitstruct.joint1->label==lefthand)person[whichhit].targetanimation=leftarmpainanim;
- if(hitstruct.joint1->label==leftknee||hitstruct.joint1->label==lefthip||hitstruct.joint1->label==leftankle||hitstruct.joint1->label==leftfoot)person[whichhit].targetanimation=leftlegpainanim;
+ if(hitstruct.joint1->label==rightknee||hitstruct.joint1->label==righthip||hitstruct.joint1->label==rightankle||hitstruct.joint1->label==rightfoot)person[whichhit].targetanimation=rightlegpainanim;
- person[whichhit].targetframe=0;
+ if(hitstruct.joint1->label==leftknee||hitstruct.joint1->label==lefthip||hitstruct.joint1->label==leftankle||hitstruct.joint1->label==leftfoot)person[whichhit].targetanimation=leftlegpainanim;
- person[whichhit].target=0;
+ person[whichhit].targetframe=0;
- }
+ person[whichhit].target=0;
- person[whichhit].skeleton.offset=1;
+ }
- for(int j=0;j<person[whichhit].skeleton.num_joints;j++){
+ person[whichhit].skeleton.offset=1;
- if(findDistancefast(DoRotation(person[whichhit].skeleton.joints[j].position,0,person[whichhit].playerrotation,0)+person[whichhit].playercoords,hitstruct.hitlocation)<200){
+ for(int j=0;j<person[whichhit].skeleton.num_joints;j++){
- totalarea+=(200/findDistancefast(DoRotation(person[whichhit].skeleton.joints[j].position,0,person[whichhit].playerrotation,0)+person[whichhit].playercoords,hitstruct.hitlocation));
+ if(findDistancefast(DoRotation(person[whichhit].skeleton.joints[j].position,0,person[whichhit].playerrotation,0)+person[whichhit].playercoords,hitstruct.hitlocation)<200){
- }
+ totalarea+=(200/findDistancefast(DoRotation(person[whichhit].skeleton.joints[j].position,0,person[whichhit].playerrotation,0)+person[whichhit].playercoords,hitstruct.hitlocation));
}
- float offsetlength;
+ }
- for(int j=0;j<person[whichhit].skeleton.num_joints;j++){
+ float offsetlength;
- if(findDistancefast(DoRotation(person[whichhit].skeleton.joints[j].position,0,person[whichhit].playerrotation,0)+person[whichhit].playercoords,hitstruct.hitlocation)<200){
+ for(int j=0;j<person[whichhit].skeleton.num_joints;j++){
- person[whichhit].skeleton.joints[j].offset+=DoRotation(aim*((200/findDistancefast(DoRotation(person[whichhit].skeleton.joints[j].position,0,person[whichhit].playerrotation,0)+person[whichhit].playercoords,hitstruct.hitlocation))/totalarea*10),0,-person[whichhit].playerrotation,0);
+ if(findDistancefast(DoRotation(person[whichhit].skeleton.joints[j].position,0,person[whichhit].playerrotation,0)+person[whichhit].playercoords,hitstruct.hitlocation)<200){
- }
+ person[whichhit].skeleton.joints[j].offset+=DoRotation(aim*((200/findDistancefast(DoRotation(person[whichhit].skeleton.joints[j].position,0,person[whichhit].playerrotation,0)+person[whichhit].playercoords,hitstruct.hitlocation))/totalarea*10),0,-person[whichhit].playerrotation,0);
- offsetlength=findLengthfast(person[whichhit].skeleton.joints[j].offset);
+ }
- if(offsetlength>36){
+ offsetlength=findLengthfast(person[whichhit].skeleton.joints[j].offset);
- Normalise(&person[whichhit].skeleton.joints[j].offset);
+ if(offsetlength>36){
- person[whichhit].skeleton.joints[j].offset*=6;
+ Normalise(&person[whichhit].skeleton.joints[j].offset);
- }
+ person[whichhit].skeleton.joints[j].offset*=6;
}
}
- if(hitstruct.joint1->modelnum==headmodel&&person[whichhit].health<=0){
+ }
- for(int j=0;j<person[whichhit].skeleton.num_joints;j++){
+ if(hitstruct.joint1->modelnum==headmodel&&person[whichhit].health<=0){
- if(&person[whichhit].skeleton.joints[j]==hitstruct.joint1||&person[whichhit].skeleton.joints[j]==hitstruct.joint2){
+ for(int j=0;j<person[whichhit].skeleton.num_joints;j++){
- if(j!=person[whichhit].skeleton.jointlabels[abdomen]&&j!=person[whichhit].skeleton.jointlabels[groin]&&j!=person[whichhit].skeleton.jointlabels[neck]){
+ if(&person[whichhit].skeleton.joints[j]==hitstruct.joint1||&person[whichhit].skeleton.joints[j]==hitstruct.joint2){
- sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,person[whichhit].skeleton.joints[j].position, person[whichhit].skeleton.joints[j].velocity/3, 9);
+ if(j!=person[whichhit].skeleton.jointlabels[abdomen]&&j!=person[whichhit].skeleton.jointlabels[groin]&&j!=person[whichhit].skeleton.jointlabels[neck]){
- sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,person[whichhit].skeleton.joints[j].position, DoRotation(person[whichhit].skeleton.joints[j].velocity/3,Random()%360,Random()%360,0)/5, 5);
+ sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,person[whichhit].skeleton.joints[j].position, person[whichhit].skeleton.joints[j].velocity/3, 9);
- sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,person[whichhit].skeleton.joints[j].position, DoRotation(person[whichhit].skeleton.joints[j].velocity/3,Random()%360,Random()%360,0)/5, 5);
+ sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,person[whichhit].skeleton.joints[j].position, DoRotation(person[whichhit].skeleton.joints[j].velocity/3,Random()%360,Random()%360,0)/5, 5);
- sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,person[whichhit].skeleton.joints[j].position, DoRotation(person[whichhit].skeleton.joints[j].velocity/3,Random()%360,Random()%360,0)/5, 5);
+ sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,person[whichhit].skeleton.joints[j].position, DoRotation(person[whichhit].skeleton.joints[j].velocity/3,Random()%360,Random()%360,0)/5, 5);
- sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,person[whichhit].skeleton.joints[j].position, DoRotation(person[whichhit].skeleton.joints[j].velocity/3,Random()%360,Random()%360,0)/5, 5);
+ sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,person[whichhit].skeleton.joints[j].position, DoRotation(person[whichhit].skeleton.joints[j].velocity/3,Random()%360,Random()%360,0)/5, 5);
- person[whichhit].skeleton.DeleteJoint(j);
+ sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,person[whichhit].skeleton.joints[j].position, DoRotation(person[whichhit].skeleton.joints[j].velocity/3,Random()%360,Random()%360,0)/5, 5);
- person[whichhit].skeleton.broken=1;
+ person[whichhit].skeleton.DeleteJoint(j);
- person[whichhit].health=-10000;
+ person[whichhit].skeleton.broken=1;
- person[whichhit].skeleton.joints[j].existing=0;
+ person[whichhit].health=-10000;
- if(person[whichhit].type==zombietype)score+=300;
+ person[whichhit].skeleton.joints[j].existing=0;
- }
+ if(person[whichhit].type==zombietype)score+=300;
}
@@ -2919,211 +2916,211 @@ void Game::Tick()
}
- XYZ velocity;
+ }
- velocity=aim*-8;
+ XYZ velocity;
- //blood
+ velocity=aim*-8;
- if(!hitstruct.joint1->modelnum==headmodel){
+ //blood
- if(person[j].whichgun==sniperrifle)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*0, 5);
+ if(!hitstruct.joint1->modelnum==headmodel){
- if(person[j].whichgun==sniperrifle&&penetrate)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*-3, 7);
+ if(person[j].whichgun==sniperrifle)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*0, 5);
- if(person[j].whichgun==shotgun)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*0, 5);
+ if(person[j].whichgun==sniperrifle&&penetrate)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*-3, 7);
- if(person[j].whichgun==shotgun&&penetrate)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*-3, 7);
+ if(person[j].whichgun==shotgun)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*0, 5);
- if(person[j].whichgun==assaultrifle)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*0, 3);
+ if(person[j].whichgun==shotgun&&penetrate)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*-3, 7);
- if(person[j].whichgun==assaultrifle&&penetrate)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*-3, 7);
+ if(person[j].whichgun==assaultrifle)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*0, 3);
- if(person[j].whichgun==handgun1)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*0, 3);
+ if(person[j].whichgun==assaultrifle&&penetrate)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*-3, 7);
- if(person[j].whichgun==handgun1&&penetrate)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*-3, 4);
+ if(person[j].whichgun==handgun1)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*0, 3);
- if(person[j].whichgun==handgun2)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*0, 3);
+ if(person[j].whichgun==handgun1&&penetrate)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*-3, 4);
- if(person[j].whichgun==handgun2&&penetrate)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*-3, 4);
+ if(person[j].whichgun==handgun2)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*0, 3);
- }else{
+ if(person[j].whichgun==handgun2&&penetrate)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*-3, 4);
- sprites.MakeSprite(bloodspritenoup, 1, 1, .2, .2, hitstruct.hitlocation, velocity*0, 6);
+ }else{
- sprites.MakeSprite(bloodspritenoup, 1, 1, .5, .5, hitstruct.hitlocation, velocity*-2, 7);
+ sprites.MakeSprite(bloodspritenoup, 1, 1, .2, .2, hitstruct.hitlocation, velocity*0, 6);
- sprites.MakeSprite(bloodspritenoup, 1, 1, .2, .2, hitstruct.hitlocation, velocity*-3, 10);
+ sprites.MakeSprite(bloodspritenoup, 1, 1, .5, .5, hitstruct.hitlocation, velocity*-2, 7);
- }
+ sprites.MakeSprite(bloodspritenoup, 1, 1, .2, .2, hitstruct.hitlocation, velocity*-3, 10);
- person[whichhit].bjoint1=hitstruct.joint1;
+ }
- person[whichhit].bjoint2=hitstruct.joint2;
+ person[whichhit].bjoint1=hitstruct.joint1;
- person[whichhit].bleeding=1;
+ person[whichhit].bjoint2=hitstruct.joint2;
- person[whichhit].bleeddelay=1;
+ person[whichhit].bleeding=1;
- float gLoc[3];
+ person[whichhit].bleeddelay=1;
- gLoc[0]=(camera.position.x+(hitstruct.hitlocation.x-camera.position.x)/4)/soundscalefactor;
+ float gLoc[3];
- gLoc[1]=(camera.position.y+(hitstruct.hitlocation.y-camera.position.y)/4)/soundscalefactor;
+ gLoc[0]=(camera.position.x+(hitstruct.hitlocation.x-camera.position.x)/4)/soundscalefactor;
- gLoc[2]=(camera.position.z+(hitstruct.hitlocation.z-camera.position.z)/4)/soundscalefactor;
+ gLoc[1]=(camera.position.y+(hitstruct.hitlocation.y-camera.position.y)/4)/soundscalefactor;
- if(!hitstruct.joint1->modelnum==headmodel){
+ gLoc[2]=(camera.position.z+(hitstruct.hitlocation.z-camera.position.z)/4)/soundscalefactor;
- if(!thirdperson)alSourcef(gSourceID[bodyhitsound], AL_MIN_GAIN, 1);
+ if(!hitstruct.joint1->modelnum==headmodel){
- if(thirdperson)alSourcef(gSourceID[bodyhitsound], AL_MIN_GAIN, .1);
+ if(!thirdperson)alSourcef(gSourceID[bodyhitsound], AL_MIN_GAIN, 1);
- alSourcefv(gSourceID[bodyhitsound], AL_POSITION, gLoc);
+ if(thirdperson)alSourcef(gSourceID[bodyhitsound], AL_MIN_GAIN, .1);
- alSourcePlay(gSourceID[bodyhitsound]);
+ alSourcefv(gSourceID[bodyhitsound], AL_POSITION, gLoc);
- }
+ alSourcePlay(gSourceID[bodyhitsound]);
- if(hitstruct.joint1->modelnum==headmodel){
+ }
- if(!thirdperson)alSourcef(gSourceID[headshotsound], AL_MIN_GAIN, 1);
+ if(hitstruct.joint1->modelnum==headmodel){
- if(thirdperson)alSourcef(gSourceID[headshotsound], AL_MIN_GAIN, .1);
+ if(!thirdperson)alSourcef(gSourceID[headshotsound], AL_MIN_GAIN, 1);
- alSourcefv(gSourceID[headshotsound], AL_POSITION, gLoc);
+ if(thirdperson)alSourcef(gSourceID[headshotsound], AL_MIN_GAIN, .1);
- alSourcePlay(gSourceID[headshotsound]);
+ alSourcefv(gSourceID[headshotsound], AL_POSITION, gLoc);
- }
+ alSourcePlay(gSourceID[headshotsound]);
- }//with wall
+ }
- if(oldend==finalwallhit){
+ }//with wall
- decals.MakeDecal(bullethole, finalwallhit,.7,hitnorm, hitpoly, model, hitmove, hitrotation);
+ if(oldend==finalwallhit){
- XYZ velocity;
+ decals.MakeDecal(bullethole, finalwallhit,.7,hitnorm, hitpoly, model, hitmove, hitrotation);
- velocity=aim*-4;
+ XYZ velocity;
- velocity=hitnorm*3;
+ velocity=aim*-4;
- if(person[j].whichgun==sniperrifle){
+ velocity=hitnorm*3;
- sprites.MakeSprite(smokesprite, .4, 1, 1, 1, finalwallhit, velocity, 10);
+ if(person[j].whichgun==sniperrifle){
- sprites.MakeSprite(muzzleflashsprite, 1, 1, 1, 1, finalwallhit, velocity, 2);
+ sprites.MakeSprite(smokesprite, .4, 1, 1, 1, finalwallhit, velocity, 10);
- }
+ sprites.MakeSprite(muzzleflashsprite, 1, 1, 1, 1, finalwallhit, velocity, 2);
- if(person[j].whichgun==shotgun){
+ }
- sprites.MakeSprite(smokesprite, .4, 1, 1, 1, finalwallhit, velocity, 5);
+ if(person[j].whichgun==shotgun){
- sprites.MakeSprite(muzzleflashsprite, 1, 1, 1, 1, finalwallhit, velocity, .8);
+ sprites.MakeSprite(smokesprite, .4, 1, 1, 1, finalwallhit, velocity, 5);
- }
+ sprites.MakeSprite(muzzleflashsprite, 1, 1, 1, 1, finalwallhit, velocity, .8);
- if(person[j].whichgun==assaultrifle){
+ }
- sprites.MakeSprite(smokesprite, .4, 1, 1, 1, finalwallhit, velocity, 6);
+ if(person[j].whichgun==assaultrifle){
- sprites.MakeSprite(muzzleflashsprite, 1, 1, 1, 1, finalwallhit, velocity, 1);
+ sprites.MakeSprite(smokesprite, .4, 1, 1, 1, finalwallhit, velocity, 6);
- }
+ sprites.MakeSprite(muzzleflashsprite, 1, 1, 1, 1, finalwallhit, velocity, 1);
- if(person[j].whichgun==handgun1){
+ }
- sprites.MakeSprite(smokesprite, .4, 1, 1, 1, finalwallhit, velocity, 6);
+ if(person[j].whichgun==handgun1){
- sprites.MakeSprite(muzzleflashsprite, 1, 1, 1, 1, finalwallhit, velocity, 1);
+ sprites.MakeSprite(smokesprite, .4, 1, 1, 1, finalwallhit, velocity, 6);
- }
+ sprites.MakeSprite(muzzleflashsprite, 1, 1, 1, 1, finalwallhit, velocity, 1);
- if(person[j].whichgun==handgun2){
+ }
- sprites.MakeSprite(smokesprite, .4, 1, 1, 1, finalwallhit, velocity, 6);
+ if(person[j].whichgun==handgun2){
- sprites.MakeSprite(muzzleflashsprite, 1, 1, 1, 1, finalwallhit, velocity, 1);
+ sprites.MakeSprite(smokesprite, .4, 1, 1, 1, finalwallhit, velocity, 6);
- }
+ sprites.MakeSprite(muzzleflashsprite, 1, 1, 1, 1, finalwallhit, velocity, 1);
- float gLoc[3];
+ }
- gLoc[0]=finalwallhit.x/soundscalefactor;
+ float gLoc[3];
- gLoc[1]=finalwallhit.y/soundscalefactor;
+ gLoc[0]=finalwallhit.x/soundscalefactor;
- gLoc[2]=finalwallhit.z/soundscalefactor;
+ gLoc[1]=finalwallhit.y/soundscalefactor;
- alSourcefv(gSourceID[wallhitsound], AL_POSITION, gLoc);
+ gLoc[2]=finalwallhit.z/soundscalefactor;
- alSourcePlay(gSourceID[wallhitsound]);
+ alSourcefv(gSourceID[wallhitsound], AL_POSITION, gLoc);
- }
+ alSourcePlay(gSourceID[wallhitsound]);
- lastshot[0]=start;
+ }
- lastshot[1]=oldend;
+ lastshot[0]=start;
- velocity=aim*8;
+ lastshot[1]=oldend;
- if(person[j].whichgun!=sniperrifle&&person[j].whichgun!=shotgun&&p==numshots-1)sprites.MakeSprite(smokesprite, .3, 1, 1, 1, start+aim*1.5, velocity, 3);
+ velocity=aim*8;
- if(person[j].whichgun==shotgun&&p==numshots-1)sprites.MakeSprite(smokesprite, .4, 1, 1, 1, start+aim*1.5, velocity, 5);
+ if(person[j].whichgun!=sniperrifle&&person[j].whichgun!=shotgun&&p==numshots-1)sprites.MakeSprite(smokesprite, .3, 1, 1, 1, start+aim*1.5, velocity, 3);
- if(person[j].whichgun==sniperrifle&&!zoom)sprites.MakeSprite(smokesprite, .3, 1, 1, 1, start+aim*2.2, velocity, 4);
+ if(person[j].whichgun==shotgun&&p==numshots-1)sprites.MakeSprite(smokesprite, .4, 1, 1, 1, start+aim*1.5, velocity, 5);
- if(j!=0||zoom==0)sprites.MakeSprite(bullet, .07, 1, 1, .7, lastshot[0]+aim*1, lastshot[1], .2);
+ if(person[j].whichgun==sniperrifle&&!zoom)sprites.MakeSprite(smokesprite, .3, 1, 1, 1, start+aim*2.2, velocity, 4);
- //Nearby bullet whoosh
+ if(j!=0||zoom==0)sprites.MakeSprite(bullet, .07, 1, 1, .7, lastshot[0]+aim*1, lastshot[1], .2);
- long dot_ta,dot_tb;
+ //Nearby bullet whoosh
- XYZ *a,*b,*c,nearest;
+ long dot_ta,dot_tb;
- a=&lastshot[0];
+ XYZ *a,*b,*c,nearest;
- *a+=aim*1;
+ a=&lastshot[0];
- b=&lastshot[1];
+ *a+=aim*1;
- c=&camera.position;
+ b=&lastshot[1];
- nearest=0;
+ c=&camera.position;
- dot_ta = (c->x - a->x)*(b->x - a->x) + (c->y - a->y)*(b->y - a->y) + (c->z - a->z)*(b->z - a->z);
+ nearest=0;
- dot_tb = (c->x - b->x)*(a->x - b->x) + (c->y - b->y)*(a->y - b->y) + (c->z - b->z)*(a->z - b->z);
+ dot_ta = (c->x - a->x)*(b->x - a->x) + (c->y - a->y)*(b->y - a->y) + (c->z - a->z)*(b->z - a->z);
- if (!dot_ta <= 0&&!dot_tb <= 0){
+ dot_tb = (c->x - b->x)*(a->x - b->x) + (c->y - b->y)*(a->y - b->y) + (c->z - b->z)*(a->z - b->z);
- nearest.x = a->x + ((b->x - a->x) * dot_ta)/(dot_ta + dot_tb);
+ if (!dot_ta <= 0&&!dot_tb <= 0){
- nearest.y = a->y + ((b->y - a->y) * dot_ta)/(dot_ta +dot_tb);
+ nearest.x = a->x + ((b->x - a->x) * dot_ta)/(dot_ta + dot_tb);
- nearest.z = a->z + ((b->z - a->z) * dot_ta)/(dot_ta +dot_tb);
+ nearest.y = a->y + ((b->y - a->y) * dot_ta)/(dot_ta +dot_tb);
- }
+ nearest.z = a->z + ((b->z - a->z) * dot_ta)/(dot_ta +dot_tb);
- if(nearest.x){
+ }
- if(findDistancefast(nearest,camera.position)<10&&(thirdperson==2||j!=0)){
+ if(nearest.x){
- float gLoc[3];
+ if(findDistancefast(nearest,camera.position)<10&&(thirdperson==2||j!=0)){
- gLoc[0]=(camera.position.x+(nearest.x-camera.position.x))/soundscalefactor;
+ float gLoc[3];
- gLoc[1]=(camera.position.y+(nearest.y-camera.position.y))/soundscalefactor;
+ gLoc[0]=(camera.position.x+(nearest.x-camera.position.x))/soundscalefactor;
- gLoc[2]=(camera.position.z+(nearest.z-camera.position.z))/soundscalefactor;
+ gLoc[1]=(camera.position.y+(nearest.y-camera.position.y))/soundscalefactor;
- alSourcefv(gSourceID[nearbulletsound], AL_POSITION, gLoc);
+ gLoc[2]=(camera.position.z+(nearest.z-camera.position.z))/soundscalefactor;
- alSourcePlay(gSourceID[nearbulletsound]);
+ alSourcefv(gSourceID[nearbulletsound], AL_POSITION, gLoc);
- }
+ alSourcePlay(gSourceID[nearbulletsound]);
}
@@ -3131,189 +3128,189 @@ void Game::Tick()
}
- }
+ }
- }
}
- }
- if(lasersight&&person[0].whichgun!=grenade){
+ }
+ }
+ }
- for(int j=0;j<numpeople;j++){
+ if(lasersight&&person[0].whichgun!=grenade){
- if(person[j].type==playertype){
+ for(int j=0;j<numpeople;j++){
- if(person[j].aiming>=1){
+ if(person[j].type==playertype){
- //Firing
+ if(person[j].aiming>=1){
- XYZ end, aim;
+ //Firing
- HitStruct hitstruct,temphitstruct;
+ XYZ end, aim;
- float olddistance = 0.0f;
+ HitStruct hitstruct,temphitstruct;
- float distance;
+ float olddistance = 0.0f;
- int whichhit=-1;
+ float distance;
- if(!zoom||j!=0){
+ int whichhit=-1;
- if(person[j].whichgun==assaultrifle)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position-person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position,0,person[j].playerrotation-2.5,0);
+ if(!zoom||j!=0){
- if(person[j].whichgun==sniperrifle)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position-person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position,0,person[j].playerrotation+4,0);
+ if(person[j].whichgun==assaultrifle)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position-person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position,0,person[j].playerrotation-2.5,0);
- if(person[j].whichgun==shotgun)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position-person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position,0,person[j].playerrotation+4,0);
+ if(person[j].whichgun==sniperrifle)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position-person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position,0,person[j].playerrotation+4,0);
- if(person[j].whichgun==handgun1&&!thirdperson&&j==0)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position-(person[j].skeleton.joints[person[j].skeleton.jointlabels[head]].position*.65+person[j].skeleton.joints[person[j].skeleton.jointlabels[neck]].position*.35),0,person[j].playerrotation-.9,0);
+ if(person[j].whichgun==shotgun)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position-person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position,0,person[j].playerrotation+4,0);
- if(person[j].whichgun==handgun1&&(thirdperson||j!=0))aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position-(person[j].skeleton.joints[person[j].skeleton.jointlabels[head]].position*.35+person[j].skeleton.joints[person[j].skeleton.jointlabels[neck]].position*.65),0,person[j].playerrotation-.9,0);
+ if(person[j].whichgun==handgun1&&!thirdperson&&j==0)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position-(person[j].skeleton.joints[person[j].skeleton.jointlabels[head]].position*.65+person[j].skeleton.joints[person[j].skeleton.jointlabels[neck]].position*.35),0,person[j].playerrotation-.9,0);
- if(person[j].whichgun==handgun2&&!thirdperson&&j==0)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position-(person[j].skeleton.joints[person[j].skeleton.jointlabels[head]].position*.65+person[j].skeleton.joints[person[j].skeleton.jointlabels[neck]].position*.35),0,person[j].playerrotation-.9,0);
+ if(person[j].whichgun==handgun1&&(thirdperson||j!=0))aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position-(person[j].skeleton.joints[person[j].skeleton.jointlabels[head]].position*.35+person[j].skeleton.joints[person[j].skeleton.jointlabels[neck]].position*.65),0,person[j].playerrotation-.9,0);
- if(person[j].whichgun==handgun2&&(thirdperson||j!=0))aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position-(person[j].skeleton.joints[person[j].skeleton.jointlabels[head]].position*.35+person[j].skeleton.joints[person[j].skeleton.jointlabels[neck]].position*.65),0,person[j].playerrotation-.9,0);
+ if(person[j].whichgun==handgun2&&!thirdperson&&j==0)aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position-(person[j].skeleton.joints[person[j].skeleton.jointlabels[head]].position*.65+person[j].skeleton.joints[person[j].skeleton.jointlabels[neck]].position*.35),0,person[j].playerrotation-.9,0);
- }
+ if(person[j].whichgun==handgun2&&(thirdperson||j!=0))aim=DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[righthand])].position-(person[j].skeleton.joints[person[j].skeleton.jointlabels[head]].position*.35+person[j].skeleton.joints[person[j].skeleton.jointlabels[neck]].position*.65),0,person[j].playerrotation-.9,0);
- if(zoom&&j==0){
+ }
- start=camera.position;
+ if(zoom&&j==0){
- aim=facing;
+ start=camera.position;
- }
+ aim=facing;
- Normalise(&aim);
+ }
- if(person[j].whichgun==sniperrifle){
+ Normalise(&aim);
- start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position,0,person[j].playerrotation,0);
+ if(person[j].whichgun==sniperrifle){
- start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*(0-.4);
+ start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position,0,person[j].playerrotation,0);
- }
+ start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*(0-.4);
- if(person[j].whichgun==shotgun){
+ }
- start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position,0,person[j].playerrotation,0);
+ if(person[j].whichgun==shotgun){
- start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*(0-.4);
+ start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position,0,person[j].playerrotation,0);
- }
+ start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*(0-.4);
- if(person[j].whichgun==handgun1){
+ }
- start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[rightwrist])].position,0,person[j].playerrotation,0);
+ if(person[j].whichgun==handgun1){
- start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*(.55-.4);
+ start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[rightwrist])].position,0,person[j].playerrotation,0);
- }
+ start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*(.55-.4);
- if(person[j].whichgun==handgun2){
+ }
- start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[rightwrist])].position,0,person[j].playerrotation,0);
+ if(person[j].whichgun==handgun2){
- start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*(.55-.4);
+ start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[rightwrist])].position,0,person[j].playerrotation,0);
- }
+ start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*(.55-.4);
- if(person[j].whichgun==assaultrifle){
+ }
- start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position,0,person[j].playerrotation,0);
+ if(person[j].whichgun==assaultrifle){
- start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*(.25-.4);
+ start=person[j].playercoords+DoRotation(person[j].skeleton.joints[(person[j].skeleton.jointlabels[lefthand])].position,0,person[j].playerrotation,0);
- }
+ start-=DoRotation(DoRotation(DoRotation(aim,0,-person[j].playerrotation,0),90,0,0),0,person[j].playerrotation,0)*(.25-.4);
- end=start+aim*1000;
+ }
- //Blocks
+ end=start+aim*1000;
- wallhit=0;
+ //Blocks
- beginx=(person[j].playercoords.x+block_spacing/2)/block_spacing-2;
+ wallhit=0;
- if(beginx<0)beginx=0;
+ beginx=(person[j].playercoords.x+block_spacing/2)/block_spacing-2;
- beginz=(person[j].playercoords.z+block_spacing/2)/block_spacing-2;
+ if(beginx<0)beginx=0;
- if(beginz<0)beginz=0;
+ beginz=(person[j].playercoords.z+block_spacing/2)/block_spacing-2;
- endx=(person[j].playercoords.x+block_spacing/2)/block_spacing+2;
+ if(beginz<0)beginz=0;
- if(endx>num_blocks-1)endx=num_blocks-1;
+ endx=(person[j].playercoords.x+block_spacing/2)/block_spacing+2;
- endz=(person[j].playercoords.z+block_spacing/2)/block_spacing+2;
+ if(endx>num_blocks-1)endx=num_blocks-1;
- if(endz>num_blocks-1)endz=num_blocks-1;
+ endz=(person[j].playercoords.z+block_spacing/2)/block_spacing+2;
- if(beginx<endx&&beginz<endz)
+ if(endz>num_blocks-1)endz=num_blocks-1;
- finalwallhit=0;
+ if(beginx<endx&&beginz<endz)
- for(int i=beginx;i<=endx;i++)
+ finalwallhit=0;
- for(int j=beginz;j<=endz;j++){
+ for(int i=beginx;i<=endx;i++)
- move=0;
+ for(int j=beginz;j<=endz;j++){
- move.x=i*block_spacing;
+ move=0;
- move.z=j*block_spacing;
+ move.x=i*block_spacing;
- whichtri=blocks[citytype[i][j]].LineCheck2(start,end,&wallhit,move,cityrotation[i][j]*90);
+ move.z=j*block_spacing;
- if(whichtri!=-1){
+ whichtri=blocks[citytype[i][j]].LineCheck2(start,end,&wallhit,move,cityrotation[i][j]*90);
- end=wallhit;
+ if(whichtri!=-1){
- finalwallhit=wallhit;
+ end=wallhit;
- }
+ finalwallhit=wallhit;
}
- wallhit=0;
+ }
- wallhit.x=camera.position.x;
+ wallhit=0;
- wallhit.z=camera.position.z;
+ wallhit.x=camera.position.x;
- whichtri=Bigstreet.LineCheck2(start,end,&wallhit,wallhit,0);
+ wallhit.z=camera.position.z;
- if(whichtri!=-1){
+ whichtri=Bigstreet.LineCheck2(start,end,&wallhit,wallhit,0);
- end=wallhit;
+ if(whichtri!=-1){
- finalwallhit=wallhit;
+ end=wallhit;
- }
+ finalwallhit=wallhit;
- //People
+ }
- whichhit=-1;
+ //People
- for(int i=0;i<numpeople;i++){
+ whichhit=-1;
- if(i!=j&&findDistancefast(person[j].playercoords,person[i].playercoords)<20000){
+ for(int i=0;i<numpeople;i++){
- temphitstruct=person[i].BulletCollideWithPlayer(i, start, end);
+ if(i!=j&&findDistancefast(person[j].playercoords,person[i].playercoords)<20000){
- if(temphitstruct.collision){
+ temphitstruct=person[i].BulletCollideWithPlayer(i, start, end);
- distance=findDistancefast(start,temphitstruct.hitlocation);
+ if(temphitstruct.collision){
- if(distance<olddistance||whichhit==-1){
+ distance=findDistancefast(start,temphitstruct.hitlocation);
- end=temphitstruct.hitlocation;
+ if(distance<olddistance||whichhit==-1){
- olddistance=distance;
+ end=temphitstruct.hitlocation;
- hitstruct=temphitstruct;
+ olddistance=distance;
- whichhit=i;
+ hitstruct=temphitstruct;
- }
+ whichhit=i;
}
@@ -3321,289 +3318,289 @@ void Game::Tick()
}
- aimer[0]=start;
+ }
- aimer[1]=end;
+ aimer[0]=start;
- sprites.MakeSprite(bulletinstant, .4, 1, 0, 0, aimer[0], aimer[1], .2);
+ aimer[1]=end;
- }
+ sprites.MakeSprite(bulletinstant, .4, 1, 0, 0, aimer[0], aimer[1], .2);
}
}
- }
-
- //Snow
+ }
- snowdelay-=multiplier;
+ }
- while(snowdelay<0&&environment==snowy_environment){
+ //Snow
- snowdelay+=1/precipitationdensity*2;
+ snowdelay-=multiplier;
- velocity=0;
+ while(snowdelay<0&&environment==snowy_environment){
- velocity.y=-5;
+ snowdelay+=1/precipitationdensity*2;
- start=camera.position;
+ velocity=0;
- start.y+=precipitationvert;
+ velocity.y=-5;
- start.x+=Random()%(int)precipitationhorz;
+ start=camera.position;
- start.z+=Random()%(int)precipitationhorz;
+ start.y+=precipitationvert;
- sprites.MakeSprite(snowsprite, 1, 1, 1, 1, start, velocity, 1.01);
+ start.x+=Random()%(int)precipitationhorz;
- }
+ start.z+=Random()%(int)precipitationhorz;
- while(snowdelay<0&&environment==rainy_environment){
+ sprites.MakeSprite(snowsprite, 1, 1, 1, 1, start, velocity, 1.01);
- snowdelay+=1/precipitationdensity/4;
+ }
- velocity=0;
+ while(snowdelay<0&&environment==rainy_environment){
- velocity.y=-100;
+ snowdelay+=1/precipitationdensity/4;
- start=camera.position;
+ velocity=0;
- start.y+=precipitationvert;
+ velocity.y=-100;
- start.x+=Random()%(int)precipitationhorz*.5;
+ start=camera.position;
- start.z+=Random()%(int)precipitationhorz*.5;
+ start.y+=precipitationvert;
- sprites.MakeSprite(rainsprite, .5, 1, 1, 1, start, velocity, 2.00);
+ start.x+=Random()%(int)precipitationhorz*.5;
- }
+ start.z+=Random()%(int)precipitationhorz*.5;
- //Grenade collision
+ sprites.MakeSprite(rainsprite, .5, 1, 1, 1, start, velocity, 2.00);
- int wherex, wherey, whichsound;
+ }
- bool impact;
+ //Grenade collision
- for(int i=0;i<sprites.howmanysprites;i++){
+ int wherex, wherey, whichsound;
- if(sprites.type[i]==grenadesprite||sprites.type[i]==spoonsprite||sprites.type[i]==pinsprite){
+ bool impact;
- impact=0;
+ for(int i=0;i<sprites.howmanysprites;i++){
- if(sprites.type[i]!=grenadesprite){
+ if(sprites.type[i]==grenadesprite||sprites.type[i]==spoonsprite||sprites.type[i]==pinsprite){
- sprites.brightness[i]-=multiplier*.2;
+ impact=0;
- }
+ if(sprites.type[i]!=grenadesprite){
- if(findLengthfast(sprites.velocity[i])>0){
+ sprites.brightness[i]-=multiplier*.2;
- wherex=(sprites.location[i].x+block_spacing/2)/block_spacing;
+ }
- wherey=(sprites.location[i].z+block_spacing/2)/block_spacing;
+ if(findLengthfast(sprites.velocity[i])>0){
- move=0;
+ wherex=(sprites.location[i].x+block_spacing/2)/block_spacing;
- move.x=wherex*block_spacing;
+ wherey=(sprites.location[i].z+block_spacing/2)/block_spacing;
- move.z=wherey*block_spacing;
+ move=0;
- whichtri=blocks[citytype[wherex][wherey]].LineCheck2(sprites.oldlocation[i],sprites.location[i],&wallhit,move,cityrotation[wherex][wherey]*90);
+ move.x=wherex*block_spacing;
- if(whichtri!=-1){
+ move.z=wherey*block_spacing;
- impact=1;
+ whichtri=blocks[citytype[wherex][wherey]].LineCheck2(sprites.oldlocation[i],sprites.location[i],&wallhit,move,cityrotation[wherex][wherey]*90);
- normalrotated=DoRotation(blocks[citytype[wherex][wherey]].normals[whichtri],0,cityrotation[wherex][wherey]*90,0);
+ if(whichtri!=-1){
- if(sprites.size[i]>1)decals.MakeDecal(crater, wallhit,9,normalrotated, whichtri, &blocks[citytype[wherex][wherey]], move, cityrotation[wherex][wherey]*90);
+ impact=1;
- sprites.location[i]=wallhit+normalrotated*.02;
+ normalrotated=DoRotation(blocks[citytype[wherex][wherey]].normals[whichtri],0,cityrotation[wherex][wherey]*90,0);
- ReflectVector(&sprites.velocity[i],&normalrotated);
+ if(sprites.size[i]>1)decals.MakeDecal(crater, wallhit,9,normalrotated, whichtri, &blocks[citytype[wherex][wherey]], move, cityrotation[wherex][wherey]*90);
- sprites.velocity[i]*=.3;
+ sprites.location[i]=wallhit+normalrotated*.02;
- if(sprites.type[i]==grenadesprite){
+ ReflectVector(&sprites.velocity[i],&normalrotated);
- float gLoc[3];
+ sprites.velocity[i]*=.3;
- gLoc[0]=(((sprites.location[i].x)-camera.position.x)/findLengthfast(sprites.velocity[i])*5+camera.position.x)/soundscalefactor;
+ if(sprites.type[i]==grenadesprite){
- gLoc[1]=(((sprites.location[i].y)-camera.position.y)/findLengthfast(sprites.velocity[i])*5+camera.position.y)/soundscalefactor;
+ float gLoc[3];
- gLoc[2]=(((sprites.location[i].z)-camera.position.z)/findLengthfast(sprites.velocity[i])*5+camera.position.z)/soundscalefactor;
+ gLoc[0]=(((sprites.location[i].x)-camera.position.x)/findLengthfast(sprites.velocity[i])*5+camera.position.x)/soundscalefactor;
- whichsound=abs(Random()%2);
+ gLoc[1]=(((sprites.location[i].y)-camera.position.y)/findLengthfast(sprites.velocity[i])*5+camera.position.y)/soundscalefactor;
- alSourcefv(gSourceID[bouncesound+whichsound], AL_POSITION, gLoc);
+ gLoc[2]=(((sprites.location[i].z)-camera.position.z)/findLengthfast(sprites.velocity[i])*5+camera.position.z)/soundscalefactor;
- if(sprites.size[i]<=1)alSourcePlay(gSourceID[bouncesound+whichsound]);
+ whichsound=abs(Random()%2);
- }
+ alSourcefv(gSourceID[bouncesound+whichsound], AL_POSITION, gLoc);
- if(findLengthfast(sprites.velocity[i])<=10)sprites.velocity[i]=0;
+ if(sprites.size[i]<=1)alSourcePlay(gSourceID[bouncesound+whichsound]);
}
- if(sprites.location[i].y<0){
+ if(findLengthfast(sprites.velocity[i])<=10)sprites.velocity[i]=0;
- impact=1;
+ }
- sprites.velocity[i].y*=-1;
+ if(sprites.location[i].y<0){
- sprites.velocity[i]*=.3;
+ impact=1;
- sprites.location[i].y=0;
+ sprites.velocity[i].y*=-1;
- if(sprites.type[i]==grenadesprite){
+ sprites.velocity[i]*=.3;
- if(sprites.size[i]>1){
+ sprites.location[i].y=0;
- move=0;
+ if(sprites.type[i]==grenadesprite){
- sprites.location[i].y=-.5;
+ if(sprites.size[i]>1){
- XYZ normish;
+ move=0;
- normish=0;
+ sprites.location[i].y=-.5;
- normish.y=1;
+ XYZ normish;
- decals.MakeDecal(crater, sprites.location[i],9,normish, 0, &blocks[citytype[wherex][wherey]], move, 0);
+ normish=0;
- }
+ normish.y=1;
- float gLoc[3];
+ decals.MakeDecal(crater, sprites.location[i],9,normish, 0, &blocks[citytype[wherex][wherey]], move, 0);
- gLoc[0]=(((sprites.location[i].x)-camera.position.x)/findLengthfast(sprites.velocity[i])*5+camera.position.x)/soundscalefactor;
+ }
- gLoc[1]=(((sprites.location[i].y)-camera.position.y)/findLengthfast(sprites.velocity[i])*5+camera.position.y)/soundscalefactor;
+ float gLoc[3];
- gLoc[2]=(((sprites.location[i].z)-camera.position.z)/findLengthfast(sprites.velocity[i])*5+camera.position.z)/soundscalefactor;
+ gLoc[0]=(((sprites.location[i].x)-camera.position.x)/findLengthfast(sprites.velocity[i])*5+camera.position.x)/soundscalefactor;
- whichsound=abs(Random()%2);
+ gLoc[1]=(((sprites.location[i].y)-camera.position.y)/findLengthfast(sprites.velocity[i])*5+camera.position.y)/soundscalefactor;
- alSourcefv(gSourceID[bouncesound+whichsound], AL_POSITION, gLoc);
+ gLoc[2]=(((sprites.location[i].z)-camera.position.z)/findLengthfast(sprites.velocity[i])*5+camera.position.z)/soundscalefactor;
- if(sprites.size[i]<=1)alSourcePlay(gSourceID[bouncesound+whichsound]);
+ whichsound=abs(Random()%2);
- }
+ alSourcefv(gSourceID[bouncesound+whichsound], AL_POSITION, gLoc);
- if(findLengthfast(sprites.velocity[i])<=10)sprites.velocity[i]=0;
+ if(sprites.size[i]<=1)alSourcePlay(gSourceID[bouncesound+whichsound]);
}
- if(sprites.type[i]==grenadesprite&&findLengthfast(sprites.velocity[i])>20){
+ if(findLengthfast(sprites.velocity[i])<=10)sprites.velocity[i]=0;
- HitStruct hitstruct;
+ }
- for(int j=0;j<numpeople;j++){
+ if(sprites.type[i]==grenadesprite&&findLengthfast(sprites.velocity[i])>20){
- if((j!=0||sprites.brightness[i]<.9)&&person[j].existing){
+ HitStruct hitstruct;
- hitstruct=person[j].BulletCollideWithPlayer(j, sprites.oldlocation[i], sprites.location[i]);
+ for(int j=0;j<numpeople;j++){
- if(hitstruct.collision){
+ if((j!=0||sprites.brightness[i]<.9)&&person[j].existing){
- impact=1;
+ hitstruct=person[j].BulletCollideWithPlayer(j, sprites.oldlocation[i], sprites.location[i]);
- sprites.location[i]=hitstruct.hitlocation;
+ if(hitstruct.collision){
- float gLoc[3];
+ impact=1;
- gLoc[0]=(((sprites.location[i].x)-camera.position.x)/findLengthfast(sprites.velocity[i])*5+camera.position.x)/soundscalefactor;
+ sprites.location[i]=hitstruct.hitlocation;
- gLoc[1]=(((sprites.location[i].y)-camera.position.y)/findLengthfast(sprites.velocity[i])*5+camera.position.y)/soundscalefactor;
+ float gLoc[3];
- gLoc[2]=(((sprites.location[i].z)-camera.position.z)/findLengthfast(sprites.velocity[i])*5+camera.position.z)/soundscalefactor;
+ gLoc[0]=(((sprites.location[i].x)-camera.position.x)/findLengthfast(sprites.velocity[i])*5+camera.position.x)/soundscalefactor;
- if(person[j].skeleton.free<1){
+ gLoc[1]=(((sprites.location[i].y)-camera.position.y)/findLengthfast(sprites.velocity[i])*5+camera.position.y)/soundscalefactor;
- if((hitstruct.joint1->label==head||hitstruct.joint2->label==head)&&person[j].type!=zombietype){
+ gLoc[2]=(((sprites.location[i].z)-camera.position.z)/findLengthfast(sprites.velocity[i])*5+camera.position.z)/soundscalefactor;
- alSourcefv(gSourceID[headwhacksound], AL_POSITION, gLoc);
+ if(person[j].skeleton.free<1){
- if(sprites.size[i]<=1)alSourcePlay(gSourceID[headwhacksound]);
+ if((hitstruct.joint1->label==head||hitstruct.joint2->label==head)&&person[j].type!=zombietype){
- person[j].skeleton.free=1;
+ alSourcefv(gSourceID[headwhacksound], AL_POSITION, gLoc);
- person[j].longdead=1;
+ if(sprites.size[i]<=1)alSourcePlay(gSourceID[headwhacksound]);
- for(int k=0;k<person[j].skeleton.num_joints;k++){
+ person[j].skeleton.free=1;
- person[j].skeleton.joints[k].position=DoRotation(person[j].skeleton.joints[k].position,0,person[j].playerrotation,0);
+ person[j].longdead=1;
- person[j].skeleton.joints[k].position+=person[j].playercoords;
+ for(int k=0;k<person[j].skeleton.num_joints;k++){
- person[j].skeleton.joints[k].realoldposition=person[j].skeleton.joints[k].position;
+ person[j].skeleton.joints[k].position=DoRotation(person[j].skeleton.joints[k].position,0,person[j].playerrotation,0);
- person[j].skeleton.joints[k].velocity=person[j].velocity;
+ person[j].skeleton.joints[k].position+=person[j].playercoords;
- person[j].skeleton.joints[k].velocity.x+=abs(Random()%10)-5;
+ person[j].skeleton.joints[k].realoldposition=person[j].skeleton.joints[k].position;
- person[j].skeleton.joints[k].velocity.y+=abs(Random()%10)-5;
+ person[j].skeleton.joints[k].velocity=person[j].velocity;
- person[j].skeleton.joints[k].velocity.z+=abs(Random()%10)-5;
+ person[j].skeleton.joints[k].velocity.x+=abs(Random()%10)-5;
- }
+ person[j].skeleton.joints[k].velocity.y+=abs(Random()%10)-5;
- hitstruct.joint1->velocity+=sprites.velocity[i];
+ person[j].skeleton.joints[k].velocity.z+=abs(Random()%10)-5;
- hitstruct.joint2->velocity+=sprites.velocity[i];
+ }
- if(person[j].type==civiliantype)civkills++;
+ hitstruct.joint1->velocity+=sprites.velocity[i];
- if(person[j].type==eviltype)goodkills++;
+ hitstruct.joint2->velocity+=sprites.velocity[i];
- }else{
+ if(person[j].type==civiliantype)civkills++;
- float totalarea = 0.0f;
+ if(person[j].type==eviltype)goodkills++;
- alSourcefv(gSourceID[bodywhacksound], AL_POSITION, gLoc);
+ }else{
- if(sprites.size[i]<=1)alSourcePlay(gSourceID[bodywhacksound]);
+ float totalarea = 0.0f;
- person[j].skeleton.offset=1;
+ alSourcefv(gSourceID[bodywhacksound], AL_POSITION, gLoc);
- for(int k=0;k<person[j].skeleton.num_joints;k++){
+ if(sprites.size[i]<=1)alSourcePlay(gSourceID[bodywhacksound]);
- if(findDistancefast(DoRotation(person[j].skeleton.joints[k].position,0,person[j].playerrotation,0)+person[j].playercoords,hitstruct.hitlocation)<200){
+ person[j].skeleton.offset=1;
- totalarea+=(200/findDistancefast(DoRotation(person[j].skeleton.joints[k].position,0,person[j].playerrotation,0)+person[j].playercoords,hitstruct.hitlocation));
+ for(int k=0;k<person[j].skeleton.num_joints;k++){
- }
+ if(findDistancefast(DoRotation(person[j].skeleton.joints[k].position,0,person[j].playerrotation,0)+person[j].playercoords,hitstruct.hitlocation)<200){
+
+ totalarea+=(200/findDistancefast(DoRotation(person[j].skeleton.joints[k].position,0,person[j].playerrotation,0)+person[j].playercoords,hitstruct.hitlocation));
}
- float offsetlength;
+ }
- for(int k=0;k<person[j].skeleton.num_joints;k++){
+ float offsetlength;
- if(findDistancefast(DoRotation(person[j].skeleton.joints[k].position,0,person[j].playerrotation,0)+person[j].playercoords,hitstruct.hitlocation)<200){
+ for(int k=0;k<person[j].skeleton.num_joints;k++){
- person[j].skeleton.joints[k].offset+=DoRotation(sprites.velocity[i]*.1*((200/findDistancefast(DoRotation(person[j].skeleton.joints[k].position,0,person[j].playerrotation,0)+person[j].playercoords,hitstruct.hitlocation))/totalarea*10),0,-person[j].playerrotation,0);
+ if(findDistancefast(DoRotation(person[j].skeleton.joints[k].position,0,person[j].playerrotation,0)+person[j].playercoords,hitstruct.hitlocation)<200){
- }
+ person[j].skeleton.joints[k].offset+=DoRotation(sprites.velocity[i]*.1*((200/findDistancefast(DoRotation(person[j].skeleton.joints[k].position,0,person[j].playerrotation,0)+person[j].playercoords,hitstruct.hitlocation))/totalarea*10),0,-person[j].playerrotation,0);
- offsetlength=findLengthfast(person[j].skeleton.joints[k].offset);
+ }
- if(offsetlength>9){
+ offsetlength=findLengthfast(person[j].skeleton.joints[k].offset);
- Normalise(&person[j].skeleton.joints[k].offset);
+ if(offsetlength>9){
- person[j].skeleton.joints[k].offset*=3;
+ Normalise(&person[j].skeleton.joints[k].offset);
- }
+ person[j].skeleton.joints[k].offset*=3;
}
- }}
+ }
- sprites.velocity[i]*=-.3;
+ }}
- }
+ sprites.velocity[i]*=-.3;
}
@@ -3611,181 +3608,181 @@ void Game::Tick()
}
- sprites.oldlocation[i]=sprites.location[i];
-
}
- //Explode
+ sprites.oldlocation[i]=sprites.location[i];
- if(sprites.type[i]==grenadesprite){
+ }
- sprites.brightness[i]-=multiplier*.3;
+ //Explode
- if(sprites.brightness[i]<=0||(impact&&sprites.size[i]>1)){
+ if(sprites.type[i]==grenadesprite){
- sprites.brightness[i]=0;
+ sprites.brightness[i]-=multiplier*.3;
- sprites.MakeSprite(smokesprite, 1, 1, 1, 1, sprites.location[i], facing*0, 60);
+ if(sprites.brightness[i]<=0||(impact&&sprites.size[i]>1)){
- sprites.MakeSprite(muzzleflashsprite, 1, 1, 1, 1, sprites.location[i], facing*0, 9);
+ sprites.brightness[i]=0;
- float gLoc[3];
+ sprites.MakeSprite(smokesprite, 1, 1, 1, 1, sprites.location[i], facing*0, 60);
- gLoc[0]=(((sprites.location[i].x)-camera.position.x)/3+camera.position.x)/soundscalefactor;
+ sprites.MakeSprite(muzzleflashsprite, 1, 1, 1, 1, sprites.location[i], facing*0, 9);
- gLoc[1]=(((sprites.location[i].y)-camera.position.y)/3+camera.position.y)/soundscalefactor;
+ float gLoc[3];
- gLoc[2]=(((sprites.location[i].z)-camera.position.z)/3+camera.position.z)/soundscalefactor;
+ gLoc[0]=(((sprites.location[i].x)-camera.position.x)/3+camera.position.x)/soundscalefactor;
- alSourcefv(gSourceID[explosionsound], AL_POSITION, gLoc);
+ gLoc[1]=(((sprites.location[i].y)-camera.position.y)/3+camera.position.y)/soundscalefactor;
- alSourcePlay(gSourceID[explosionsound]);
+ gLoc[2]=(((sprites.location[i].z)-camera.position.z)/3+camera.position.z)/soundscalefactor;
- XYZ relation;
+ alSourcefv(gSourceID[explosionsound], AL_POSITION, gLoc);
- camerashake=1-findDistance(person[0].playercoords,sprites.location[i])/200;
+ alSourcePlay(gSourceID[explosionsound]);
- //if(!sprites.size[i]>1){
+ XYZ relation;
- overpoint=sprites.location[i];
+ camerashake=1-findDistance(person[0].playercoords,sprites.location[i])/200;
- overpoint.y+=3000;
+ //if(!sprites.size[i]>1){
- underpoint=sprites.location[i];
+ overpoint=sprites.location[i];
- underpoint.y-=3000;
+ overpoint.y+=3000;
- move=0;
+ underpoint=sprites.location[i];
- wherex=(sprites.location[i].x+block_spacing/2)/block_spacing;
+ underpoint.y-=3000;
- wherey=(sprites.location[i].z+block_spacing/2)/block_spacing;
+ move=0;
- move.x=wherex*block_spacing;
+ wherex=(sprites.location[i].x+block_spacing/2)/block_spacing;
- move.z=wherey*block_spacing;
+ wherey=(sprites.location[i].z+block_spacing/2)/block_spacing;
- XYZ temp;
+ move.x=wherex*block_spacing;
- whichtri=sidewalkcollide.LineCheck2(overpoint,underpoint,&temp,move,cityrotation[wherex][wherey]*90);
+ move.z=wherey*block_spacing;
- XYZ normish;
+ XYZ temp;
- normish=0;
+ whichtri=sidewalkcollide.LineCheck2(overpoint,underpoint,&temp,move,cityrotation[wherex][wherey]*90);
- normish.y=1;
+ XYZ normish;
- if(whichtri>=0){
+ normish=0;
- decals.MakeDecal(crater, sprites.location[i],9,normish, 0, &sidewalkcollide, move, cityrotation[wherex][wherey]*90);
+ normish.y=1;
- }
+ if(whichtri>=0){
- if(whichtri==-1){
+ decals.MakeDecal(crater, sprites.location[i],9,normish, 0, &sidewalkcollide, move, cityrotation[wherex][wherey]*90);
- temp=sprites.location[i];
+ }
- temp.y=-.5;
+ if(whichtri==-1){
- move=0;
+ temp=sprites.location[i];
- decals.MakeDecal(crater, sprites.location[i],9,normish, 0, &sidewalkcollide, move, 0);
+ temp.y=-.5;
- }
+ move=0;
- //}
+ decals.MakeDecal(crater, sprites.location[i],9,normish, 0, &sidewalkcollide, move, 0);
- for(int k=0;k<numpeople;k++){
+ }
- if(person[k].existing&&(person[k].longdead!=-1||person[k].skeleton.free<1)){
+ //}
- if((findDistancefast(person[k].playercoords,sprites.location[i])<700&&person[k].skeleton.free<1)||(findDistancefast(person[k].averageloc,sprites.location[i])<700&&person[k].skeleton.free>=1)){
+ for(int k=0;k<numpeople;k++){
- if(person[k].skeleton.free!=1){
+ if(person[k].existing&&(person[k].longdead!=-1||person[k].skeleton.free<1)){
- if(person[k].type==civiliantype)civkills++;
+ if((findDistancefast(person[k].playercoords,sprites.location[i])<700&&person[k].skeleton.free<1)||(findDistancefast(person[k].averageloc,sprites.location[i])<700&&person[k].skeleton.free>=1)){
- if(person[k].type==eviltype)goodkills++;
+ if(person[k].skeleton.free!=1){
- person[k].skeleton.free=1;
+ if(person[k].type==civiliantype)civkills++;
- person[k].killtargetvisible=0;
+ if(person[k].type==eviltype)goodkills++;
- if((findDistancefast(person[k].playercoords,sprites.location[i])<600&&person[k].skeleton.free<1)||(findDistancefast(person[k].averageloc,sprites.location[i])<600&&person[k].skeleton.free>=1)||person[k].type==playertype){
+ person[k].skeleton.free=1;
- person[k].health-=100;
+ person[k].killtargetvisible=0;
- person[k].bleeding=1;
+ if((findDistancefast(person[k].playercoords,sprites.location[i])<600&&person[k].skeleton.free<1)||(findDistancefast(person[k].averageloc,sprites.location[i])<600&&person[k].skeleton.free>=1)||person[k].type==playertype){
- }
+ person[k].health-=100;
- person[k].DoAnimations(k);
+ person[k].bleeding=1;
- person[k].longdead=1;
+ }
- person[k].bleeddelay=1;
+ person[k].DoAnimations(k);
- person[k].bjoint1=&person[k].skeleton.joints[person[k].skeleton.jointlabels[head]];
+ person[k].longdead=1;
- person[k].bjoint2=&person[k].skeleton.joints[person[k].skeleton.jointlabels[neck]];
+ person[k].bleeddelay=1;
- for(int j=0;j<person[k].skeleton.num_joints;j++){
+ person[k].bjoint1=&person[k].skeleton.joints[person[k].skeleton.jointlabels[head]];
- person[k].skeleton.joints[j].position=DoRotation(person[k].skeleton.joints[j].position,0,person[k].playerrotation,0);
+ person[k].bjoint2=&person[k].skeleton.joints[person[k].skeleton.jointlabels[neck]];
- person[k].skeleton.joints[j].position+=person[k].playercoords;
+ for(int j=0;j<person[k].skeleton.num_joints;j++){
- person[k].skeleton.joints[j].realoldposition=person[k].skeleton.joints[j].position;
+ person[k].skeleton.joints[j].position=DoRotation(person[k].skeleton.joints[j].position,0,person[k].playerrotation,0);
- person[k].skeleton.joints[j].velocity=DoRotation(person[k].skeleton.joints[j].velocity,0,person[k].playerrotation,0);
+ person[k].skeleton.joints[j].position+=person[k].playercoords;
- person[k].skeleton.joints[j].velocity+=person[k].velocity;
+ person[k].skeleton.joints[j].realoldposition=person[k].skeleton.joints[j].position;
- person[k].skeleton.joints[j].velocity.x+=abs(Random()%20)-10;
+ person[k].skeleton.joints[j].velocity=DoRotation(person[k].skeleton.joints[j].velocity,0,person[k].playerrotation,0);
- person[k].skeleton.joints[j].velocity.y+=abs(Random()%20)-10;
+ person[k].skeleton.joints[j].velocity+=person[k].velocity;
- person[k].skeleton.joints[j].velocity.z+=abs(Random()%20)-10;
+ person[k].skeleton.joints[j].velocity.x+=abs(Random()%20)-10;
- }}
+ person[k].skeleton.joints[j].velocity.y+=abs(Random()%20)-10;
- for(int j=0;j<person[k].skeleton.num_joints;j++){
+ person[k].skeleton.joints[j].velocity.z+=abs(Random()%20)-10;
- relation=person[k].skeleton.joints[j].position-sprites.location[i];
+ }}
- Normalise(&relation);
+ for(int j=0;j<person[k].skeleton.num_joints;j++){
- if(findDistance(person[k].skeleton.joints[j].position,sprites.location[i])>1)person[k].skeleton.joints[j].velocity+=relation/findDistance(person[k].skeleton.joints[j].position,sprites.location[i])*300;
+ relation=person[k].skeleton.joints[j].position-sprites.location[i];
- else person[k].skeleton.joints[j].velocity+=relation*300;
+ Normalise(&relation);
- }
+ if(findDistance(person[k].skeleton.joints[j].position,sprites.location[i])>1)person[k].skeleton.joints[j].velocity+=relation/findDistance(person[k].skeleton.joints[j].position,sprites.location[i])*300;
- person[k].longdead=1;
+ else person[k].skeleton.joints[j].velocity+=relation*300;
- for(int j=0;j<person[k].skeleton.num_joints;j++){
+ }
- //Sever stuff
+ person[k].longdead=1;
- if(findLengthfast(person[k].skeleton.joints[j].velocity)>1500&&person[k].skeleton.joints[j].existing==1&&abs(Random()%3)!=1){
+ for(int j=0;j<person[k].skeleton.num_joints;j++){
- sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,person[k].skeleton.joints[j].position, person[k].skeleton.joints[j].velocity/3, 9);
+ //Sever stuff
- person[k].skeleton.DeleteJoint(j);
+ if(findLengthfast(person[k].skeleton.joints[j].velocity)>1500&&person[k].skeleton.joints[j].existing==1&&abs(Random()%3)!=1){
- person[k].skeleton.broken=2;
+ sprites.MakeSprite(bloodspritedown, .8, 1, .2, .2,person[k].skeleton.joints[j].position, person[k].skeleton.joints[j].velocity/3, 9);
- person[k].health=-10000;
+ person[k].skeleton.DeleteJoint(j);
- person[k].skeleton.joints[j].existing=0;
+ person[k].skeleton.broken=2;
- }
+ person[k].health=-10000;
- }
+ person[k].skeleton.joints[j].existing=0;
}
- }
+ }
+
+ }
}
@@ -3797,105 +3794,106 @@ void Game::Tick()
}
- //camera shake
- camerashake-=multiplier;
- if(camerashake<0)camerashake=0;
+ }
- //camera position
- XYZ average;
+ //camera shake
+ camerashake-=multiplier;
+ if(camerashake<0)camerashake=0;
- if(!zoom)average=person[0].skeleton.joints[(person[0].skeleton.jointlabels[head])].position*(person[0].aimamount/2+.5)+person[0].skeleton.joints[(person[0].skeleton.jointlabels[neck])].position*((1-person[0].aimamount)/2);
+ //camera position
+ XYZ average;
- if(zoom)average=person[0].skeleton.joints[(person[0].skeleton.jointlabels[righthand])].position;
+ if(!zoom)average=person[0].skeleton.joints[(person[0].skeleton.jointlabels[head])].position*(person[0].aimamount/2+.5)+person[0].skeleton.joints[(person[0].skeleton.jointlabels[neck])].position*((1-person[0].aimamount)/2);
- if(person[0].skeleton.free==0&&thirdperson!=2)camera.position=person[0].playercoords+DoRotation(average,0,person[0].playerrotation,0);
+ if(zoom)average=person[0].skeleton.joints[(person[0].skeleton.jointlabels[righthand])].position;
- if(person[0].skeleton.free==1&&thirdperson!=2)camera.position=average;
+ if(person[0].skeleton.free==0&&thirdperson!=2)camera.position=person[0].playercoords+DoRotation(average,0,person[0].playerrotation,0);
- //Restraints
+ if(person[0].skeleton.free==1&&thirdperson!=2)camera.position=average;
- if(camera.position.y<.1)camera.position.y=.1;
+ //Restraints
- if(thirdperson!=2){
- oldrot=camera.visrotation;
- oldrot2=camera.visrotation2;
- }
+ if(camera.position.y<.1)camera.position.y=.1;
- //Kill count
- for(int i=0;i<numpeople;i++){
- if(person[i].oldhealth>0&&person[i].health<=0){
- if(i==1)alSourcePlay(gSourceID[losesound]);
- if(person[i].type==civiliantype){
- alSourcePlay(gSourceID[disguisekillsound]);
- score-=300;
- }
+ if(thirdperson!=2){
+ oldrot=camera.visrotation;
+ oldrot2=camera.visrotation2;
+ }
- if(person[i].type==eviltype){
- alSourcePlay(gSourceID[soulinsound]);
- score+=75;
- if(person[i].whichgun==knife)score+=50;
- }
- person[i].firstlongdead=0;
+ //Kill count
+ for(int i=0;i<numpeople;i++){
+ if(person[i].oldhealth>0&&person[i].health<=0){
+ if(i==1)alSourcePlay(gSourceID[losesound]);
+ if(person[i].type==civiliantype){
+ alSourcePlay(gSourceID[disguisekillsound]);
+ score-=300;
}
- person[i].oldhealth=person[i].health;
- }
- if(slomo==2){
- psychicpower-=multiplier*15;
- if(psychicpower<0){
- soundscalefactor=soundscalefactordefault;
- alSourceStop(gSourceID[whichsong]);
- alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 0);
- alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 0);
- if(person[0].whichgun==knife)whichsong=knifesong;
- if(person[0].whichgun!=knife)whichsong=shootsong;
- if(type==zombie_type)whichsong=zombiesong;
- alSourcef(gSourceID[whichsong], AL_PITCH, 1);
- alSourcePlay(gSourceID[whichsong]);
- alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 1);
- alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 1);
- slomo=0;
+ if(person[i].type==eviltype){
alSourcePlay(gSourceID[soulinsound]);
- psychicpower=0;
- flashamount=.5;
- flashr=1;flashg=1;flashb=1;
+ score+=75;
+ if(person[i].whichgun==knife)score+=50;
}
+ person[i].firstlongdead=0;
}
+ person[i].oldhealth=person[i].health;
+ }
- psychicpower+=multiplier*5;
- if(psychicpower>10)psychicpower=10;
-
- //3d sound
- float gLoc[3];
- gLoc[0]=camera.position.x/soundscalefactor;
- gLoc[1]=camera.position.y/soundscalefactor;
- gLoc[2]=camera.position.z/soundscalefactor;
-
- //Set listener position
- alListenerfv(AL_POSITION, gLoc);
-
- //Set orientation with forward and up vectors
- XYZ upvector;
- upvector=0;
- upvector.z=-1;
- upvector=DoRotation(upvector,-camera.rotation2+90,0,0);
- upvector=DoRotation(upvector,0,0-camera.rotation,0);
-
- float ori[6];
- ori[0] = -facing.x;
- ori[1] = facing.y;
- ori[2] = facing.z;
- ori[3] = -upvector.x;
- ori[4] = upvector.y;
- ori[5] = upvector.z;
- alListenerfv(AL_ORIENTATION, ori);
-
- if(person[0].currentanimation==throwanim||person[0].currentanimation==diveanim||paused){
- MoveMouse(oldmouseloc.h,oldmouseloc.v,&mouseloc);
- GetMouse(&mouseloc);
+ if(slomo==2){
+ psychicpower-=multiplier*15;
+ if(psychicpower<0){
+ soundscalefactor=soundscalefactordefault;
+ alSourceStop(gSourceID[whichsong]);
+ alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 0);
+ alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 0);
+ if(person[0].whichgun==knife)whichsong=knifesong;
+ if(person[0].whichgun!=knife)whichsong=shootsong;
+ if(type==zombie_type)whichsong=zombiesong;
+ alSourcef(gSourceID[whichsong], AL_PITCH, 1);
+ alSourcePlay(gSourceID[whichsong]);
+ alSourcef(gSourceID[whichsong], AL_MIN_GAIN, 1);
+ alSourcef(gSourceID[whichsong], AL_MAX_GAIN, 1);
+ slomo=0;
+ alSourcePlay(gSourceID[soulinsound]);
+ psychicpower=0;
+ flashamount=.5;
+ flashr=1;flashg=1;flashb=1;
}
+ }
- oldmouseloc=mouseloc;
- if(score<0)score=0;
+ psychicpower+=multiplier*5;
+ if(psychicpower>10)psychicpower=10;
+
+ //3d sound
+ float gLoc[3];
+ gLoc[0]=camera.position.x/soundscalefactor;
+ gLoc[1]=camera.position.y/soundscalefactor;
+ gLoc[2]=camera.position.z/soundscalefactor;
+
+ //Set listener position
+ alListenerfv(AL_POSITION, gLoc);
+
+ //Set orientation with forward and up vectors
+ XYZ upvector;
+ upvector=0;
+ upvector.z=-1;
+ upvector=DoRotation(upvector,-camera.rotation2+90,0,0);
+ upvector=DoRotation(upvector,0,0-camera.rotation,0);
+
+ float ori[6];
+ ori[0] = -facing.x;
+ ori[1] = facing.y;
+ ori[2] = facing.z;
+ ori[3] = -upvector.x;
+ ori[4] = upvector.y;
+ ori[5] = upvector.z;
+ alListenerfv(AL_ORIENTATION, ori);
+
+ if(person[0].currentanimation==throwanim||person[0].currentanimation==diveanim||paused){
+ MoveMouse(oldmouseloc.h,oldmouseloc.v,&mouseloc);
+ GetMouse(&mouseloc);
}
+
+ oldmouseloc=mouseloc;
+ if(score<0)score=0;
}