-void Person::DoAnimations(){
- if(!skeleton.free){
- int i = 0;
- static float oldtarget;
-
- if(isIdle()&¤tanimation!=getIdle())normalsupdatedelay=0;
-
- if(targetanimation==tempanim||currentanimation==tempanim){
- animation[tempanim]=tempanimation;
- }
- if(targetanimation==jumpupanim||targetanimation==jumpdownanim||isFlip()){
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
-
- if(id==0){
- OPENAL_3D_SetAttributes(channels[whooshsound], gLoc, vel);
- OPENAL_SetVolume(channels[whooshsound], 64*findLength(&velocity)/5);
- }
- if(((velocity.y<-15)||(crouchkeydown&&velocity.y<-8))&&abs(velocity.y)*4>fast_sqrt(velocity.x*velocity.x*velocity.z*velocity.z))landhard=1;
- if(!crouchkeydown&&velocity.y>=-15)landhard=0;
- }
- if((currentanimation==jumpupanim||targetanimation==jumpdownanim)/*&&velocity.y<40*/&&!isFlip()&&(!isLanding()&&!isLandhard())&&((crouchkeydown&&!crouchtogglekeydown))){
- XYZ targfacing;
- targfacing=0;
- targfacing.z=1;
-
- targfacing=DoRotation(targfacing,0,targetrotation,0);
-
- if(normaldotproduct(targfacing,velocity)>=-.3)targetanimation=flipanim;
- else targetanimation=backflipanim;
- crouchtogglekeydown=1;
- targetframe=0;
- target=0;
-
- if(id==0)numflipped++;
- }
-
- if(animation[targetanimation].attack!=reversed)feint=0;
- if(!crouchkeydown||(isLanding()||isLandhard())||(wasLanding()||wasLandhard())){
- crouchtogglekeydown=0;
- if(aitype==playercontrolled)feint=0;
- }
- else
- {
- if(!crouchtogglekeydown&&animation[targetanimation].attack==reversed&&aitype==playercontrolled&&(escapednum<2||reversaltrain))feint=1;
- if(!isFlip())crouchtogglekeydown=1;
- }
-
-
- if(animation[targetanimation].attack||currentanimation==getupfrombackanim||currentanimation==getupfromfrontanim){
- if(detail)normalsupdatedelay=0;
- }
-
- if(target>=1){
- if(targetanimation==rollanim&&targetframe==3&&onfire){
- onfire=0;
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=0;
- vel[1]=0;
- vel[2]=0;
- PlaySoundEx( fireendsound, samp[fireendsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[fireendsound], gLoc, vel);
- OPENAL_SetVolume(channels[fireendsound], 256);
- OPENAL_SetPaused(channels[fireendsound], false);
- OPENAL_SetPaused(channels[stream_firesound], true);
- deathbleeding=0;
- }
-
- if(targetanimation==rabbittacklinganim&&targetframe==1){
- //if(victim->aitype==attacktypecutoff&&Random()%2==0&&victim->stunned<=0&&animation[victim->targetanimation].attack==neutral&&victim->id!=0)Reverse();
- if(victim->aitype==attacktypecutoff&&victim->stunned<=0&&victim->surprised<=0&&victim->id!=0)Reverse();
- if(targetanimation==rabbittacklinganim&&targetframe==1&&!victim->isCrouch()&&victim->targetanimation!=backhandspringanim){
- if(normaldotproduct(victim->facing,facing)>0)victim->targetanimation=rabbittackledbackanim;
- else victim->targetanimation=rabbittackledfrontanim;
- victim->targetframe=2;
- victim->target=0;
- victim->rotation=rotation;
- victim->targetrotation=rotation;
- if(victim->aitype==gethelptype)victim->DoDamage(victim->damagetolerance-victim->damage);
- //victim->DoDamage(30);
- if(creature==wolftype){
- DoBloodBig(0,255);
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[clawslicesound], gLoc, vel);
- OPENAL_SetVolume(channels[clawslicesound], 128);
- OPENAL_SetPaused(channels[clawslicesound], false);
- victim->spurt=1;
- victim->DoBloodBig(1/victim->armorhead,210);
- }
- if(id==0){
- bonus=TackleBonus;
- bonustime=0;
- bonusvalue=5;
- if(victim->aitype==gethelptype)bonusvalue=50;
- }
- }
- }
-
- if(!drawtogglekeydown&&drawkeydown&&(weaponactive==-1||num_weapons==1)&&(animation[targetanimation].label[targetframe]||(targetanimation!=currentanimation&¤tanimation==rollanim))&&num_weapons>0&&creature!=wolftype){
- if(weapons.type[weaponids[0]]==knife){
- if(weaponactive==-1)weaponactive=0;
- else if(weaponactive==0)weaponactive=-1;
-
- if(weaponactive==-1){
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
-
- PlaySoundEx( knifesheathesound, samp[knifesheathesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[knifesheathesound], gLoc, vel);
- OPENAL_SetVolume(channels[knifesheathesound], 128);
- OPENAL_SetPaused(channels[knifesheathesound], false);
- }
- if(weaponactive!=-1){
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
-
- PlaySoundEx( knifedrawsound, samp[knifedrawsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[knifedrawsound], gLoc, vel);
- OPENAL_SetVolume(channels[knifedrawsound], 128);
- OPENAL_SetPaused(channels[knifedrawsound], false);
- }
- }
- drawtogglekeydown=1;
- }
- //Footstep sounds
- if(tutoriallevel!=1||id==0)
- if((animation[targetanimation].label[targetframe]&&(animation[targetanimation].label[targetframe]<5||animation[targetanimation].label[targetframe]==8))/*||(targetanimation==rollanim&&targetframe==animation[rollanim].numframes-1)*/){
- int whichsound;
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- if(onterrain){
- if(terrain.getOpacity(coords.x,coords.z)<.2){
- if(animation[targetanimation].label[targetframe]==1)whichsound=footstepsound;
- else whichsound=footstepsound2;
- if(animation[targetanimation].label[targetframe]==1)FootLand(0,1);
- if(animation[targetanimation].label[targetframe]==2)FootLand(1,1);
- if(animation[targetanimation].label[targetframe]==3&&isRun()){
- FootLand(1,1);
- FootLand(0,1);
- }
-
- }
- if(terrain.getOpacity(coords.x,coords.z)>=.2){
- if(animation[targetanimation].label[targetframe]==1)whichsound=footstepsound3;
- else whichsound=footstepsound4;
- }
- }
- if(!onterrain){
- if(animation[targetanimation].label[targetframe]==1)whichsound=footstepsound3;
- else whichsound=footstepsound4;
- }
- if(animation[targetanimation].label[targetframe]==4&&(weaponactive==-1||(targetanimation!=knifeslashstartanim&&targetanimation!=knifethrowanim&&targetanimation!=crouchstabanim&&targetanimation!=swordgroundstabanim&&targetanimation!=knifefollowanim))){
- if(animation[targetanimation].attack!=neutral){
- i=abs(Random()%3);
- if(i==0)whichsound=lowwhooshsound;
- if(i==1)whichsound=midwhooshsound;
- if(i==2)whichsound=highwhooshsound;
- }
- if(animation[targetanimation].attack==neutral)whichsound=movewhooshsound;
- }
- else if(animation[targetanimation].label[targetframe]==4)whichsound=knifeswishsound;
- if(animation[targetanimation].label[targetframe]==8&&tutoriallevel!=1)whichsound=landsound2;
-
- PlaySoundEx( whichsound, samp[whichsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[whichsound], gLoc, vel);
- if(whichsound!=knifeswishsound)OPENAL_SetVolume(channels[whichsound], 128);
- if(whichsound!=knifeswishsound&&(targetanimation==staffhitanim||targetanimation==staffgroundsmashanim||targetanimation==staffspinhitanim))OPENAL_SetVolume(channels[whichsound], 256);
- if(whichsound==knifeswishsound)OPENAL_SetVolume(channels[whichsound], 512);
- OPENAL_SetPaused(channels[whichsound], false);
-
- if(id==0)
- if(whichsound==footstepsound||whichsound==footstepsound2||whichsound==footstepsound3||whichsound==footstepsound4){
- envsound[numenvsounds]=coords;
- if(targetanimation==wolfrunninganim||targetanimation==rabbitrunninganim)envsoundvol[numenvsounds]=15;
- else envsoundvol[numenvsounds]=6;
- envsoundlife[numenvsounds]=.4;
- numenvsounds++;
- }
-
- if(animation[targetanimation].label[targetframe]==3){
- whichsound--;
- PlaySoundEx( whichsound, samp[whichsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[whichsound], gLoc, vel);
- OPENAL_SetVolume(channels[whichsound], 128);
- OPENAL_SetPaused(channels[whichsound], false);
- }
- }
-
- //Combat sounds
- if(tutoriallevel!=1||id==0)
- if(speechdelay<=0)
- if(targetanimation!=crouchstabanim&&targetanimation!=swordgroundstabanim&&targetanimation!=staffgroundsmashanim)
- if((animation[targetanimation].label[targetframe]&&(animation[targetanimation].label[targetframe]<5||animation[targetanimation].label[targetframe]==8))/*||(targetanimation==rollanim&&targetframe==animation[rollanim].numframes-1)*/){
- int whichsound=-1;
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- if(animation[targetanimation].label[targetframe]==4&&aitype!=playercontrolled){
- if(animation[targetanimation].attack!=neutral){
- i=abs(Random()%4);
- if(creature==rabbittype){
- if(i==0)whichsound=rabbitattacksound;
- if(i==1)whichsound=rabbitattack2sound;
- if(i==2)whichsound=rabbitattack3sound;
- if(i==3)whichsound=rabbitattack4sound;
- }
- if(creature==wolftype){
- if(i==0)whichsound=barksound;
- if(i==1)whichsound=bark2sound;
- if(i==2)whichsound=bark3sound;
- if(i==3)whichsound=barkgrowlsound;
- }
- speechdelay=.3;
- }
- //if(animation[targetanimation].attack==neutral)whichsound=movewhooshsound;
- }
- //else if(animation[targetanimation].label[targetframe]==4)whichsound=knifeswishsound;
- //if(animation[targetanimation].label[targetframe]==8)whichsound=landsound2;
-
- if(whichsound!=-1){
- PlaySoundEx( whichsound, samp[whichsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[whichsound], gLoc, vel);
- OPENAL_SetVolume(channels[whichsound], 512);
- OPENAL_SetPaused(channels[whichsound], false);
- }
- }
-
-
-
- if((!wasLanding()&&!wasLandhard())&¤tanimation!=getIdle()&&(isLanding()||isLandhard())){
- FootLand(0,1);
- FootLand(1,1);
- }
-
- transspeed=0;
- currentoffset=targetoffset;
- targetframe=currentframe;
- currentanimation=targetanimation;
- targetframe++;
-
- if(targetanimation==removeknifeanim&&animation[targetanimation].label[currentframe]==5){
- for(i=0;i<weapons.numweapons;i++){
- if(/*weapons.velocity[i].x==0&&weapons.velocity[i].y==0&&weapons.velocity[i].z==0&&*/weapons.owner[i]==-1)
- if(findDistancefastflat(&coords,&weapons.position[i])<4&&weaponactive==-1){
- if(findDistancefast(&coords,&weapons.position[i])>=1){
- if(weapons.type[i]!=staff){
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( knifedrawsound, samp[knifedrawsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[knifedrawsound], gLoc, vel);
- OPENAL_SetVolume(channels[knifedrawsound], 128);
- OPENAL_SetPaused(channels[knifedrawsound], false);
- }
-
- weaponactive=0;
- weapons.owner[i]=id;
- if(num_weapons>0){
- weaponids[num_weapons]=weaponids[0];
- }
- num_weapons++;
- weaponids[0]=i;
- }
- }
- }
- }
-
- static bool willwork;
- if(targetanimation==crouchremoveknifeanim&&animation[targetanimation].label[currentframe]==5){
- for(i=0;i<weapons.numweapons;i++){
- bool willwork=1;
- if(weapons.owner[i]!=-1)
- if(player[weapons.owner[i]].weaponstuck!=-1)
- if(player[weapons.owner[i]].weaponids[player[weapons.owner[i]].weaponstuck]==i)
- if(player[weapons.owner[i]].num_weapons>1)willwork=0;
- if((/*weapons.velocity[i].x==0&&weapons.velocity[i].y==0&&weapons.velocity[i].z==0&&*/weapons.owner[i]==-1)||(hasvictim&&weapons.owner[i]==victim->id&&victim->skeleton.free))
- if(willwork&&findDistancefastflat(&coords,&weapons.position[i])<3&&weaponactive==-1){
- if(findDistancefast(&coords,&weapons.position[i])<1||hasvictim){
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- bool fleshstuck=0;
- if(weapons.owner[i]!=-1)
- if(victim->weaponstuck!=-1){
- if(victim->weaponids[victim->weaponstuck]==i){
- fleshstuck=1;
- }
- }
- if(!fleshstuck){
- if(weapons.type[i]!=staff){
- PlaySoundEx( knifedrawsound, samp[knifedrawsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[knifedrawsound], gLoc, vel);
- OPENAL_SetVolume(channels[knifedrawsound], 128);
- OPENAL_SetPaused(channels[knifedrawsound], false);
- }
- }
- if(fleshstuck){
- PlaySoundEx( fleshstabremovesound, samp[fleshstabremovesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[fleshstabremovesound], gLoc, vel);
- OPENAL_SetVolume(channels[fleshstabremovesound], 128);
- OPENAL_SetPaused(channels[fleshstabremovesound], false);
- }
- weaponactive=0;
- if(weapons.owner[i]!=-1){
-
- victim=&player[weapons.owner[i]];
- if(victim->num_weapons==1)victim->num_weapons=0;
- else victim->num_weapons=1;
-
- //victim->weaponactive=-1;
- victim->skeleton.longdead=0;
- victim->skeleton.free=1;
- victim->skeleton.broken=0;
-
- for(int j=0;j<victim->skeleton.num_joints;j++){
- victim->skeleton.joints[j].velchange=0;
- victim->skeleton.joints[j].locked=0;
- }
-
- XYZ relative;
- relative=0;
- relative.y=10;
- Normalise(&relative);
- XYZ footvel,footpoint;
- footvel=0;
- footpoint=weapons.position[i];
- if(victim->weaponstuck!=-1){
- if(victim->weaponids[victim->weaponstuck]==i){
- if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .8, .3);
- weapons.bloody[i]=2;
- weapons.blooddrip[i]=5;
- victim->weaponstuck=-1;
- }
- }
- if(victim->num_weapons>0){
- if(victim->weaponstuck!=0&&victim->weaponstuck!=-1)victim->weaponstuck=0;
- if(victim->weaponids[0]==i)
- victim->weaponids[0]=victim->weaponids[victim->num_weapons];
- }
-
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*6;
- victim->skeleton.joints[victim->skeleton.jointlabels[neck]].velocity+=relative*6;
- victim->skeleton.joints[victim->skeleton.jointlabels[rightshoulder]].velocity+=relative*6;
- victim->skeleton.joints[victim->skeleton.jointlabels[leftshoulder]].velocity+=relative*6;
- }
- weapons.owner[i]=id;
- if(num_weapons>0){
- weaponids[num_weapons]=weaponids[0];
- }
- num_weapons++;
- weaponids[0]=i;
- }
- }
- }
- }
-
- if(currentanimation==drawleftanim&&animation[targetanimation].label[currentframe]==5){
- if(weaponactive==-1)weaponactive=0;
- else if(weaponactive==0){
- weaponactive=-1;
- if(num_weapons==2){
- int buffer;
- buffer=weaponids[0];
- weaponids[0]=weaponids[1];
- weaponids[1]=buffer;
- }
- }
- if(weaponactive==-1){
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
-
- PlaySoundEx( knifesheathesound, samp[knifesheathesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[knifesheathesound], gLoc, vel);
- OPENAL_SetVolume(channels[knifesheathesound], 128);
- OPENAL_SetPaused(channels[knifesheathesound], false);
- }
- if(weaponactive!=-1){
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
-
- PlaySoundEx( knifedrawsound, samp[knifedrawsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[knifedrawsound], gLoc, vel);
- OPENAL_SetVolume(channels[knifedrawsound], 128);
- OPENAL_SetPaused(channels[knifedrawsound], false);
- }
- }
-
-
- if((currentanimation==walljumprightkickanim&&targetanimation==walljumprightkickanim)||(currentanimation==walljumpleftkickanim&&targetanimation==walljumpleftkickanim)){
- XYZ rotatetarget=DoRotation(skeleton.forward,0,rotation,0);
- Normalise(&rotatetarget);
- targetrotation=-asin(0-rotatetarget.x);
- targetrotation*=360/6.28;
- if(rotatetarget.z<0)targetrotation=180-targetrotation;
-
- if(targetanimation==walljumprightkickanim)targetrotation+=40;
- if(targetanimation==walljumpleftkickanim)targetrotation-=40;
- }
-
- bool dojumpattack;
- dojumpattack=0;
- if((targetanimation==rabbitrunninganim||targetanimation==wolfrunninganim)&&targetframe==3&&(jumpkeydown||attackkeydown||id!=0))dojumpattack=1;
- if(hasvictim)
- if(findDistancefast(&victim->coords,&/*player[i].*/coords)<5&&victim->aitype==gethelptype&&(attackkeydown)&&!victim->skeleton.free&&victim->isRun()&&victim->runninghowlong>=1)dojumpattack=1; if(!hostile)dojumpattack=0;
- if(dojumpattack){
- if((targetanimation==rabbitrunninganim||targetanimation==wolfrunninganim)&&id==0){
- targetanimation=rabbittackleanim;
- targetframe=0;
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
-
- PlaySoundEx( jumpsound, samp[jumpsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[jumpsound], gLoc, vel);
- OPENAL_SetVolume(channels[jumpsound], 128);
- OPENAL_SetPaused(channels[jumpsound], false);
- }
-
- float closestdist;
- closestdist=0;
- int closestid;
- closestid=-1;
- XYZ targetloc;
- targetloc=velocity;
- Normalise(&targetloc);
- targetloc+=coords;
- for(i=0;i<numplayers;i++){
- if(i!=id)
- if(findDistancefast(&targetloc,&player[i].coords)<closestdist||closestdist==0){
- closestdist=findDistancefast(&targetloc,&player[i].coords);
- closestid=i;
- }
- }
- if(closestid!=-1)
- if(closestdist<5&&!player[closestid].dead&&animation[player[closestid].targetanimation].height!=lowheight&&player[closestid].targetanimation!=backhandspringanim){
- hasvictim=1;
- victim=&player[closestid];
- coords=victim->coords;
- currentanimation=rabbittacklinganim;
- targetanimation=rabbittacklinganim;
- currentframe=0;
- targetframe=1;
- XYZ rotatetarget;
- if(coords.z!=victim->coords.z||coords.x!=victim->coords.x){
- rotatetarget=coords-victim->coords;
- Normalise(&rotatetarget);
- targetrotation=-asin(0-rotatetarget.x);
- targetrotation*=360/6.28;
- if(rotatetarget.z<0)targetrotation=180-targetrotation;
- }
- if(targetanimation!=rabbitrunninganim){
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
-
- PlaySoundEx( jumpsound, samp[jumpsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[jumpsound], gLoc, vel);
- OPENAL_SetVolume(channels[jumpsound], 128);
- OPENAL_SetPaused(channels[jumpsound], false);
- }
- }
- }
-
- //Move impacts
- float damagemult=1*power;
- if(creature==wolftype)damagemult=2.5*power;
- if(hasvictim){damagemult/=victim->damagetolerance/200;}
- //if(onfire)damagemult=3;
- if((animation[targetanimation].attack==normalattack||targetanimation==walljumprightkickanim||targetanimation==walljumpleftkickanim)&&(!feint)&&(victim->skeleton.free!=2||targetanimation==killanim||targetanimation==dropkickanim||targetanimation==crouchstabanim||targetanimation==swordgroundstabanim||targetanimation==staffgroundsmashanim)){
- if(targetanimation==spinkickanim&&animation[targetanimation].label[currentframe]==5){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&3&&animation[victim->targetanimation].height!=lowheight){
- escapednum=0;
- if(id==0)camerashake+=.4;
- if(Random()%2||creature==wolftype){
- victim->spurt=1;
- DoBlood(.2,250);
- if(creature==wolftype)DoBloodBig(0,250);
- }
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- if(tutoriallevel!=1){
- PlaySoundEx( heavyimpactsound, samp[heavyimpactsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel);
- OPENAL_SetVolume(channels[heavyimpactsound], 128);
- OPENAL_SetPaused(channels[heavyimpactsound], false);
- }
- if(creature==wolftype){
- PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[clawslicesound], gLoc, vel);
- OPENAL_SetVolume(channels[clawslicesound], 128);
- OPENAL_SetPaused(channels[clawslicesound], false);
- victim->spurt=1;
- victim->DoBloodBig(2/victim->armorhead,175);
- }
- victim->RagDoll(0);
- XYZ relative;
- relative=victim->coords-coords;
- relative.y=0;
- Normalise(&relative);
- relative=DoRotation(relative,0,-90,0);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*40;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity+=relative*damagemult*200;
- //FootLand(1,2);
- victim->Puff(head);
- victim->DoDamage(damagemult*100/victim->protectionhead);
-
- if(id==0){
- SolidHitBonus();
- }
- }
- }
-
- if(targetanimation==wolfslapanim&&animation[targetanimation].label[currentframe]==5){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&3&&animation[victim->targetanimation].height!=lowheight){
- escapednum=0;
- if(id==0)camerashake+=.4;
- if(Random()%2||creature==wolftype){
- victim->spurt=1;
- if(creature==wolftype)DoBloodBig(0,235);
- }
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( whooshhitsound, samp[whooshhitsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[whooshhitsound], gLoc, vel);
- OPENAL_SetVolume(channels[whooshhitsound], 512);
- OPENAL_SetPaused(channels[whooshhitsound], false);
- if(creature==wolftype){
- PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[clawslicesound], gLoc, vel);
- OPENAL_SetVolume(channels[clawslicesound], 128);
- OPENAL_SetPaused(channels[clawslicesound], false);
- victim->spurt=1;
- victim->DoBloodBig(2,175);
- }
- victim->RagDoll(0);
- XYZ relative;
- relative=victim->coords-coords;
- relative.y=0;
- Normalise(&relative);
- relative.y-=1;
- Normalise(&relative);
- relative=DoRotation(relative,0,90,0);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*20;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity+=relative*damagemult*100;
- //FootLand(1,2);
- victim->Puff(head);
- victim->DoDamage(damagemult*50/victim->protectionhead);
- }
- }
-
- if(targetanimation==walljumprightkickanim&&animation[targetanimation].label[currentframe]==5){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->targetanimation].height!=lowheight){
- escapednum=0;
- if(id==0)camerashake+=.4;
- victim->spurt=1;
- DoBlood(.2,250);
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- if(tutoriallevel!=1){
- PlaySoundEx( heavyimpactsound, samp[heavyimpactsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel);
- OPENAL_SetVolume(channels[heavyimpactsound], 160);
- OPENAL_SetPaused(channels[heavyimpactsound], false);
- }
- if(creature==wolftype){
- PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[clawslicesound], gLoc, vel);
- OPENAL_SetVolume(channels[clawslicesound], 128);
- OPENAL_SetPaused(channels[clawslicesound], false);
- victim->spurt=1;
- victim->DoBloodBig(2/victim->armorhead,175);
- }
- victim->RagDoll(0);
- XYZ relative;
- relative=facing;
- relative.y=0;
- Normalise(&relative);
- relative=DoRotation(relative,0,-90,0);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*40;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity+=relative*damagemult*200;
- //FootLand(1,2);
- victim->Puff(head);
- victim->DoDamage(damagemult*150/victim->protectionhead);
-
- if(victim->damage>victim->damagetolerance){
- if(id==0){
- bonus=style;
- bonustime=0;
- bonusvalue=150;
- }
- }
- else if(id==0){
- SolidHitBonus();
- }
- }
- }
-
- if(targetanimation==walljumpleftkickanim&&animation[targetanimation].label[currentframe]==5){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->targetanimation].height!=lowheight){
- escapednum=0;
- if(id==0)camerashake+=.4;
- victim->spurt=1;
- DoBlood(.2,250);
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- if(tutoriallevel!=1){
- PlaySoundEx( heavyimpactsound, samp[heavyimpactsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel);
- OPENAL_SetVolume(channels[heavyimpactsound], 160);
- OPENAL_SetPaused(channels[heavyimpactsound], false);
- }
- if(creature==wolftype){
- PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[clawslicesound], gLoc, vel);
- OPENAL_SetVolume(channels[clawslicesound], 128);
- OPENAL_SetPaused(channels[clawslicesound], false);
- victim->spurt=1;
- victim->DoBloodBig(2/victim->armorhead,175);
- }
- victim->RagDoll(0);
- XYZ relative;
- relative=facing;
- relative.y=0;
- Normalise(&relative);
- relative=DoRotation(relative,0,90,0);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*40;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity+=relative*damagemult*200;
- //FootLand(1,2);
- victim->Puff(head);
- victim->DoDamage(damagemult*150/victim->protectionhead);
-
- if(victim->damage>victim->damagetolerance){
- if(id==0){
- bonus=style;
- bonustime=0;
- bonusvalue=150;
- }
- }
- else if(id==0){
- SolidHitBonus();
- }
- }
- }
-
- if(targetanimation==blockhighleftstrikeanim&&animation[targetanimation].label[currentframe]==5){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->targetanimation].height!=lowheight){
- escapednum=0;
- if(id==0)camerashake+=.4;
- if(Random()%2){
- victim->spurt=1;
- DoBlood(.2,235);
- }
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( whooshhitsound, samp[whooshhitsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[whooshhitsound], gLoc, vel);
- OPENAL_SetVolume(channels[whooshhitsound], 512);
- OPENAL_SetPaused(channels[whooshhitsound], false);
- victim->RagDoll(0);
- XYZ relative;
- relative=victim->coords-coords;
- relative.y=0;
- Normalise(&relative);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*30;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity+=relative*damagemult*100;
- //FootLand(1,2);
- victim->Puff(head);
- victim->DoDamage(damagemult*50/victim->protectionhead);
- }
- }
-
- if(targetanimation==killanim&&animation[targetanimation].label[currentframe]==8){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&victim->dead){
- escapednum=0;
- if(id==0)camerashake+=.2;
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- /*PlaySoundEx( landsound2, samp[landsound2], NULL, true);
- OPENAL_3D_SetAttributes(channels[landsound2], gLoc, vel);
- OPENAL_SetVolume(channels[landsound2], 128);
- OPENAL_SetPaused(channels[landsound2], false);
- */
- PlaySoundEx( movewhooshsound, samp[movewhooshsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[movewhooshsound], gLoc, vel);
- OPENAL_SetVolume(channels[movewhooshsound], 128);
- OPENAL_SetPaused(channels[movewhooshsound], false);
-
- victim->skeleton.longdead=0;
- victim->skeleton.free=1;
- victim->skeleton.broken=0;
- victim->skeleton.spinny=1;
-
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velchange=0;
- victim->skeleton.joints[i].delay=0;
- victim->skeleton.joints[i].locked=0;
- //victim->skeleton.joints[i].velocity=0;
- }
-
- XYZ relative;
- relative=0;
- relative.y=1;
- Normalise(&relative);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity.y=relative.y*10;
- victim->skeleton.joints[i].position.y+=relative.y*.3;
- victim->skeleton.joints[i].oldposition.y+=relative.y*.3;
- victim->skeleton.joints[i].realoldposition.y+=relative.y*.3;
- }
- victim->Puff(abdomen);
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity.y=relative.y*400;
- }
- }
-
- if(targetanimation==killanim&&animation[targetanimation].label[currentframe]==5){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*9&&victim->dead){
- escapednum=0;
- if(id==0)camerashake+=.4;
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- if(tutoriallevel!=1){
- PlaySoundEx( heavyimpactsound, samp[heavyimpactsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel);
- OPENAL_SetVolume(channels[heavyimpactsound], 128);
- OPENAL_SetPaused(channels[heavyimpactsound], false);
- }
- XYZ relative;
- relative=victim->coords-coords;
- relative.y=0;
- Normalise(&relative);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*90;
- }
- victim->Puff(abdomen);
- if(victim->dead!=2&&victim->permanentdamage>victim->damagetolerance-250&&autoslomo){
- slomo=1;
- slomodelay=.2;
- }
- victim->DoDamage(damagemult*500/victim->protectionhigh);
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*300;
- }
- }
-
- if(targetanimation==dropkickanim&&animation[targetanimation].label[currentframe]==7){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*9&&victim->skeleton.free){
- escapednum=0;
- if(id==0)camerashake+=.4;
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- if(tutoriallevel!=1){
- PlaySoundEx( thudsound, samp[thudsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[thudsound], gLoc, vel);
- OPENAL_SetVolume(channels[thudsound], 400);
- OPENAL_SetPaused(channels[thudsound], false);
- }
-
- victim->skeleton.longdead=0;
- victim->skeleton.free=1;
- victim->skeleton.broken=0;
- victim->skeleton.spinny=1;
-
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velchange=0;
- //victim->skeleton.joints[i].delay=0;
- victim->skeleton.joints[i].locked=0;
- }
- XYZ relative;
- relative=victim->coords-coords;
- Normalise(&relative);
- relative.y+=.3;
- Normalise(&relative);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*20;
- }
- if(id==0&&!victim->dead){
- SolidHitBonus();
- }
-
- victim->Puff(abdomen);
- victim->DoDamage(damagemult*20/victim->protectionhigh);
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*200;
- staggerdelay=.5;
- if(!victim->dead)staggerdelay=1.2;
-
-
- }
- }
-
- if((targetanimation==crouchstabanim||targetanimation==swordgroundstabanim)&&animation[targetanimation].label[currentframe]==5){
- // if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*9){
- //if(id==0)camerashake+=.4;
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
-
- if(hasvictim)
- if(!victim->skeleton.free)hasvictim=0;
-
- if(!hasvictim){
- terrain.MakeDecal(blooddecalfast,(weapons.tippoint[weaponids[weaponactive]]*.8+weapons.position[weaponids[weaponactive]]*.2),.08,.6,Random()%360);
- PlaySoundEx( knifesheathesound, samp[knifesheathesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[knifesheathesound], gLoc, vel);
- OPENAL_SetVolume(channels[knifesheathesound], 128);
- OPENAL_SetPaused(channels[knifesheathesound], false);
- }
-
- if(victim&&hasvictim){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3){
-
- XYZ where,startpoint,endpoint,movepoint,colpoint;
- float rotationpoint;
- int whichtri;
- if(weapons.type[weaponids[weaponactive]]==knife){
- where=(weapons.tippoint[weaponids[weaponactive]]*.6+weapons.position[weaponids[weaponactive]]*.4);
- where-=victim->coords;
- if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
- //where=scale;
- startpoint=where;
- startpoint.y+=100;
- endpoint=where;
- endpoint.y-=100;
- }
- if(weapons.type[weaponids[weaponactive]]==sword){
- where=weapons.position[weaponids[weaponactive]];
- where-=victim->coords;
- if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
- startpoint=where;
- where=weapons.tippoint[weaponids[weaponactive]];
- where-=victim->coords;
- if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
- endpoint=where;
- }
- if(weapons.type[weaponids[weaponactive]]==staff){
- where=weapons.position[weaponids[weaponactive]];
- where-=victim->coords;
- if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
- startpoint=where;
- where=weapons.tippoint[weaponids[weaponactive]];
- where-=victim->coords;
- if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
- endpoint=where;
- }
- movepoint=0;
- rotationpoint=0;
- whichtri=victim->skeleton.drawmodel.LineCheck(&startpoint,&endpoint, &colpoint, &movepoint, &rotationpoint);
-
- if(whichtri!=-1){
- if(victim->dead!=2){
- victim->DoDamage(abs((victim->damagetolerance-victim->permanentdamage)*2));
- if(id==0&&!victim->dead){
- bonus=FinishedBonus;
- bonustime=0;
- bonusvalue=200;
- }
- }
- if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2;
-
- victim->skeleton.longdead=0;
- victim->skeleton.free=1;
- victim->skeleton.broken=0;
-
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velchange=0;
- victim->skeleton.joints[i].locked=0;
- //victim->skeleton.joints[i].velocity=0;
- }
- PlaySoundEx( fleshstabsound, samp[fleshstabsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[fleshstabsound], gLoc, vel);
- OPENAL_SetVolume(channels[fleshstabsound], 128);
- OPENAL_SetPaused(channels[fleshstabsound], false);
-
- }
- if(whichtri!=-1||weapons.bloody[weaponids[weaponactive]]){
- weapons.blooddrip[weaponids[weaponactive]]+=5;
- weapons.blooddripdelay[weaponids[weaponactive]]=0;
- }
- if(whichtri==-1){
- hasvictim=0;
- PlaySoundEx( knifesheathesound, samp[knifesheathesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[knifesheathesound], gLoc, vel);
- OPENAL_SetVolume(channels[knifesheathesound], 128);
- OPENAL_SetPaused(channels[knifesheathesound], false);
- }
- }
- }
- }
-
- if((targetanimation==crouchstabanim||targetanimation==swordgroundstabanim)&&animation[targetanimation].label[currentframe]==6){
- // if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*9){
- //if(id==0)camerashake+=.4;
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- if(!hasvictim){
- PlaySoundEx( knifedrawsound, samp[knifedrawsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[knifedrawsound], gLoc, vel);
- OPENAL_SetVolume(channels[knifedrawsound], 128);
- OPENAL_SetPaused(channels[knifedrawsound], false);
- }
-
- if(victim&&hasvictim){
- XYZ footvel,footpoint;
-
- PlaySoundEx( fleshstabremovesound, samp[fleshstabremovesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[fleshstabremovesound], gLoc, vel);
- OPENAL_SetVolume(channels[fleshstabremovesound], 128);
- OPENAL_SetPaused(channels[fleshstabremovesound], false);
-
- footvel=0;
- footpoint=(weapons.tippoint[weaponids[weaponactive]]*.8+weapons.position[weaponids[weaponactive]]*.2);
-
- if(weapons.type[weaponids[weaponactive]]==sword){
- XYZ where,startpoint,endpoint,movepoint;
- float rotationpoint;
- int whichtri;
-
- where=weapons.position[weaponids[weaponactive]];
- where-=victim->coords;
- if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
- startpoint=where;
- where=weapons.tippoint[weaponids[weaponactive]];
- where-=victim->coords;
- if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
- endpoint=where;
-
- movepoint=0;
- rotationpoint=0;
- whichtri=victim->skeleton.drawmodel.LineCheck(&startpoint,&endpoint, &footpoint, &movepoint, &rotationpoint);
- footpoint+=victim->coords;
-
- if(whichtri==-1){
- footpoint=(weapons.tippoint[weaponids[weaponactive]]*.8+weapons.position[weaponids[weaponactive]]*.2);
- }
- }
- if(weapons.type[weaponids[weaponactive]]==staff){
- XYZ where,startpoint,endpoint,movepoint;
- float rotationpoint;
- int whichtri;
-
- where=weapons.position[weaponids[weaponactive]];
- where-=victim->coords;
- if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
- startpoint=where;
- where=weapons.tippoint[weaponids[weaponactive]];
- where-=victim->coords;
- if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0);
- endpoint=where;
-
- movepoint=0;
- rotationpoint=0;
- whichtri=victim->skeleton.drawmodel.LineCheck(&startpoint,&endpoint, &footpoint, &movepoint, &rotationpoint);
- footpoint+=victim->coords;
-
- if(whichtri==-1){
- footpoint=(weapons.tippoint[weaponids[weaponactive]]*.8+weapons.position[weaponids[weaponactive]]*.2);
- }
- }
- hasvictim=victim->DoBloodBigWhere(2,220,footpoint);
- if(hasvictim){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3){
- victim->skeleton.longdead=0;
- victim->skeleton.free=1;
- victim->skeleton.broken=0;
-
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velchange=0;
- victim->skeleton.joints[i].locked=0;
- //victim->skeleton.joints[i].velocity=0;
- }
-
- XYZ relative;
- relative=0;
- relative.y=10;
- Normalise(&relative);
- //victim->Puff(abdomen);
- if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .8, .3);
-
- if(victim->bloodloss<victim->damagetolerance){
- victim->bloodloss+=1000;
- victim->bled=0;
- }
-
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*20;
- }
- }
- }
- if(!hasvictim&&onterrain){
- weapons.bloody[weaponids[weaponactive]]=0;
- weapons.blooddrip[weaponids[weaponactive]]=0;
- }
- }
-
- if(targetanimation==upunchanim&&animation[targetanimation].label[currentframe]==5){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3){
- escapednum=0;
- if(id==0)camerashake+=.4;
- if(Random()%2){
- victim->spurt=1;
- DoBlood(.2,235);
- }
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- //if(!victim->isIdle()||victim->damage>victim->damagetolerance-60){
- if(1==1){
- if(tutoriallevel!=1){
- PlaySoundEx( heavyimpactsound, samp[heavyimpactsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel);
- OPENAL_SetVolume(channels[heavyimpactsound], 128);
- OPENAL_SetPaused(channels[heavyimpactsound], false);
- }
- }
- else {
- if(tutoriallevel!=1){
- PlaySoundEx( landsound2, samp[landsound2], NULL, true);
- OPENAL_3D_SetAttributes(channels[landsound2], gLoc, vel);
- OPENAL_SetVolume(channels[landsound2], 256);
- OPENAL_SetPaused(channels[landsound2], false);
- }
- }
-
- //if(!victim->isIdle()||victim->damage>victim->damagetolerance-60)
- victim->RagDoll(0);
- XYZ relative;
- relative=victim->coords-coords;
- relative.y=0;
- Normalise(&relative);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity=relative*30;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity+=relative*damagemult*150;
-
- victim->targetframe=0;
- victim->targetanimation=staggerbackhardanim;
- victim->targetrotation=targetrotation+180;
- victim->target=0;
- victim->stunned=1;
-
- victim->Puff(head);
- victim->Puff(abdomen);
- victim->DoDamage(damagemult*60/victim->protectionhigh);
-
- if(id==0){
- SolidHitBonus();
- }
- }
- }
-
-
- if(targetanimation==winduppunchanim&&animation[targetanimation].label[currentframe]==5){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*2){
- escapednum=0;
- if(id==0)camerashake+=.4;
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- //if(!victim->isIdle()||victim->damage>victim->damagetolerance-60){
- if(victim->damage<=victim->damagetolerance-60&&normaldotproduct(victim->facing,victim->coords-coords)<(scale*5)*(scale*5)*0&&animation[victim->targetanimation].height!=lowheight){
- if(tutoriallevel!=1){
- PlaySoundEx( thudsound, samp[thudsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[thudsound], gLoc, vel);
- OPENAL_SetVolume(channels[thudsound], 512);
- OPENAL_SetPaused(channels[thudsound], false);
- }
- }
- else if(victim->damage<=victim->damagetolerance-60&&normaldotproduct(victim->facing,victim->coords-coords)<(scale*5)*(scale*5)*0&&animation[victim->targetanimation].height==lowheight){
- if(tutoriallevel!=1){
- PlaySoundEx( whooshhitsound, samp[whooshhitsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[whooshhitsound], gLoc, vel);
- OPENAL_SetVolume(channels[whooshhitsound], 512);
- OPENAL_SetPaused(channels[whooshhitsound], false);
- }
- }
- else {
- if(tutoriallevel!=1){
- PlaySoundEx( heavyimpactsound, samp[heavyimpactsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel);
- OPENAL_SetVolume(channels[heavyimpactsound], 256);
- OPENAL_SetPaused(channels[heavyimpactsound], false);
- }
- }
-
- if(victim->damage>victim->damagetolerance-60||normaldotproduct(victim->facing,victim->coords-coords)>0||animation[victim->targetanimation].height==lowheight)
- victim->RagDoll(0);
- XYZ relative;
- relative=victim->coords-coords;
- relative.y=0;
- Normalise(&relative);
- relative.y=.3;
- Normalise(&relative);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity=relative*5;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*400;
-
- victim->targetframe=0;
- victim->targetanimation=staggerbackhardanim;
- victim->targetrotation=targetrotation+180;
- victim->target=0;
- victim->stunned=1;
-
- victim->Puff(abdomen);
- victim->DoDamage(damagemult*60/victim->protectionhigh);
-
- if(id==0){
- SolidHitBonus();
- }
- }
- }
-
- if(targetanimation==blockhighleftanim&&animation[targetanimation].label[currentframe]==5){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*4){
- if(victim->id==0)camerashake+=.4;
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
-
- PlaySoundEx( landsound2, samp[landsound2], NULL, true);
- OPENAL_3D_SetAttributes(channels[landsound2], gLoc, vel);
- OPENAL_SetVolume(channels[landsound2], 256);
- OPENAL_SetPaused(channels[landsound2], false);
-
- Puff(righthand);
- }
- }
-
- if(targetanimation==swordslashparryanim&&animation[targetanimation].label[currentframe]==5){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*4){
- if(victim->id==0)camerashake+=.4;
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
-
- if(weaponactive!=-1){
- if(weapons.type[victim->weaponids[0]]==staff||weapons.type[weaponids[0]]==staff){
- if(weapons.type[victim->weaponids[0]]==staff)weapons.damage[victim->weaponids[0]]+=.2+float(abs(Random()%100)-50)/250;
- if(weapons.type[weaponids[0]]==staff)weapons.damage[weaponids[0]]+=.2+float(abs(Random()%100)-50)/250;
-
- PlaySoundEx( swordstaffsound, samp[swordstaffsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[swordstaffsound], gLoc, vel);
- OPENAL_SetVolume(channels[swordstaffsound], 512);
- OPENAL_SetPaused(channels[swordstaffsound], false);
- }
- else{
- PlaySoundEx( metalhitsound, samp[metalhitsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[metalhitsound], gLoc, vel);
- OPENAL_SetVolume(channels[metalhitsound], 512);
- OPENAL_SetPaused(channels[metalhitsound], false);
- }
- }
-
- //Puff(righthand);
- }
- }
-
- if(targetanimation==knifethrowanim&&animation[targetanimation].label[currentframe]==5){
- if(weaponactive!=-1){
- escapednum=0;
- XYZ aim;
- weapons.owner[weaponids[0]]=-1;
- aim=victim->coords+DoRotation(victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position,0,victim->rotation,0)*victim->scale+victim->velocity*findDistance(&victim->coords,&coords)/50-(coords+DoRotation(skeleton.joints[skeleton.jointlabels[righthand]].position,0,rotation,0)*scale);
- Normalise(&aim);
- /*if(victim->targetanimation==jumpupanim||victim->targetanimation==jumpdownanim){
- aim=DoRotation(aim,(float)abs(Random()%15)-7,(float)abs(Random()%15)-7,0);
- }*/
- weapons.velocity[weaponids[0]]=aim*50;
- weapons.tipvelocity[weaponids[0]]=aim*50;
- weapons.missed[weaponids[0]]=0;
- weapons.hitsomething[weaponids[0]]=0;
- weapons.freetime[weaponids[0]]=0;
- weapons.firstfree[weaponids[0]]=1;
- weapons.physics[weaponids[0]]=0;
- num_weapons--;
- if(num_weapons){
- weaponids[0]=weaponids[num_weapons];
- }
- weaponactive=-1;
- }
- }
-
- if(targetanimation==knifeslashstartanim&&animation[targetanimation].label[currentframe]==5){
- if(hasvictim)
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*4.5&&/*animation[victim->targetanimation].height!=lowheight&&*/victim->targetanimation!=dodgebackanim&&victim->targetanimation!=rollanim){
- escapednum=0;
- //if(Random()%2){
- if(tutoriallevel!=1)victim->DoBloodBig(1.5/victim->armorhigh,225);
- //}
-
- if(id==0){
- bonus=Slicebonus;
- bonustime=0;
- bonusvalue=10;
- }
- if(tutoriallevel!=1){
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( knifeslicesound, samp[knifeslicesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[knifeslicesound], gLoc, vel);
- OPENAL_SetVolume(channels[knifeslicesound], 512);
- OPENAL_SetPaused(channels[knifeslicesound], false);
- }
- //victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*200;
- if(animation[victim->targetanimation].attack&&(victim->aitype!=playercontrolled||victim->targetanimation==knifeslashstartanim)&&(victim->creature==rabbittype||victim->deathbleeding<=0)){
- if(victim->id != 0 || difficulty==2){
- victim->targetframe=0;
- victim->targetanimation=staggerbackhardanim;
- victim->targetrotation=targetrotation+180;
- victim->target=0;
- }
- }
- victim->lowreversaldelay=0;
- victim->highreversaldelay=0;
- if(aitype!=playercontrolled)weaponmissdelay=.6;
-
- if(tutoriallevel!=1)if(bloodtoggle&&!weapons.bloody[weaponids[weaponactive]])weapons.bloody[weaponids[weaponactive]]=1;
- if(tutoriallevel!=1)weapons.blooddrip[weaponids[weaponactive]]+=3;
-
- XYZ footvel,footpoint;
- footvel=0;
- if(skeleton.free){
- footpoint=(victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position+victim->skeleton.joints[victim->skeleton.jointlabels[neck]].position)/2*victim->scale+victim->coords;
- }
- if(!skeleton.free){
- footpoint=DoRotation((victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position+victim->skeleton.joints[victim->skeleton.jointlabels[neck]].position)/2,0,victim->rotation,0)*victim->scale+victim->coords;
- }
- if(tutoriallevel!=1){
- if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .6, .3);
- footvel=DoRotation(facing,0,90,0)*.8;
- //footvel.y-=.3;
- Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
- Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
- Sprite::MakeSprite(bloodflamesprite, footpoint,footvel*5, 1,1,1, .2, 1);
- Sprite::MakeSprite(bloodflamesprite, footpoint,footvel*2, 1,1,1, .2, 1);
- }
- if(tutoriallevel==1){
- Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,1,1, .6, .3);
- }
- victim->DoDamage(damagemult*0);
- }
- }
- if(targetanimation==swordslashanim&&animation[targetanimation].label[currentframe]==5&&victim->targetanimation!=rollanim){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5&&victim->targetanimation!=dodgebackanim){
- if(victim->weaponactive==-1||normaldotproduct(victim->facing,victim->coords-coords)>0||(Random()%2==0)){
- if(id==0){
- bonus=Slashbonus;
- bonustime=0;
- bonusvalue=40;
- }
- escapednum=0;
- if(tutoriallevel!=1){
- if(normaldotproduct(victim->facing,victim->coords-coords)<0)victim->DoBloodBig(2/victim->armorhigh,190);
- else victim->DoBloodBig(2/victim->armorhigh,185);
- victim->deathbleeding=1;
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( swordslicesound, samp[swordslicesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[swordslicesound], gLoc, vel);
- OPENAL_SetVolume(channels[swordslicesound], 512);
- OPENAL_SetPaused(channels[swordslicesound], false);
- }
- //victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*200;
- //if(animation[victim->targetanimation].attack){
- //if(victim->creature==rabbittype){
- if(tutoriallevel!=1){
- victim->targetframe=0;
- victim->targetanimation=staggerbackhardanim;
- victim->targetrotation=targetrotation+180;
- victim->target=0;
- }
- //}
- //}
-
- if(tutoriallevel!=1){
- if(bloodtoggle&&!weapons.bloody[weaponids[weaponactive]])weapons.bloody[weaponids[weaponactive]]=1;
- weapons.blooddrip[weaponids[weaponactive]]+=3;
-
- float bloodlossamount;
- bloodlossamount=200+abs((float)(Random()%40))-20;
- victim->bloodloss+=bloodlossamount/victim->armorhigh;
- //victim->bloodloss+=100*(6.5-findDistancefast(&coords,&victim->coords));
- victim->DoDamage(damagemult*0);
-
- XYZ footvel,footpoint;
- footvel=0;
- if(skeleton.free){
- footpoint=(victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position+victim->skeleton.joints[victim->skeleton.jointlabels[neck]].position)/2*victim->scale+victim->coords;
- }
- if(!skeleton.free){
- footpoint=DoRotation((victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position+victim->skeleton.joints[victim->skeleton.jointlabels[neck]].position)/2,0,victim->rotation,0)*victim->scale+victim->coords;
- }
- if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3);
- footvel=DoRotation(facing,0,90,0)*.8;
- footvel.y-=.3;
- Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
- Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
- Sprite::MakeSprite(bloodflamesprite, footpoint,footvel*5, 1,1,1, .3, 1);
- Sprite::MakeSprite(bloodflamesprite, footpoint,footvel*2, 1,1,1, .3, 1);
- }
- }
- else {
-
-
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- if(victim->weaponactive!=-1){
- if(weapons.type[victim->weaponids[0]]==staff||weapons.type[weaponids[0]]==staff){
- if(weapons.type[victim->weaponids[0]]==staff)weapons.damage[victim->weaponids[0]]+=.2+float(abs(Random()%100)-50)/250;
- if(weapons.type[weaponids[0]]==staff)weapons.damage[weaponids[0]]+=.2+float(abs(Random()%100)-50)/250;
-
- PlaySoundEx( swordstaffsound, samp[swordstaffsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[swordstaffsound], gLoc, vel);
- OPENAL_SetVolume(channels[swordstaffsound], 512);
- OPENAL_SetPaused(channels[swordstaffsound], false);
- }
- else{
- PlaySoundEx( metalhitsound, samp[metalhitsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[metalhitsound], gLoc, vel);
- OPENAL_SetVolume(channels[metalhitsound], 512);
- OPENAL_SetPaused(channels[metalhitsound], false);
- }
- }
-
-
- XYZ aim;
- victim->Puff(righthand);
- victim->target=0;
- victim->targetframe=0;
- victim->targetanimation=staggerbackhighanim;
- victim->targetrotation=targetrotation+180;
- victim->target=0;
- weapons.owner[victim->weaponids[0]]=-1;
- aim=DoRotation(facing,0,90,0)*21;
- aim.y+=7;
- weapons.velocity[victim->weaponids[0]]=aim*-.2;
- weapons.tipvelocity[victim->weaponids[0]]=aim;
- weapons.missed[victim->weaponids[0]]=1;
- weapons.hitsomething[weaponids[0]]=0;
- weapons.freetime[victim->weaponids[0]]=0;
- weapons.firstfree[victim->weaponids[0]]=1;
- weapons.physics[victim->weaponids[0]]=1;
- victim->num_weapons--;
- if(victim->num_weapons){
- victim->weaponids[0]=victim->weaponids[num_weapons];
- if(victim->weaponstuck==victim->num_weapons)victim->weaponstuck=0;
- }
- victim->weaponactive=-1;
- for(i=0;i<numplayers;i++){
- player[i].wentforweapon=0;
- }
-
- /*PlaySoundEx( metalhitsound, samp[metalhitsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[metalhitsound], gLoc, vel);
- OPENAL_SetVolume(channels[metalhitsound], 512);
- OPENAL_SetPaused(channels[metalhitsound], false);*/
-
- }
- }
- }
-
- if(targetanimation==staffhitanim&&animation[targetanimation].label[currentframe]==5&&victim->targetanimation!=rollanim){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5&&victim->targetanimation!=dodgebackanim&&victim->targetanimation!=sweepanim){
- if(tutoriallevel!=1){
- weapons.damage[weaponids[0]]+=.4+float(abs(Random()%100)-50)/250;
- escapednum=0;
- if(id==0)camerashake+=.4;
- if(Random()%2||creature==wolftype){
- victim->spurt=1;
- }
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( staffheadsound, samp[staffheadsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[staffheadsound], gLoc, vel);
- OPENAL_SetVolume(channels[staffheadsound], 256);
- OPENAL_SetPaused(channels[staffheadsound], false);
- }
- victim->RagDoll(0);
- XYZ relative;
- relative=victim->coords-coords;
- relative.y=0;
- Normalise(&relative);
- relative=DoRotation(relative,0,90,0);
- relative.y-=1;
- Normalise(&relative);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*60;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity+=relative*damagemult*230;
- victim->skeleton.joints[victim->skeleton.jointlabels[neck]].velocity+=relative*damagemult*230;
- //FootLand(1,2);
- victim->Puff(head);
- if(tutoriallevel!=1){
- victim->DoDamage(damagemult*120/victim->protectionhigh);
-
- if(id==0){
- bonus=solidhit;
- bonustime=0;
- bonusvalue=30;
- }
- }
- }
- }
-
- if(targetanimation==staffspinhitanim&&animation[targetanimation].label[currentframe]==5&&victim->targetanimation!=rollanim){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5&&victim->targetanimation!=dodgebackanim&&victim->targetanimation!=sweepanim){
- if(tutoriallevel!=1){
- weapons.damage[weaponids[0]]+=.6+float(abs(Random()%100)-50)/250;
- escapednum=0;
- if(id==0)camerashake+=.4;
- if(Random()%2||creature==wolftype){
- victim->spurt=1;
- }
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( staffheadsound, samp[staffheadsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[staffheadsound], gLoc, vel);
- OPENAL_SetVolume(channels[staffheadsound], 256);
- OPENAL_SetPaused(channels[staffheadsound], false);
- }
- victim->RagDoll(0);
- XYZ relative;
- relative=victim->coords-coords;
- relative.y=0;
- Normalise(&relative);
- relative=DoRotation(relative,0,-90,0);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*40;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity+=relative*damagemult*220;
- victim->skeleton.joints[victim->skeleton.jointlabels[neck]].velocity+=relative*damagemult*220;
- //FootLand(1,2);
- victim->Puff(head);
- if(tutoriallevel!=1){victim->DoDamage(damagemult*350/victim->protectionhead);
-
- if(id==0){
- bonus=solidhit;
- bonustime=0;
- bonusvalue=60;
- }
- }
- }
- }
-
- if(targetanimation==staffgroundsmashanim&&animation[targetanimation].label[currentframe]==5){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5){
- escapednum=0;
- if(tutoriallevel!=1){
- if(!victim->dead)weapons.damage[weaponids[0]]+=.4+float(abs(Random()%100)-50)/500;
- if(id==0)camerashake+=.4;
- if(Random()%2||creature==wolftype){
- victim->spurt=1;
- }
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( staffbodysound, samp[staffbodysound], NULL, true);
- OPENAL_3D_SetAttributes(channels[staffbodysound], gLoc, vel);
- OPENAL_SetVolume(channels[staffbodysound], 256);
- OPENAL_SetPaused(channels[staffbodysound], false);
- }
- victim->skeleton.longdead=0;
- victim->skeleton.free=1;
- victim->skeleton.broken=0;
-
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velchange=0;
- victim->skeleton.joints[i].locked=0;
- //victim->skeleton.joints[i].velocity=0;
- }
-
- victim->RagDoll(0);
- XYZ relative;
- relative=0;
- /*relative=victim->coords-coords;
- relative.y=0;
- Normalise(&relative);
- relative=DoRotation(relative,0,90,0);*/
- relative.y=-1;
- Normalise(&relative);
- if(!victim->dead){
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity=relative*damagemult*40;
- }
- //FootLand(1,2);
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*40;
- }
- if(victim->dead){
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity=relative*damagemult*abs(Random()%20);
- }
- //FootLand(1,2);
- //victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*20;
- }
- victim->Puff(abdomen);
- if(tutoriallevel!=1){victim->DoDamage(damagemult*100/victim->protectionhigh);
-
- if(!victim->dead){
- if(id==0){
- bonus=solidhit;
- bonustime=0;
- bonusvalue=40;
- }
- }
- }
- }
- }
-
- if(targetanimation==lowkickanim&&animation[targetanimation].label[currentframe]==5){
- if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->targetanimation].height!=highheight){
- escapednum=0;
- if(id==0)camerashake+=.4;
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- XYZ relative;
- relative=victim->coords-coords;
- relative.y=0;
- Normalise(&relative);
-
- if(id==0){
- SolidHitBonus();
- }
-
- if(animation[victim->targetanimation].height==lowheight){
- if(Random()%2){
- victim->spurt=1;
- DoBlood(.2,250);
- }
- victim->RagDoll(0);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*40;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity+=relative*damagemult*200;
- if(tutoriallevel!=1){
- PlaySoundEx( heavyimpactsound, samp[heavyimpactsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel);
- OPENAL_SetVolume(channels[heavyimpactsound], 128);
- OPENAL_SetPaused(channels[heavyimpactsound], false);
- }
- victim->Puff(head);
- victim->DoDamage(damagemult*100/victim->protectionhead);
- if(victim->howactive==typesleeping)victim->DoDamage(damagemult*150/victim->protectionhead);
- if(creature==wolftype){
- PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[clawslicesound], gLoc, vel);
- OPENAL_SetVolume(channels[clawslicesound], 128);
- OPENAL_SetPaused(channels[clawslicesound], false);
- victim->spurt=1;
- victim->DoBloodBig(2/victim->armorhead,175);
- }
- }
- else{
- if(victim->damage>=victim->damagetolerance)victim->RagDoll(0);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*10;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*200;
- victim->targetframe=0;
- victim->targetanimation=staggerbackhighanim;
- victim->targetrotation=targetrotation+180;
- victim->target=0;
- if(tutoriallevel!=1){
- PlaySoundEx( landsound2, samp[landsound2], NULL, true);
- OPENAL_3D_SetAttributes(channels[landsound2], gLoc, vel);
- OPENAL_SetVolume(channels[landsound2], 128);
- OPENAL_SetPaused(channels[landsound2], false);
- }
- victim->Puff(abdomen);
- victim->DoDamage(damagemult*30/victim->protectionhigh);
- if(creature==wolftype){
- PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[clawslicesound], gLoc, vel);
- OPENAL_SetVolume(channels[clawslicesound], 128);
- OPENAL_SetPaused(channels[clawslicesound], false);
- victim->spurt=1;
- victim->DoBloodBig(2/victim->armorhigh,170);
- }
- }
-
- }
- }
-
- if(targetanimation==sweepanim&&animation[targetanimation].label[currentframe]==5){
- if(victim->targetanimation!=jumpupanim&&findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&victim!=this){
- escapednum=0;
- if(id==0)camerashake+=.2;
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- if(tutoriallevel!=1){
- PlaySoundEx( landsound2, samp[landsound2], NULL, true);
- OPENAL_3D_SetAttributes(channels[landsound2], gLoc, vel);
- OPENAL_SetVolume(channels[landsound2], 128);
- OPENAL_SetPaused(channels[landsound2], false);
- }
- XYZ relative;
- relative=victim->coords-coords;
- relative.y=0;
- Normalise(&relative);
-
- if(animation[victim->targetanimation].height==middleheight||animation[victim->currentanimation].height==middleheight||victim->damage>=victim->damagetolerance-40){
- victim->RagDoll(0);
-
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*15;
- }
- relative=DoRotation(relative,0,-90,0);
- relative.y+=.1;
- for(i=0;i<victim->skeleton.num_joints;i++){
- if(victim->skeleton.joints[i].label==leftfoot||victim->skeleton.joints[i].label==rightfoot||victim->skeleton.joints[i].label==leftankle||victim->skeleton.joints[i].label==rightankle)
- victim->skeleton.joints[i].velocity=relative*80;
- }
- victim->Puff(rightankle);
- victim->Puff(leftankle);
- victim->DoDamage(damagemult*40/victim->protectionlow);
- }
- else{
- if(victim->damage>=victim->damagetolerance)victim->RagDoll(0);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*10;
- }
- relative=DoRotation(relative,0,-90,0);
- for(i=0;i<victim->skeleton.num_joints;i++){
- if(victim->skeleton.joints[i].label==leftfoot||victim->skeleton.joints[i].label==rightfoot||victim->skeleton.joints[i].label==leftankle||victim->skeleton.joints[i].label==rightankle)
- victim->skeleton.joints[i].velocity+=relative*damagemult*80;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*200;
- victim->targetframe=0;
- victim->targetanimation=staggerbackhighanim;
- victim->targetrotation=targetrotation+180;
- victim->target=0;
- if(tutoriallevel!=1){
- PlaySoundEx( landsound2, samp[landsound2], NULL, true);
- OPENAL_3D_SetAttributes(channels[landsound2], gLoc, vel);
- OPENAL_SetVolume(channels[landsound2], 128);
- OPENAL_SetPaused(channels[landsound2], false);
- }
- victim->Puff(abdomen);
- victim->DoDamage(damagemult*30/victim->protectionlow);
- }
-
- if(id==0){
- SolidHitBonus();
- }
-
- }
- }
- }
- if(animation[targetanimation].attack==reversal&&(!victim->feint||(victim->lastattack==victim->lastattack2&&victim->lastattack2==victim->lastattack3&&Random()%2)||targetanimation==knifefollowanim)){
- if(targetanimation==spinkickreversalanim&&animation[targetanimation].label[currentframe]==7){
- escapednum=0;
- if(id==0)camerashake+=.4;
- if(Random()%2){
- victim->spurt=1;
- DoBlood(.2,230);
- }
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- if(tutoriallevel!=1){
- PlaySoundEx( heavyimpactsound, samp[heavyimpactsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel);
- OPENAL_SetVolume(channels[heavyimpactsound], 128);
- OPENAL_SetPaused(channels[heavyimpactsound], false);
- }
- if(creature==wolftype){
- PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[clawslicesound], gLoc, vel);
- OPENAL_SetVolume(channels[clawslicesound], 128);
- OPENAL_SetPaused(channels[clawslicesound], false);
- victim->spurt=1;
- victim->DoBloodBig(2/victim->armorhigh,170);
- }
- victim->RagDoll(0);
- XYZ relative;
- relative=victim->coords-oldcoords;
- relative.y=0;
- Normalise(&relative);
- //relative=DoRotation(relative,0,-90,0);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*40;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*200;
- //FootLand(1,2);
- victim->Puff(abdomen);
- victim->DoDamage(damagemult*150/victim->protectionhigh);
-
- if(id==0){
- bonus=Reversal;
- bonustime=0;
- bonusvalue=60;
- }
- }
-
- if((targetanimation==swordslashreversalanim||targetanimation==knifeslashreversalanim||targetanimation==staffhitreversalanim||targetanimation==staffspinhitreversalanim)&&animation[targetanimation].label[currentframe]==5){
- if(victim->weaponactive!=-1&&victim->num_weapons>0){
- if(weapons.owner[victim->weaponids[victim->weaponactive]]==victim->id){
- weapons.owner[victim->weaponids[victim->weaponactive]]=id;
- weaponactive=0;
- if(num_weapons>0){
- weaponids[num_weapons]=weaponids[victim->weaponactive];
- }
- num_weapons++;
- weaponids[0]=victim->weaponids[victim->weaponactive];
- victim->num_weapons--;
- if(victim->num_weapons>0){
- victim->weaponids[victim->weaponactive]=victim->weaponids[victim->num_weapons];
- //if(victim->weaponstuck==victim->num_weapons)victim->weaponstuck=0;
- }
- victim->weaponactive=-1;
- }
- }
- }
-
- if(targetanimation==staffhitreversalanim&&animation[targetanimation].label[currentframe]==5){
- escapednum=0;
- if(id==0)camerashake+=.4;
- if(Random()%2){
- victim->spurt=1;
- DoBlood(.2,230);
- }
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( whooshhitsound, samp[whooshhitsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[whooshhitsound], gLoc, vel);
- OPENAL_SetVolume(channels[whooshhitsound], 128);
- OPENAL_SetPaused(channels[whooshhitsound], false);
- victim->RagDoll(0);
- XYZ relative;
- relative=victim->coords-oldcoords;
- relative.y=0;
- Normalise(&relative);
- //relative=DoRotation(relative,0,-90,0);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*30;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*200;
- //FootLand(1,2);
- victim->Puff(head);
- victim->DoDamage(damagemult*70/victim->protectionhigh);
- }
-
- if(targetanimation==staffspinhitreversalanim&&animation[targetanimation].label[currentframe]==7){
- escapednum=0;
- if(id==0)camerashake+=.4;
- if(Random()%2){
- victim->spurt=1;
- DoBlood(.2,230);
- }
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
-
- if(id==0){
- bonus=staffreversebonus;
- bonustime=0;
- bonusvalue=100;
- }
-
- if(tutoriallevel!=1){
- PlaySoundEx( heavyimpactsound, samp[heavyimpactsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel);
- OPENAL_SetVolume(channels[heavyimpactsound], 128);
- OPENAL_SetPaused(channels[heavyimpactsound], false);
- }
- victim->RagDoll(0);
- if(id==0){
- bonus=staffreversebonus;
- bonustime=0;
- bonusvalue=100;
- }
-
- XYZ relative;
- relative=victim->coords-oldcoords;
- relative.y=0;
- Normalise(&relative);
- //relative=DoRotation(relative,0,-90,0);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*30;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*200;
- //FootLand(1,2);
- victim->Puff(head);
- victim->DoDamage(damagemult*70/victim->protectionhigh);
- }
-
- if(targetanimation==upunchreversalanim&&animation[targetanimation].label[currentframe]==7){
- escapednum=0;
- victim->RagDoll(1);
- XYZ relative;
- relative=facing;
- relative.y=0;
- Normalise(&relative);
- //relative*=-1;
- relative.y-=.1;
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*70;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[lefthand]].velocity*=.1;
- victim->skeleton.joints[victim->skeleton.jointlabels[leftwrist]].velocity*=.2;
- victim->skeleton.joints[victim->skeleton.jointlabels[leftelbow]].velocity*=.5;
- victim->skeleton.joints[victim->skeleton.jointlabels[leftshoulder]].velocity*=.7;
- victim->skeleton.joints[victim->skeleton.jointlabels[righthand]].velocity*=.1;
- victim->skeleton.joints[victim->skeleton.jointlabels[rightwrist]].velocity*=.2;
- victim->skeleton.joints[victim->skeleton.jointlabels[rightelbow]].velocity*=.5;
- victim->skeleton.joints[victim->skeleton.jointlabels[rightshoulder]].velocity*=.7;
-
- victim->Puff(abdomen);
- victim->DoDamage(damagemult*90/victim->protectionhigh);
-
- if(id==0){
- bonus=Reversal;
- bonustime=0;
- bonusvalue=60;
- }
-
- bool doslice;
- doslice=0;
- if(weaponactive!=-1||creature==wolftype)doslice=1;
- if(creature==rabbittype&&weaponactive!=-1)if(weapons.type[weaponids[0]]==staff)doslice=0;
- if(doslice){
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- if(weaponactive!=-1){
- victim->DoBloodBig(2/victim->armorhigh,225);
- PlaySoundEx( knifeslicesound, samp[knifeslicesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[knifeslicesound], gLoc, vel);
- OPENAL_SetVolume(channels[knifeslicesound], 512);
- OPENAL_SetPaused(channels[knifeslicesound], false);
- if(bloodtoggle&&!weapons.bloody[weaponids[weaponactive]])weapons.bloody[weaponids[weaponactive]]=1;
- weapons.blooddrip[weaponids[weaponactive]]+=3;
- }
- if(weaponactive==-1&&creature==wolftype){
- PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[clawslicesound], gLoc, vel);
- OPENAL_SetVolume(channels[clawslicesound], 128);
- OPENAL_SetPaused(channels[clawslicesound], false);
- victim->spurt=1;
- victim->DoBloodBig(2/victim->armorhigh,175);
- }
- }
- }
-
-
-
- if(targetanimation==swordslashreversalanim&&animation[targetanimation].label[currentframe]==7){
- escapednum=0;
- victim->RagDoll(1);
- XYZ relative;
- relative=facing;
- relative.y=0;
- Normalise(&relative);
- //relative*=-1;
- relative.y-=.1;
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*70;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[lefthand]].velocity*=.1-1;
- victim->skeleton.joints[victim->skeleton.jointlabels[leftwrist]].velocity*=.2-1;
- victim->skeleton.joints[victim->skeleton.jointlabels[leftelbow]].velocity*=.5-1;
- victim->skeleton.joints[victim->skeleton.jointlabels[leftshoulder]].velocity*=.7-1;
- victim->skeleton.joints[victim->skeleton.jointlabels[righthand]].velocity*=.1-1;
- victim->skeleton.joints[victim->skeleton.jointlabels[rightwrist]].velocity*=.2-1;
- victim->skeleton.joints[victim->skeleton.jointlabels[rightelbow]].velocity*=.5-1;
- victim->skeleton.joints[victim->skeleton.jointlabels[rightshoulder]].velocity*=.7-1;
-
- if(id==0){
- bonus=swordreversebonus;
- bonustime=0;
- bonusvalue=100;
- }
- //victim->DoDamage(90);
-
- /*if(weaponactive!=-1){
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- victim->DoBloodBig(2,225);
- PlaySoundEx( knifeslicesound, samp[knifeslicesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[knifeslicesound], gLoc, vel);
- OPENAL_SetVolume(channels[knifeslicesound], 512);
- OPENAL_SetPaused(channels[knifeslicesound], false);
- if(bloodtoggle&&!weapons.bloody[weaponids[weaponactive]])weapons.bloody[weaponids[weaponactive]]=1;
- weapons.blooddrip[weaponids[weaponactive]]+=3;
- }*/
- }
-
- if(hasvictim&&targetanimation==knifeslashreversalanim&&animation[targetanimation].label[currentframe]==7){
- escapednum=0;
- if(id==0)camerashake+=.4;
- if(Random()%2){
- victim->spurt=1;
- DoBlood(.2,230);
- }
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- if(tutoriallevel!=1){
- PlaySoundEx( heavyimpactsound, samp[heavyimpactsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel);
- OPENAL_SetVolume(channels[heavyimpactsound], 128);
- OPENAL_SetPaused(channels[heavyimpactsound], false);
- }
- victim->RagDoll(0);
- XYZ relative;
- relative=victim->coords-oldcoords;
- relative.y=0;
- Normalise(&relative);
- relative=DoRotation(relative,0,-90,0);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*40;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*200;
- //FootLand(1,2);
- victim->Puff(abdomen);
- victim->DoDamage(damagemult*30/victim->protectionhigh);
-
- if(id==0){
- bonus=Reversal;
- bonustime=0;
- bonusvalue=60;
- }
- }
-
- if(hasvictim&&targetanimation==sneakattackanim&&animation[targetanimation].label[currentframe]==7){
- escapednum=0;
- victim->RagDoll(0);
- victim->skeleton.spinny=0;
- XYZ relative;
- relative=facing*-1;
- relative.y=-3;
- Normalise(&relative);
- if(victim->id==0)relative/=30;
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*40;
- }
- //victim->DoDamage(1000);
- victim->damage=victim->damagetolerance;
- victim->permanentdamage=victim->damagetolerance-1;
- bool doslice;
- doslice=0;
- if(weaponactive!=-1||creature==wolftype)doslice=1;
- if(creature==rabbittype&&weaponactive!=-1)if(weapons.type[weaponids[0]]==staff)doslice=0;
- if(doslice){
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- if(weaponactive!=-1){
- victim->DoBloodBig(200,225);
- PlaySoundEx( knifeslicesound, samp[knifeslicesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[knifeslicesound], gLoc, vel);
- OPENAL_SetVolume(channels[knifeslicesound], 512);
- OPENAL_SetPaused(channels[knifeslicesound], false);
- if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2;
- weapons.blooddrip[weaponids[weaponactive]]+=5;
- }
-
- if(creature==wolftype&&weaponactive==-1){
- PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[clawslicesound], gLoc, vel);
- OPENAL_SetVolume(channels[clawslicesound], 128);
- OPENAL_SetPaused(channels[clawslicesound], false);
- victim->spurt=1;
- victim->DoBloodBig(2,175);
- }
- }
- if(id==0){
- bonus=spinecrusher;
- bonustime=0;
- bonusvalue=100;
- }
- }
-
- if(hasvictim&&(targetanimation==knifefollowanim||targetanimation==knifesneakattackanim)&&animation[targetanimation].label[currentframe]==5){
- if(weaponactive!=-1&&victim->bloodloss<victim->damagetolerance){
- escapednum=0;
- if(targetanimation==knifefollowanim)victim->DoBloodBig(200,210);
- if(targetanimation==knifesneakattackanim){
- /*victim->DoBloodBig(200,195);
- XYZ bloodvel;
- bloodvel=0;
- bloodvel.z=20;
- bloodvel.y=5;
- bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale;
- Sprite::MakeSprite(bloodsprite, DoRotation(skeleton.joints[skeleton.jointlabels[neck]].position,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .05, 1);
- */
- XYZ footvel,footpoint;
- footvel=0;
- footpoint=weapons.tippoint[weaponids[0]];
- if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3);
- footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]]);
- Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
- Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
- Sprite::MakeSprite(bloodflamesprite, footpoint,footvel*5, 1,1,1, .3, 1);
- Sprite::MakeSprite(bloodflamesprite, footpoint,footvel*2, 1,1,1, .3, 1);
- victim->DoBloodBig(200,195);
- if(id==0){
- bonus=tracheotomy;
- bonustime=0;
- bonusvalue=100;
- }
-
- //victim->neckspurtamount=5;
- }
- if(targetanimation==knifefollowanim){
- if(id==0){
- bonus=Stabbonus;
- bonustime=0;
- bonusvalue=40;
- }
- XYZ footvel,footpoint;
- footvel=0;
- footpoint=weapons.tippoint[weaponids[0]];
- if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3);
- footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]])*-1;
- Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
- Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
- Sprite::MakeSprite(bloodflamesprite, footpoint,footvel*5, 1,1,1, .2, 1);
- Sprite::MakeSprite(bloodflamesprite, footpoint,footvel*2, 1,1,1, .2, 1);
-
- }
- victim->bloodloss+=10000;
- victim->velocity=0;
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( fleshstabsound, samp[fleshstabsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[fleshstabsound], gLoc, vel);
- OPENAL_SetVolume(channels[fleshstabsound], 512);
- OPENAL_SetPaused(channels[fleshstabsound], false);
- if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2;
- weapons.blooddrip[weaponids[weaponactive]]+=5;
- }
- }
-
- if(hasvictim&&(targetanimation==knifefollowanim||targetanimation==knifesneakattackanim)&&animation[targetanimation].label[currentframe]==6){
- escapednum=0;
- victim->velocity=0;
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity=0;
- }
- if(targetanimation==knifefollowanim){
- victim->RagDoll(0);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity=0;
- }
- }
- if(weaponactive!=-1&&animation[victim->targetanimation].attack!=reversal){
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( fleshstabremovesound, samp[fleshstabremovesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[fleshstabremovesound], gLoc, vel);
- OPENAL_SetVolume(channels[fleshstabremovesound], 512);
- OPENAL_SetPaused(channels[fleshstabremovesound], false);
- if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2;
- weapons.blooddrip[weaponids[weaponactive]]+=5;
-
- XYZ footvel,footpoint;
- footvel=0;
- footpoint=weapons.tippoint[weaponids[0]];
- if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3);
- footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]])*-1;
- Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
- Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
- Sprite::MakeSprite(bloodflamesprite, footpoint,footvel*5, 1,1,1, .3, 1);
- Sprite::MakeSprite(bloodflamesprite, footpoint,footvel*2, 1,1,1, .3, 1);
- }
- }
-
- if(hasvictim&&(targetanimation==swordsneakattackanim)&&animation[targetanimation].label[currentframe]==5){
- if(weaponactive!=-1&&victim->bloodloss<victim->damagetolerance){
- if(id==0){
- bonus=backstab;
- bonustime=0;
- bonusvalue=100;
- }
-
- escapednum=0;
-
- XYZ footvel,footpoint;
- footvel=0;
- footpoint=(weapons.tippoint[weaponids[0]]+weapons.position[weaponids[0]])/2;
- if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3);
- footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]]);
- Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
- Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
- Sprite::MakeSprite(bloodflamesprite, footpoint,DoRotation(footvel*5,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .3, 1);
- Sprite::MakeSprite(bloodflamesprite, footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .3, 1);
- victim->DoBloodBig(200,180);
- victim->DoBloodBig(200,215);
- victim->bloodloss+=10000;
- victim->velocity=0;
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( fleshstabsound, samp[fleshstabsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[fleshstabsound], gLoc, vel);
- OPENAL_SetVolume(channels[fleshstabsound], 512);
- OPENAL_SetPaused(channels[fleshstabsound], false);
- if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2;
- weapons.blooddrip[weaponids[weaponactive]]+=5;
- }
- }
-
- if(hasvictim&&targetanimation==swordsneakattackanim&&animation[targetanimation].label[currentframe]==6){
- escapednum=0;
- victim->velocity=0;
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity=0;
- }
- if(weaponactive!=-1){
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( fleshstabremovesound, samp[fleshstabremovesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[fleshstabremovesound], gLoc, vel);
- OPENAL_SetVolume(channels[fleshstabremovesound], 512);
- OPENAL_SetPaused(channels[fleshstabremovesound], false);
- if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2;
- weapons.blooddrip[weaponids[weaponactive]]+=5;
-
- XYZ footvel,footpoint;
- footvel=0;
- footpoint=weapons.tippoint[weaponids[0]];
- if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3);
- footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]])*-1;
- Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
- Sprite::MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9);
- Sprite::MakeSprite(bloodflamesprite, footpoint,footvel*5, 1,1,1, .3, 1);
- Sprite::MakeSprite(bloodflamesprite, footpoint,footvel*2, 1,1,1, .3, 1);
- }
- }
-
- if(targetanimation==sweepreversalanim&&animation[targetanimation].label[currentframe]==7){
- escapednum=0;
- if(id==0)camerashake+=.4;
- if(Random()%2){
- victim->spurt=1;
- DoBlood(.2,240);
- }
- float gLoc[3];
- float vel[3];
- gLoc[0]=victim->coords.x;
- gLoc[1]=victim->coords.y;
- gLoc[2]=victim->coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- if(weaponactive==-1){
- if(tutoriallevel!=1){
- PlaySoundEx( heavyimpactsound, samp[heavyimpactsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel);
- OPENAL_SetVolume(channels[heavyimpactsound], 128);
- OPENAL_SetPaused(channels[heavyimpactsound], false);
- }
- }
- bool doslice;
- doslice=0;
- if(weaponactive!=-1||creature==wolftype)doslice=1;
- if(creature==rabbittype&&weaponactive!=-1)if(weapons.type[weaponids[0]]==staff)doslice=0;
- if(doslice){
- if(weaponactive!=-1){
- victim->DoBloodBig(2/victim->armorhead,225);
- PlaySoundEx( knifeslicesound, samp[knifeslicesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[knifeslicesound], gLoc, vel);
- OPENAL_SetVolume(channels[knifeslicesound], 512);
- OPENAL_SetPaused(channels[knifeslicesound], false);
- if(bloodtoggle&&!weapons.bloody[weaponids[weaponactive]])weapons.bloody[weaponids[weaponactive]]=1;
- weapons.blooddrip[weaponids[weaponactive]]+=3;
- }
- if(weaponactive==-1&&creature==wolftype){
- PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[clawslicesound], gLoc, vel);
- OPENAL_SetVolume(channels[clawslicesound], 128);
- OPENAL_SetPaused(channels[clawslicesound], false);
- victim->spurt=1;
- victim->DoBloodBig(2/victim->armorhead,175);
- }
- }
-
- if(id==0){
- bonus=Reversal;
- bonustime=0;
- bonusvalue=60;
- }
-
- victim->Puff(neck);
-
- XYZ relative;
- //relative=victim->coords-oldcoords;
- relative=facing*-1;
- relative.y=0;
- Normalise(&relative);
- relative=DoRotation(relative,0,90,0);
- relative.y=.5;
- Normalise(&relative);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*20;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity+=relative*damagemult*200;
- if(victim->damage<victim->damagetolerance-100)victim->velocity=relative*200;
- victim->DoDamage(damagemult*100/victim->protectionhead);
- victim->velocity=0;
- }
-
- if(targetanimation==sweepreversalanim&&((animation[targetanimation].label[currentframe]==9&&victim->damage<victim->damagetolerance)||(animation[targetanimation].label[currentframe]==7&&victim->damage>victim->damagetolerance))){
- escapednum=0;
- victim->RagDoll(0);
- XYZ relative;
- //relative=victim->coords-oldcoords;
- relative=facing*-1;
- relative.y=0;
- Normalise(&relative);
- relative=DoRotation(relative,0,90,0);
- relative.y=.5;
- Normalise(&relative);
- for(i=0;i<victim->skeleton.num_joints;i++){
- victim->skeleton.joints[i].velocity+=relative*damagemult*20;
- }
- victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity+=relative*damagemult*200;
- }
-
- if(hasvictim&&(targetanimation==spinkickreversalanim||targetanimation==sweepreversalanim||targetanimation==rabbitkickreversalanim||targetanimation==upunchreversalanim||targetanimation==jumpreversalanim||targetanimation==swordslashreversalanim||targetanimation==knifeslashreversalanim||targetanimation==rabbittacklereversal||targetanimation==wolftacklereversal||targetanimation==staffhitreversalanim||targetanimation==staffspinhitreversalanim))
- if(victim->damage>victim->damagetolerance&&bonus!=reverseko){
- if(id==0){
- bonus=reverseko;
- bonustime=0;
- bonusvalue=100;
- }
- }
- }
-
-
- //Animation end
- if(targetframe>animation[currentanimation].numframes-1){
- targetframe=0;
- if(wasStop()){
- targetanimation=getIdle();
- FootLand(0,1);
- FootLand(1,1);
- }
- if(currentanimation==rabbittackleanim||currentanimation==rabbittacklinganim){
- targetanimation=rollanim;
- targetframe=3;
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
-
- PlaySoundEx( movewhooshsound, samp[movewhooshsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[movewhooshsound], gLoc, vel);
- OPENAL_SetVolume(channels[movewhooshsound], 128);
- OPENAL_SetPaused(channels[movewhooshsound], false);
- }
- if(currentanimation==staggerbackhighanim){
- targetanimation=getIdle();
- }
- if(currentanimation==staggerbackhardanim){
- targetanimation=getIdle();
- }
- if(currentanimation==removeknifeanim){
- targetanimation=getIdle();
- }
- if(currentanimation==crouchremoveknifeanim){
- targetanimation=getCrouch();
- }
- if(currentanimation==backhandspringanim){
- targetanimation=getIdle();
- }
- if(currentanimation==dodgebackanim){
- targetanimation=getIdle();
- }
- if(currentanimation==drawleftanim){
- targetanimation=getIdle();
- }
- if(currentanimation==drawrightanim||currentanimation==crouchdrawrightanim){
- targetanimation=getIdle();
- if(currentanimation==crouchdrawrightanim){
- targetanimation=getCrouch();
- }
- if(weaponactive==-1)weaponactive=0;
- else if(weaponactive==0){
- weaponactive=-1;
- if(num_weapons==2){
- int buffer;
- buffer=weaponids[0];
- weaponids[0]=weaponids[1];
- weaponids[1]=buffer;
- }
- }
-
- if(weaponactive==-1){
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
-
- PlaySoundEx( knifesheathesound, samp[knifesheathesound], NULL, true);
- OPENAL_3D_SetAttributes(channels[knifesheathesound], gLoc, vel);
- OPENAL_SetVolume(channels[knifesheathesound], 128);
- OPENAL_SetPaused(channels[knifesheathesound], false);
- }
- if(weaponactive!=-1){
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
-
- PlaySoundEx( knifedrawsound, samp[knifedrawsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[knifedrawsound], gLoc, vel);
- OPENAL_SetVolume(channels[knifedrawsound], 128);
- OPENAL_SetPaused(channels[knifedrawsound], false);
- }
- }
- if(currentanimation==rollanim){
- targetanimation=getCrouch();
- FootLand(0,1);
- FootLand(1,1);
- }
- if(isFlip()){
- if(targetanimation==walljumprightkickanim){
- targetrot=-190;
- }
- if(targetanimation==walljumpleftkickanim){
- targetrot=190;
- }
- targetanimation=jumpdownanim;
- }
- if(currentanimation==climbanim){
- targetanimation=getCrouch();
- targetframe=1;
- coords+=facing*.1;
- if(!isnormal(coords.x))
- coords=oldcoords;
- oldcoords=coords;
- collided=0;
- targetoffset=0;
- currentoffset=0;
- grabdelay=1;
- velocity=0;
- collided=0;
- avoidcollided=0;
- }
- if(targetanimation==rabbitkickreversalanim){
- targetanimation=getCrouch();
- lastfeint=0;
- }
- if(targetanimation==jumpreversalanim){
- targetanimation=getCrouch();
- lastfeint=0;
- }
- if(targetanimation==walljumprightanim||targetanimation==walljumpbackanim||targetanimation==walljumpfrontanim){
- if(attackkeydown&&targetanimation!=walljumpfrontanim){
- int closest=-1;
- float closestdist=-1;
- float distance;
- if(numplayers>1)
- for(i=0;i<numplayers;i++){
- if(id!=i&&player[i].coords.y<coords.y&&!player[i].skeleton.free){
- distance=findDistancefast(&player[i].coords,&coords);
- if(closestdist==-1||distance<closestdist){
- closestdist=distance;
- closest=i;
- }
- }
- }
- if(closestdist>0&&closest>=0&&closestdist<16){
- victim=&player[closest];
- targetanimation=walljumprightkickanim;
- targetframe=0;
- XYZ rotatetarget=victim->coords-coords;
- Normalise(&rotatetarget);
- rotation=-asin(0-rotatetarget.x);
- rotation*=360/6.28;
- if(rotatetarget.z<0)rotation=180-rotation;
- targettilt2=-asin(rotatetarget.y)*360/6.28;
- velocity=(victim->coords-coords)*4;
- velocity.y+=2;
- transspeed=40;
- }
- }
- if(targetanimation==walljumpbackanim){
- targetanimation=backflipanim;
- targetframe=3;
- velocity=facing*-8;
- velocity.y=4;
- if(id==0)OPENAL_SetPaused(channels[whooshsound], false);
- }
- if(targetanimation==walljumprightanim){
- targetanimation=rightflipanim;
- targetframe=4;
- targetrotation-=90;
- rotation-=90;
- velocity=DoRotation(facing,0,30,0)*-8;
- velocity.y=4;
- }
- if(targetanimation==walljumpfrontanim){
- targetanimation=frontflipanim;
- targetframe=2;
- //targetrotation-=180;
- ////rotation-=180;
- velocity=facing*8;
- velocity.y=4;
- }
- if(id==0)OPENAL_SetPaused(channels[whooshsound], false);
- }
- if(targetanimation==walljumpleftanim){
- if(attackkeydown){
- int closest=-1;
- float closestdist=-1;
- float distance;
- if(numplayers>1)
- for(i=0;i<numplayers;i++){
- if(id!=i&&player[i].coords.y<coords.y&&!player[i].skeleton.free){
- distance=findDistancefast(&player[i].coords,&coords);
- if(closestdist==-1||distance<closestdist){
- closestdist=distance;
- closest=i;
- }
- }
- }
- if(closestdist>0&&closest>=0&&closestdist<16){
- victim=&player[closest];
- targetanimation=walljumpleftkickanim;
- targetframe=0;
- XYZ rotatetarget=victim->coords-coords;
- Normalise(&rotatetarget);
- rotation=-asin(0-rotatetarget.x);
- rotation*=360/6.28;
- if(rotatetarget.z<0)rotation=180-rotation;
- targettilt2=-asin(rotatetarget.y)*360/6.28;
- velocity=(victim->coords-coords)*4;
- velocity.y+=2;
- transspeed=40;
- }
- }
- if(targetanimation!=walljumpleftkickanim){
- targetanimation=leftflipanim;
- targetframe=4;
- targetrotation+=90;
- rotation+=90;
- velocity=DoRotation(facing,0,-30,0)*-8;
- velocity.y=4;
- }
- if(id==0)OPENAL_SetPaused(channels[whooshsound], false);
- }
- if(targetanimation==sneakattackanim){
- float ycoords=oldcoords.y;
- currentanimation=getCrouch();
- targetanimation=getCrouch();
- targetframe=1;
- currentframe=0;
- targetrotation+=180;
- rotation+=180;
- targettilt2*=-1;
- tilt2*=-1;
- transspeed=1000000;
- targetheadrotation+=180;
- coords-=facing*.7;
- if(onterrain)coords.y=terrain.getHeight(coords.x,coords.z);
-
- lastfeint=0;
- }
- if(targetanimation==knifesneakattackanim||targetanimation==swordsneakattackanim){
- float ycoords=oldcoords.y;
- targetanimation=getIdle();
- targetframe=0;
- if(onterrain)coords.y=terrain.getHeight(coords.x,coords.z);
-
- lastfeint=0;
- }
- if(currentanimation==knifefollowanim){
- targetanimation=getIdle();
- lastfeint=0;
- }
- if(animation[targetanimation].attack==reversal&¤tanimation!=sneakattackanim&¤tanimation!=knifesneakattackanim&¤tanimation!=swordsneakattackanim&¤tanimation!=knifefollowanim){
- float ycoords=oldcoords.y;
- targetanimation=getStop();
- targetrotation+=180;
- rotation+=180;
- targettilt2*=-1;
- tilt2*=-1;
- transspeed=1000000;
- targetheadrotation+=180;
- if(!isnormal(coords.x))
- coords=oldcoords;
- if(currentanimation==spinkickreversalanim||currentanimation==swordslashreversalanim)
- oldcoords=coords+facing*.5;
- else if(currentanimation==sweepreversalanim)
- oldcoords=coords+facing*1.1;
- else if(currentanimation==upunchreversalanim){
- oldcoords=coords+facing*1.5;
- targetrotation+=180;
- rotation+=180;
- targetheadrotation+=180;
- targettilt2*=-1;
- tilt2*=-1;
- }
- else if(currentanimation==knifeslashreversalanim){
- oldcoords=coords+facing*.5;
- targetrotation+=90;
- rotation+=90;
- targetheadrotation+=90;
- targettilt2=0;
- tilt2=0;
- }
- else if(currentanimation==staffspinhitreversalanim){
- targetrotation+=180;
- rotation+=180;
- targetheadrotation+=180;
- targettilt2=0;
- tilt2=0;
- }
- if(onterrain)oldcoords.y=terrain.getHeight(oldcoords.x,oldcoords.z);
- else oldcoords.y=ycoords;
- currentoffset=coords-oldcoords;
- targetoffset=0;
- coords=oldcoords;
-
- lastfeint=0;
- }
- if(currentanimation==knifesneakattackedanim||currentanimation==swordsneakattackedanim){
- velocity=0;
- velocity.y=-5;
- RagDoll(0);
- }
- if(animation[targetanimation].attack==reversed){
- escapednum++;
- if(targetanimation==sweepreversedanim)targetrotation+=90;
- targetanimation=backhandspringanim;
- targetframe=2;
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( landsound, samp[landsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[landsound], gLoc, vel);
- OPENAL_SetVolume(channels[landsound], 128);
- OPENAL_SetPaused(channels[landsound], false);
-
- if(currentanimation==upunchreversedanim||currentanimation==swordslashreversedanim){
- targetanimation=rollanim;
- targetframe=5;
- oldcoords=coords;
- coords+=(DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)+DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0))/2*scale;
- coords.y=oldcoords.y;
- }
- if(currentanimation==knifeslashreversedanim){
- targetanimation=rollanim;
- targetframe=0;
- targetrotation+=90;
- rotation+=90;
- oldcoords=coords;
- coords+=(DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)+DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0))/2*scale;
- coords.y=oldcoords.y;
- }
- }
- if(wasFlip()){
- targetanimation=jumpdownanim;
- }
- if(wasLanding())targetanimation=getIdle();
- if(wasLandhard())targetanimation=getIdle();
- if(currentanimation==spinkickanim||currentanimation==getupfrombackanim||currentanimation==getupfromfrontanim||currentanimation==lowkickanim){
- targetanimation=getIdle();
- oldcoords=coords;
- coords+=(DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)+DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0))/2*scale;
- coords.y=oldcoords.y;
- //coords+=DoRotation(animation[currentanimation].offset,0,rotation,0)*scale;
- targetoffset.y=coords.y;
- if(onterrain)targetoffset.y=terrain.getHeight(coords.x,coords.z);
- currentoffset=DoRotation(animation[currentanimation].offset*-1,0,rotation,0)*scale;
- currentoffset.y-=(coords.y-targetoffset.y);
- coords.y=targetoffset.y;
- targetoffset=0;
- normalsupdatedelay=0;
- }
- if(currentanimation==upunchanim){
- targetanimation=getStop();
- normalsupdatedelay=0;
- lastfeint=0;
- }
- if(currentanimation==rabbitkickanim&&targetanimation!=backflipanim){
- targetrotation=rotation;
- bool hasstaff;
- hasstaff=0;
- if(num_weapons>0)if(weapons.type[0]==staff)hasstaff=1;
- if(!hasstaff)DoDamage(35);
- RagDoll(0);
- lastfeint=0;
- rabbitkickragdoll=1;
- }
- if(currentanimation==rabbitkickreversedanim){
- if(!feint){
- velocity=0;
- velocity.y=-10;
- //DoDamage(100);
- RagDoll(0);
- skeleton.spinny=0;
- if(id!=0)SolidHitBonus();
- }
- if(feint){
- escapednum++;
- targetanimation=rollanim;
- coords+=facing;
- if(id==0)OPENAL_SetPaused(channels[whooshsound], true);
- }
- lastfeint=0;
- }
- if(currentanimation==rabbittackledbackanim||currentanimation==rabbittackledfrontanim){
- velocity=0;
- velocity.y=-10;
- RagDoll(0);
- skeleton.spinny=0;
- }
- if(currentanimation==jumpreversedanim){
- if(!feint){
- velocity=0;
- velocity.y=-10;
- //DoDamage(100);
- RagDoll(0);
- skeleton.spinny=0;
- if(id!=0)SolidHitBonus();
- }
- if(feint){
- escapednum++;
- targetanimation=rollanim;
- coords+=facing*2;
- if(id==0)OPENAL_SetPaused(channels[whooshsound], true);
- }
- lastfeint=0;
- }
-
- if(animation[currentanimation].attack==normalattack&&!victim->skeleton.free&&victim->targetanimation!=staggerbackhighanim&&victim->targetanimation!=staggerbackhardanim&&targetanimation!=winduppunchblockedanim&&targetanimation!=blockhighleftanim&&targetanimation!=swordslashparryanim&&targetanimation!=swordslashparriedanim&&targetanimation!=crouchstabanim&&targetanimation!=swordgroundstabanim){
- targetanimation=getupfromfrontanim;
- lastfeint=0;
- }
- else if(animation[currentanimation].attack==normalattack){
- targetanimation=getIdle();
- lastfeint=0;
- }
- if(currentanimation==blockhighleftanim&&aitype!=playercontrolled){
- targetanimation=blockhighleftstrikeanim;
- }
- if(currentanimation==knifeslashstartanim||currentanimation==knifethrowanim||currentanimation==swordslashanim||currentanimation==staffhitanim||currentanimation==staffgroundsmashanim||currentanimation==staffspinhitanim){
- targetanimation=getIdle();
- lastfeint=0;
- }
- if(currentanimation==spinkickanim&&victim->skeleton.free){
- if(creature==rabbittype)targetanimation=fightidleanim;
- }
- }
- target=0;
-
- if(isIdle()&&!wasIdle())normalsupdatedelay=0;
-
- if(currentanimation==jumpupanim&&velocity.y<0&&!isFlip()){
- targetanimation=jumpdownanim;
- }
- }
- if(!skeleton.free){
- oldtarget=target;
- if(!transspeed&&animation[targetanimation].attack!=2&&animation[targetanimation].attack!=3){
- if(!isRun()||!wasRun()){
- if(animation[targetanimation].speed[targetframe]>animation[currentanimation].speed[currentframe])
- target+=multiplier*animation[targetanimation].speed[targetframe]*speed*2;
- if(animation[targetanimation].speed[targetframe]<=animation[currentanimation].speed[currentframe])
- target+=multiplier*animation[currentanimation].speed[currentframe]*speed*2;
- }
- if(isRun()&&wasRun()){
- float tempspeed;
- tempspeed=velspeed;
- if(tempspeed<10*speedmult)tempspeed=10*speedmult;
- target+=multiplier*animation[targetanimation].speed[currentframe]*speed*1.7*tempspeed/(speed*45*scale);
- }
- }
- else if(transspeed)target+=multiplier*transspeed*speed*2;
- else{
- if(!isRun()||!wasRun()){
- if(animation[targetanimation].speed[targetframe]>animation[currentanimation].speed[currentframe])
- target+=multiplier*animation[targetanimation].speed[targetframe]*2;
- if(animation[targetanimation].speed[targetframe]<=animation[currentanimation].speed[currentframe])
- target+=multiplier*animation[currentanimation].speed[currentframe]*2;
- }
- }
-
- if(currentanimation!=targetanimation)target=(target+oldtarget)/2;
-
- if(target>1){currentframe=targetframe; target=1;}
- oldrot=rot;
- rot=targetrot*target;
- rotation+=rot-oldrot;
- if(target==1){
- rot=0;
- oldrot=0;
- targetrot=0;
- }
- if(currentanimation!=oldcurrentanimation||targetanimation!=oldtargetanimation||((currentframe!=oldcurrentframe||targetframe!=oldtargetframe)&&!calcrot)){
- //Old rotates
- for(i=0;i<skeleton.num_joints;i++){
- skeleton.joints[i].position=animation[currentanimation].position[i][currentframe];
- }
-
- skeleton.FindForwards();
-
- for(i=0;i<skeleton.num_muscles;i++){
- if(skeleton.muscles[i].visible)
- {
- skeleton.FindRotationMuscle(i,targetanimation);
- }
- }
- for(i=0;i<skeleton.num_muscles;i++){
- if(skeleton.muscles[i].visible)
- {
- if(isnormal((float)((int)(skeleton.muscles[i].rotate1*100)%36000)/100))skeleton.muscles[i].oldrotate1=(float)((int)(skeleton.muscles[i].rotate1*100)%36000)/100;
- if(isnormal((float)((int)(skeleton.muscles[i].rotate2*100)%36000)/100))skeleton.muscles[i].oldrotate2=(float)((int)(skeleton.muscles[i].rotate2*100)%36000)/100;
- if(isnormal((float)((int)(skeleton.muscles[i].rotate3*100)%36000)/100))skeleton.muscles[i].oldrotate3=(float)((int)(skeleton.muscles[i].rotate3*100)%36000)/100;
- }
- }
-
- //New rotates
- for(i=0;i<skeleton.num_joints;i++){
- skeleton.joints[i].position=animation[targetanimation].position[i][targetframe];
- }
-
- skeleton.FindForwards();
-
- for(i=0;i<skeleton.num_muscles;i++){
- if(skeleton.muscles[i].visible)
- {
- skeleton.FindRotationMuscle(i,targetanimation);
- }
- }
- for(i=0;i<skeleton.num_muscles;i++){
- if(skeleton.muscles[i].visible)
- {
- if(isnormal((float)((int)(skeleton.muscles[i].rotate1*100)%36000)/100))skeleton.muscles[i].newrotate1=(float)((int)(skeleton.muscles[i].rotate1*100)%36000)/100;
- if(isnormal((float)((int)(skeleton.muscles[i].rotate2*100)%36000)/100))skeleton.muscles[i].newrotate2=(float)((int)(skeleton.muscles[i].rotate2*100)%36000)/100;
- if(isnormal((float)((int)(skeleton.muscles[i].rotate3*100)%36000)/100))skeleton.muscles[i].newrotate3=(float)((int)(skeleton.muscles[i].rotate3*100)%36000)/100;
- if(skeleton.muscles[i].newrotate3>skeleton.muscles[i].oldrotate3+180)skeleton.muscles[i].newrotate3-=360;
- if(skeleton.muscles[i].newrotate3<skeleton.muscles[i].oldrotate3-180)skeleton.muscles[i].newrotate3+=360;
- if(skeleton.muscles[i].newrotate2>skeleton.muscles[i].oldrotate2+180)skeleton.muscles[i].newrotate2-=360;
- if(skeleton.muscles[i].newrotate2<skeleton.muscles[i].oldrotate2-180)skeleton.muscles[i].newrotate2+=360;
- if(skeleton.muscles[i].newrotate1>skeleton.muscles[i].oldrotate1+180)skeleton.muscles[i].newrotate1-=360;
- if(skeleton.muscles[i].newrotate1<skeleton.muscles[i].oldrotate1-180)skeleton.muscles[i].newrotate1+=360;
- }
- }
- }
- if(currentframe>=animation[currentanimation].numframes)currentframe=animation[currentanimation].numframes-1;
-
- oldcurrentanimation=currentanimation;
- oldtargetanimation=targetanimation;
- oldtargetframe=targetframe;
- oldcurrentframe=currentframe;
-
- for(i=0;i<skeleton.num_joints;i++){
- skeleton.joints[i].velocity=(animation[currentanimation].position[i][currentframe]*(1-target)+animation[targetanimation].position[i][targetframe]*(target)-skeleton.joints[i].position)/multiplier;
- skeleton.joints[i].position=animation[currentanimation].position[i][currentframe]*(1-target)+animation[targetanimation].position[i][targetframe]*(target);
- }
- offset=currentoffset*(1-target)+targetoffset*target;
- for(i=0;i<skeleton.num_muscles;i++){
- if(skeleton.muscles[i].visible)
- {
- skeleton.muscles[i].rotate1=skeleton.muscles[i].oldrotate1*(1-target)+skeleton.muscles[i].newrotate1*(target);
- skeleton.muscles[i].rotate2=skeleton.muscles[i].oldrotate2*(1-target)+skeleton.muscles[i].newrotate2*(target);
- skeleton.muscles[i].rotate3=skeleton.muscles[i].oldrotate3*(1-target)+skeleton.muscles[i].newrotate3*(target);
- }
- }
- }
-
- if(isLanding()&&landhard){
- //if(abs(velocity.y)>fast_sqrt(velocity.x*velocity.x*velocity.z*velocity.z)){
- if(id==0)camerashake+=.4;
- targetanimation=getLandhard();
- targetframe=0;
- target=0;
- landhard=0;
- transspeed=15;
- //}
- }
- }
- //skeleton.DoConstraints();
-}
-
-void Person::DoStuff(){
- static XYZ terrainnormal;
- static XYZ flatfacing;
- static XYZ flatvelocity;
- static float flatvelspeed;
- static int i,j,l;
- static XYZ average;
- static int howmany;
- static int bloodsize;
- static int startx,starty,endx,endy;
- static int texdetailint;
- static GLubyte color;
- static XYZ bloodvel;
-
- onfiredelay-=multiplier;
- if(onfiredelay<0&&onfire)
- {
- if(Random()%2==0){
- crouchkeydown=1;
- }
- onfiredelay=0.3;
- }
-
- crouchkeydowntime+=multiplier;
- if(!crouchkeydown)crouchkeydowntime=0;
- jumpkeydowntime+=multiplier;
- if(!jumpkeydown&&skeleton.free)jumpkeydowntime=0;
-
- if(hostile||damage>0||bloodloss>0)immobile=0;
-
- if(isIdle()||isRun())targetoffset=0;
-
- if(num_weapons==1&&weaponactive!=-1)weaponstuck=-1;
-
- if(id==0)blooddimamount-=multiplier*.3;
- speechdelay-=multiplier;
- texupdatedelay-=multiplier;
- interestdelay-=multiplier;
- flamedelay-=multiplier;
- parriedrecently-=multiplier;
- if(!victim){
- victim=this;
- hasvictim=0;
- }
-
- if(id==0)speed=1.1*speedmult;
- else speed=1.0*speedmult;
- if(!skeleton.free)rabbitkickragdoll=0;
-
- speed*=speedmult;
-
- if(id!=0&&(creature==rabbittype||difficulty!=2))superruntoggle=0;
- if(id!=0&&creature==wolftype&&difficulty==2){
- superruntoggle=0;
- if(aitype!=passivetype){
- superruntoggle=1;
- if(aitype==attacktypecutoff&&(player[0].isIdle()||player[0].isCrouch()||player[0].skeleton.free||player[0].targetanimation==getupfrombackanim||player[0].targetanimation==getupfromfrontanim||player[0].targetanimation==sneakanim)&&findDistancefast(&coords,&player[0].coords)<16){
- superruntoggle=0;
- }
- }
- if(scale<0.2)superruntoggle=0;
- if(targetanimation==wolfrunninganim&&!superruntoggle){
- targetanimation=getRun();
- targetframe=0;
- }
- }
- if(weaponactive==-1&&num_weapons>0){
- if(weapons.type[weaponids[0]]==staff){
- weaponactive=0;
- }
- }
-
- if(onfire){
- burnt+=multiplier;
- /*if(aitype!=playercontrolled)*///deathbleeding=5;
- /*if(aitype!=playercontrolled)*/
- deathbleeding=1;
- if(burnt>.6)burnt=.6;
- OPENAL_SetVolume(channels[stream_firesound], 256+256*findLength(&velocity)/3);
-
- if(targetanimation==jumpupanim||targetanimation==jumpdownanim||isFlip()){
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
-
- if(id==0){
- OPENAL_3D_SetAttributes(channels[whooshsound], gLoc, vel);
- OPENAL_SetVolume(channels[whooshsound], 64*findLength(&velocity)/5);
- }
- }
- }
- while(flamedelay<0&&onfire){
- flamedelay+=.006;
- howmany=abs(Random()%(skeleton.num_joints));
- if(!skeleton.free)flatvelocity=(coords-oldcoords)/multiplier/2;//velocity/2;
- if(skeleton.free)flatvelocity=skeleton.joints[howmany].velocity*scale/2;
- if(!skeleton.free)flatfacing=DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position,0,0,tilt),tilt2,0,0),0,rotation,0)*scale+coords;
- if(skeleton.free)flatfacing=skeleton.joints[howmany].position*scale+coords;
- Sprite::MakeSprite(flamesprite, flatfacing,flatvelocity, 1,1,1, .6+(float)abs(Random()%100)/200-.25, 1);
- }
-
- while(flamedelay<0&&!onfire&&tutoriallevel==1&&id!=0){
- flamedelay+=.05;
- howmany=abs(Random()%(skeleton.num_joints));
- if(!skeleton.free)flatvelocity=(coords-oldcoords)/multiplier/2;//velocity/2;
- if(skeleton.free)flatvelocity=skeleton.joints[howmany].velocity*scale/2;
- if(!skeleton.free)flatfacing=DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position,0,0,tilt),tilt2,0,0),0,rotation,0)*scale+coords;
- if(skeleton.free)flatfacing=skeleton.joints[howmany].position*scale+coords;
- Sprite::MakeSprite(breathsprite, flatfacing,flatvelocity, 1,1,1, .6+(float)abs(Random()%100)/200-.25, .3);
- }
-
- if(bleeding>0){
- bleeding-=multiplier*.3;
- if(bloodtoggle==2){
- glBindTexture(GL_TEXTURE_2D,skeleton.drawmodel.textureptr);
- if(bleeding<=0&&(detail!=2||osx))DoMipmaps(5,0,0,skeleton.skinsize,skeleton.skinsize);
- }
- }
-
- if(neckspurtamount>0){
- neckspurtamount-=multiplier;
- neckspurtdelay-=multiplier*3;
- neckspurtparticledelay-=multiplier*3;
- if(neckspurtparticledelay<0&&neckspurtdelay>2){
- spurt=0;
- bloodvel=0;
- if(!skeleton.free){
- bloodvel.z=5*neckspurtamount;
- bloodvel=DoRotation(bloodvel,((float)(Random()%100))/40,rotation+((float)(Random()%100))/40,0)*scale;
- }
- if(skeleton.free){
- bloodvel-=DoRotation(skeleton.forward*10*scale,((float)(Random()%100))/40,((float)(Random()%100))/40,0);
- }
- if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/40,rotation+((float)(Random()%100))/40,0)*scale;
- if(!skeleton.free)bloodvel+=DoRotation(velocity,((float)(Random()%100))/40,((float)(Random()%100))/40,0)*scale;
- if(skeleton.free)Sprite::MakeSprite(bloodsprite, (skeleton.joints[skeleton.jointlabels[neck]].position+(skeleton.joints[skeleton.jointlabels[neck]].position-skeleton.joints[skeleton.jointlabels[head]].position)/5)*scale+coords,bloodvel, 1,1,1, .05, .9);
- if(!skeleton.free)Sprite::MakeSprite(bloodsprite, DoRotation(skeleton.joints[skeleton.jointlabels[neck]].position+(skeleton.joints[skeleton.jointlabels[neck]].position-skeleton.joints[skeleton.jointlabels[head]].position)/5,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .05, .9);
- neckspurtparticledelay=.05;
- }
- if(neckspurtdelay<0){
- neckspurtdelay=3;
- }
- }
-
- if(deathbleeding>0&&dead!=2){
- if(deathbleeding<5)bleeddelay-=deathbleeding*multiplier/4;
- else bleeddelay-=5*multiplier/4;
- if(bleeddelay<0&&bloodtoggle){
- bleeddelay=1;
- XYZ bloodvel;
- if(bloodtoggle){
- bloodvel=0;
- if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[abdomen]].velocity,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale;
- if(!skeleton.free)bloodvel+=DoRotation(velocity,((float)(Random()%100))/4,((float)(Random()%100))/4,0)*scale;
- if(skeleton.free)Sprite::MakeSprite(bloodsprite, skeleton.joints[skeleton.jointlabels[abdomen]].position*scale+coords,bloodvel, 1,1,1, .05, 1);
- if(!skeleton.free)Sprite::MakeSprite(bloodsprite, DoRotation((skeleton.joints[skeleton.jointlabels[abdomen]].position+skeleton.joints[skeleton.jointlabels[abdomen]].position)/2,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .05, 1);
- }
- }
- bloodloss+=deathbleeding*multiplier*80;
- deathbleeding-=multiplier*1.6;
- //if(id==0)deathbleeding-=multiplier*.2;
- if(deathbleeding<0)deathbleeding=0;
- if(bloodloss>damagetolerance&&animation[targetanimation].attack==neutral){
- if(weaponactive!=-1){
- weapons.owner[weaponids[0]]=-1;
- weapons.velocity[weaponids[0]]=velocity*scale*-.3;
- weapons.velocity[weaponids[0]].x+=.01;
- weapons.tipvelocity[weaponids[0]]=velocity*scale;
- weapons.missed[weaponids[0]]=1;
- weapons.hitsomething[weaponids[0]]=0;
- weapons.freetime[weaponids[0]]=0;
- weapons.firstfree[weaponids[0]]=1;
- weapons.physics[weaponids[0]]=1;
- num_weapons--;
- if(num_weapons){
- weaponids[0]=weaponids[num_weapons];
- if(weaponstuck==num_weapons)weaponstuck=0;
- }
- weaponactive=-1;
- for(i=0;i<numplayers;i++){
- player[i].wentforweapon=0;
- }
-
- if(id==0){
- flashamount=.5;
- flashr=1;
- flashg=0;
- flashb=0;
- flashdelay=0;
- }
- }
-
- if(!dead&&creature==wolftype){
- bonus=Wolfbonus;
- bonustime=0;
- bonusvalue=300;
- }
- dead=2;
- if(targetanimation==knifefollowedanim&&!skeleton.free){
- for(i=0;i<skeleton.num_joints;i++){
- skeleton.joints[i].velocity=0;
- skeleton.joints[i].velocity.y=-2;
- }
- }
- if(id!=0&&unconscioustime>.1){
- numafterkill++;
- }
-
- RagDoll(0);
- }
- }
-
- if(texupdatedelay<0&&bleeding>0&&bloodtoggle==2&&findDistancefast(&viewer,&coords)<9){
- texupdatedelay=.12;
-
- bloodsize=5-realtexdetail;
-
- startx=0;
- starty=0;
- texdetailint=realtexdetail;
- startx=bleedy;//abs(Random()%(skeleton.skinsize-bloodsize-1));
- starty=bleedx;//abs(Random()%(skeleton.skinsize-bloodsize-1));
- endx=startx+bloodsize;
- endy=starty+bloodsize;
-
- if(startx<0){startx=0;bleeding=0;}
- if(starty<0){starty=0;bleeding=0;}
- if(endx>skeleton.skinsize-1){endx=skeleton.skinsize-1;bleeding=0;}
- if(endy>skeleton.skinsize-1){endy=skeleton.skinsize-1;bleeding=0;}
- if(endx<startx)endx=startx;
- if(endy<starty)endy=starty;
-
- for(i=startx;i<endx;i++){
- for(j=starty;j<endy;j++){
- if(Random()%2==0){
- color=Random()%85+170;
- if(skeleton.skinText[i*skeleton.skinsize*3+j*3+0]>color/2)skeleton.skinText[i*skeleton.skinsize*3+j*3+0]=color/2;
- skeleton.skinText[i*skeleton.skinsize*3+j*3+1]=0;
- skeleton.skinText[i*skeleton.skinsize*3+j*3+2]=0;
- }
- }
- }
- if(!osx&&detail>1){
- glBindTexture(GL_TEXTURE_2D,skeleton.drawmodel.textureptr);
- DoMipmaps(0,startx,endx,starty,endy);
- }
-
- if(!skeleton.free){
- bleedy-=4/realtexdetail;
- if(detail==2)bleedx+=(abs(Random()%3)-1)*2/realtexdetail;
- else bleedx+=(abs(Random()%3)-1)*4/realtexdetail;
- }
- if(skeleton.free){
- bleedx+=4*direction/realtexdetail;
- if(detail==2)bleedy+=(abs(Random()%3)-1)*2/realtexdetail;
- else bleedy+=(abs(Random()%3)-1)*4/realtexdetail;
- }
- }
-
- if(abs(righthandmorphness-targetrighthandmorphness)<multiplier*4){
- righthandmorphness=targetrighthandmorphness;
- righthandmorphstart=righthandmorphend;
- }
- else if(righthandmorphness>targetrighthandmorphness){
- righthandmorphness-=multiplier*4;
- }
- else if(righthandmorphness<targetrighthandmorphness){
- righthandmorphness+=multiplier*4;
- }
-
- if(abs(lefthandmorphness-targetlefthandmorphness)<multiplier*4){
- lefthandmorphness=targetlefthandmorphness;
- lefthandmorphstart=lefthandmorphend;
- }
- else if(lefthandmorphness>targetlefthandmorphness){
- lefthandmorphness-=multiplier*4;
- }
- else if(lefthandmorphness<targetlefthandmorphness){
- lefthandmorphness+=multiplier*4;
- }
-
- if(creature==rabbittype||targettailmorphness==5||targettailmorphness==0){
- if(abs(tailmorphness-targettailmorphness)<multiplier*10){
- tailmorphness=targettailmorphness;
- tailmorphstart=tailmorphend;
- }
- else if(tailmorphness>targettailmorphness){
- tailmorphness-=multiplier*10;
- }
- else if(tailmorphness<targettailmorphness){
- tailmorphness+=multiplier*10;
- }
- }
-
- if(creature==wolftype){
- if(abs(tailmorphness-targettailmorphness)<multiplier*4){
- tailmorphness=targettailmorphness;
- tailmorphstart=tailmorphend;
- }
- else if(tailmorphness>targettailmorphness){
- tailmorphness-=multiplier*2;
- }
- else if(tailmorphness<targettailmorphness){
- tailmorphness+=multiplier*2;
- }
- }
-
- if(headmorphend==3||headmorphstart==3){
- if(abs(headmorphness-targetheadmorphness)<multiplier*7){
- headmorphness=targetheadmorphness;
- headmorphstart=headmorphend;
- }
- else if(headmorphness>targetheadmorphness){
- headmorphness-=multiplier*7;
- }
- else if(headmorphness<targetheadmorphness){
- headmorphness+=multiplier*7;
- }
- }
- else if(headmorphend==5||headmorphstart==5){
- if(abs(headmorphness-targetheadmorphness)<multiplier*10){
- headmorphness=targetheadmorphness;
- headmorphstart=headmorphend;
- }
- else if(headmorphness>targetheadmorphness){
- headmorphness-=multiplier*10;
- }
- else if(headmorphness<targetheadmorphness){
- headmorphness+=multiplier*10;
- }
- }
- else{
- if(abs(headmorphness-targetheadmorphness)<multiplier*4){
- headmorphness=targetheadmorphness;
- headmorphstart=headmorphend;
- }
- else if(headmorphness>targetheadmorphness){
- headmorphness-=multiplier*4;
- }
- else if(headmorphness<targetheadmorphness){
- headmorphness+=multiplier*4;
- }
- }
-
- if(abs(chestmorphness-targetchestmorphness)<multiplier){
- chestmorphness=targetchestmorphness;
- chestmorphstart=chestmorphend;
- }
- else if(chestmorphness>targetchestmorphness){
- chestmorphness-=multiplier;
- }
- else if(chestmorphness<targetchestmorphness){
- chestmorphness+=multiplier;
- }
-
- if(dead!=2&&howactive<=typesleeping){
- if(chestmorphstart==0&&chestmorphend==0){
- chestmorphness=0;
- targetchestmorphness=1;
- chestmorphend=3;
- }
- if(chestmorphstart!=0&&chestmorphend!=0){
- chestmorphness=0;
- targetchestmorphness=1;
- chestmorphend=0;
- if(environment==snowyenvironment){
- XYZ footpoint;
- XYZ footvel;
- if(!skeleton.free)footvel=DoRotation(skeleton.specialforward[0],0,rotation,0)*-1;
- if(skeleton.free)footvel=skeleton.specialforward[0]*-1;
- if(!skeleton.free)footpoint=DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,rotation,0)*scale+coords;
- if(skeleton.free)footpoint=((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2)*scale+coords;
- if(targetanimation==sleepanim)footvel=DoRotation(footvel,0,90,0);
- Sprite::MakeSprite(breathsprite, footpoint+footvel*.2,footvel*.4, 1,1,1, .4, .3);
- }
- }
-
- if(!dead&&howactive<typesleeping){
- blinkdelay-=multiplier*2;
- if(headmorphstart==0&&headmorphend==0&&blinkdelay<=0){
- headmorphness=0;
- targetheadmorphness=1;
- headmorphend=3;
- blinkdelay=(float)(abs(Random()%40))/5;
- }
- if(headmorphstart==3&&headmorphend==3){
- headmorphness=0;
- targetheadmorphness=1;
- headmorphend=0;
- }
- }
- if(!dead){
- twitchdelay-=multiplier*1.5;
- if(targetanimation!=hurtidleanim){
- if(headmorphstart==0&&headmorphend==0&&twitchdelay<=0){
- headmorphness=0;
- targetheadmorphness=1;
- headmorphend=5;
- twitchdelay=(float)(abs(Random()%40))/5;
- }
- if(headmorphstart==5&&headmorphend==5){
- headmorphness=0;
- targetheadmorphness=1;
- headmorphend=0;
- }
- }
- if((isIdle()||isCrouch())&&targetanimation!=hurtidleanim){
- twitchdelay3-=multiplier*1;
- if(Random()%2==0){
- if(righthandmorphstart==0&&righthandmorphend==0&&twitchdelay3<=0){
- righthandmorphness=0;
- targetrighthandmorphness=1;
- righthandmorphend=1;
- if(Random()%2==0)twitchdelay3=(float)(abs(Random()%40))/5;
- }
- if(righthandmorphstart==1&&righthandmorphend==1){
- righthandmorphness=0;
- targetrighthandmorphness=1;
- righthandmorphend=0;
- }
- }
- if(Random()%2==0){
- if(lefthandmorphstart==0&&lefthandmorphend==0&&twitchdelay3<=0){
- lefthandmorphness=0;
- targetlefthandmorphness=1;
- lefthandmorphend=1;
- twitchdelay3=(float)(abs(Random()%40))/5;
- }
- if(lefthandmorphstart==1&&lefthandmorphend==1){
- lefthandmorphness=0;
- targetlefthandmorphness=1;
- lefthandmorphend=0;
- }
- }
- }
- }
- if(!dead){
- if(creature==rabbittype){
- if(howactive<typesleeping)twitchdelay2-=multiplier*1.5;
- else twitchdelay2-=multiplier*0.5;
- if(howactive<=typesleeping){
- if(tailmorphstart==0&&tailmorphend==0&&twitchdelay2<=0){
- tailmorphness=0;
- targettailmorphness=1;
- tailmorphend=1;
- twitchdelay2=(float)(abs(Random()%40))/5;
- }
- if(tailmorphstart==1&&tailmorphend==1){
- tailmorphness=0;
- targettailmorphness=1;
- tailmorphend=2;
- }
- if(tailmorphstart==2&&tailmorphend==2){
- tailmorphness=0;
- targettailmorphness=1;
- tailmorphend=0;
- }
- }
- }
- }
- }
- if(creature==wolftype){
- twitchdelay2-=multiplier*1.5;
- if(tailmorphend!=0)
- if((isRun()||targetanimation==jumpupanim||targetanimation==jumpdownanim||targetanimation==backflipanim)&&!skeleton.free){
- tailmorphness=0;
- targettailmorphness=1;
- tailmorphend=0;
- twitchdelay2=.1;
- }
- if(tailmorphend!=5)
- if(targetanimation==flipanim||targetanimation==frontflipanim||targetanimation==rollanim||skeleton.free){
- tailmorphness=0;
- targettailmorphness=1;
- tailmorphend=5;
- twitchdelay2=.1;
- }
- if(twitchdelay2<=0){
- if(((tailmorphstart==0&&tailmorphend==0)||(tailmorphstart==5&&tailmorphend==5))){
- tailmorphness=0;
- targettailmorphness=1;
- tailmorphend=1;
- }
- if(tailmorphstart==1&&tailmorphend==1){
- tailmorphness=0;
- targettailmorphness=1;
- tailmorphend=2;
- }
- if(tailmorphstart==2&&tailmorphend==2){
- tailmorphness=0;
- targettailmorphness=1;
- tailmorphend=3;
- }
- if(tailmorphstart==3&&tailmorphend==3){
- tailmorphness=0;
- targettailmorphness=1;
- tailmorphend=4;
- }
- if(tailmorphstart==4&&tailmorphend==4){
- tailmorphness=0;
- targettailmorphness=1;
- tailmorphend=1;
- }
- }
- }
-
- if(dead!=1)unconscioustime=0;
-
- if(dead==1||howactive==typesleeping){
- unconscioustime+=multiplier;
- //If unconscious, close eyes and mouth
- if(righthandmorphend!=0)righthandmorphness=0;
- righthandmorphend=0;
- targetrighthandmorphness=1;
-
- if(lefthandmorphend!=0)lefthandmorphness=0;
- lefthandmorphend=0;
- targetlefthandmorphness=1;
-
- if(headmorphend!=3&&headmorphend!=5)headmorphness=0;
- headmorphend=3;
- targetheadmorphness=1;
- }
-
-
- if(howactive>typesleeping){
- XYZ headpoint;
- headpoint=coords;
- if(bloodtoggle&&!bled){
- terrain.MakeDecal(blooddecalslow,headpoint,.8,.5,0);
- }
- if(bloodtoggle&&!bled)
- for(l=0;l<terrain.patchobjectnum[whichpatchx][whichpatchz];l++){
- j=terrain.patchobjects[whichpatchx][whichpatchz][l];
- XYZ point=DoRotation(headpoint-objects.position[j],0,-objects.rotation[j],0);
- float size=.8;
- float opacity=.6;
- float rotation=0;
- objects.model[j].MakeDecal(blooddecalslow,&point,&size,&opacity,&rotation);
- }
- bled=1;
- }
-
- if(dead==2||howactive>typesleeping){
- //If dead, open mouth and hands
- if(righthandmorphend!=0)righthandmorphness=0;
- righthandmorphend=0;
- targetrighthandmorphness=1;
-
- if(lefthandmorphend!=0)lefthandmorphness=0;
- lefthandmorphend=0;
- targetlefthandmorphness=1;
-
- if(headmorphend!=2)headmorphness=0;
- headmorphend=2;
- targetheadmorphness=1;
- }
-
- if(stunned>0&&!dead&&headmorphend!=2){
- if(headmorphend!=4)headmorphness=0;
- headmorphend=4;
- targetheadmorphness=1;
- }
-
- if(damage>damagetolerance&&!dead){
-
- dead=1;
- unconscioustime=0;
-
- if(creature==wolftype){
- bonus=Wolfbonus;
- bonustime=0;
- bonusvalue=300;
- }
-
- RagDoll(0);
-
- if(weaponactive!=-1){
- weapons.owner[weaponids[0]]=-1;
- weapons.velocity[weaponids[0]]=velocity*scale*-.3;
- weapons.velocity[weaponids[0]].x+=.01;
- weapons.tipvelocity[weaponids[0]]=velocity*scale;
- weapons.missed[weaponids[0]]=1;
- weapons.hitsomething[weaponids[0]]=0;
- weapons.freetime[weaponids[0]]=0;
- weapons.firstfree[weaponids[0]]=1;
- weapons.physics[weaponids[0]]=1;
- num_weapons--;
- if(num_weapons){
- weaponids[0]=weaponids[num_weapons];
- if(weaponstuck==num_weapons)weaponstuck=0;
- }
- weaponactive=-1;
- for(i=0;i<numplayers;i++){
- player[i].wentforweapon=0;
- }
- }
-
-
-
- if((id==0||findDistancefast(&coords,&viewer)<50)&&autoslomo){
- slomo=1;
- slomodelay=.2;
- }
-
- damage+=20;
- }
-
- //if(dead)damage-=multiplier/4;
- if(!dead)damage-=multiplier*13;
- //if(!dead&&deathbleeding<=0&&id==0)bloodloss-=multiplier*4;
- if(!dead)permanentdamage-=multiplier*4;
- if(isIdle()||isCrouch()){
- if(!dead)permanentdamage-=multiplier*4;
- //if(!dead&&deathbleeding<=0&&id==0)bloodloss-=multiplier*4;
- }
- if(damage<0)damage=0;
- if(permanentdamage<0)permanentdamage=0;
- if(superpermanentdamage<0)superpermanentdamage=0;
- if(permanentdamage<superpermanentdamage){
- permanentdamage=superpermanentdamage;
- }
- if(damage<permanentdamage){
- damage=permanentdamage;
- }
- if(dead==1&&damage<damagetolerance){
- dead=0;
- skeleton.free=1;
- damage-=20;
- for(i=0;i<skeleton.num_joints;i++){
- skeleton.joints[i].velocity=0;
- }
- }
- if(permanentdamage>damagetolerance&&dead!=2){
- DoBlood(1,255);
-
- if(weaponactive!=-1){
- weapons.owner[weaponids[0]]=-1;
- weapons.velocity[weaponids[0]]=velocity*scale*-.3;
- weapons.velocity[weaponids[0]].x+=.01;
- weapons.tipvelocity[weaponids[0]]=velocity*scale;
- weapons.missed[weaponids[0]]=1;
- weapons.hitsomething[weaponids[0]]=0;
- weapons.freetime[weaponids[0]]=0;
- weapons.firstfree[weaponids[0]]=1;
- weapons.physics[weaponids[0]]=1;
- num_weapons--;
- if(num_weapons){
- weaponids[0]=weaponids[num_weapons];
- if(weaponstuck==num_weapons)weaponstuck=0;
- }
- weaponactive=-1;
- for(i=0;i<numplayers;i++){
- player[i].wentforweapon=0;
- }
- }
-
- bled=0;
-
- if(!dead&&creature==wolftype){
- bonus=Wolfbonus;
- bonustime=0;
- bonusvalue=300;
- }
-
- if(id!=0&&unconscioustime<.1&&(bonus!=spinecrusher||bonustime>1)&&(bonus!=FinishedBonus||bonustime>1)&&bloodloss<damagetolerance){
- bonus=touchofdeath;
- bonustime=0;
- bonusvalue=150;
- }
- if(id!=0&&unconscioustime>.1){
- numafterkill++;
- }
-
- dead=2;
-
- skeleton.free=1;
-
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( breaksound, samp[breaksound], NULL, true);
- OPENAL_3D_SetAttributes(channels[breaksound], gLoc, vel);
- OPENAL_SetVolume(channels[breaksound], 512);
- OPENAL_SetPaused(channels[breaksound], false);
- /*if(id==0||findDistancefast(&coords,&viewer)<50){
- slomo=1;
- slomodelay=.2;
- }*/
- }
-
- if(skeleton.free==1){
- if(id==0)OPENAL_SetPaused(channels[whooshsound], true);
-
- if(!dead){
- //If knocked over, open hands and close mouth
- if(righthandmorphend!=0)righthandmorphness=0;
- righthandmorphend=0;
- targetrighthandmorphness=1;
-
- if(lefthandmorphend!=0)lefthandmorphness=0;
- lefthandmorphend=0;
- targetlefthandmorphness=1;
-
- if(headmorphend!=3&&headmorphend!=5&&headmorphstart!=3&&headmorphstart!=5){
- if(headmorphend!=0)headmorphness=0;
- headmorphend=0;
- targetheadmorphness=1;
- }
- }
-
- skeleton.DoGravity(&scale);
- float damageamount;
- damageamount=skeleton.DoConstraints(&coords,&scale)*5;
- if(id!=0&&damage>damagetolerance-damageamount&&!dead&&(bonus!=spinecrusher||bonustime>1)&&(bonus!=style||bonustime>1)&&(bonus!=cannon||bonustime>1)){
- bonus=deepimpact;
- bonustime=0;
- bonusvalue=50;
- }
- DoDamage(damageamount/((protectionhigh+protectionhead+protectionlow)/3));
-
- average=0;
- howmany=0;
- for(j=0;j<skeleton.num_joints;j++){
- average+=skeleton.joints[j].position;
- howmany++;
- }
- average/=howmany;
- coords+=average*scale;
- for(j=0;j<skeleton.num_joints;j++){
- skeleton.joints[j].position-=average;
- }
- average/=multiplier;
-
- //velocity=skeleton.joints[skeleton.jointlabels[groin]].velocity*scale;
- velocity=0;
- for(i=0;i<skeleton.num_joints;i++){
- velocity+=skeleton.joints[i].velocity*scale;
- }
- velocity/=skeleton.num_joints;
-
- if(!isnormal(velocity.x)&&velocity.x){
- velocity=0;
- }
-
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
-
- if(findLength(&average)<10&&dead&&skeleton.free){
- skeleton.longdead+=(2000-findLength(&average))*multiplier+multiplier;
- if(skeleton.longdead>2000){
- if(skeleton.longdead>6000){
- if(id==0)OPENAL_SetPaused(channels[whooshsound], true);
- skeleton.free=3;
- DrawSkeleton();
- skeleton.free=2;
- }
- if(dead==2&&bloodloss<damagetolerance){
- XYZ headpoint;
- headpoint=(skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2*scale+coords;
- DoBlood(1,255);
- if(bloodtoggle&&!bled){
- terrain.MakeDecal(blooddecal,headpoint,.2*1.2,.5,0);
- }
- if(bloodtoggle&&!bled)
- for(l=0;l<terrain.patchobjectnum[whichpatchx][whichpatchz];l++){
- j=terrain.patchobjects[whichpatchx][whichpatchz][l];
- XYZ point=DoRotation(headpoint-objects.position[j],0,-objects.rotation[j],0);
- float size=.2*1.2;
- float opacity=.6;
- float rotation=0;
- objects.model[j].MakeDecal(blooddecal,&point,&size,&opacity,&rotation);
- }
- bled=1;
- }
- if(dead==2&&bloodloss>=damagetolerance){
- XYZ headpoint;
- headpoint=(skeleton.joints[skeleton.jointlabels[abdomen]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2*scale+coords;
- if(bleeding<=0)DoBlood(1,255);
- if(bloodtoggle&&!bled){
- terrain.MakeDecal(blooddecalslow,headpoint,.8,.5,0);
- }
- if(bloodtoggle&&!bled)
- for(l=0;l<terrain.patchobjectnum[whichpatchx][whichpatchz];l++){
- j=terrain.patchobjects[whichpatchx][whichpatchz][l];
- XYZ point=DoRotation(headpoint-objects.position[j],0,-objects.rotation[j],0);
- float size=.8;
- float opacity=.6;
- float rotation=0;
- objects.model[j].MakeDecal(blooddecalslow,&point,&size,&opacity,&rotation);
- }
- bled=1;
- }
- }
- }
-
- if(!dead&&crouchkeydown&&skeleton.freetime>.5&&id==0&&skeleton.free){
- bool canrecover=1;
- XYZ startpoint,endpoint,colpoint,colviewer,coltarget;
- startpoint=coords;
- endpoint=coords;
- endpoint.y-=.7;
- if(terrain.lineTerrain(startpoint,endpoint,&colpoint)!=-1)canrecover=0;
- if(velocity.y<-30)canrecover=0;
- for(i=0;i<objects.numobjects;i++){
- if(objects.type[i]!=treeleavestype&&objects.type[i]!=bushtype&&objects.type[i]!=firetype){
- colviewer=startpoint;
- coltarget=endpoint;
- if(objects.model[i].LineCheck(&colviewer,&coltarget,&colpoint,&objects.position[i],&objects.rotation[i])!=-1)canrecover=0;
- }
- }
- if(canrecover){
- skeleton.free=0;
- XYZ middle;
- middle=0;
-
- terrainnormal=skeleton.joints[skeleton.jointlabels[groin]].position-skeleton.joints[skeleton.jointlabels[abdomen]].position;
- if(skeleton.joints[skeleton.jointlabels[groin]].locked&&skeleton.joints[skeleton.jointlabels[abdomen]].locked){
- terrainnormal=skeleton.joints[skeleton.jointlabels[groin]].position-skeleton.joints[skeleton.jointlabels[abdomen]].position;
- middle=(skeleton.joints[skeleton.jointlabels[groin]].position+skeleton.joints[skeleton.jointlabels[abdomen]].position)/2;
- }
- if(skeleton.joints[skeleton.jointlabels[abdomen]].locked&&skeleton.joints[skeleton.jointlabels[neck]].locked){
- terrainnormal=skeleton.joints[skeleton.jointlabels[abdomen]].position-skeleton.joints[skeleton.jointlabels[neck]].position;
- middle=(skeleton.joints[skeleton.jointlabels[neck]].position+skeleton.joints[skeleton.jointlabels[abdomen]].position)/2;
- }
- if(skeleton.joints[skeleton.jointlabels[groin]].locked&&skeleton.joints[skeleton.jointlabels[neck]].locked){
- terrainnormal=skeleton.joints[skeleton.jointlabels[groin]].position-skeleton.joints[skeleton.jointlabels[neck]].position;
- middle=(skeleton.joints[skeleton.jointlabels[groin]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2;
- }
- Normalise(&terrainnormal);
-
- targetrotation=-asin(0-terrainnormal.x);
- targetrotation*=360/6.28;
- if(terrainnormal.z<0)targetrotation=180-targetrotation;
- rotation=targetrotation;
-
- //if(skeleton.forward.y<0){
- targetframe=0;
- //}
- //if(skeleton.forward.y>-.3){
- // targetframe=2;
- //}
- targetanimation=flipanim;
- crouchtogglekeydown=1;
- target=0;
- tilt2=0;
- targettilt2=0;
-
- currentanimation=tempanim;
- currentframe=0;
- target=0;
- //tilt2=targettilt2;
-
- //if(middle.y>0)targetoffset.y=middle.y+1;
-
- for(i=0;i<skeleton.num_joints;i++){
- tempanimation.position[i][0]=skeleton.joints[i].position;
- tempanimation.position[i][0]=DoRotation(tempanimation.position[i][0],0,-rotation,0);
- }
- }
- }
-
- if(findLength(&average)<10&&!dead&&skeleton.free){
- skeleton.longdead+=(2000-findLength(&average))*multiplier+multiplier;
- if(skeleton.longdead>(damage+500)*1.5){
- if(id==0)OPENAL_SetPaused(channels[whooshsound], true);
- skeleton.free=0;
- velocity=0;
- XYZ middle;
- middle=0;
-
- terrainnormal=skeleton.joints[skeleton.jointlabels[groin]].position-skeleton.joints[skeleton.jointlabels[abdomen]].position;
- if(skeleton.joints[skeleton.jointlabels[groin]].locked&&skeleton.joints[skeleton.jointlabels[abdomen]].locked){
- terrainnormal=skeleton.joints[skeleton.jointlabels[groin]].position-skeleton.joints[skeleton.jointlabels[abdomen]].position;
- middle=(skeleton.joints[skeleton.jointlabels[groin]].position+skeleton.joints[skeleton.jointlabels[abdomen]].position)/2;
- }
- if(skeleton.joints[skeleton.jointlabels[abdomen]].locked&&skeleton.joints[skeleton.jointlabels[neck]].locked){
- terrainnormal=skeleton.joints[skeleton.jointlabels[abdomen]].position-skeleton.joints[skeleton.jointlabels[neck]].position;
- middle=(skeleton.joints[skeleton.jointlabels[neck]].position+skeleton.joints[skeleton.jointlabels[abdomen]].position)/2;
- }
- if(skeleton.joints[skeleton.jointlabels[groin]].locked&&skeleton.joints[skeleton.jointlabels[neck]].locked){
- terrainnormal=skeleton.joints[skeleton.jointlabels[groin]].position-skeleton.joints[skeleton.jointlabels[neck]].position;
- middle=(skeleton.joints[skeleton.jointlabels[groin]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2;
- }
- Normalise(&terrainnormal);
-
- targetrotation=-asin(0-terrainnormal.x);
- targetrotation*=360/6.28;
- if(terrainnormal.z<0)targetrotation=180-targetrotation;
- rotation=targetrotation;
-
- /*if(onterrain){
- terrainnormal=terrain.getNormal(coords.x,coords.z);
- targettilt2=asin(terrainnormal.y)*180/3.14*-1;
- }
- else*/
-
- /*XYZ otherterrainnormal;
- otherterrainnormal=terrain.getNormal(coords.x,coords.y);
- otherterrainnormal.y=fast_sqrt(otherterrainnormal.x*otherterrainnormal.x+otherterrainnormal.z*otherterrainnormal.z)*-1;
- if(abs(terrainnormal.y)<abs(otherterrainnormal.y))terrainnormal.y=fast_sqrt(otherterrainnormal.x*otherterrainnormal.x+otherterrainnormal.z*otherterrainnormal.z)*-1;
- targettilt2=asin(otherterrainnormal.y)*180/3.14;
- */
-
- targettilt2=asin(terrainnormal.y)*180/3.14*-1;
-
-
-
- if(skeleton.forward.y<0){
- targetanimation=getupfrombackanim;
- targetframe=0;
- targettilt2=0;
- }
- if(skeleton.forward.y>-.3){
- targetanimation=getupfromfrontanim;
- rotation+=180;
- targetrotation+=180;
- targettilt2*=-1;
- targetframe=0;
- targettilt2=0;
- }
-
- if((Random()%8==0&&id!=0&&creature==rabbittype)||(Random()%2==0&&id!=0&&creature==wolftype)||(id==0&&crouchkeydown&&(forwardkeydown||backkeydown||leftkeydown||rightkeydown))){
- targetanimation=rollanim;
- targetrotation=lookrotation;
- if(id==0){
- if(rightkeydown){
- targetrotation-=90;
- if(forwardkeydown)targetrotation+=45;
- if(backkeydown)targetrotation-=45;
- }
- if(leftkeydown){
- targetrotation+=90;
- if(forwardkeydown)targetrotation-=45;
- if(backkeydown)targetrotation+=45;
- }
- if(backkeydown){
- if ( !leftkeydown&&!rightkeydown)
- targetrotation+=180;
- }
- targetrotation+=180;
- }
- }
-
- if(abs(targettilt2)>50)targettilt2=0;
- currentanimation=tempanim;
- currentframe=0;
- target=0;
- tilt2=targettilt2;
-
- if(middle.y>0&&targetanimation!=rollanim)targetoffset.y=middle.y+1;
-
- for(i=0;i<skeleton.num_joints;i++){
- tempanimation.position[i][0]=skeleton.joints[i].position;
- tempanimation.position[i][0]=DoRotation(tempanimation.position[i][0],0,-rotation,0);
- }
- }
- }
-
- bool hasstaff;
- hasstaff=0;
- if(num_weapons>0)if(weapons.type[0]==staff)hasstaff=1;
- if(!skeleton.freefall&&freefall&&((jumpkeydown&&jumpkeydowntime<.2)||(hasstaff&&rabbitkickragdoll))&&!dead){
- if(velocity.y>-30){
- XYZ tempvelocity;
- tempvelocity=velocity;
- Normalise(&tempvelocity);
- targetrotation=-asin(0-tempvelocity.x);
- targetrotation*=360/6.28;
- if(velocity.z<0)targetrotation=180-targetrotation;
- //targetrotation+=180;
-
- skeleton.free=0;
- if(dotproduct(&skeleton.forward,&tempvelocity)<0){
- targetanimation=rollanim;
- targetframe=2;
- }
- else{
- targetanimation=backhandspringanim;
- targetrotation+=180;
- targetframe=6;
- }
- target=0;
-
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( movewhooshsound, samp[movewhooshsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[movewhooshsound], gLoc, vel);
- OPENAL_SetVolume(channels[movewhooshsound], 128);
- OPENAL_SetPaused(channels[movewhooshsound], false);
-
- currentanimation=targetanimation;
- currentframe=targetframe-1;
- target=0;
-
- velocity=0;
-
- rotation=targetrotation;
- tilt=0;
- targettilt=0;
- tilt2=0;
- targettilt2=0;
- }
- }
- if(skeleton.freefall==0)freefall=0;
-
- if(!isnormal(velocity.x)&&velocity.x){
- int xy=1;
- }
- }
-
- if(aitype!=passivetype||skeleton.free==1)
- if(findLengthfast(&velocity)>.1)
- for(i=0;i<objects.numobjects;i++){
- if(objects.type[i]==firetype)
- if(findDistancefastflat(&coords,&objects.position[i])<objects.scale[i]*objects.scale[i]*12&&findDistancefast(&coords,&objects.position[i])<objects.scale[i]*objects.scale[i]*49){
- if(onfire){
- if(!objects.onfire[i]){
- float gLoc[3];
- float vel[3];
- gLoc[0]=objects.position[i].x;
- gLoc[1]=objects.position[i].y;
- gLoc[2]=objects.position[i].z;
- vel[0]=0;
- vel[1]=0;
- vel[2]=0;
- PlaySoundEx( firestartsound, samp[firestartsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel);
- OPENAL_SetVolume(channels[firestartsound], 256);
- OPENAL_SetPaused(channels[firestartsound], false);
- }
- objects.onfire[i]=1;
- }
- if(!onfire){
- if(objects.onfire[i]){
- CatchFire();
- }
- }
- }
- if(objects.type[i]==bushtype)
- if(findDistancefastflat(&coords,&objects.position[i])<objects.scale[i]*objects.scale[i]*12&&findDistancefast(&coords,&objects.position[i])<objects.scale[i]*objects.scale[i]*49){
- if(onfire){
- if(!objects.onfire[i]){
- float gLoc[3];
- float vel[3];
- gLoc[0]=objects.position[i].x;
- gLoc[1]=objects.position[i].y;
- gLoc[2]=objects.position[i].z;
- vel[0]=0;
- vel[1]=0;
- vel[2]=0;
- PlaySoundEx( firestartsound, samp[firestartsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[firestartsound], gLoc, vel);
- OPENAL_SetVolume(channels[firestartsound], 256);
- OPENAL_SetPaused(channels[firestartsound], false);
- }
- objects.onfire[i]=1;
- }
-
- if(!onfire){
- if(objects.onfire[i]){
- CatchFire();
- }
- }
- if(objects.messedwith[i]<=0){
- XYZ tempvel;
- XYZ pos;
-
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( bushrustle, samp[bushrustle], NULL, true);
- OPENAL_3D_SetAttributes(channels[bushrustle], gLoc, vel);
- OPENAL_SetVolume(channels[bushrustle], 40*findLength(&velocity));
- OPENAL_SetPaused(channels[bushrustle], false);
-
- if(id==0){
- envsound[numenvsounds]=coords;
- envsoundvol[numenvsounds]=4*findLength(&velocity);
- envsoundlife[numenvsounds]=.4;
- numenvsounds++;
- }
-
- int howmany;
- if(environment==grassyenvironment)howmany=findLength(&velocity)*4;
- if(environment==snowyenvironment)howmany=findLength(&velocity)*2;
- if(detail==2)
- if(environment!=desertenvironment)
- for(j=0;j<howmany;j++){
- tempvel.x=float(abs(Random()%100)-50)/20;
- tempvel.y=float(abs(Random()%100)-50)/20;
- tempvel.z=float(abs(Random()%100)-50)/20;
- pos=coords;
- pos.y+=1;
- pos.x+=float(abs(Random()%100)-50)/200;
- pos.y+=float(abs(Random()%100)-50)/200;
- pos.z+=float(abs(Random()%100)-50)/200;
- Sprite::MakeSprite(splintersprite, pos,tempvel*.5+velocity*float(abs(Random()%100))/100, 165/255+float(abs(Random()%100)-50)/400,0,0, .2+float(abs(Random()%100)-50)/1300, 1);
- Sprite::setLastSpriteSpecial(1);
- }
- howmany=findLength(&velocity)*4;
- if(detail==2)
- if(environment==snowyenvironment)
- for(j=0;j<howmany;j++){
- tempvel.x=float(abs(Random()%100)-50)/20;
- tempvel.y=float(abs(Random()%100)-50)/20;
- tempvel.z=float(abs(Random()%100)-50)/20;
- pos=coords;
- pos.y+=1;
- pos.x+=float(abs(Random()%100)-50)/200;
- pos.y+=float(abs(Random()%100)-50)/200;
- pos.z+=float(abs(Random()%100)-50)/200;
- Sprite::MakeSprite(splintersprite, pos,tempvel*.3+velocity*float(abs(Random()%100))/100/2, 1,1,1, .1, 1);
- Sprite::setLastSpriteSpecial(2);
- }
- }
- objects.rotx[i]+=velocity.x*multiplier*6;
- objects.roty[i]+=velocity.z*multiplier*6;
- objects.messedwith[i]=.5;
- }
- XYZ tempcoord;
- if(objects.type[i]==treeleavestype&&environment!=desertenvironment){
- if(objects.rotation2[i]==0)tempcoord=coords;
- else{
- tempcoord=coords-objects.position[i];
- tempcoord=DoRotation(tempcoord,0,-objects.rotation[i],0);
- tempcoord=DoRotation(tempcoord,-objects.rotation2[i],0,0);
- tempcoord+=objects.position[i];
- }
- if(findDistancefastflat(&tempcoord,&objects.position[i])<objects.scale[i]*objects.scale[i]*8&&findDistancefast(&tempcoord,&objects.position[i])<objects.scale[i]*objects.scale[i]*300&&tempcoord.y>objects.position[i].y+3*objects.scale[i]){
- if(objects.messedwith[i]<=0){
- XYZ tempvel;
- XYZ pos;
-
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( bushrustle, samp[bushrustle], NULL, true);
- OPENAL_3D_SetAttributes(channels[bushrustle], gLoc, vel);
- OPENAL_SetVolume(channels[bushrustle], 40*findLength(&velocity));
- OPENAL_SetPaused(channels[bushrustle], false);
-
- if(id==0){
- envsound[numenvsounds]=coords;
- envsoundvol[numenvsounds]=4*findLength(&velocity);
- envsoundlife[numenvsounds]=.4;
- numenvsounds++;
- }
-
- int howmany;
- if(environment==grassyenvironment)howmany=findLength(&velocity)*4;
- if(environment==snowyenvironment)howmany=findLength(&velocity)*2;
- if(detail==2)
- if(environment!=desertenvironment)
- for(j=0;j<howmany;j++){
- tempvel.x=float(abs(Random()%100)-50)/20;
- tempvel.y=float(abs(Random()%100)-50)/20;
- tempvel.z=float(abs(Random()%100)-50)/20;
- pos=coords;
- pos+=velocity*.1;
- pos.y+=1;
- pos.x+=float(abs(Random()%100)-50)/150;
- pos.y+=float(abs(Random()%100)-50)/150;
- pos.z+=float(abs(Random()%100)-50)/150;
- Sprite::MakeSprite(splintersprite, pos,tempvel*.5+velocity*float(abs(Random()%100))/100, 165/255+float(abs(Random()%100)-50)/400,0,0, .2+float(abs(Random()%100)-50)/1300, 1);
- Sprite::setLastSpriteSpecial(1);
- }
- howmany=findLength(&velocity)*4;
- if(detail==2)
- if(environment==snowyenvironment)
- for(j=0;j<howmany;j++){
- tempvel.x=float(abs(Random()%100)-50)/20;
- tempvel.y=float(abs(Random()%100)-50)/20;
- tempvel.z=float(abs(Random()%100)-50)/20;
- pos=coords;
- pos+=velocity*.1;
- pos.y+=1;
- pos.x+=float(abs(Random()%100)-50)/150;
- pos.y+=float(abs(Random()%100)-50)/150;
- pos.z+=float(abs(Random()%100)-50)/150;
- Sprite::MakeSprite(splintersprite, pos,tempvel*.3+velocity*float(abs(Random()%100))/100/2, 1,1,1, .1, 1);
- Sprite::setLastSpriteSpecial(2);
- }
- }
- objects.messedwith[i]=.5;
- }
- }
- }
-
- if(!skeleton.free){
- bool play;
- play=0;
- if((stunned>0||surprised>0)&&numplayers>2&&aitype!=passivetype)play=1;
- if(hasvictim)
- if(aitype!=passivetype&&victim->skeleton.free&&!victim->dead)play=1;
- if(tutoriallevel==1&&id!=0)play=0;
- if(play&&aitype!=playercontrolled){
- int whichsound=-1;
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- i=abs(Random()%4);
- if(speechdelay<=0){
- if(creature==rabbittype){
- if(i==0)whichsound=rabbitchitter;
- if(i==1)whichsound=rabbitchitter2;
- }
- if(creature==wolftype){
- if(i==0)whichsound=growlsound;
- if(i==1)whichsound=growl2sound;
- }
- }
- speechdelay=.3;
-
- if(whichsound!=-1){
- PlaySoundEx( whichsound, samp[whichsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[whichsound], gLoc, vel);
- OPENAL_SetVolume(channels[whichsound], 512);
- OPENAL_SetPaused(channels[whichsound], false);
- }
- }
-
- if(targetanimation==staggerbackhighanim)staggerdelay=1;
- if(targetanimation==staggerbackhardanim)staggerdelay=1;
- staggerdelay-=multiplier;
- if(targetanimation!=crouchstabanim&&targetanimation!=swordgroundstabanim&&targetanimation!=staffgroundsmashanim)hasvictim=1;
- if(velocity.y<-30&&targetanimation==jumpdownanim)RagDoll(0);
- if(currentanimation!=getIdle()&&wasIdle()&&targetanimation!=getIdle()&&isIdle()){
- targetanimation=getIdle();
- targetframe=0;
- target=0;
- }
- weaponmissdelay-=multiplier;
- highreversaldelay-=multiplier;
- lowreversaldelay-=multiplier;
- lastcollide-=multiplier;
- skiddelay-=multiplier;
- if(!isnormal(velocity.x)&&velocity.x){
- velocity=0;
- }
- if(!isnormal(targettilt)&&targettilt){
- targettilt=0;
- }
- if(!isnormal(targettilt2)&&targettilt2){
- targettilt2=0;
- }
- if(!isnormal(targetrotation)&&targetrotation){
- targetrotation=0;
- }
-
- if(targetanimation==bounceidleanim||targetanimation==wolfidle||targetanimation==walkanim||targetanimation==drawrightanim||targetanimation==crouchdrawrightanim||targetanimation==drawleftanim||targetanimation==fightidleanim||targetanimation==fightsidestep||targetanimation==hanganim||isCrouch()||targetanimation==backhandspringanim){
- //open hands and close mouth
- //if(targetanimation!=wolfidle){
- if(righthandmorphend!=0&&righthandmorphness==targetrighthandmorphness){
- righthandmorphness=0;
- righthandmorphend=0;
- targetrighthandmorphness=1;
- }
-
- if(lefthandmorphend!=0&&lefthandmorphness==targetlefthandmorphness){
- lefthandmorphness=0;
- lefthandmorphend=0;
- targetlefthandmorphness=1;
- }
- //s}
-
- if(headmorphend!=3&&headmorphend!=5&&headmorphstart!=3&&headmorphstart!=5&&headmorphend!=0&&headmorphness==targetheadmorphness){
- headmorphness=0;
- headmorphend=0;
- targetheadmorphness=1;
- }
- }
-
- if(targetanimation==rollanim||targetanimation==dodgebackanim||targetanimation==removeknifeanim||targetanimation==knifefightidleanim||targetanimation==swordfightidleanim||targetanimation==blockhighleftstrikeanim||targetanimation==crouchremoveknifeanim||targetanimation==sneakanim||targetanimation==sweepanim||targetanimation==spinkickreversedanim||targetanimation==jumpdownanim||isWallJump()||isFlip()||targetanimation==climbanim||isRun()||targetanimation==getupfrombackanim||targetanimation==getupfromfrontanim){
- //open hands and mouth
- if(righthandmorphend!=0&&righthandmorphness==targetrighthandmorphness){
- righthandmorphness=0;
- righthandmorphend=0;
- targetrighthandmorphness=1;
- }
-
- if(lefthandmorphend!=0&&lefthandmorphness==targetlefthandmorphness){
- lefthandmorphness=0;
- lefthandmorphend=0;
- targetlefthandmorphness=1;
- }
-
- if(headmorphend!=1&&headmorphness==targetheadmorphness){
- headmorphness=0;
- headmorphend=1;
- targetheadmorphness=1;
- }
- }
-
- if(targetanimation==jumpupanim||targetanimation==crouchstabanim||targetanimation==swordgroundstabanim||targetanimation==swordfightidlebothanim||targetanimation==blockhighleftanim||targetanimation==blockhighleftanim){
- //close hands and mouth
- if(righthandmorphend!=1&&righthandmorphness==targetrighthandmorphness){
- righthandmorphness=0;
- righthandmorphend=1;
- targetrighthandmorphness=1;
- }
-
- if(lefthandmorphend!=1&&lefthandmorphness==targetlefthandmorphness){
- lefthandmorphness=0;
- lefthandmorphend=1;
- targetlefthandmorphness=1;
- }
-
- if(headmorphend!=0&&headmorphness==targetheadmorphness){
- headmorphness=0;
- headmorphend=0;
- targetheadmorphness=1;
- }
- }
-
- if(targetanimation==spinkickanim||targetanimation==staffspinhitreversalanim||targetanimation==staffspinhitreversedanim||targetanimation==staffhitreversalanim||targetanimation==staffhitreversedanim||targetanimation==hurtidleanim||targetanimation==winduppunchanim||targetanimation==swordslashreversalanim||targetanimation==swordslashreversedanim||targetanimation==knifeslashreversalanim||targetanimation==knifeslashreversedanim||targetanimation==knifethrowanim||targetanimation==knifefollowanim||targetanimation==knifefollowedanim||targetanimation==killanim||targetanimation==dropkickanim||targetanimation==upunchanim||targetanimation==knifeslashstartanim||targetanimation==swordslashanim||targetanimation==staffhitanim||targetanimation==staffspinhitanim||targetanimation==staffgroundsmashanim||targetanimation==spinkickreversalanim||targetanimation==sweepreversalanim||targetanimation==lowkickanim||targetanimation==sweepreversedanim||targetanimation==rabbitkickreversalanim||targetanimation==rabbitkickreversedanim||targetanimation==jumpreversalanim||targetanimation==jumpreversedanim){
- //close hands and yell
- if(righthandmorphend!=1&&righthandmorphness==targetrighthandmorphness){
- righthandmorphness=0;
- righthandmorphend=1;
- targetrighthandmorphness=1;
- }
-
- if(lefthandmorphend!=1&&lefthandmorphness==targetlefthandmorphness){
- lefthandmorphness=0;
- lefthandmorphend=1;
- targetlefthandmorphness=1;
- }
-
- if(headmorphend!=2&&headmorphness==targetheadmorphness){
- headmorphness=1;
- headmorphend=2;
- targetheadmorphness=1;
- }
- }
- /*
- if(speechdelay>.25){
- if(headmorphend!=2)headmorphness=0;
- headmorphend=2;
- targetheadmorphness=1;
- }
- */
- bool behind;
- behind=0;
- if(hasvictim){
- if(victim!=this&&!victim->dead&&victim->aitype!=passivetype&&victim->aitype!=searchtype&&aitype!=passivetype&&aitype!=searchtype&&victim->id<numplayers&&aitype!=passivetype){
- behind=(normaldotproduct(facing,coords-victim->coords)>0);
- }
- }
-
- if(!dead&&targetanimation!=hurtidleanim)
- if(behind||targetanimation==killanim||targetanimation==knifethrowanim||targetanimation==knifefollowanim||targetanimation==spinkickreversalanim||targetanimation==rabbitkickreversedanim||targetanimation==jumpreversedanim){
- if(headmorphend!=4||headmorphness==targetheadmorphness){
- headmorphend=4;
- //headmorphness=1;
- targetheadmorphness=1;
- }
- }
-
- if(weaponactive!=-1){
- if(weapons.type[weaponids[weaponactive]]!=staff){
- righthandmorphstart=1;
- righthandmorphend=1;
- }
- if(weapons.type[weaponids[weaponactive]]==staff){
- righthandmorphstart=2;
- righthandmorphend=2;
- }
- targetrighthandmorphness=1;
- }
-
- terrainnormal=terrain.getNormal(coords.x,coords.z);
-
- if(animation[targetanimation].attack!=reversal){
- if(!isnormal(coords.x))
- coords=oldcoords;
- oldcoords=coords;
- }
-
- flatfacing=0;
- flatfacing.z=1;
-
- flatfacing=DoRotation(flatfacing,0,rotation,0);
- facing=flatfacing;
- ReflectVector(&facing,terrainnormal);
- Normalise(&facing);
-
- if(isRun()||targetanimation==sneakanim||targetanimation==rollanim||targetanimation==walkanim){
- if(onterrain)targettilt2=-facing.y*20;
- else targettilt2=0;
- }
- onterrain=0;
- if(!isRun()&&!animation[targetanimation].attack&&targetanimation!=getupfromfrontanim&&targetanimation!=getupfrombackanim&&targetanimation!=sneakanim)targettilt2=0;
- if(targetanimation==jumpupanim||targetanimation==jumpdownanim||isFlip()){
- flatvelocity=velocity;
- flatvelocity.y=0;
- flatvelspeed=findLength(&flatvelocity);
- targettilt=flatvelspeed*fast_sqrt(abs(velocity.y)*.7)*normaldotproduct(DoRotation(flatfacing,0,-90,0),flatvelocity);
- targettilt2=flatvelspeed*fast_sqrt(abs(velocity.y)*.7)*normaldotproduct(flatfacing,flatvelocity);
- if(velocity.y<0)targettilt2*=-1;
- if(velocity.y<0)targettilt*=-1;
- if(targettilt>25)targettilt=25;
- if(targettilt<-25)targettilt=-25;
- }
-
- if(targettilt2>45)targettilt2=45;
- if(targettilt2<-45)targettilt2=-45;
- if(abs(tilt2-targettilt2)<multiplier*400)tilt2=targettilt2;
- else if(tilt2>targettilt2){
- tilt2-=multiplier*400;
- }
- else if(tilt2<targettilt2){
- tilt2+=multiplier*400;
- }
- if(!animation[targetanimation].attack&&targetanimation!=getupfrombackanim&&targetanimation!=getupfromfrontanim){
- if(tilt2>25)tilt2=25;
- if(tilt2<-25)tilt2=-25;
- }
-
- if(!isnormal(targettilt)&&targettilt){
- targettilt=0;
- }
- if(!isnormal(targettilt2)&&targettilt2){
- targettilt2=0;
- }
-
- //Running velocity
- //if(!creature==wolftype||targetanimation==rabbitkickanim)
- if(targetanimation==rabbittackleanim){
- velocity+=facing*multiplier*speed*700*scale;
- velspeed=findLength(&velocity);
- if(velspeed>speed*65*scale){
- velocity/=velspeed;
- velspeed=speed*65*scale;
- velocity*=velspeed;
- }
- velocity.y+=gravity*multiplier*20;
- ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z));
- velspeed=findLength(&velocity);
- velocity=flatfacing*velspeed;
- }
- if(targetanimation!=rabbitrunninganim&&targetanimation!=wolfrunninganim){
- if(isRun()||targetanimation==rabbitkickanim){
- velocity+=facing*multiplier*speed*700*scale;
- velspeed=findLength(&velocity);
- if(velspeed>speed*45*scale){
- velocity/=velspeed;
- velspeed=speed*45*scale;
- velocity*=velspeed;
- }
- velocity.y+=gravity*multiplier*20;
- ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z));
- velspeed=findLength(&velocity);
- if(velspeed<speed*30*scale)velspeed=speed*30*scale;
- velocity=flatfacing*velspeed;
- }
- }
- else if(isRun()){
- velocity+=facing*multiplier*speed*700*scale;
- velspeed=findLength(&velocity);
- if(creature==rabbittype){
- if(velspeed>speed*55*scale){
- velocity/=velspeed;
- velspeed=speed*55*scale;
- velocity*=velspeed;
- }
- }
- if(creature==wolftype){
- if(velspeed>speed*75*scale){
- velocity/=velspeed;
- velspeed=speed*75*scale;
- velocity*=velspeed;
- }
- }
- velocity.y+=gravity*multiplier*20;
- ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z));
- velspeed=findLength(&velocity);
- velocity=flatfacing*velspeed;
- }
-
- if(targetanimation==rollanim&&animation[targetanimation].label[targetframe]!=6){
- velocity+=facing*multiplier*speed*700*scale;
- velspeed=findLength(&velocity);
- if(velspeed>speed*45*scale){
- velocity/=velspeed;
- velspeed=speed*45*scale;
- velocity*=velspeed;
- }
- velocity.y+=gravity*multiplier*20;
- ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z));
- velspeed=findLength(&velocity);
- velocity=flatfacing*velspeed;
- }
-
-
- /*if(currentanimation==rollanim&&(isCrouch()||isIdle())){
- velocity+=facing*multiplier*speed*700*scale;
- velspeed=findLength(&velocity);
- if(velspeed>speed*25*scale){
- velocity/=velspeed;
- velspeed=speed*25*scale;
- velocity*=velspeed;
- }
- velocity.y+=gravity*multiplier*20;
- ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z));
- velspeed=findLength(&velocity);
- velocity=flatfacing*velspeed;
- }*/
-
- if(targetanimation==sneakanim||targetanimation==walkanim){
- velocity+=facing*multiplier*speed*700*scale;
- velspeed=findLength(&velocity);
- if(velspeed>speed*12*scale){
- velocity/=velspeed;
- velspeed=speed*12*scale;
- velocity*=velspeed;
- }
- velocity.y+=gravity*multiplier*20;
- ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z));
- velspeed=findLength(&velocity);
- velocity=flatfacing*velspeed;
- }
-
- if((targetanimation==fightidleanim||targetanimation==knifefightidleanim)&&(currentanimation==bounceidleanim||currentanimation==hurtidleanim)){
- velocity+=facing*multiplier*speed*700*scale;
- velspeed=findLength(&velocity);
- if(velspeed>speed*2*scale){
- velocity/=velspeed;
- velspeed=speed*2*scale;
- velocity*=velspeed;
- }
- velocity.y+=gravity*multiplier*20;
- ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z));
- velspeed=findLength(&velocity);
- velocity=flatfacing*velspeed;
- }
-
-
- if((targetanimation==bounceidleanim||currentanimation==hurtidleanim)&&(currentanimation==fightidleanim||currentanimation==knifefightidleanim)){
- velocity-=facing*multiplier*speed*700*scale;
- velspeed=findLength(&velocity);
- if(velspeed>speed*2*scale){
- velocity/=velspeed;
- velspeed=speed*2*scale;
- velocity*=velspeed;
- }
- velocity.y+=gravity*multiplier*20;
- ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z));
- velspeed=findLength(&velocity);
- velocity=flatfacing*velspeed*-1;
- }
-
- if(targetanimation==fightsidestep){
- velocity+=DoRotation(facing*multiplier*speed*700*scale,0,-90,0);
- velspeed=findLength(&velocity);
- if(velspeed>speed*12*scale){
- velocity/=velspeed;
- velspeed=speed*12*scale;
- velocity*=velspeed;
- }
- velocity.y+=gravity*multiplier*20;
- ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z));
- velspeed=findLength(&velocity);
- velocity=DoRotation(flatfacing*velspeed,0,-90,0);
- }
-
- if(targetanimation==staggerbackhighanim){
- coords-=facing*multiplier*speed*16*scale;
- velocity=0;
- }
- if(targetanimation==staggerbackhardanim&&animation[staggerbackhardanim].label[targetframe]!=6){
- coords-=facing*multiplier*speed*20*scale;
- velocity=0;
- }
-
- if(targetanimation==backhandspringanim){
- //coords-=facing*multiplier*50*scale;
- velocity+=facing*multiplier*speed*700*scale*-1;
- velspeed=findLength(&velocity);
- if(velspeed>speed*50*scale){
- velocity/=velspeed;
- velspeed=speed*50*scale;
- velocity*=velspeed;
- }
- velocity.y+=gravity*multiplier*20;
- ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z));
- velspeed=findLength(&velocity);
- velocity=flatfacing*velspeed*-1;
- }
- if(targetanimation==dodgebackanim){
- //coords-=facing*multiplier*50*scale;
- velocity+=facing*multiplier*speed*700*scale*-1;
- velspeed=findLength(&velocity);
- if(velspeed>speed*60*scale){
- velocity/=velspeed;
- velspeed=speed*60*scale;
- velocity*=velspeed;
- }
- velocity.y+=gravity*multiplier*20;
- ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z));
- velspeed=findLength(&velocity);
- velocity=flatfacing*velspeed*-1;
- }
-
- if(targetanimation==jumpupanim||targetanimation==jumpdownanim||isFlip()){
- velspeed=findLength(&velocity);
- }
-
-
- if(targetanimation==jumpupanim||targetanimation==jumpdownanim||isFlip()){
- velocity.y+=gravity*multiplier;
- }
-
- if(targetanimation!=climbanim&&targetanimation!=hanganim&&!isWallJump())coords+=velocity*multiplier;
-
- if(coords.y<terrain.getHeight(coords.x,coords.z)&&(targetanimation==jumpdownanim||targetanimation==jumpupanim||isFlip())){
- if(isFlip()&&animation[targetanimation].label[targetframe]==7)RagDoll(0);
-
- if(targetanimation==jumpupanim){jumppower=-4;targetanimation=getIdle();}
- target=0;
- targetframe=0;
- onterrain=1;
-
- if(id==0){
- OPENAL_SetPaused(channels[whooshsound], true);
- OPENAL_SetVolume(channels[whooshsound], 0);
- }
-
- if(targetanimation==jumpdownanim||isFlip()){
- if(isFlip())jumppower=-4;
- targetanimation=getLanding();
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- PlaySoundEx( landsound, samp[landsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[landsound], gLoc, vel);
- OPENAL_SetVolume(channels[landsound], 128);
- OPENAL_SetPaused(channels[landsound], false);
-
- if(id==0){
- envsound[numenvsounds]=coords;
- envsoundvol[numenvsounds]=16;
- envsoundlife[numenvsounds]=.4;
- numenvsounds++;
- }
- }
- }
-
- if(targetanimation!=jumpupanim&&targetanimation!=jumpdownanim&&!isFlip()&&targetanimation!=climbanim&&targetanimation!=hanganim&&!isWallJump())coords.y+=gravity*multiplier*2;
- if(targetanimation!=jumpupanim&&targetanimation!=jumpdownanim&&!isFlip()&&coords.y<terrain.getHeight(coords.x,coords.z)){
- coords.y=terrain.getHeight(coords.x,coords.z);
- onterrain=1;
- }
-
-
- if(isIdle()||targetanimation==drawrightanim||targetanimation==drawleftanim||targetanimation==crouchdrawrightanim||targetanimation==crouchstabanim||targetanimation==swordgroundstabanim||isStop()||targetanimation==removeknifeanim||targetanimation==crouchremoveknifeanim||isLanding()||isCrouch()||animation[targetanimation].attack||(targetanimation==rollanim&&animation[targetanimation].label[targetframe]==6)){
- velspeed=findLength(&velocity);
- velocity.y=0;
- if(velspeed<multiplier*300*scale){
- velocity=0;
- } else velocity-=velocity/velspeed*multiplier*300*scale;
- if(velspeed>5&&(isLanding()||isLandhard())){
- skiddingdelay+=multiplier;
- if(skiddelay<=0){
- FootLand(0,.5);
- FootLand(1,.5);
- skiddelay=.02;
- }
- }
- else skiddingdelay=0;
- }
-
- if(isLandhard()){
- velspeed=findLength(&velocity);
- velocity.y=0;
- if(velspeed<multiplier*600*scale){
- velocity=0;
- } else velocity-=velocity/velspeed*multiplier*600*scale;
- velocity=0;
- if(velspeed>5&&(isLanding()||isLandhard())){
- skiddingdelay+=multiplier;
- if(skiddelay<=0){
- FootLand(0,.5);
- FootLand(1,.5);
- skiddelay=.02;
- }
- }
- else skiddingdelay=0;
- }
-
- if(skiddingdelay<0)skiddingdelay+=multiplier;
- if(skiddingdelay>.02&&!forwardkeydown&&!backkeydown&&!leftkeydown&&!rightkeydown&&!jumpkeydown&&isLanding()&&!landhard){
- skiddingdelay=-1;
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
- if(!onterrain||environment==grassyenvironment){
- PlaySoundEx( skidsound, samp[skidsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[skidsound], gLoc, vel);
- OPENAL_SetVolume(channels[skidsound], 128*velspeed/10);
- OPENAL_SetPaused(channels[skidsound], false);
- }
- else {
- PlaySoundEx( snowskidsound, samp[snowskidsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[snowskidsound], gLoc, vel);
- OPENAL_SetVolume(channels[snowskidsound], 128*velspeed/10);
- OPENAL_SetPaused(channels[snowskidsound], false);
- }
- }
-
- if(animation[targetanimation].attack==normalattack&&targetanimation!=rabbitkickanim&&!victim->skeleton.free){
- terrainnormal=victim->coords-coords;
- Normalise(&terrainnormal);
- targetrotation=-asin(0-terrainnormal.x);
- targetrotation*=360/6.28;
- if(terrainnormal.z<0)targetrotation=180-targetrotation;
- targettilt2=-asin(terrainnormal.y)*360/6.28;//*-70;
- }
-
- if(animation[targetanimation].attack==reversal&&targetanimation!=rabbittacklinganim){
- targetrotation=victim->targetrotation;
- }
- if(targetanimation==rabbittacklinganim){
- coords=victim->coords;
- }
- }
- skeleton.oldfree=skeleton.free;
-
- XYZ midterrain;
- midterrain=0;
- midterrain.x=terrain.size*terrain.scale/2;
- midterrain.z=terrain.size*terrain.scale/2;
- if(findDistancefastflat(&coords,&midterrain)>(terrain.size*terrain.scale/2-viewdistance)*(terrain.size*terrain.scale/2-viewdistance)){
- XYZ tempposit;
- tempposit=coords-midterrain;
- tempposit.y=0;
- Normalise(&tempposit);
- tempposit*=(terrain.size*terrain.scale/2-viewdistance);
- coords.x=tempposit.x+midterrain.x;
- coords.z=tempposit.z+midterrain.z;
- }