diff options
| author | Nguyễn Gia Phong <mcsinyx@disroot.org> | 2021-06-22 16:41:56 +0700 |
|---|---|---|
| committer | Nguyễn Gia Phong <mcsinyx@disroot.org> | 2021-06-22 16:41:56 +0700 |
| commit | 93c57836fbaf6a1329f536ab9d1919f97a58de8f (patch) | |
| tree | 41cfbe34852975c718887130bc2fe1b3d39297e9 /src/GameTick.cpp | |
| parent | f0d05c8ec8548a00bd9ff3fb76f0c8bc785e2299 (diff) | |
| download | blackshades-93c57836fbaf6a1329f536ab9d1919f97a58de8f.tar.gz | |
Fix out of bound index and clean up
Diffstat (limited to 'src/GameTick.cpp')
| -rw-r--r-- | src/GameTick.cpp | 481 |
1 files changed, 3 insertions, 478 deletions
diff --git a/src/GameTick.cpp b/src/GameTick.cpp index 3350634..5cd11b8 100644 --- a/src/GameTick.cpp +++ b/src/GameTick.cpp @@ -874,25 +874,17 @@ void Game::Tick(){ } //Camera - camera.oldposition=camera.position; - camera.targetoffset=0; - camera.targetoffset.z=-5; //Spawn people - spawndelay-=multiplier; - int blockspawnx,blockspawny; - blockspawnx=0; - blockspawny=0; int cyclenum; - cyclenum=0; while((citypeoplenum[blockspawnx][blockspawny]>=max_people_block&&cyclenum<10)||blockspawnx==0){ @@ -1150,71 +1142,43 @@ void Game::Tick(){ }} 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; 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 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; @@ -1224,205 +1188,126 @@ void Game::Tick(){ } 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<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>=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(!zoom)mousesensitivity=1*usermousesensitivity; if(person[i].whichgun!=sniperrifle)zoom=0; - } - } //Zombie eat - - if(i>0&&person[person[i].killtarget].eaten==i&&person[i].targetanimation==zombieeatanim){ - + 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); - } 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(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(i>0&&enemystate!=1&&person[i].type==zombietype&&person[i].speedmult<.7){ - person[i].killtarget=-1; - } bool realcheck = false; @@ -1439,395 +1324,228 @@ void Game::Tick(){ ||findDistancefast(person[i].playercoords,person[i].pathtarget)>findDistancefast(person[i].oldplayercoords,person[i].pathtarget); 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((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; - } - } 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(closesttarget!=-1){ - person[i].pathnum=closesttarget; - person[i].pathtarget=finaltarget; - } - } - } //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; - } - } - } - } - } - } 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; @@ -1837,81 +1555,48 @@ void Game::Tick(){ 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].killtargetvisible){ - 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; - } if(person[i].aiming==0)person[i].shotdelay=shotdelayamount/difficulty; @@ -1925,395 +1610,235 @@ void Game::Tick(){ if(person[i].whichgun==assaultrifle||person[i].whichgun==sniperrifle||person[i].whichgun==shotgun)person[i].playerrotation2=20; tooclose=1300; - toofar=3000; if(person[i].whichgun==shotgun){ - tooclose=1400; - toofar=5000; - } if(person[i].whichgun==assaultrifle){ - tooclose=5000; - toofar=9000; - } if(person[i].whichgun==sniperrifle){ - tooclose=10000; - 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)<=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; - } - } - } - 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; - } 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].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){ - murderer=i; - person[person[i].killtarget].health=0; - person[person[i].killtarget].eaten=i; - } - finaltarget=person[person[i].killtarget].playercoords; - } - } if(person[i].killtargetvisible||realcheck)person[i].pathtarget=finaltarget; - if(realcheck)person[i].lastdistancevictim=findDistancefast(person[i].pathtarget,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; - } - } - } 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; - } - } - } //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(); 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; - } 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; - } //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); - } - } - } //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((!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; - } - } 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]); - } - } //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){ for(int i=0;i<max_people;i++){ |
