diff options
Diffstat (limited to 'src/GameTick.cpp')
-rw-r--r-- | src/GameTick.cpp | 592 |
1 files changed, 293 insertions, 299 deletions
diff --git a/src/GameTick.cpp b/src/GameTick.cpp index 2800632..7f25e1b 100644 --- a/src/GameTick.cpp +++ b/src/GameTick.cpp @@ -57,7 +57,8 @@ void Game::Splat(int k) auto& skeleton = person[k].skeleton; skeleton.free = 1; - skeleton.offset = person[k].health = 0; + skeleton.offset = 0; + person[k].health = 0; person[k].longdead = person[k].bleeding = person[k].bleeddelay = 1; person[k].DoAnimations(k); @@ -533,17 +534,14 @@ void Game::Tick() if(endz>num_blocks-1)endz=num_blocks-1; - if(k!=0){ - /* TODO: huh? */ - beginx==person[k].whichblockx; - - beginz==person[k].whichblocky; - - endx==person[k].whichblockx; - - endz==person[k].whichblocky; - - } + /* TODO: huh? + * if(k!=0) { + * beginx == person[k].whichblockx; + * beginz == person[k].whichblocky; + * endx == person[k].whichblockx; + * endz == person[k].whichblocky; + * } + */ if(beginx<=endx&&beginz<=endz) @@ -671,18 +669,15 @@ void Game::Tick() } - if(person[k].playercoords.y<=0){ - - person[k].onground=1; - - person[k].playercoords.y=0; - - if(person[k].velocity.y<-maxfallvel)Splat(k); - - else person[k].velocity.y=0; - - if(k==0)onblockx=-1;onblocky=-1; - + if (person[k].playercoords.y <= 0) { + person[k].onground = 1; + person[k].playercoords.y = 0; + if (person[k].velocity.y<-maxfallvel) + Splat(k); + else + person[k].velocity.y = 0; + if (k == 0) + onblockx = onblocky = -1; } // SBF - this is definately in the wrong spot! @@ -1014,38 +1009,38 @@ void Game::Tick() } if(person[i].health<100&&person[i].type!=zombietype){ - person[i].health-=multiplier*120; + 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; + 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; + 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/20; - if(person[i].speedmult<.6){ + person[i].speedmult-=multiplier/20; + if(person[i].speedmult<.6){ person[i].speedmult=.6; person[i].killtarget=-1; } } if(person[i].health>=40&&person[i].type==zombietype){ - person[i].speedmult+=multiplier/40; - if(person[i].speedmult>.7+difficulty*.2){ + 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; + person[i].maxhealth+=multiplier*2; + if(person[i].maxhealth>100)person[i].maxhealth=100; } if(person[i].bleeding>0){ @@ -1070,21 +1065,21 @@ void Game::Tick() 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(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(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].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].recoil<0)person[i].recoil=0; if(i==0){ oldzoom = zoom; @@ -1111,22 +1106,22 @@ void Game::Tick() 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.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); } 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[person[i].killtarget].skeleton.joints[person[person[i].killtarget].skeleton.jointlabels[rightshoulder]].locked=0; + person[person[i].killtarget].longdead=1; + } 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; @@ -1139,16 +1134,26 @@ void Game::Tick() 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[i].pathcheckdelay-=multiplier; - + // 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[i].pathcheckdelay -= multiplier; // 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); + auto moving_away + = findDistancefast(person[i].pathtarget, + person[i].playercoords) + > findDistancefast(person[i].pathtarget, + person[i].oldplayercoords); + realcheck = (abs(person[i].playercoords.x + - person[i].pathtarget.x) < 1 + && abs(person[i].playercoords.z + - person[i].pathtarget.z) < 1) + || moving_away; if(person[i].targetanimation==idleanim&&person[i].killtargetvisible==0){ person[i].targetanimation=walkanim; @@ -1157,35 +1162,37 @@ void Game::Tick() } 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; + person[i].pathcheckdelay = 1.2f; + + 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; + } + + 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; } } @@ -1193,25 +1200,24 @@ void Game::Tick() person[i].killtargetvisible=0; person[i].targetanimation=joganim; - //Dead target? - if(person[person[i].killtarget].health<=0){ - person[i].running=0; - } + // 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; + // If pathfind + if (realcheck) { + leastdistance = 2000000; + person[i].lastdistancevictim = 0; + closesttarget = -1; - //Check best path - closesttarget=person[i].pathnum; + // Check best path + closesttarget = person[i].pathnum; - //Check other blocks? - if ((closesttarget==person[i].pathnum)){ - beginx=person[i].whichblockx-2; + // 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; @@ -1221,12 +1227,12 @@ void Game::Tick() 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; + 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; @@ -1238,65 +1244,65 @@ void Game::Tick() finaltarget=person[i].pathtarget; person[i].whichblockx=l; person[i].whichblocky=m; - } - } - } - } - } + } + } + } + } + } - if(closesttarget!=-1){ - person[i].pathnum=closesttarget; - person[i].pathtarget=finaltarget; + if (closesttarget != -1) { + person[i].pathnum = closesttarget; + person[i].pathtarget = finaltarget; } } } - //Assassin + // Assassin if((person[i].killtarget>-1&&person[i].type!=civiliantype)&&!person[i].running){ - //Dead target? + // 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){ + 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 + 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; + 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; + //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; @@ -1309,11 +1315,11 @@ void Game::Tick() closesttarget=j; finaltarget=person[i].pathtarget; } - } + } - leastdistance=2000000; - for(int j=0;j<path.vertexNum;j++){ - person[i].pathtarget.x=path.vertex[j].x; + 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; @@ -1326,11 +1332,11 @@ void Game::Tick() closesttarget=j; finaltarget=person[i].pathtarget; } - } + } - //Check other blocks? - if((closesttarget==person[i].pathnum)||closesttarget==-1){ - beginx=person[i].whichblockx-2; + //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; @@ -1340,12 +1346,12 @@ void Game::Tick() if(endz>num_blocks-1)endz=num_blocks-1; leastdistance=2000000; - for(int l=beginx;l<=endx;l++){ + for(int l=beginx;l<=endx;l++){ for(int m=beginx;m<=endx;m++){ - if(l!=person[i].whichblockx||m!=person[i].whichblocky){ + 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; + 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; @@ -1358,15 +1364,15 @@ void Game::Tick() finaltarget=person[i].pathtarget; person[i].whichblockx=l; person[i].whichblocky=m; - } - } - } - } + } + } + } + } } - } + } - if(closesttarget!=-1){ - person[i].onpath=1; + if(closesttarget!=-1){ + person[i].onpath=1; person[i].pathnum=closesttarget; person[i].pathtarget=finaltarget; } @@ -1379,10 +1385,10 @@ void Game::Tick() 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].killtarget==0&&visions==1)person[i].killtargetvisible=0; - if(person[i].killtargetvisible){ - beginx=person[i].whichblockx-2; + if(person[i].killtargetvisible){ + beginx=person[i].whichblockx-2; if(beginx<0)beginx=0; beginz=person[i].whichblocky-2; if(beginz<0)beginz=0; @@ -1391,80 +1397,80 @@ void Game::Tick() endz=person[i].whichblocky+2; if(endz>num_blocks-1)endz=num_blocks-1; - for(int l=beginx;l<=endx;l++){ + for(int l=beginx;l<=endx;l++){ for(int m=beginx;m<=endx;m++){ - move.x=l*block_spacing; + 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(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; + person[i].targetanimation=joganim; } if(!person[i].killtargetvisible){ - person[i].aiming=0; + person[i].aiming=0; } 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; - } + 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].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; + 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; } @@ -1497,35 +1503,35 @@ void Game::Tick() } } } - finaltarget=person[person[i].killtarget].playercoords; + 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; + person[i].targetanimation=zombiejoganim; } if(!person[i].killtargetvisible){ - person[i].aiming=0; + person[i].aiming=0; } if(person[i].killtargetvisible){ - person[i].onpath=0; - person[i].lastdistancevictim=200000; - person[i].pathnum=-1; + person[i].onpath=0; + person[i].lastdistancevictim=200000; + person[i].pathnum=-1; - if(person[i].aiming==0)person[i].shotdelay=shotdelayamount/difficulty; + if(person[i].aiming==0)person[i].shotdelay=shotdelayamount/difficulty; - if(findDistancefast(person[i].playercoords, person[person[i].killtarget].playercoords)>20||person[i].targetanimation!=idleanim) - person[i].targetanimation=zombiejoganim; + if(findDistancefast(person[i].playercoords, person[person[i].killtarget].playercoords)>20||person[i].targetanimation!=idleanim) + person[i].targetanimation=zombiejoganim; - 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; + 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; + finaltarget=person[person[i].killtarget].playercoords; } } @@ -1541,16 +1547,16 @@ void Game::Tick() if(towards.z>0)person[i].playerrotation=180-person[i].playerrotation; } } - } + } - person[i].whichblockx=((person[i].playercoords.x+block_spacing/2)/block_spacing); - person[i].whichblocky=((person[i].playercoords.z+block_spacing/2)/block_spacing); + 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].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; + //Death by bleeding/shock + if(person[i].health<=0){ + person[i].skeleton.offset=0; person[i].skeleton.free=1; person[i].longdead=1; @@ -1566,7 +1572,7 @@ void Game::Tick() } } - //Rag doll + //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); @@ -1613,7 +1619,7 @@ void Game::Tick() //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); + 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; @@ -2048,7 +2054,8 @@ void Game::Tick() person[j].shotdelay = shotdelayamount / difficulty; HitStruct hitstruct, temphitstruct; - person[j].litup = person[j].recoil = 1; + person[j].litup = 1; + person[j].recoil = 1; float olddistance = 0.0f, distance = 0.0f; float totalarea = 0.0f; @@ -2058,8 +2065,6 @@ void Game::Tick() if (person[j].whichgun != grenade) person[j].ammo--; - auto& joints = person[0].skeleton.joints; - auto& jointlabels = person[0].skeleton.jointlabels; for (int p = 0; p < numshots; p++) { XYZ aim; if (j) @@ -2490,8 +2495,10 @@ void Game::Tick() 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].killtargetvisible == 0 + && person[whichhit].type != zombietype + && person[whichhit].currentanimation !=getupfrontanim + && person[whichhit].currentanimation != getupbackanim) { if(hitstruct.joint1->modelnum==headmodel)person[whichhit].targetanimation=headpainanim; if(hitstruct.joint1->modelnum==chestmodel)person[whichhit].targetanimation=chestpainanim; @@ -2590,7 +2597,7 @@ void Game::Tick() //blood - if(!hitstruct.joint1->modelnum==headmodel){ + if (hitstruct.joint1->modelnum != headmodel) { if(person[j].whichgun==sniperrifle)sprites.MakeSprite(bloodspritenoup, 1, 1, 0, 0, hitstruct.hitlocation, velocity*0, 5); @@ -2739,15 +2746,11 @@ void Game::Tick() 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); - if (!dot_ta <= 0&&!dot_tb <= 0){ - - nearest.x = a->x + ((b->x - a->x) * 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 (dot_ta > 0 && dot_tb > 0) { + nearest.x = a->x + ((b->x - a->x) * 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 && findDistancefast(nearest, camera.position) < 10 @@ -3056,7 +3059,7 @@ void Game::Tick() if (sprites.type[i] == grenadesprite && sprites.size[i] <= 1) { auto soundpos = sprites.location[i] - camera.position; - auto v = findLengthfast(sprites.velocity[i]) * 0.2; + auto v = findLengthfast(sprites.velocity[i]) * 0.2f; ALfloat gLoc[] { soundpos.x / v / soundscalefactor, soundpos.y / v / soundscalefactor, @@ -3100,7 +3103,7 @@ void Game::Tick() } auto soundpos = sprites.location[i] - camera.position; - auto v = findLengthfast(sprites.velocity[i]) * 0.2; + auto v = findLengthfast(sprites.velocity[i]) * 0.2f; ALfloat gLoc[] { soundpos.x / v / soundscalefactor, soundpos.y / v / soundscalefactor, @@ -3133,7 +3136,7 @@ void Game::Tick() sprites.location[i] = hitstruct.hitlocation; auto landpos = sprites.location[i] - camera.position; - auto v = findLengthfast(sprites.velocity[i]) * 0.2; + auto v = findLengthfast(sprites.velocity[i]) * 0.2f; ALfloat gLoc[] { landpos.x / v / soundscalefactor, landpos.y / v / soundscalefactor, @@ -3152,34 +3155,28 @@ void Game::Tick() person[j].longdead=1; - for(int k=0;k<person[j].skeleton.num_joints;k++){ - - person[j].skeleton.joints[k].position=DoRotation(person[j].skeleton.joints[k].position,0,person[j].playerrotation,0); - - person[j].skeleton.joints[k].position+=person[j].playercoords; - - person[j].skeleton.joints[k].realoldposition=person[j].skeleton.joints[k].position; + for (int k = 0; k < person[j].skeleton.num_joints; ++k) { + person[j].skeleton.joints[k].realoldposition + = person[j].skeleton.joints[k].position + = DoRotation(person[j].skeleton.joints[k].position, + 0, person[j].playerrotation, 0) + + person[j].playercoords; - person[j].skeleton.joints[k].velocity=person[j].velocity; - - person[j].skeleton.joints[k].velocity.x+=abs(Random()%10)-5; - - person[j].skeleton.joints[k].velocity.y+=abs(Random()%10)-5; - - person[j].skeleton.joints[k].velocity.z+=abs(Random()%10)-5; + person[j].skeleton.joints[k].velocity = person[j].velocity; + person[j].skeleton.joints[k].velocity.x += abs(Random()%10)-5; + person[j].skeleton.joints[k].velocity.y += abs(Random()%10)-5; + person[j].skeleton.joints[k].velocity.z += abs(Random()%10)-5; } - hitstruct.joint1->velocity+=sprites.velocity[i]; - - hitstruct.joint2->velocity+=sprites.velocity[i]; - - if(person[j].type==civiliantype)civkills++; - - if(person[j].type==eviltype)goodkills++; - - }else{ + hitstruct.joint1->velocity += sprites.velocity[i]; + hitstruct.joint2->velocity += sprites.velocity[i]; + if (person[j].type == civiliantype) + civkills++; + if (person[j].type == eviltype) + goodkills++; + } else { float totalarea = 0.0f; alSourcefv(gSourceID[bodywhacksound], AL_POSITION, gLoc); @@ -3336,14 +3333,11 @@ void Game::Tick() } person[k].DoAnimations(k); + person[k].longdead = 1; + person[k].bleeddelay = 1; - person[k].longdead=1; - - person[k].bleeddelay=1; - - person[k].bjoint1=&person[k].skeleton.joints[person[k].skeleton.jointlabels[head]]; - - person[k].bjoint2=&person[k].skeleton.joints[person[k].skeleton.jointlabels[neck]]; + person[k].bjoint1 = &person[k].skeleton.joints[person[k].skeleton.jointlabels[head]]; + person[k].bjoint2 = &person[k].skeleton.joints[person[k].skeleton.jointlabels[neck]]; for(int j=0;j<person[k].skeleton.num_joints;j++){ |