X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FPerson.cpp;h=e3e6b2ee5a6c307f6f822492c288f2a57fcfb4f3;hb=3d9b1d366f1b3607c40eb5bcbbe631794ed899de;hp=e495d776ae696ca8d24308a91febb9357fdf63d7;hpb=8866bcf90dba64f2fd6cecd6839b9b80988e46a6;p=lugaru.git diff --git a/Source/Person.cpp b/Source/Person.cpp index e495d77..e3e6b2e 100644 --- a/Source/Person.cpp +++ b/Source/Person.cpp @@ -21,15 +21,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /**> HEADER FILES <**/ #include "Person.h" +#include "openal_wrapper.h" +#include "Animation.h" +#include "Sounds.h" +#include "Awards.h" +#include "Game.h" extern float multiplier; -extern Animation animation[animation_count]; -extern FSOUND_SAMPLE *samp[100]; -extern int channels[100]; extern Terrain terrain; extern float gravity; extern int environment; -extern Sprites sprites; extern int detail; extern FRUSTUM frustum; extern XYZ viewer; @@ -47,15 +48,11 @@ extern bool osx; extern bool autoslomo; extern float camerashake; extern float woozy; -extern float terraindetail; extern float viewdistance; extern float blackout; extern int difficulty; -extern Weapons weapons; extern bool decals; extern float fadestart; -extern Person player[maxplayers]; -extern int numplayers; extern bool freeze; extern bool winfreeze; extern float flashamount,flashr,flashg,flashb; @@ -68,15 +65,10 @@ extern bool tiltweird; extern bool midweird; extern bool proportionweird; extern bool vertexweird[6]; -extern GLubyte texturearray[512*512*3]; extern XYZ envsound[30]; extern float envsoundvol[30]; extern float envsoundlife[30]; extern int numenvsounds; -extern int bonus; -extern float bonusvalue; -extern float bonustotal; -extern float bonustime; extern int tutoriallevel; extern float smoketex; extern int tutorialstage; @@ -84,112 +76,74 @@ extern bool reversaltrain; extern bool canattack; extern bool cananger; extern float damagedealt; -extern float damagetaken; extern int hostile; extern float hostiletime; -extern int mainmenu; - -extern int numfalls; -extern int numflipfail; -extern int numseen; -extern int numswordattack; -extern int numknifeattack; -extern int numunarmedattack; -extern int numescaped; -extern int numflipped; -extern int numwallflipped; -extern int numthrowkill; -extern int numafterkill; -extern int numreversals; -extern int numattacks; -extern int maxalarmed; extern int indialogue; extern bool gamestarted; -extern FSOUND_STREAM * strm[20]; -extern "C" void PlaySoundEx(int channel, FSOUND_SAMPLE *sptr, FSOUND_DSPUNIT *dsp, signed char startpaused); -extern "C" void PlayStreamEx(int chan, FSOUND_STREAM *sptr, FSOUND_DSPUNIT *dsp, signed char startpaused); - -void Person::CheckKick(){ - static XYZ relative; - static int i; - - float damagemult=1*power; - if(creature==wolftype)damagemult=2.5*power; - damagemult*=power; - - if(hasvictim) - if(targetanimation==rabbitkickanim&&victim&&victim!=this&¤tframe>=2&¤tanimation==rabbitkickanim){ - if(findDistancefast(&coords,&victim->coords)<1.2){ - if(!victim->skeleton.free){ - relative=velocity; - Normalise(&relative); - relative=coords+relative*1; - if(animation[victim->targetanimation].height!=lowheight){ - 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); - FSOUND_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel); - FSOUND_SetVolume(channels[heavyimpactsound], 128); - FSOUND_SetPaused(channels[heavyimpactsound], false); - } - victim->RagDoll(0); - relative=velocity; - relative.y=0; - Normalise(&relative); - for(i=0;iskeleton.num_joints;i++){ - victim->skeleton.joints[i].velocity+=relative*120*damagemult; - } - victim->Puff(neck); - victim->DoDamage(100*damagemult/victim->protectionhigh); - if(id==0)camerashake+=.4; +Person player[maxplayers]; - target=0; - currentframe=3; - targetanimation=backflipanim; - targetframe=4; - velocity=facing*-10; - velocity.y=5; - skeleton.free=0; - if(id==0)FSOUND_SetPaused(channels[whooshsound], false); - - //if(victim->damage>victim->damagetolerance){ - if(id==0){ - bonus=cannon; - bonustime=0; - bonusvalue=100; - } - //} - } - else if (victim->isCrouch()){ - targetanimation=rabbitkickreversedanim; - currentanimation=rabbitkickreversedanim; - victim->currentanimation=rabbitkickreversalanim; - victim->targetanimation=rabbitkickreversalanim; - targettilt2=0; - currentframe=0; - targetframe=1; - target=0; - velocity=0; - victim->oldcoords=victim->coords; - coords=victim->coords; - victim->targetrotation=targetrotation; - victim->victim=this; - } - } - } - } +void Person::CheckKick() +{ + if (!(hasvictim + && (animTarget == rabbitkickanim + && victim + && victim != this + && frameCurrent >= 2 + && animCurrent == rabbitkickanim) + && (distsq(&coords,&victim->coords) < 1.2) + && (!victim->skeleton.free))) + return; + + if (animation[victim->animTarget].height!=lowheight) + { + float damagemult = (creature == wolftype ? 2.5 : 1.) * power * power; + XYZ relative = velocity; + relative.y=0; + Normalise(&relative); + + victim->spurt=1; + DoBlood(.2,250); + if(tutoriallevel!=1) + emit_sound_at(heavyimpactsound, victim->coords); + victim->RagDoll(0); + for(int i=0;iskeleton.num_joints;i++){ + victim->skeleton.joints[i].velocity+=relative*120*damagemult; + } + victim->Puff(neck); + victim->DoDamage(100*damagemult/victim->protectionhigh); + if(id==0)camerashake+=.4; + + target=0; + frameCurrent=3; + animTarget=backflipanim; + frameTarget=4; + velocity=facing*-10; + velocity.y=5; + skeleton.free=0; + if(id==0) + resume_stream(whooshsound); + + award_bonus(id, cannon); + } + else if (victim->isCrouch()) + { + animTarget=rabbitkickreversedanim; + animCurrent=rabbitkickreversedanim; + victim->animCurrent=rabbitkickreversalanim; + victim->animTarget=rabbitkickreversalanim; + targettilt2=0; + frameCurrent=0; + frameTarget=1; + target=0; + velocity=0; + victim->oldcoords=victim->coords; + coords=victim->coords; + victim->targetyaw=targetyaw; + victim->victim=this; + } } void Person::CatchFire(){ @@ -199,64 +153,22 @@ void Person::CatchFire(){ howmany=abs(Random()%(skeleton.num_joints)); if(!skeleton.free)flatvelocity=velocity; if(skeleton.free)flatvelocity=skeleton.joints[howmany].velocity; - 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=DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position,0,0,tilt),tilt2,0,0),0,yaw,0)*scale+coords; if(skeleton.free)flatfacing=skeleton.joints[howmany].position*scale+coords; - sprites.MakeSprite(flamesprite, flatfacing,flatvelocity, 1,1,1, 2, 1); + Sprite::MakeSprite(flamesprite, flatfacing,flatvelocity, 1,1,1, 2, 1); } onfiredelay=0.5; - 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( firestartsound, samp[firestartsound], NULL, true); - FSOUND_3D_SetAttributes(channels[firestartsound], gLoc, vel); - FSOUND_SetVolume(channels[firestartsound], 256); - FSOUND_SetPaused(channels[firestartsound], false); - - vel[0]=velocity.x; - vel[1]=velocity.y; - vel[2]=velocity.z; - //PlaySoundEx( firesound, samp[firesound], NULL, true); - PlayStreamEx( stream_firesound, strm[stream_firesound], NULL, true); - FSOUND_3D_SetAttributes(channels[stream_firesound], gLoc, vel); - FSOUND_SetVolume(channels[stream_firesound], 256); - FSOUND_SetPaused(channels[stream_firesound], false); + emit_sound_at(firestartsound, coords); + + emit_stream_at(stream_firesound, coords); flamedelay=0; onfire=1; } -bool Person::isIdle(){ - if(targetanimation==sleepanim||targetanimation==sitanim||targetanimation==talkidleanim||targetanimation==hurtidleanim||targetanimation==bounceidleanim||targetanimation==talkidleanim||targetanimation==fightidleanim||targetanimation==knifefightidleanim||targetanimation==swordfightidleanim||targetanimation==swordfightidlebothanim||targetanimation==fightsidestep||targetanimation==wolfidle)return 1; - else return 0; -} - -bool Person::isSitting(){ - if(targetanimation==sitanim)return 1; - if(targetanimation==sitwallanim)return 1; - else return 0; -} - -bool Person::isSleeping(){ - if(targetanimation==sleepanim)return 1; - if(targetanimation==dead1anim)return 1; - if(targetanimation==dead2anim)return 1; - if(targetanimation==dead3anim)return 1; - if(targetanimation==dead4anim)return 1; - else return 0; -} - -bool Person::wasIdle(){ - if(currentanimation==sleepanim||currentanimation==talkidleanim||currentanimation==sitanim||currentanimation==hurtidleanim||currentanimation==bounceidleanim||currentanimation==fightidleanim||currentanimation==swordfightidleanim||currentanimation==swordfightidlebothanim||currentanimation==knifefightidleanim||currentanimation==fightsidestep||currentanimation==wolfidle)return 1; - else return 0; -} int Person::getIdle(){ if(indialogue!=-1&&howactive==typeactive&&creature==rabbittype)return talkidleanim; if(hasvictim&&victim!=this/*||(id==0&&attackkeydown)*/)if(/*(id==0&&attackkeydown)||*/(!victim->dead&&victim->aitype!=passivetype&&victim->aitype!=searchtype&&aitype!=passivetype&&aitype!=searchtype&&victim->idweaponactive!=-1)return swordfightidlebothanim; - if(weapons.type[weaponids[weaponactive]]==sword)return swordfightidleanim; - if(weapons.type[weaponids[weaponactive]]==staff)return swordfightidleanim; + if(weapons[weaponids[weaponactive]].getType()==knife) + return knifefightidleanim; + if(weapons[weaponids[weaponactive]].getType()==sword&&victim->weaponactive!=-1) + return swordfightidlebothanim; + if(weapons[weaponids[weaponactive]].getType()==sword) + return swordfightidleanim; + if(weapons[weaponids[weaponactive]].getType()==staff) + return swordfightidleanim; } if(aitype!=playercontrolled&&stunned<=0&&creature!=wolftype&&!pause)return fightsidestep; } @@ -285,32 +201,12 @@ int Person::getIdle(){ return 0; } -bool Person::isCrouch(){ - if(targetanimation==crouchanim||targetanimation==wolfcrouchanim)return 1; - else return 0; -} - - -bool Person::wasCrouch(){ - if(currentanimation==crouchanim||currentanimation==wolfcrouchanim)return 1; - else return 0; -} int Person::getCrouch(){ if(creature==rabbittype)return crouchanim; if(creature==wolftype)return wolfcrouchanim; return 0; } -bool Person::isRun(){ - if(targetanimation==runanim||targetanimation==wolfrunanim||targetanimation==wolfrunninganim||targetanimation==rabbitrunninganim)return 1; - else return 0; -} - - -bool Person::wasRun(){ - if(currentanimation==runanim||currentanimation==wolfrunanim||currentanimation==wolfrunninganim||currentanimation==rabbitrunninganim)return 1; - else return 0; -} int Person::getRun(){ if(creature==rabbittype&&(!superruntoggle||weaponactive!=-1))return runanim; if(creature==wolftype&&(!superruntoggle))return wolfrunanim; @@ -320,99 +216,31 @@ int Person::getRun(){ return 0; } -bool Person::isStop(){ - if(targetanimation==stopanim||targetanimation==wolfstopanim)return 1; - else return 0; -} - - -bool Person::wasStop(){ - if(currentanimation==stopanim||currentanimation==wolfstopanim)return 1; - else return 0; -} int Person::getStop(){ if(creature==rabbittype)return stopanim; if(creature==wolftype)return wolfstopanim; return 0; } - -bool Person::isLanding(){ - if(targetanimation==landanim||targetanimation==wolflandanim)return 1; - else return 0; -} - - -bool Person::wasLanding(){ - if(currentanimation==landanim||currentanimation==wolflandanim)return 1; - else return 0; -} int Person::getLanding(){ if(creature==rabbittype)return landanim; if(creature==wolftype)return wolflandanim; return 0; } - -bool Person::isLandhard(){ - if(targetanimation==landhardanim||targetanimation==wolflandhardanim)return 1; - else return 0; -} - - -bool Person::wasLandhard(){ - if(currentanimation==landhardanim||currentanimation==wolflandhardanim)return 1; - else return 0; -} int Person::getLandhard(){ if(creature==rabbittype)return landhardanim; if(creature==wolftype)return wolflandhardanim; return 0; } - -bool Person::isFlip(){ - if(targetanimation==flipanim||targetanimation==frontflipanim||targetanimation==backflipanim||targetanimation==rightflipanim||targetanimation==leftflipanim||targetanimation==walljumprightkickanim||targetanimation==walljumpleftkickanim)return 1; - else return 0; -} - -bool Person::wasFlip(){ - if(currentanimation==flipanim||currentanimation==frontflipanim||currentanimation==backflipanim||currentanimation==rightflipanim||currentanimation==leftflipanim||currentanimation==walljumprightkickanim||currentanimation==walljumpleftkickanim)return 1; - else return 0; -} - -bool Person::isWallJump(){ - if(targetanimation==walljumpfrontanim||targetanimation==walljumpbackanim||targetanimation==walljumpleftanim||targetanimation==walljumprightanim)return 1; - else return 0; -} - -void SolidHitBonus(); -void SolidHitBonus(){ - if(bonustime<1.5&&(bonus==fourxcombo||bonus==megacombo)){ - bonus=megacombo; - bonustime=0; - bonusvalue=160; - } - else if(bonustime<1.5&&bonus==threexcombo){ - bonus=fourxcombo; - bonustime=0; - bonusvalue=80; - } - else if(bonustime<1.5&&bonus==twoxcombo){ - bonus=threexcombo; - bonustime=0; - bonusvalue=40; - } - else if(bonustime<1.5&&bonus==solidhit){ - bonus=twoxcombo; - bonustime=0; - bonusvalue=20; - } - else { - bonus=solidhit; - bonustime=0; - bonusvalue=10; - } +static void +SolidHitBonus(int playerid) +{ + if (bonustime < 1.5 && bonus >= solidhit && bonus <= megacombo) + award_bonus(playerid, bonus == megacombo ? bonus : bonus + 1); + else + award_bonus(playerid, solidhit); } void Person::DoBlood(float howmuch,int which){ @@ -426,44 +254,41 @@ void Person::DoBlood(float howmuch,int which){ bloodvel=0; if(!skeleton.free){ bloodvel.z=10; - bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale; + bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale; } if(skeleton.free){ bloodvel-=DoRotation(skeleton.forward*10*scale,((float)(Random()%100))/4,((float)(Random()%100))/4,0); } - if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale; + if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/4,yaw+((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){ - sprites.MakeSprite(bloodsprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .05, 1); - sprites.MakeSprite(bloodflamesprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .3, 1); + Sprite::MakeSprite(bloodsprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .05, 1); + Sprite::MakeSprite(bloodflamesprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .3, 1); } if(!skeleton.free){ - sprites.MakeSprite(bloodsprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .05, 1); - sprites.MakeSprite(bloodflamesprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .3, 1); + Sprite::MakeSprite(bloodsprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .05, 1); + Sprite::MakeSprite(bloodflamesprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .3, 1); } } if(Random()%2==0) for(int i=0;i<3;i++){ if(Random()%2!=0){ bloodvel=0; - if(!skeleton.free){ - bloodvel.z=10; - bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale; - } - if(skeleton.free){ + if(skeleton.free) { bloodvel-=DoRotation(skeleton.forward*10*scale,((float)(Random()%100))/4,((float)(Random()%100))/4,0); + bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale; + } else { + bloodvel.z=10; + bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale; + bloodvel+=DoRotation(velocity,((float)(Random()%100))/4,((float)(Random()%100))/4,0)*scale; } - if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].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; bloodvel*=.2; if(skeleton.free){ - sprites.MakeSprite(splintersprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .05, 1); - sprites.special[sprites.numsprites-1]=3; - } - if(!skeleton.free){ - sprites.MakeSprite(splintersprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .05, 1); - sprites.special[sprites.numsprites-1]=3; + Sprite::MakeSprite(splintersprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .05, 1); + } else { + Sprite::MakeSprite(splintersprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .05, 1); } + Sprite::setLastSpriteSpecial(3); } } } @@ -471,22 +296,21 @@ void Person::DoBlood(float howmuch,int which){ bleeding=howmuch+(float)abs(Random()%100)/200-.25; bleedxint=0; bleedyint=0; - int texdetailint=realtexdetail; if(creature==rabbittype) while(bloodText[bleedxint*512*3+bleedyint*3+0]>which+4||bloodText[bleedxint*512*3+bleedyint*3+0]500||bleedyint>500){ bleedxint=abs(Random()%512); bleedyint=abs(Random()%512); } - if(creature==wolftype) - while(wolfbloodText[bleedxint*512*3+bleedyint*3+0]>which+4||wolfbloodText[bleedxint*512*3+bleedyint*3+0]500||bleedyint>500){ - bleedxint=abs(Random()%512); - bleedyint=abs(Random()%512); - } - bleedy=bleedxint; - bleedx=bleedyint; - bleedy/=realtexdetail; - bleedx/=realtexdetail; - direction=abs(Random()%2)*2-1; + if(creature==wolftype) + while(wolfbloodText[bleedxint*512*3+bleedyint*3+0]>which+4||wolfbloodText[bleedxint*512*3+bleedyint*3+0]500||bleedyint>500){ + bleedxint=abs(Random()%512); + bleedyint=abs(Random()%512); + } + bleedy=bleedxint; + bleedx=bleedyint; + bleedy/=realtexdetail; + bleedx/=realtexdetail; + direction=abs(Random()%2)*2-1; } } @@ -501,14 +325,6 @@ void Person::DoBloodBig(float howmuch,int which){ if(tutoriallevel!=1||id==0) if(aitype!=playercontrolled&&howmuch>0){ 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(creature==wolftype){ int i=abs(Random()%2); @@ -530,12 +346,8 @@ void Person::DoBloodBig(float howmuch,int which){ //if(i==2)whichsound=rabbitpain2sound; } - if(whichsound!=-1){ - PlaySoundEx( whichsound, samp[whichsound], NULL, true); - FSOUND_3D_SetAttributes(channels[whichsound], gLoc, vel); - FSOUND_SetVolume(channels[whichsound], 512); - FSOUND_SetPaused(channels[whichsound], false); - } + if(whichsound!=-1) + emit_sound_at(whichsound, coords); } if(id==0&&howmuch>0){ @@ -553,20 +365,20 @@ void Person::DoBloodBig(float howmuch,int which){ bloodvel=0; if(!skeleton.free){ bloodvel.z=10; - bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale; + bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale; } if(skeleton.free){ bloodvel-=DoRotation(skeleton.forward*10*scale,((float)(Random()%100))/4,((float)(Random()%100))/4,0); } - if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale; + if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/4,yaw+((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){ - sprites.MakeSprite(bloodsprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .05, 1); - sprites.MakeSprite(bloodflamesprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .3, 1); + Sprite::MakeSprite(bloodsprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .05, 1); + Sprite::MakeSprite(bloodflamesprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .3, 1); } if(!skeleton.free){ - sprites.MakeSprite(bloodsprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .05, 1); - sprites.MakeSprite(bloodflamesprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .3, 1); + Sprite::MakeSprite(bloodsprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .05, 1); + Sprite::MakeSprite(bloodflamesprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .3, 1); } } } @@ -588,9 +400,7 @@ void Person::DoBloodBig(float howmuch,int which){ offsetx=Random()%20; } if(which==220||which==215){ - //offsety=Random()%20; offsetx=20; - //offsetx=abs(Random()%80); } @@ -665,9 +475,8 @@ void Person::DoBloodBig(float howmuch,int which){ } } } - glBindTexture(GL_TEXTURE_2D,skeleton.drawmodel.textureptr); - if(detail!=2||osx)DoMipmaps(5,0,0,skeleton.skinsize,skeleton.skinsize); - else DoMipmaps(0,startx/realtexdetail,endx/realtexdetail,starty/realtexdetail,endy/realtexdetail); + skeleton.drawmodel.textureptr.bind(); + DoMipmaps(); bleedxint=0; bleedyint=0; @@ -707,7 +516,7 @@ void Person::DoBloodBig(float howmuch,int which){ } bool Person::DoBloodBigWhere(float howmuch,int which, XYZ where){ - static int bleedxint,bleedyint,i,j; + static int i,j; static XYZ bloodvel; static XYZ startpoint,endpoint,colpoint,movepoint; static float rotationpoint; @@ -721,7 +530,7 @@ bool Person::DoBloodBigWhere(float howmuch,int which, XYZ where){ if(bloodtoggle&&decals&&tutoriallevel!=1){ where-=coords; - if(!skeleton.free)where=DoRotation(where,0,-rotation,0); + if(!skeleton.free)where=DoRotation(where,0,-yaw,0); //where=scale; startpoint=where; startpoint.y+=100; @@ -743,9 +552,9 @@ bool Person::DoBloodBigWhere(float howmuch,int which, XYZ where){ t = dotproduct(&temp,&N)/findLength(&N); r = 1 - (s + t);*/ - bary.x=findDistancefast(&p0,&p1); - bary.y=findDistancefast(&p0,&p2); - bary.z=findDistancefast(&p0,&p3); + bary.x=distsq(&p0,&p1); + bary.y=distsq(&p0,&p2); + bary.z=distsq(&p0,&p3); total=bary.x+bary.y+bary.z; bary.x/=total; @@ -780,20 +589,20 @@ bool Person::DoBloodBigWhere(float howmuch,int which, XYZ where){ bloodvel=0; if(!skeleton.free){ bloodvel.z=10; - bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale; + bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale; } if(skeleton.free){ bloodvel-=DoRotation(skeleton.forward*10*scale,((float)(Random()%100))/4,((float)(Random()%100))/4,0); } - if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/4,rotation+((float)(Random()%100))/4,0)*scale; + if(skeleton.free)bloodvel+=DoRotation(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/4,yaw+((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){ - sprites.MakeSprite(bloodsprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .05, 1); - sprites.MakeSprite(bloodflamesprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .3, 1); + Sprite::MakeSprite(bloodsprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .05, 1); + Sprite::MakeSprite(bloodflamesprite, skeleton.joints[skeleton.jointlabels[head]].position*scale+coords,bloodvel, 1,1,1, .3, 1); } if(!skeleton.free){ - sprites.MakeSprite(bloodsprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .05, 1); - sprites.MakeSprite(bloodflamesprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .3, 1); + Sprite::MakeSprite(bloodsprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .05, 1); + Sprite::MakeSprite(bloodflamesprite, DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .3, 1); } } } @@ -894,9 +703,8 @@ bool Person::DoBloodBigWhere(float howmuch,int which, XYZ where){ } } } - glBindTexture(GL_TEXTURE_2D,skeleton.drawmodel.textureptr); - if(detail!=2||osx)DoMipmaps(5,0,0,skeleton.skinsize,skeleton.skinsize); - else DoMipmaps(0,startx/realtexdetail,endx/realtexdetail,starty/realtexdetail,endy/realtexdetail); + skeleton.drawmodel.textureptr.bind(); + DoMipmaps(); bleedy=(1+coordsy)*512; bleedx=coordsx*512; @@ -926,427 +734,328 @@ bool Person::DoBloodBigWhere(float howmuch,int which, XYZ where){ } -void Person::DoMipmaps(int howmanylevels,float startx, float endx, float starty, float endy){ - int i,j,k; - static float temp; - static int bytesPerPixel=3; - static int newsize,totalsize,rowsize,bigstep,smallstep,sum; - static int newstartx,newstarty,newendx,newendy; - static int newnewstartx,newnewstarty,newnewendx,newnewendy; - static int which; - static float sizemult; - /* - for(i=0;iskeleton.skinsize-1)endx=skeleton.skinsize-1; - if(endy>skeleton.skinsize-1)endy=skeleton.skinsize-1; - if((endx>startx&&endy>starty)||howmanylevels){ - - newstartx=startx; - newstarty=starty; - newendx=endx; - newendy=endy; - - for(i=startx;iaitype == playercontrolled + || hostiletime > 1 + || staggerdelay <= 0) + && victim->animTarget != jumpupanim + && victim->animTarget != jumpdownanim + && (tutoriallevel != 1 || cananger) + && hostile)) + return; + + if (normaldotproduct (victim->facing, victim->coords-coords) > 0 + && (victim->id != 0 || difficulty >= 2) + && (creature != wolftype || victim->creature == wolftype)) + return; + + if(animTarget==sweepanim){ + animTarget=sweepreversedanim; + animCurrent=sweepreversedanim; + victim->animCurrent=sweepreversalanim; + victim->animTarget=sweepreversalanim; + } + if(animTarget==spinkickanim){ + animTarget=spinkickreversedanim; + animCurrent=spinkickreversedanim; + victim->animCurrent=spinkickreversalanim; + victim->animTarget=spinkickreversalanim; + } + if(animTarget==upunchanim||animTarget==rabbittacklinganim){ + if(animTarget==rabbittacklinganim){ + frameCurrent=6; + frameTarget=7; + victim->frameCurrent=6; + victim->frameTarget=7; + } + animTarget=upunchreversedanim; + animCurrent=upunchreversedanim; + victim->animCurrent=upunchreversalanim; + victim->animTarget=upunchreversalanim; + } + if(animTarget==staffhitanim&&distsq(&victim->coords,&coords)<2&&((victim->id==0&&victim->crouchkeydown)||Random()%4==0)){ + if(victim->weaponactive!=-1){ + victim->throwtogglekeydown=1; + weapons[victim->weaponids[0]].owner=-1; + weapons[victim->weaponids[0]].velocity=victim->velocity*.2; + if(weapons[victim->weaponids[0]].velocity.x==0)weapons[victim->weaponids[0]].velocity.x=.1; + weapons[victim->weaponids[0]].tipvelocity=weapons[victim->weaponids[0]].velocity; + weapons[victim->weaponids[0]].missed=1; + weapons[victim->weaponids[0]].freetime=0; + weapons[victim->weaponids[0]].firstfree=1; + weapons[victim->weaponids[0]].physics=1; + victim->num_weapons--; + if(victim->num_weapons){ + victim->weaponids[0]=victim->weaponids[victim->num_weapons]; + if(victim->weaponstuck==victim->num_weapons)victim->weaponstuck=0; + } + + victim->weaponactive=-1; + for(int j=0;janimCurrent=staffhitreversalanim; + victim->animTarget=staffhitreversalanim; + } + if(animTarget==staffspinhitanim&&distsq(&victim->coords,&coords)<2&&((victim->id==0&&victim->crouchkeydown)||Random()%2==0)){ + if(victim->weaponactive!=-1){ + victim->throwtogglekeydown=1; + weapons[victim->weaponids[0]].owner=-1; + weapons[victim->weaponids[0]].velocity=victim->velocity*.2; + if(weapons[victim->weaponids[0]].velocity.x==0)weapons[victim->weaponids[0]].velocity.x=.1; + weapons[victim->weaponids[0]].tipvelocity=weapons[victim->weaponids[0]].velocity; + weapons[victim->weaponids[0]].missed=1; + weapons[victim->weaponids[0]].freetime=0; + weapons[victim->weaponids[0]].firstfree=1; + weapons[victim->weaponids[0]].physics=1; + victim->num_weapons--; + if(victim->num_weapons){ + victim->weaponids[0]=victim->weaponids[victim->num_weapons]; + if(victim->weaponstuck==victim->num_weapons)victim->weaponstuck=0; + } + + victim->weaponactive=-1; + for(int j=0;janimCurrent=staffspinhitreversalanim; + victim->animTarget=staffspinhitreversalanim; + } + if(animTarget==swordslashanim&&distsq(&victim->coords,&coords)<2&&((victim->id==0&&victim->crouchkeydown)||Random()%4==0)){ + if(victim->weaponactive!=-1){ + victim->throwtogglekeydown=1; + weapons[victim->weaponids[0]].owner=-1; + weapons[victim->weaponids[0]].velocity=victim->velocity*.2; + if(weapons[victim->weaponids[0]].velocity.x==0)weapons[victim->weaponids[0]].velocity.x=.1; + weapons[victim->weaponids[0]].tipvelocity=weapons[victim->weaponids[0]].velocity; + weapons[victim->weaponids[0]].missed=1; + weapons[victim->weaponids[0]].freetime=0; + weapons[victim->weaponids[0]].firstfree=1; + weapons[victim->weaponids[0]].physics=1; + victim->num_weapons--; + if(victim->num_weapons){ + victim->weaponids[0]=victim->weaponids[victim->num_weapons]; + if(victim->weaponstuck==victim->num_weapons)victim->weaponstuck=0; + } + + victim->weaponactive=-1; + for(int j=0;janimCurrent=swordslashreversalanim; + victim->animTarget=swordslashreversalanim; + } + if(animTarget==knifeslashstartanim&&distsq(&victim->coords,&coords)<2&&(victim->id==0||Random()%4==0)){ + if(victim->weaponactive!=-1){ + victim->throwtogglekeydown=1; + weapons[victim->weaponids[0]].owner=-1; + weapons[victim->weaponids[0]].velocity=victim->velocity*.2; + if(weapons[victim->weaponids[0]].velocity.x==0)weapons[victim->weaponids[0]].velocity.x=.1; + weapons[victim->weaponids[0]].tipvelocity=weapons[victim->weaponids[0]].velocity; + weapons[victim->weaponids[0]].missed=1; + weapons[victim->weaponids[0]].freetime=0; + weapons[victim->weaponids[0]].firstfree=1; + weapons[victim->weaponids[0]].physics=1; + victim->num_weapons--; + if(victim->num_weapons){ + victim->weaponids[0]=victim->weaponids[victim->num_weapons]; + if(victim->weaponstuck==victim->num_weapons)victim->weaponstuck=0; + } + + victim->weaponactive=-1; + for(int j=0;janimCurrent=knifeslashreversalanim; + victim->animTarget=knifeslashreversalanim; + } + if(animTarget!=knifeslashstartanim&&animTarget!=staffhitanim&&animTarget!=staffspinhitanim&&animTarget!=winduppunchanim&&animTarget!=wolfslapanim&&animTarget!=swordslashanim&&animTarget!=swordslashanim){ + victim->targettilt2=targettilt2; + victim->frameCurrent=frameCurrent; + victim->frameTarget=frameTarget; + victim->target=target; + victim->velocity=0; + victim->oldcoords=victim->coords; + victim->coords=coords; + victim->targetyaw=targetyaw; + victim->yaw=targetyaw; + victim->victim=this; + } + if(animTarget==winduppunchanim){ + animTarget=winduppunchblockedanim; + victim->animTarget=blockhighleftanim; + victim->frameTarget=1; + victim->target=.5; + victim->victim=this; + victim->targetyaw=targetyaw+180; + } + if(animTarget==wolfslapanim){ + animTarget=winduppunchblockedanim; + victim->animTarget=blockhighleftanim; + victim->frameTarget=1; + victim->target=.5; + victim->victim=this; + victim->targetyaw=targetyaw+180; + } + if((animTarget==swordslashanim||animTarget==staffhitanim||animTarget==staffspinhitanim)&&victim->weaponactive!=-1){ + animTarget=swordslashparriedanim; + parriedrecently=.4; + victim->parriedrecently=0; + victim->animTarget=swordslashparryanim; + victim->frameTarget=1; + victim->target=.5; + victim->victim=this; + victim->targetyaw=targetyaw+180; + + if(abs(Random()%20)==0||weapons[victim->weaponids[victim->weaponactive]].getType()==knife){ + if(victim->weaponactive!=-1){ + if(weapons[victim->weaponids[0]].getType()==staff||weapons[weaponids[0]].getType()==staff) { + if(weapons[victim->weaponids[0]].getType()==staff) + weapons[victim->weaponids[0]].damage+=.2+float(abs(Random()%100)-50)/250; + if(weapons[weaponids[0]].getType()==staff) + weapons[weaponids[0]].damage+=.2+float(abs(Random()%100)-50)/250; + emit_sound_at(swordstaffsound, victim->coords); } - /*for(j=1;j<=howmanylevels;j++){ - if(j==1)texpointer=&skeleton.skinText[0]; - else texpointer=&texture[0]; - - totalsize=int( newsize*newsize*bytesPerPixel); - rowsize=int( newsize*bytesPerPixel ); - bigstep=bytesPerPixel*newsize*2; - smallstep=bytesPerPixel*2; - - which=0; - - - - glTexSubImage2D(GL_TEXTURE_2D,j,0,0,newsize/2,newsize/2,GL_RGB,GL_UNSIGNED_BYTE,texture); - newsize/=2; - }*/ + else{ + emit_sound_at(metalhitsound, victim->coords); + } + } + XYZ aim; + victim->Puff(righthand); + victim->target=0; + victim->frameTarget=0; + victim->animTarget=staggerbackhighanim; + victim->targetyaw=targetyaw+180; + victim->target=0; + weapons[victim->weaponids[0]].owner=-1; + aim=DoRotation(facing,0,90,0)*21; + aim.y+=7; + weapons[victim->weaponids[0]].velocity=aim*-.2; + weapons[victim->weaponids[0]].tipvelocity=aim; + weapons[victim->weaponids[0]].missed=1; + weapons[victim->weaponids[0]].hitsomething=0; + weapons[victim->weaponids[0]].freetime=0; + weapons[victim->weaponids[0]].firstfree=1; + weapons[victim->weaponids[0]].physics=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(int i=0;iweaponids[0]].getType()==staff||weapons[weaponids[0]].getType()==staff){ + if(weapons[victim->weaponids[0]].getType()==staff)weapons[victim->weaponids[0]].damage+=.2+float(abs(Random()%100)-50)/250; + if(weapons[weaponids[0]].getType()==staff)weapons[weaponids[0]].damage+=.2+float(abs(Random()%100)-50)/250; + + emit_sound_at(swordstaffsound, coords); } -} - - -void Person::Reverse(){ - if(victim->aitype==playercontrolled||hostiletime>1) - if(victim->targetanimation!=jumpupanim&&victim->targetanimation!=jumpdownanim&&((tutoriallevel!=1||cananger)&&hostile)){ - if(normaldotproduct(victim->facing,victim->coords-coords)>0&&!(victim->id==0&&difficulty<2)&&(creature!=wolftype||victim->creature==wolftype))return; - if(victim->aitype!=playercontrolled&&staggerdelay>0)return; - if(targetanimation==sweepanim){ - targetanimation=sweepreversedanim; - currentanimation=sweepreversedanim; - victim->currentanimation=sweepreversalanim; - victim->targetanimation=sweepreversalanim; - } - if(targetanimation==spinkickanim){ - targetanimation=spinkickreversedanim; - currentanimation=spinkickreversedanim; - victim->currentanimation=spinkickreversalanim; - victim->targetanimation=spinkickreversalanim; - } - if(targetanimation==upunchanim||targetanimation==rabbittacklinganim){ - if(targetanimation==rabbittacklinganim){ - currentframe=6; - targetframe=7; - victim->currentframe=6; - victim->targetframe=7; - } - targetanimation=upunchreversedanim; - currentanimation=upunchreversedanim; - victim->currentanimation=upunchreversalanim; - victim->targetanimation=upunchreversalanim; - } - if(targetanimation==staffhitanim&&findDistancefast(&victim->coords,&coords)<2&&((victim->id==0&&victim->crouchkeydown)||Random()%4==0)){ - if(victim->weaponactive!=-1){ - victim->throwtogglekeydown=1; - weapons.owner[victim->weaponids[0]]=-1; - weapons.velocity[victim->weaponids[0]]=victim->velocity*.2; - if(weapons.velocity[victim->weaponids[0]].x==0)weapons.velocity[victim->weaponids[0]].x=.1; - weapons.tipvelocity[victim->weaponids[0]]=weapons.velocity[victim->weaponids[0]]; - weapons.missed[victim->weaponids[0]]=1; - 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[victim->num_weapons]; - if(victim->weaponstuck==victim->num_weapons)victim->weaponstuck=0; - } - - victim->weaponactive=-1; - for(int j=0;jcurrentanimation=staffhitreversalanim; - victim->targetanimation=staffhitreversalanim; - } - if(targetanimation==staffspinhitanim&&findDistancefast(&victim->coords,&coords)<2&&((victim->id==0&&victim->crouchkeydown)||Random()%2==0)){ - if(victim->weaponactive!=-1){ - victim->throwtogglekeydown=1; - weapons.owner[victim->weaponids[0]]=-1; - weapons.velocity[victim->weaponids[0]]=victim->velocity*.2; - if(weapons.velocity[victim->weaponids[0]].x==0)weapons.velocity[victim->weaponids[0]].x=.1; - weapons.tipvelocity[victim->weaponids[0]]=weapons.velocity[victim->weaponids[0]]; - weapons.missed[victim->weaponids[0]]=1; - 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[victim->num_weapons]; - if(victim->weaponstuck==victim->num_weapons)victim->weaponstuck=0; - } - - victim->weaponactive=-1; - for(int j=0;jcurrentanimation=staffspinhitreversalanim; - victim->targetanimation=staffspinhitreversalanim; - } - if(targetanimation==swordslashanim&&findDistancefast(&victim->coords,&coords)<2&&((victim->id==0&&victim->crouchkeydown)||Random()%4==0)){ - if(victim->weaponactive!=-1){ - victim->throwtogglekeydown=1; - weapons.owner[victim->weaponids[0]]=-1; - weapons.velocity[victim->weaponids[0]]=victim->velocity*.2; - if(weapons.velocity[victim->weaponids[0]].x==0)weapons.velocity[victim->weaponids[0]].x=.1; - weapons.tipvelocity[victim->weaponids[0]]=weapons.velocity[victim->weaponids[0]]; - weapons.missed[victim->weaponids[0]]=1; - 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[victim->num_weapons]; - if(victim->weaponstuck==victim->num_weapons)victim->weaponstuck=0; - } - - victim->weaponactive=-1; - for(int j=0;jcurrentanimation=swordslashreversalanim; - victim->targetanimation=swordslashreversalanim; - } - if(targetanimation==knifeslashstartanim&&findDistancefast(&victim->coords,&coords)<2&&(victim->id==0||Random()%4==0)){ - if(victim->weaponactive!=-1){ - victim->throwtogglekeydown=1; - weapons.owner[victim->weaponids[0]]=-1; - weapons.velocity[victim->weaponids[0]]=victim->velocity*.2; - if(weapons.velocity[victim->weaponids[0]].x==0)weapons.velocity[victim->weaponids[0]].x=.1; - weapons.tipvelocity[victim->weaponids[0]]=weapons.velocity[victim->weaponids[0]]; - weapons.missed[victim->weaponids[0]]=1; - 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[victim->num_weapons]; - if(victim->weaponstuck==victim->num_weapons)victim->weaponstuck=0; - } - - victim->weaponactive=-1; - for(int j=0;jcurrentanimation=knifeslashreversalanim; - victim->targetanimation=knifeslashreversalanim; - } - if(targetanimation!=knifeslashstartanim&&targetanimation!=staffhitanim&&targetanimation!=staffspinhitanim&&targetanimation!=winduppunchanim&&targetanimation!=wolfslapanim&&targetanimation!=swordslashanim&&targetanimation!=swordslashanim){ - victim->targettilt2=targettilt2; - victim->currentframe=currentframe; - victim->targetframe=targetframe; - victim->target=target; - victim->velocity=0; - victim->oldcoords=victim->coords; - victim->coords=coords; - victim->targetrotation=targetrotation; - victim->rotation=targetrotation; - victim->victim=this; - } - if(targetanimation==winduppunchanim){ - targetanimation=winduppunchblockedanim; - victim->targetanimation=blockhighleftanim; - victim->targetframe=1; - victim->target=.5; - victim->victim=this; - victim->targetrotation=targetrotation+180; - } - if(targetanimation==wolfslapanim){ - targetanimation=winduppunchblockedanim; - victim->targetanimation=blockhighleftanim; - victim->targetframe=1; - victim->target=.5; - victim->victim=this; - victim->targetrotation=targetrotation+180; - } - if((targetanimation==swordslashanim||targetanimation==staffhitanim||targetanimation==staffspinhitanim)&&victim->weaponactive!=-1){ - targetanimation=swordslashparriedanim; - parriedrecently=.4; - victim->parriedrecently=0; - victim->targetanimation=swordslashparryanim; - victim->targetframe=1; - victim->target=.5; - victim->victim=this; - victim->targetrotation=targetrotation+180; - - if(abs(Random()%20)==0||weapons.type[victim->weaponids[victim->weaponactive]]==knife){ - 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); - FSOUND_3D_SetAttributes(channels[swordstaffsound], gLoc, vel); - FSOUND_SetVolume(channels[swordstaffsound], 512); - FSOUND_SetPaused(channels[swordstaffsound], false); - } - else{ - PlaySoundEx( metalhitsound, samp[metalhitsound], NULL, true); - FSOUND_3D_SetAttributes(channels[metalhitsound], gLoc, vel); - FSOUND_SetVolume(channels[metalhitsound], 512); - FSOUND_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[victim->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(int i=0;iweaponids[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); - FSOUND_3D_SetAttributes(channels[swordstaffsound], gLoc, vel); - FSOUND_SetVolume(channels[swordstaffsound], 512); - FSOUND_SetPaused(channels[swordstaffsound], false); - } - else{ - PlaySoundEx( metalhitsound, samp[metalhitsound], NULL, true); - FSOUND_3D_SetAttributes(channels[metalhitsound], gLoc, vel); - FSOUND_SetVolume(channels[metalhitsound], 512); - FSOUND_SetPaused(channels[metalhitsound], false); - } - } - - XYZ aim; - Puff(righthand); - target=0; - targetframe=0; - targetanimation=staggerbackhighanim; - targetrotation=targetrotation+180; - target=0; - weapons.owner[weaponids[0]]=-1; - aim=DoRotation(facing,0,90,0)*21; - aim.y+=7; - weapons.velocity[weaponids[0]]=aim*-.2; - weapons.tipvelocity[weaponids[0]]=aim; - weapons.hitsomething[weaponids[0]]=0; - weapons.missed[weaponids[0]]=1; - 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(int i=0;icoords)>.2){ - //victim->targetanimation=sweepanim; - victim->targetanimation=dodgebackanim; - victim->targetframe=0; - victim->target=0; - //victim->velocity=0; - - XYZ rotatetarget; - rotatetarget=coords-victim->coords; - Normalise(&rotatetarget); - victim->targetrotation=-asin(0-rotatetarget.x); - victim->targetrotation*=360/6.28; - if(rotatetarget.z<0)victim->targetrotation=180-victim->targetrotation; - - victim->targettilt2=-asin(rotatetarget.y)*360/6.28;//*-70; - - victim->lastattack3=victim->lastattack2; - victim->lastattack2=victim->lastattack; - victim->lastattack=victim->targetanimation; - } - else - { - victim->targetanimation=sweepanim; - victim->targetframe=0; - victim->target=0; - - XYZ rotatetarget; - rotatetarget=coords-victim->coords; - Normalise(&rotatetarget); - victim->targetrotation=-asin(0-rotatetarget.x); - victim->targetrotation*=360/6.28; - if(rotatetarget.z<0)victim->targetrotation=180-victim->targetrotation; - - victim->targettilt2=-asin(rotatetarget.y)*360/6.28;//*-70; - - victim->lastattack3=victim->lastattack2; - victim->lastattack2=victim->lastattack; - victim->lastattack=victim->targetanimation; - } - } + else{ + emit_sound_at(metalhitsound, coords); + } + } + + XYZ aim; + Puff(righthand); + target=0; + frameTarget=0; + animTarget=staggerbackhighanim; + targetyaw=targetyaw+180; + target=0; + weapons[weaponids[0]].owner=-1; + aim=DoRotation(facing,0,90,0)*21; + aim.y+=7; + weapons[weaponids[0]].velocity=aim*-.2; + weapons[weaponids[0]].tipvelocity=aim; + weapons[weaponids[0]].hitsomething=0; + weapons[weaponids[0]].missed=1; + weapons[weaponids[0]].freetime=0; + weapons[weaponids[0]].firstfree=1; + weapons[weaponids[0]].physics=1; + num_weapons--; + if(num_weapons){ + weaponids[0]=weaponids[num_weapons]; + if(weaponstuck==num_weapons)weaponstuck=0; + } + weaponactive=-1; + for(int i=0;icoords)>.2){ + victim->animTarget=dodgebackanim; + victim->frameTarget=0; + victim->target=0; + + XYZ rotatetarget; + rotatetarget=coords-victim->coords; + Normalise(&rotatetarget); + victim->targetyaw=-asin(0-rotatetarget.x); + victim->targetyaw*=360/6.28; + if(rotatetarget.z<0)victim->targetyaw=180-victim->targetyaw; + + victim->targettilt2=-asin(rotatetarget.y)*360/6.28;//*-70; + + victim->lastattack3=victim->lastattack2; + victim->lastattack2=victim->lastattack; + victim->lastattack=victim->animTarget; + } + else + { + victim->animTarget=sweepanim; + victim->frameTarget=0; + victim->target=0; + + XYZ rotatetarget; + rotatetarget=coords-victim->coords; + Normalise(&rotatetarget); + victim->targetyaw=-asin(0-rotatetarget.x); + victim->targetyaw*=360/6.28; + if(rotatetarget.z<0)victim->targetyaw=180-victim->targetyaw; + + victim->targettilt2=-asin(rotatetarget.y)*360/6.28;//*-70; + + victim->lastattack3=victim->lastattack2; + victim->lastattack2=victim->lastattack; + victim->lastattack=victim->animTarget; + } + } - velocity=0; - victim->velocity=0; + velocity=0; + victim->velocity=0; - if(aitype!=playercontrolled)feint=0; - if(aitype!=playercontrolled&&Random()%3==0&&escapednum<2&&difficulty==2)feint=1; - if(aitype!=playercontrolled&&Random()%5==0&&escapednum<2&&difficulty==1)feint=1; - if(aitype!=playercontrolled&&Random()%10==0&&escapednum<2&&difficulty==0)feint=1; + if(aitype!=playercontrolled)feint=0; + if(aitype!=playercontrolled&&Random()%3==0&&escapednum<2&&difficulty==2)feint=1; + if(aitype!=playercontrolled&&Random()%5==0&&escapednum<2&&difficulty==1)feint=1; + if(aitype!=playercontrolled&&Random()%10==0&&escapednum<2&&difficulty==0)feint=1; - if(victim->id==0&&animation[victim->targetanimation].attack==reversal)numreversals++; - } + if(victim->id==0&&animation[victim->animTarget].attack==reversal)numreversals++; } void Person::DoDamage(float howmuch){ @@ -1379,28 +1088,17 @@ void Person::DoDamage(float howmuch){ for(int i=0;i180)targetheadrotation-=360; - while(targetheadrotation<-180)targetheadrotation+=360; + while(targetheadyaw>180)targetheadyaw-=360; + while(targetheadyaw<-180)targetheadyaw+=360; - if(targetheadrotation>160)targetheadrotation2=targetheadrotation2*-1; - if(targetheadrotation<-160)targetheadrotation2=targetheadrotation2*-1; - if(targetheadrotation>160)targetheadrotation=targetheadrotation-180; - if(targetheadrotation<-160)targetheadrotation=targetheadrotation+180; + if(targetheadyaw>160)targetheadpitch=targetheadpitch*-1; + if(targetheadyaw<-160)targetheadpitch=targetheadpitch*-1; + if(targetheadyaw>160)targetheadyaw=targetheadyaw-180; + if(targetheadyaw<-160)targetheadyaw=targetheadyaw+180; - if(targetheadrotation2>120)targetheadrotation2=120; - if(targetheadrotation2<-120)targetheadrotation2=-120; - if(targetheadrotation>120)targetheadrotation=120; - if(targetheadrotation<-120)targetheadrotation=-120; + if(targetheadpitch>120)targetheadpitch=120; + if(targetheadpitch<-120)targetheadpitch=-120; + if(targetheadyaw>120)targetheadyaw=120; + if(targetheadyaw<-120)targetheadyaw=-120; - if(!isIdle())targetheadrotation2=0; + if(!isIdle())targetheadpitch=0; if(isIdle()){ - if(targetheadrotation>80)targetheadrotation=80; - if(targetheadrotation<-80)targetheadrotation=-80; - if(targetheadrotation2>50)targetheadrotation2=50; - if(targetheadrotation2<-50)targetheadrotation2=-50; + if(targetheadyaw>80)targetheadyaw=80; + if(targetheadyaw<-80)targetheadyaw=-80; + if(targetheadpitch>50)targetheadpitch=50; + if(targetheadpitch<-50)targetheadpitch=-50; } - if(abs(headrotation-targetheadrotation)targetheadrotation){ - headrotation-=multiplier*lookspeed; + if(abs(headyaw-targetheadyaw)targetheadyaw){ + headyaw-=multiplier*lookspeed; } - else if(headrotationtargetheadrotation2){ - headrotation2-=multiplier*lookspeed/2; + if(abs(headpitch-targetheadpitch)targetheadpitch){ + headpitch-=multiplier*lookspeed/2; } - else if(headrotation2label==head||skeleton.muscles[i].parent2->label==head)) { - skeleton.FindRotationMuscle(i,targetanimation); + skeleton.FindRotationMuscle(i,animTarget); } } } @@ -1555,7 +1240,7 @@ void Person::RagDoll(bool checkcollision){ facing=0; facing.z=1; - facing=DoRotation(facing,0,rotation,0); + facing=DoRotation(facing,0,yaw,0); skeleton.freetime=0; @@ -1570,7 +1255,7 @@ void Person::RagDoll(bool checkcollision){ if(!isnormal(velocity.x))velocity.x=0; if(!isnormal(velocity.y))velocity.y=0; if(!isnormal(velocity.z))velocity.z=0; - if(!isnormal(rotation))rotation=0; + if(!isnormal(yaw))yaw=0; if(!isnormal(coords.x))coords=0; if(!isnormal(tilt))tilt=0; if(!isnormal(tilt2))tilt2=0; @@ -1578,8 +1263,8 @@ void Person::RagDoll(bool checkcollision){ for(i=0;ianimation[targetanimation].speed[targetframe]){ - speed=animation[currentanimation].speed[currentframe]*2; + speed=animation[animTarget].speed[frameTarget]*2; + if(animation[animCurrent].speed[frameCurrent]>animation[animTarget].speed[frameTarget]){ + speed=animation[animCurrent].speed[frameCurrent]*2; } if(transspeed)speed=transspeed*2; speed*=speedmult; for(i=0;i0){ - weapons.owner[weaponids[0]]=-1; - weapons.hitsomething[weaponids[0]]=0; - weapons.velocity[weaponids[0]]=skeleton.joints[skeleton.jointlabels[righthand]].velocity*scale*-.3; - weapons.velocity[weaponids[0]].x+=.01; - weapons.tipvelocity[weaponids[0]]=skeleton.joints[skeleton.jointlabels[righthand]].velocity*scale; - weapons.missed[weaponids[0]]=1; - weapons.freetime[weaponids[0]]=0; - weapons.firstfree[weaponids[0]]=1; - weapons.physics[weaponids[0]]=1; + if(weaponactive!=-1&&animTarget!=rabbitkickanim&&num_weapons>0){ + weapons[weaponids[0]].owner=-1; + weapons[weaponids[0]].hitsomething=0; + weapons[weaponids[0]].velocity=skeleton.joints[skeleton.jointlabels[righthand]].velocity*scale*-.3; + weapons[weaponids[0]].velocity.x+=.01; + weapons[weaponids[0]].tipvelocity=skeleton.joints[skeleton.jointlabels[righthand]].velocity*scale; + weapons[weaponids[0]].missed=1; + weapons[weaponids[0]].freetime=0; + weapons[weaponids[0]].firstfree=1; + weapons[weaponids[0]].physics=1; num_weapons--; if(num_weapons){ weaponids[0]=weaponids[num_weapons]; @@ -1687,10 +1372,10 @@ void Person::RagDoll(bool checkcollision){ } } - targetanimation=bounceidleanim; - currentanimation=bounceidleanim; - targetframe=0; - currentframe=0; + animTarget=bounceidleanim; + animCurrent=bounceidleanim; + frameTarget=0; + frameCurrent=0; } } @@ -1703,48 +1388,48 @@ void Person::FootLand(int which, float opacity){ if(opacity>1) { footvel=0; - if(which==0)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)*scale+coords; - if(which==1)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0)*scale+coords; + if(which==0)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)*scale+coords; + if(which==1)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0)*scale+coords; //footpoint.y=coords.y; - if(findDistancefast(&footpoint,&viewer))sprites.MakeSprite(cloudsprite, footpoint,footvel, 1,1,1, .5, .2*opacity); + if(distsq(&footpoint,&viewer))Sprite::MakeSprite(cloudsprite, footpoint,footvel, 1,1,1, .5, .2*opacity); } else if(environment==snowyenvironment&&onterrain&&terrain.getOpacity(coords.x,coords.z)<.2){ footvel=velocity/5; if(footvel.y<.8)footvel.y=.8; - if(which==0)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,rotation,0)*scale+coords; - if(which==1)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,rotation,0)*scale+coords; + if(which==0)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)*scale+coords; + if(which==1)footpoint=DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0)*scale+coords; footpoint.y=terrain.getHeight(footpoint.x,footpoint.z); terrainlight=terrain.getLighting(footpoint.x,footpoint.z); - if(findDistancefast(&footpoint,&viewer)=1||detail==2)if(detail==2)if(findDistancefast(&footpoint,&viewer)=1||detail==2)if(detail==2)if(distsq(&footpoint,&viewer)=1||detail==2)if(detail==2)if(findDistancefast(&footpoint,&viewer)=1||detail==2)if(detail==2)if(distsq(&footpoint,&viewer)distancemax){ -distancemax=findDistancefast(average,skeleton.joints[j].position); -} -} -distancemax=fast_sqrt(distancemax); -//Collide with player -if(skeleton.free<1){ -start=start-coords; -end=end-coords; -if(rotation)start=DoRotation(start,0,-rotation,0); -if(rotation)end=DoRotation(end,0,-rotation,0); -} -tempbulletloc[0]=start; -tempbulletloc[1]=end; -if(sphere_line_intersection(tempbulletloc[0].x,tempbulletloc[0].y,tempbulletloc[0].z, -tempbulletloc[1].x,tempbulletloc[1].y,tempbulletloc[1].z, -average.x, average.y, average.z, distancemax)){ -for(int j=0;jposition.x)/2), -(-(skeleton.joints[j].position.y+skeleton.joints[j].parent->position.y)/2), -(-(skeleton.joints[j].position.z+skeleton.joints[j].parent->position.z)/2)); -glTranslatef(tempbulletloc[0].x,tempbulletloc[0].y,tempbulletloc[0].z); -glGetFloatv(GL_MODELVIEW_MATRIX,M); -tempbulletloc[0].x=M[12]; -tempbulletloc[0].y=M[13]; -tempbulletloc[0].z=M[14]; -glPopMatrix(); -glPushMatrix(); -glLoadIdentity(); -glScalef(1,1/skeleton.joints[j].length,1); -glRotatef(skeleton.joints[j].rotate2-90,0,0,1); -glRotatef(skeleton.joints[j].rotate1-90,0,1,0); -glTranslatef( (-(skeleton.joints[j].position.x+skeleton.joints[j].parent->position.x)/2), -(-(skeleton.joints[j].position.y+skeleton.joints[j].parent->position.y)/2), -(-(skeleton.joints[j].position.z+skeleton.joints[j].parent->position.z)/2)); -glTranslatef(tempbulletloc[1].x,tempbulletloc[1].y,tempbulletloc[1].z); -glGetFloatv(GL_MODELVIEW_MATRIX,M); -tempbulletloc[1].x=M[12]; -tempbulletloc[1].y=M[13]; -tempbulletloc[1].z=M[14]; -glPopMatrix(); -collide=skeletonmodels[skeleton.joints[j].modelnum].LineCheck(tempbulletloc[0],tempbulletloc[1],&collisionpoint); -if(collide!=-1) -{ -glPushMatrix(); -glLoadIdentity(); -glTranslatef( (skeleton.joints[j].position.x+skeleton.joints[j].parent->position.x)/2, -(skeleton.joints[j].position.y+skeleton.joints[j].parent->position.y)/2, -(skeleton.joints[j].position.z+skeleton.joints[j].parent->position.z)/2); -glRotatef(-skeleton.joints[j].rotate1+90,0,1,0); -glRotatef(-skeleton.joints[j].rotate2+90,0,0,1); -glScalef(1,skeleton.joints[j].length,1); -glTranslatef(collisionpoint.x,collisionpoint.y,collisionpoint.z); -glGetFloatv(GL_MODELVIEW_MATRIX,M); -collisionpoint.x=M[12]; -collisionpoint.y=M[13]; -collisionpoint.z=M[14]; -glPopMatrix(); -hitstruct.collision=1; -hitstruct.hitlocation=collisionpoint; -hitstruct.joint1=&skeleton.joints[j]; -hitstruct.joint2=skeleton.joints[j].parent; -} -} -} -for(int j=0;jposition.x+skeleton.muscles[j].parent2->position.x)/2), -(-(skeleton.muscles[j].parent1->position.y+skeleton.muscles[j].parent2->position.y)/2), -(-(skeleton.muscles[j].parent1->position.z+skeleton.muscles[j].parent2->position.z)/2)); - -glTranslatef(tempbulletloc[0].x,tempbulletloc[0].y,tempbulletloc[0].z); -glGetFloatv(GL_MODELVIEW_MATRIX,M); -tempbulletloc[0].x=M[12]; -tempbulletloc[0].y=M[13]; -tempbulletloc[0].z=M[14]; -glPopMatrix(); -glPushMatrix(); -glLoadIdentity(); -glScalef(1,1/skeleton.muscles[j].length,1); -glRotatef(skeleton.muscles[j].rotate3,0,1,0); -glRotatef(skeleton.muscles[j].rotate2-90,0,0,1); -glRotatef(skeleton.muscles[j].rotate1-90,0,1,0); - -glTranslatef( (-(skeleton.muscles[j].parent1->position.x+skeleton.muscles[j].parent2->position.x)/2), -(-(skeleton.muscles[j].parent1->position.y+skeleton.muscles[j].parent2->position.y)/2), -(-(skeleton.muscles[j].parent1->position.z+skeleton.muscles[j].parent2->position.z)/2)); -glTranslatef(tempbulletloc[1].x,tempbulletloc[1].y,tempbulletloc[1].z); -glGetFloatv(GL_MODELVIEW_MATRIX,M); -tempbulletloc[1].x=M[12]; -tempbulletloc[1].y=M[13]; -tempbulletloc[1].z=M[14]; -glPopMatrix(); -collide=skeletonmodels[skeleton.muscles[j].parent1->modelnum].LineCheck(tempbulletloc[0],tempbulletloc[1],&collisionpoint); -if(collide!=-1) -{ -glPushMatrix(); -glLoadIdentity(); -glTranslatef( (skeleton.muscles[j].parent1->position.x+skeleton.muscles[j].parent2->position.x)/2, -(skeleton.muscles[j].parent1->position.y+skeleton.muscles[j].parent2->position.y)/2, -(skeleton.muscles[j].parent1->position.z+skeleton.muscles[j].parent2->position.z)/2); -glRotatef(-skeleton.muscles[j].rotate1+90,0,1,0); -glRotatef(-skeleton.muscles[j].rotate2+90,0,0,1); -glRotatef(-skeleton.muscles[j].rotate3,0,1,0); -glScalef(1,findDistance(skeleton.muscles[j].parent1->position,skeleton.muscles[j].parent2->position),1); -glTranslatef(collisionpoint.x,collisionpoint.y,collisionpoint.z); -glGetFloatv(GL_MODELVIEW_MATRIX,M); -collisionpoint.x=M[12]; -collisionpoint.y=M[13]; -collisionpoint.z=M[14]; -glPopMatrix(); -hitstruct.collision=1; -hitstruct.hitlocation=collisionpoint; -hitstruct.joint1=skeleton.muscles[j].parent1; -hitstruct.joint2=skeleton.muscles[j].parent2; -} -} -} -} -if(skeleton.free<1){ -if(rotation)hitstruct.hitlocation=DoRotation(hitstruct.hitlocation,0,rotation,0); -hitstruct.hitlocation=hitstruct.hitlocation+coords; +Joint& Person::getJointFor(int bodypart) { + return skeleton.joints[skeleton.jointlabels[bodypart]]; } -return hitstruct; + +void Person::setAnimation(int animation) { + animTarget=animation; + frameTarget=0; + target=0; } -*/ + void Person::DoAnimations(){ if(!skeleton.free){ int i = 0; static float oldtarget; - if(isIdle()&¤tanimation!=getIdle())normalsupdatedelay=0; + if(isIdle()&&animCurrent!=getIdle())normalsupdatedelay=0; - if(targetanimation==tempanim||currentanimation==tempanim){ + if(animTarget==tempanim||animCurrent==tempanim){ animation[tempanim]=tempanimation; } - if(targetanimation==jumpupanim||targetanimation==jumpdownanim||isFlip()){ + if(animTarget==jumpupanim||animTarget==jumpdownanim||isFlip()){ float gLoc[3]; float vel[3]; gLoc[0]=coords.x; @@ -1947,225 +1472,151 @@ void Person::DoAnimations(){ vel[2]=velocity.z; if(id==0){ - FSOUND_3D_SetAttributes(channels[whooshsound], gLoc, vel); - FSOUND_SetVolume(channels[whooshsound], 64*findLength(&velocity)/5); + 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))){ + if((animCurrent==jumpupanim||animTarget==jumpdownanim)/*&&velocity.y<40*/&&!isFlip()&&(!isLanding()&&!isLandhard())&&((crouchkeydown&&!crouchtogglekeydown))){ XYZ targfacing; targfacing=0; targfacing.z=1; - targfacing=DoRotation(targfacing,0,targetrotation,0); + targfacing=DoRotation(targfacing,0,targetyaw,0); - if(normaldotproduct(targfacing,velocity)>=-.3)targetanimation=flipanim; - else targetanimation=backflipanim; + if(normaldotproduct(targfacing,velocity)>=-.3)animTarget=flipanim; + else animTarget=backflipanim; crouchtogglekeydown=1; - targetframe=0; + frameTarget=0; target=0; if(id==0)numflipped++; } - if(animation[targetanimation].attack!=reversed)feint=0; + if(animation[animTarget].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(!crouchtogglekeydown&&animation[animTarget].attack==reversed&&aitype==playercontrolled&&(escapednum<2||reversaltrain))feint=1; if(!isFlip())crouchtogglekeydown=1; } - if(animation[targetanimation].attack||currentanimation==getupfrombackanim||currentanimation==getupfromfrontanim){ + if(animation[animTarget].attack||animCurrent==getupfrombackanim||animCurrent==getupfromfrontanim){ if(detail)normalsupdatedelay=0; } if(target>=1){ - if(targetanimation==rollanim&&targetframe==3&&onfire){ + if(animTarget==rollanim&&frameTarget==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); - FSOUND_3D_SetAttributes(channels[fireendsound], gLoc, vel); - FSOUND_SetVolume(channels[fireendsound], 256); - FSOUND_SetPaused(channels[fireendsound], false); - FSOUND_SetPaused(channels[stream_firesound], true); + emit_sound_at(fireendsound, coords); + pause_sound(stream_firesound); 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(animTarget==rabbittacklinganim&&frameTarget==1){ + //if(victim->aitype==attacktypecutoff&&Random()%2==0&&victim->stunned<=0&&animation[victim->animTarget].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; + if(animTarget==rabbittacklinganim&&frameTarget==1&&!victim->isCrouch()&&victim->animTarget!=backhandspringanim){ + if(normaldotproduct(victim->facing,facing)>0)victim->animTarget=rabbittackledbackanim; + else victim->animTarget=rabbittackledfrontanim; + victim->frameTarget=2; victim->target=0; - victim->rotation=rotation; - victim->targetrotation=rotation; + victim->yaw=yaw; + victim->targetyaw=yaw; 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); - FSOUND_3D_SetAttributes(channels[clawslicesound], gLoc, vel); - FSOUND_SetVolume(channels[clawslicesound], 128); - FSOUND_SetPaused(channels[clawslicesound], false); + emit_sound_at(clawslicesound, victim->coords); victim->spurt=1; victim->DoBloodBig(1/victim->armorhead,210); } - if(id==0){ - bonus=TackleBonus; - bonustime=0; - bonusvalue=5; - if(victim->aitype==gethelptype)bonusvalue=50; - } + award_bonus(id, TackleBonus, + victim->aitype == gethelptype ? 50 : 0); } } - 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(!drawtogglekeydown&&drawkeydown&&(weaponactive==-1||num_weapons==1)&&(animation[animTarget].label[frameTarget]||(animTarget!=animCurrent&&animCurrent==rollanim))&&num_weapons>0&&creature!=wolftype){ + if(weapons[weaponids[0]].getType()==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); - FSOUND_3D_SetAttributes(channels[knifesheathesound], gLoc, vel); - FSOUND_SetVolume(channels[knifesheathesound], 128); - FSOUND_SetPaused(channels[knifesheathesound], false); + emit_sound_at(knifesheathesound, coords); } 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); - FSOUND_3D_SetAttributes(channels[knifedrawsound], gLoc, vel); - FSOUND_SetVolume(channels[knifedrawsound], 128); - FSOUND_SetPaused(channels[knifedrawsound], false); + emit_sound_at(knifedrawsound, coords, 128); } } 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)*/){ + if((animation[animTarget].label[frameTarget]&&(animation[animTarget].label[frameTarget]<5||animation[animTarget].label[frameTarget]==8))/*||(animTarget==rollanim&&frameTarget==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; + if(animation[animTarget].label[frameTarget]==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()){ + if(animation[animTarget].label[frameTarget]==1)FootLand(0,1); + if(animation[animTarget].label[frameTarget]==2)FootLand(1,1); + if(animation[animTarget].label[frameTarget]==3&&isRun()){ FootLand(1,1); FootLand(0,1); } } if(terrain.getOpacity(coords.x,coords.z)>=.2){ - if(animation[targetanimation].label[targetframe]==1)whichsound=footstepsound3; + if(animation[animTarget].label[frameTarget]==1)whichsound=footstepsound3; else whichsound=footstepsound4; } } if(!onterrain){ - if(animation[targetanimation].label[targetframe]==1)whichsound=footstepsound3; + if(animation[animTarget].label[frameTarget]==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){ + if(animation[animTarget].label[frameTarget]==4&&(weaponactive==-1||(animTarget!=knifeslashstartanim&&animTarget!=knifethrowanim&&animTarget!=crouchstabanim&&animTarget!=swordgroundstabanim&&animTarget!=knifefollowanim))){ + if(animation[animTarget].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; + if(animation[animTarget].attack==neutral)whichsound=movewhooshsound; } - else if(animation[targetanimation].label[targetframe]==4)whichsound=knifeswishsound; - if(animation[targetanimation].label[targetframe]==8&&tutoriallevel!=1)whichsound=landsound2; + else if(animation[animTarget].label[frameTarget]==4)whichsound=knifeswishsound; + if(animation[animTarget].label[frameTarget]==8&&tutoriallevel!=1)whichsound=landsound2; - PlaySoundEx( whichsound, samp[whichsound], NULL, true); - FSOUND_3D_SetAttributes(channels[whichsound], gLoc, vel); - if(whichsound!=knifeswishsound)FSOUND_SetVolume(channels[whichsound], 128); - if(whichsound!=knifeswishsound&&(targetanimation==staffhitanim||targetanimation==staffgroundsmashanim||targetanimation==staffspinhitanim))FSOUND_SetVolume(channels[whichsound], 256); - if(whichsound==knifeswishsound)FSOUND_SetVolume(channels[whichsound], 512); - FSOUND_SetPaused(channels[whichsound], false); + emit_sound_at(whichsound, coords, 256.); if(id==0) if(whichsound==footstepsound||whichsound==footstepsound2||whichsound==footstepsound3||whichsound==footstepsound4){ envsound[numenvsounds]=coords; - if(targetanimation==wolfrunninganim||targetanimation==rabbitrunninganim)envsoundvol[numenvsounds]=15; + if(animTarget==wolfrunninganim||animTarget==rabbitrunninganim)envsoundvol[numenvsounds]=15; else envsoundvol[numenvsounds]=6; envsoundlife[numenvsounds]=.4; numenvsounds++; } - if(animation[targetanimation].label[targetframe]==3){ + if(animation[animTarget].label[frameTarget]==3){ whichsound--; - PlaySoundEx( whichsound, samp[whichsound], NULL, true); - FSOUND_3D_SetAttributes(channels[whichsound], gLoc, vel); - FSOUND_SetVolume(channels[whichsound], 128); - FSOUND_SetPaused(channels[whichsound], false); + emit_sound_at(whichsound, coords, 128.); } } //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)*/){ + if(animTarget!=crouchstabanim&&animTarget!=swordgroundstabanim&&animTarget!=staffgroundsmashanim) + if((animation[animTarget].label[frameTarget]&&(animation[animTarget].label[frameTarget]<5||animation[animTarget].label[frameTarget]==8))/*||(animTarget==rollanim&&frameTarget==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){ + if(animation[animTarget].label[frameTarget]==4&&aitype!=playercontrolled){ + if(animation[animTarget].attack!=neutral){ i=abs(Random()%4); if(creature==rabbittype){ if(i==0)whichsound=rabbitattacksound; @@ -2181,54 +1632,40 @@ void Person::DoAnimations(){ } speechdelay=.3; } - //if(animation[targetanimation].attack==neutral)whichsound=movewhooshsound; + //if(animation[animTarget].attack==neutral)whichsound=movewhooshsound; } - //else if(animation[targetanimation].label[targetframe]==4)whichsound=knifeswishsound; - //if(animation[targetanimation].label[targetframe]==8)whichsound=landsound2; + //else if(animation[animTarget].label[frameTarget]==4)whichsound=knifeswishsound; + //if(animation[animTarget].label[frameTarget]==8)whichsound=landsound2; if(whichsound!=-1){ - PlaySoundEx( whichsound, samp[whichsound], NULL, true); - FSOUND_3D_SetAttributes(channels[whichsound], gLoc, vel); - FSOUND_SetVolume(channels[whichsound], 512); - FSOUND_SetPaused(channels[whichsound], false); + emit_sound_at(whichsound, coords); } } - if((!wasLanding()&&!wasLandhard())&¤tanimation!=getIdle()&&(isLanding()||isLandhard())){ + if((!wasLanding()&&!wasLandhard())&&animCurrent!=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=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); - FSOUND_3D_SetAttributes(channels[knifedrawsound], gLoc, vel); - FSOUND_SetVolume(channels[knifedrawsound], 128); - FSOUND_SetPaused(channels[knifedrawsound], false); + frameTarget=frameCurrent; + animCurrent=animTarget; + frameTarget++; + + if(animTarget==removeknifeanim&&animation[animTarget].label[frameCurrent]==5){ + for(i=0;i=1){ + if(weapons[i].getType()!=staff){ + emit_sound_at(knifedrawsound, coords, 128.); } weaponactive=0; - weapons.owner[i]=id; + weapons[i].owner=id; if(num_weapons>0){ weaponids[num_weapons]=weaponids[0]; } @@ -2239,50 +1676,34 @@ void Person::DoAnimations(){ } } - static bool willwork; - if(targetanimation==crouchremoveknifeanim&&animation[targetanimation].label[currentframe]==5){ - for(i=0;i1)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(animTarget==crouchremoveknifeanim&&animation[animTarget].label[frameCurrent]==5){ + for(i=0;i1)willwork=0; + if((weapons[i].owner==-1)||(hasvictim&&weapons[i].owner==victim->id&&victim->skeleton.free)) + if(willwork&&distsqflat(&coords,&weapons[i].position)<3&&weaponactive==-1){ + if(distsq(&coords,&weapons[i].position)<1||hasvictim){ + bool fleshstuck=false; + if(weapons[i].owner!=-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); - FSOUND_3D_SetAttributes(channels[knifedrawsound], gLoc, vel); - FSOUND_SetVolume(channels[knifedrawsound], 128); - FSOUND_SetPaused(channels[knifedrawsound], false); + fleshstuck=true; } } if(fleshstuck){ - PlaySoundEx( fleshstabremovesound, samp[fleshstabremovesound], NULL, true); - FSOUND_3D_SetAttributes(channels[fleshstabremovesound], gLoc, vel); - FSOUND_SetVolume(channels[fleshstabremovesound], 128); - FSOUND_SetPaused(channels[fleshstabremovesound], false); + emit_sound_at(fleshstabremovesound, coords, 128.); + } else { + if(weapons[i].getType()!=staff){ + emit_sound_at(knifedrawsound, coords, 128.); + } } weaponactive=0; - if(weapons.owner[i]!=-1){ + if(weapons[i].owner!=-1){ - victim=&player[weapons.owner[i]]; + victim=&player[weapons[i].owner]; if(victim->num_weapons==1)victim->num_weapons=0; else victim->num_weapons=1; @@ -2302,12 +1723,12 @@ void Person::DoAnimations(){ Normalise(&relative); XYZ footvel,footpoint; footvel=0; - footpoint=weapons.position[i]; + footpoint=weapons[i].position; if(victim->weaponstuck!=-1){ if(victim->weaponids[victim->weaponstuck]==i){ - if(bloodtoggle)sprites.MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .8, .3); - weapons.bloody[i]=2; - weapons.blooddrip[i]=5; + if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .8, .3); + weapons[i].bloody=2; + weapons[i].blooddrip=5; victim->weaponstuck=-1; } } @@ -2322,7 +1743,7 @@ void Person::DoAnimations(){ victim->skeleton.joints[victim->skeleton.jointlabels[rightshoulder]].velocity+=relative*6; victim->skeleton.joints[victim->skeleton.jointlabels[leftshoulder]].velocity+=relative*6; } - weapons.owner[i]=id; + weapons[i].owner=id; if(num_weapons>0){ weaponids[num_weapons]=weaponids[0]; } @@ -2333,7 +1754,7 @@ void Person::DoAnimations(){ } } - if(currentanimation==drawleftanim&&animation[targetanimation].label[currentframe]==5){ + if(animCurrent==drawleftanim&&animation[animTarget].label[frameCurrent]==5){ if(weaponactive==-1)weaponactive=0; else if(weaponactive==0){ weaponactive=-1; @@ -2345,71 +1766,35 @@ void Person::DoAnimations(){ } } 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); - FSOUND_3D_SetAttributes(channels[knifesheathesound], gLoc, vel); - FSOUND_SetVolume(channels[knifesheathesound], 128); - FSOUND_SetPaused(channels[knifesheathesound], false); + emit_sound_at(knifesheathesound, coords, 128.); } 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); - FSOUND_3D_SetAttributes(channels[knifedrawsound], gLoc, vel); - FSOUND_SetVolume(channels[knifedrawsound], 128); - FSOUND_SetPaused(channels[knifedrawsound], false); + emit_sound_at(knifedrawsound, coords, 128.); } } - if((currentanimation==walljumprightkickanim&&targetanimation==walljumprightkickanim)||(currentanimation==walljumpleftkickanim&&targetanimation==walljumpleftkickanim)){ - XYZ rotatetarget=DoRotation(skeleton.forward,0,rotation,0); + if((animCurrent==walljumprightkickanim&&animTarget==walljumprightkickanim)||(animCurrent==walljumpleftkickanim&&animTarget==walljumpleftkickanim)){ + XYZ rotatetarget=DoRotation(skeleton.forward,0,yaw,0); Normalise(&rotatetarget); - targetrotation=-asin(0-rotatetarget.x); - targetrotation*=360/6.28; - if(rotatetarget.z<0)targetrotation=180-targetrotation; + targetyaw=-asin(0-rotatetarget.x); + targetyaw*=360/6.28; + if(rotatetarget.z<0)targetyaw=180-targetyaw; - if(targetanimation==walljumprightkickanim)targetrotation+=40; - if(targetanimation==walljumpleftkickanim)targetrotation-=40; + if(animTarget==walljumprightkickanim)targetyaw+=40; + if(animTarget==walljumpleftkickanim)targetyaw-=40; } bool dojumpattack; dojumpattack=0; - if((targetanimation==rabbitrunninganim||targetanimation==wolfrunninganim)&&targetframe==3&&(jumpkeydown||attackkeydown||id!=0))dojumpattack=1; + if((animTarget==rabbitrunninganim||animTarget==wolfrunninganim)&&frameTarget==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(distsq(&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); - FSOUND_3D_SetAttributes(channels[jumpsound], gLoc, vel); - FSOUND_SetVolume(channels[jumpsound], 128); - FSOUND_SetPaused(channels[jumpsound], false); + if((animTarget==rabbitrunninganim||animTarget==wolfrunninganim)&&id==0){ + animTarget=rabbittackleanim; + frameTarget=0; + emit_sound_at(jumpsound, coords); } float closestdist; @@ -2422,42 +1807,30 @@ void Person::DoAnimations(){ targetloc+=coords; for(i=0;icoords; - currentanimation=rabbittacklinganim; - targetanimation=rabbittacklinganim; - currentframe=0; - targetframe=1; + animCurrent=rabbittacklinganim; + animTarget=rabbittacklinganim; + frameCurrent=0; + frameTarget=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; + targetyaw=-asin(0-rotatetarget.x); + targetyaw*=360/6.28; + if(rotatetarget.z<0)targetyaw=180-targetyaw; } - 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); - FSOUND_3D_SetAttributes(channels[jumpsound], gLoc, vel); - FSOUND_SetVolume(channels[jumpsound], 128); - FSOUND_SetPaused(channels[jumpsound], false); + if(animTarget!=rabbitrunninganim){ + emit_sound_at(jumpsound, coords, 128.); } } } @@ -2467,9 +1840,9 @@ void Person::DoAnimations(){ 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){ + if((animation[animTarget].attack==normalattack||animTarget==walljumprightkickanim||animTarget==walljumpleftkickanim)&&(!feint)&&(victim->skeleton.free!=2||animTarget==killanim||animTarget==dropkickanim||animTarget==crouchstabanim||animTarget==swordgroundstabanim||animTarget==staffgroundsmashanim)){ + if(animTarget==spinkickanim&&animation[animTarget].label[frameCurrent]==5){ + if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&3&&animation[victim->animTarget].height!=lowheight){ escapednum=0; if(id==0)camerashake+=.4; if(Random()%2||creature==wolftype){ @@ -2477,25 +1850,11 @@ void Person::DoAnimations(){ 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); - FSOUND_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel); - FSOUND_SetVolume(channels[heavyimpactsound], 128); - FSOUND_SetPaused(channels[heavyimpactsound], false); + emit_sound_at(heavyimpactsound, victim->coords, 128.); } if(creature==wolftype){ - PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true); - FSOUND_3D_SetAttributes(channels[clawslicesound], gLoc, vel); - FSOUND_SetVolume(channels[clawslicesound], 128); - FSOUND_SetPaused(channels[clawslicesound], false); + emit_sound_at(clawslicesound, victim->coords, 128.); victim->spurt=1; victim->DoBloodBig(2/victim->armorhead,175); } @@ -2513,37 +1872,21 @@ void Person::DoAnimations(){ victim->Puff(head); victim->DoDamage(damagemult*100/victim->protectionhead); - if(id==0){ - SolidHitBonus(); - } + SolidHitBonus(id); } } - if(targetanimation==wolfslapanim&&animation[targetanimation].label[currentframe]==5){ - if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&3&&animation[victim->targetanimation].height!=lowheight){ + if(animTarget==wolfslapanim&&animation[animTarget].label[frameCurrent]==5){ + if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&3&&animation[victim->animTarget].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); - FSOUND_3D_SetAttributes(channels[whooshhitsound], gLoc, vel); - FSOUND_SetVolume(channels[whooshhitsound], 512); - FSOUND_SetPaused(channels[whooshhitsound], false); + emit_sound_at(whooshhitsound, victim->coords); if(creature==wolftype){ - PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true); - FSOUND_3D_SetAttributes(channels[clawslicesound], gLoc, vel); - FSOUND_SetVolume(channels[clawslicesound], 128); - FSOUND_SetPaused(channels[clawslicesound], false); + emit_sound_at(clawslicesound, victim->coords, 128.); victim->spurt=1; victim->DoBloodBig(2,175); } @@ -2565,31 +1908,17 @@ void Person::DoAnimations(){ } } - if(targetanimation==walljumprightkickanim&&animation[targetanimation].label[currentframe]==5){ - if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->targetanimation].height!=lowheight){ + if(animTarget==walljumprightkickanim&&animation[animTarget].label[frameCurrent]==5){ + if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->animTarget].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); - FSOUND_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel); - FSOUND_SetVolume(channels[heavyimpactsound], 160); - FSOUND_SetPaused(channels[heavyimpactsound], false); + emit_sound_at(heavyimpactsound, victim->coords, 160.); } if(creature==wolftype){ - PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true); - FSOUND_3D_SetAttributes(channels[clawslicesound], gLoc, vel); - FSOUND_SetVolume(channels[clawslicesound], 128); - FSOUND_SetPaused(channels[clawslicesound], false); + emit_sound_at(clawslicesound, victim->coords, 128.); victim->spurt=1; victim->DoBloodBig(2/victim->armorhead,175); } @@ -2607,44 +1936,24 @@ void Person::DoAnimations(){ 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(victim->damage>victim->damagetolerance) + award_bonus(id, style); + else + SolidHitBonus(id); } } - if(targetanimation==walljumpleftkickanim&&animation[targetanimation].label[currentframe]==5){ - if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->targetanimation].height!=lowheight){ + if(animTarget==walljumpleftkickanim&&animation[animTarget].label[frameCurrent]==5){ + if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->animTarget].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); - FSOUND_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel); - FSOUND_SetVolume(channels[heavyimpactsound], 160); - FSOUND_SetPaused(channels[heavyimpactsound], false); + emit_sound_at(heavyimpactsound, victim->coords, 160.); } if(creature==wolftype){ - PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true); - FSOUND_3D_SetAttributes(channels[clawslicesound], gLoc, vel); - FSOUND_SetVolume(channels[clawslicesound], 128); - FSOUND_SetPaused(channels[clawslicesound], false); + emit_sound_at(clawslicesound, victim->coords, 128.); victim->spurt=1; victim->DoBloodBig(2/victim->armorhead,175); } @@ -2662,39 +1971,22 @@ void Person::DoAnimations(){ 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(victim->damage>victim->damagetolerance) + award_bonus(id, style); + else + SolidHitBonus(id); } } - if(targetanimation==blockhighleftstrikeanim&&animation[targetanimation].label[currentframe]==5){ - if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->targetanimation].height!=lowheight){ + if(animTarget==blockhighleftstrikeanim&&animation[animTarget].label[frameCurrent]==5){ + if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->animTarget].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); - FSOUND_3D_SetAttributes(channels[whooshhitsound], gLoc, vel); - FSOUND_SetVolume(channels[whooshhitsound], 512); - FSOUND_SetPaused(channels[whooshhitsound], false); + emit_sound_at(whooshhitsound, victim->coords); victim->RagDoll(0); XYZ relative; relative=victim->coords-coords; @@ -2710,27 +2002,11 @@ void Person::DoAnimations(){ } } - if(targetanimation==killanim&&animation[targetanimation].label[currentframe]==8){ - if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&victim->dead){ + if(animTarget==killanim&&animation[animTarget].label[frameCurrent]==8){ + if(distsq(&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); - FSOUND_3D_SetAttributes(channels[landsound2], gLoc, vel); - FSOUND_SetVolume(channels[landsound2], 128); - FSOUND_SetPaused(channels[landsound2], false); - */ - PlaySoundEx( movewhooshsound, samp[movewhooshsound], NULL, true); - FSOUND_3D_SetAttributes(channels[movewhooshsound], gLoc, vel); - FSOUND_SetVolume(channels[movewhooshsound], 128); - FSOUND_SetPaused(channels[movewhooshsound], false); + emit_sound_at(whooshhitsound, victim->coords, 128.); victim->skeleton.longdead=0; victim->skeleton.free=1; @@ -2759,23 +2035,12 @@ void Person::DoAnimations(){ } } - if(targetanimation==killanim&&animation[targetanimation].label[currentframe]==5){ - if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*9&&victim->dead){ + if(animTarget==killanim&&animation[animTarget].label[frameCurrent]==5){ + if(distsq(&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); - FSOUND_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel); - FSOUND_SetVolume(channels[heavyimpactsound], 128); - FSOUND_SetPaused(channels[heavyimpactsound], false); + emit_sound_at(heavyimpactsound, coords, 128.); } XYZ relative; relative=victim->coords-coords; @@ -2794,23 +2059,12 @@ void Person::DoAnimations(){ } } - if(targetanimation==dropkickanim&&animation[targetanimation].label[currentframe]==7){ - if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*9&&victim->skeleton.free){ + if(animTarget==dropkickanim&&animation[animTarget].label[frameCurrent]==7){ + if(distsq(&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); - FSOUND_3D_SetAttributes(channels[thudsound], gLoc, vel); - FSOUND_SetVolume(channels[thudsound], 400); - FSOUND_SetPaused(channels[thudsound], false); + emit_sound_at(thudsound, coords); } victim->skeleton.longdead=0; @@ -2831,9 +2085,8 @@ void Person::DoAnimations(){ for(i=0;iskeleton.num_joints;i++){ victim->skeleton.joints[i].velocity+=relative*damagemult*20; } - if(id==0&&!victim->dead){ - SolidHitBonus(); - } + if(!victim->dead) + SolidHitBonus(id); victim->Puff(abdomen); victim->DoDamage(damagemult*20/victim->protectionhigh); @@ -2845,63 +2098,51 @@ void Person::DoAnimations(){ } } - if((targetanimation==crouchstabanim||targetanimation==swordgroundstabanim)&&animation[targetanimation].label[currentframe]==5){ - // if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*9){ + if((animTarget==crouchstabanim||animTarget==swordgroundstabanim)&&animation[animTarget].label[frameCurrent]==5){ //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); - FSOUND_3D_SetAttributes(channels[knifesheathesound], gLoc, vel); - FSOUND_SetVolume(channels[knifesheathesound], 128); - FSOUND_SetPaused(channels[knifesheathesound], false); + terrain.MakeDecal(blooddecalfast,(weapons[weaponids[weaponactive]].tippoint*.8+weapons[weaponids[weaponactive]].position*.2),.08,.6,Random()%360); + emit_sound_at(knifesheathesound, coords, 128.); } if(victim&&hasvictim){ - if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3){ + if(distsq(&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); + if(weapons[weaponids[weaponactive]].getType()==knife){ + where=(weapons[weaponids[weaponactive]].tippoint*.6+weapons[weaponids[weaponactive]].position*.4); where-=victim->coords; - if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0); + if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0); //where=scale; startpoint=where; startpoint.y+=100; endpoint=where; endpoint.y-=100; } - if(weapons.type[weaponids[weaponactive]]==sword){ - where=weapons.position[weaponids[weaponactive]]; + if(weapons[weaponids[weaponactive]].getType()==sword){ + where=weapons[weaponids[weaponactive]].position; where-=victim->coords; - if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0); + if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0); startpoint=where; - where=weapons.tippoint[weaponids[weaponactive]]; + where=weapons[weaponids[weaponactive]].tippoint; where-=victim->coords; - if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0); + if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0); endpoint=where; } - if(weapons.type[weaponids[weaponactive]]==staff){ - where=weapons.position[weaponids[weaponactive]]; + if(weapons[weaponids[weaponactive]].getType()==staff){ + where=weapons[weaponids[weaponactive]].position; where-=victim->coords; - if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0); + if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0); startpoint=where; - where=weapons.tippoint[weaponids[weaponactive]]; + where=weapons[weaponids[weaponactive]].tippoint; where-=victim->coords; - if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0); + if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0); endpoint=where; } movepoint=0; @@ -2911,13 +2152,10 @@ void Person::DoAnimations(){ 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 (!victim->dead) + award_bonus(id, FinishedBonus); } - if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2; + if(bloodtoggle)weapons[weaponids[weaponactive]].bloody=2; victim->skeleton.longdead=0; victim->skeleton.free=1; @@ -2928,68 +2166,46 @@ void Person::DoAnimations(){ victim->skeleton.joints[i].locked=0; //victim->skeleton.joints[i].velocity=0; } - PlaySoundEx( fleshstabsound, samp[fleshstabsound], NULL, true); - FSOUND_3D_SetAttributes(channels[fleshstabsound], gLoc, vel); - FSOUND_SetVolume(channels[fleshstabsound], 128); - FSOUND_SetPaused(channels[fleshstabsound], false); + emit_sound_at(fleshstabsound, coords, 128); } - if(whichtri!=-1||weapons.bloody[weaponids[weaponactive]]){ - weapons.blooddrip[weaponids[weaponactive]]+=5; - weapons.blooddripdelay[weaponids[weaponactive]]=0; + if(whichtri!=-1||weapons[weaponids[weaponactive]].bloody){ + weapons[weaponids[weaponactive]].blooddrip+=5; + weapons[weaponids[weaponactive]].blooddripdelay=0; } if(whichtri==-1){ hasvictim=0; - PlaySoundEx( knifesheathesound, samp[knifesheathesound], NULL, true); - FSOUND_3D_SetAttributes(channels[knifesheathesound], gLoc, vel); - FSOUND_SetVolume(channels[knifesheathesound], 128); - FSOUND_SetPaused(channels[knifesheathesound], false); + emit_sound_at(knifesheathesound, coords, 128.); } } } } - 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((animTarget==crouchstabanim||animTarget==swordgroundstabanim)&&animation[animTarget].label[frameCurrent]==6){ if(!hasvictim){ - PlaySoundEx( knifedrawsound, samp[knifedrawsound], NULL, true); - FSOUND_3D_SetAttributes(channels[knifedrawsound], gLoc, vel); - FSOUND_SetVolume(channels[knifedrawsound], 128); - FSOUND_SetPaused(channels[knifedrawsound], false); + emit_sound_at(knifedrawsound, coords, 128); } if(victim&&hasvictim){ XYZ footvel,footpoint; - PlaySoundEx( fleshstabremovesound, samp[fleshstabremovesound], NULL, true); - FSOUND_3D_SetAttributes(channels[fleshstabremovesound], gLoc, vel); - FSOUND_SetVolume(channels[fleshstabremovesound], 128); - FSOUND_SetPaused(channels[fleshstabremovesound], false); + emit_sound_at(fleshstabremovesound, coords, 128.); footvel=0; - footpoint=(weapons.tippoint[weaponids[weaponactive]]*.8+weapons.position[weaponids[weaponactive]]*.2); + footpoint=(weapons[weaponids[weaponactive]].tippoint*.8+weapons[weaponids[weaponactive]].position*.2); - if(weapons.type[weaponids[weaponactive]]==sword){ + if(weapons[weaponids[weaponactive]].getType()==sword){ XYZ where,startpoint,endpoint,movepoint; float rotationpoint; int whichtri; - where=weapons.position[weaponids[weaponactive]]; + where=weapons[weaponids[weaponactive]].position; where-=victim->coords; - if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0); + if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0); startpoint=where; - where=weapons.tippoint[weaponids[weaponactive]]; + where=weapons[weaponids[weaponactive]].tippoint; where-=victim->coords; - if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0); + if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0); endpoint=where; movepoint=0; @@ -2998,21 +2214,21 @@ void Person::DoAnimations(){ footpoint+=victim->coords; if(whichtri==-1){ - footpoint=(weapons.tippoint[weaponids[weaponactive]]*.8+weapons.position[weaponids[weaponactive]]*.2); + footpoint=(weapons[weaponids[weaponactive]].tippoint*.8+weapons[weaponids[weaponactive]].position*.2); } } - if(weapons.type[weaponids[weaponactive]]==staff){ + if(weapons[weaponids[weaponactive]].getType()==staff){ XYZ where,startpoint,endpoint,movepoint; float rotationpoint; int whichtri; - where=weapons.position[weaponids[weaponactive]]; + where=weapons[weaponids[weaponactive]].position; where-=victim->coords; - if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0); + if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0); startpoint=where; - where=weapons.tippoint[weaponids[weaponactive]]; + where=weapons[weaponids[weaponactive]].tippoint; where-=victim->coords; - if(!victim->skeleton.free)where=DoRotation(where,0,-victim->rotation,0); + if(!victim->skeleton.free)where=DoRotation(where,0,-victim->yaw,0); endpoint=where; movepoint=0; @@ -3021,12 +2237,12 @@ void Person::DoAnimations(){ footpoint+=victim->coords; if(whichtri==-1){ - footpoint=(weapons.tippoint[weaponids[weaponactive]]*.8+weapons.position[weaponids[weaponactive]]*.2); + footpoint=(weapons[weaponids[weaponactive]].tippoint*.8+weapons[weaponids[weaponactive]].position*.2); } } hasvictim=victim->DoBloodBigWhere(2,220,footpoint); if(hasvictim){ - if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3){ + if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3){ victim->skeleton.longdead=0; victim->skeleton.free=1; victim->skeleton.broken=0; @@ -3042,7 +2258,7 @@ void Person::DoAnimations(){ relative.y=10; Normalise(&relative); //victim->Puff(abdomen); - if(bloodtoggle)sprites.MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .8, .3); + if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .8, .3); if(victim->bloodlossdamagetolerance){ victim->bloodloss+=1000; @@ -3054,46 +2270,23 @@ void Person::DoAnimations(){ } } if(!hasvictim&&onterrain){ - weapons.bloody[weaponids[weaponactive]]=0; - weapons.blooddrip[weaponids[weaponactive]]=0; + weapons[weaponids[weaponactive]].bloody=0; + weapons[weaponids[weaponactive]].blooddrip=0; } } - if(targetanimation==upunchanim&&animation[targetanimation].label[currentframe]==5){ - if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3){ + if(animTarget==upunchanim&&animation[animTarget].label[frameCurrent]==5){ + if(distsq(&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); - FSOUND_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel); - FSOUND_SetVolume(channels[heavyimpactsound], 128); - FSOUND_SetPaused(channels[heavyimpactsound], false); - } - } - else { - if(tutoriallevel!=1){ - PlaySoundEx( landsound2, samp[landsound2], NULL, true); - FSOUND_3D_SetAttributes(channels[landsound2], gLoc, vel); - FSOUND_SetVolume(channels[landsound2], 256); - FSOUND_SetPaused(channels[landsound2], false); - } + if(tutoriallevel!=1){ + emit_sound_at(heavyimpactsound, victim->coords, 128); } - //if(!victim->isIdle()||victim->damage>victim->damagetolerance-60) victim->RagDoll(0); XYZ relative; relative=victim->coords-coords; @@ -3104,9 +2297,9 @@ void Person::DoAnimations(){ } victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity+=relative*damagemult*150; - victim->targetframe=0; - victim->targetanimation=staggerbackhardanim; - victim->targetrotation=targetrotation+180; + victim->frameTarget=0; + victim->animTarget=staggerbackhardanim; + victim->targetyaw=targetyaw+180; victim->target=0; victim->stunned=1; @@ -3114,52 +2307,32 @@ void Person::DoAnimations(){ victim->Puff(abdomen); victim->DoDamage(damagemult*60/victim->protectionhigh); - if(id==0){ - SolidHitBonus(); - } + SolidHitBonus(id); } } - if(targetanimation==winduppunchanim&&animation[targetanimation].label[currentframe]==5){ - if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*2){ + if(animTarget==winduppunchanim&&animation[animTarget].label[frameCurrent]==5){ + if(distsq(&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(victim->damage<=victim->damagetolerance-60&&normaldotproduct(victim->facing,victim->coords-coords)<(scale*5)*(scale*5)*0&&animation[victim->animTarget].height!=lowheight){ if(tutoriallevel!=1){ - PlaySoundEx( thudsound, samp[thudsound], NULL, true); - FSOUND_3D_SetAttributes(channels[thudsound], gLoc, vel); - FSOUND_SetVolume(channels[thudsound], 512); - FSOUND_SetPaused(channels[thudsound], false); + emit_sound_at(thudsound, victim->coords); } } - else if(victim->damage<=victim->damagetolerance-60&&normaldotproduct(victim->facing,victim->coords-coords)<(scale*5)*(scale*5)*0&&animation[victim->targetanimation].height==lowheight){ + else if(victim->damage<=victim->damagetolerance-60&&normaldotproduct(victim->facing,victim->coords-coords)<(scale*5)*(scale*5)*0&&animation[victim->animTarget].height==lowheight){ if(tutoriallevel!=1){ - PlaySoundEx( whooshhitsound, samp[whooshhitsound], NULL, true); - FSOUND_3D_SetAttributes(channels[whooshhitsound], gLoc, vel); - FSOUND_SetVolume(channels[whooshhitsound], 512); - FSOUND_SetPaused(channels[whooshhitsound], false); + emit_sound_at(whooshhitsound, victim->coords); } } else { if(tutoriallevel!=1){ - PlaySoundEx( heavyimpactsound, samp[heavyimpactsound], NULL, true); - FSOUND_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel); - FSOUND_SetVolume(channels[heavyimpactsound], 256); - FSOUND_SetPaused(channels[heavyimpactsound], false); + emit_sound_at(heavyimpactsound, victim->coords); } } - if(victim->damage>victim->damagetolerance-60||normaldotproduct(victim->facing,victim->coords-coords)>0||animation[victim->targetanimation].height==lowheight) + if(victim->damage>victim->damagetolerance-60||normaldotproduct(victim->facing,victim->coords-coords)>0||animation[victim->animTarget].height==lowheight) victim->RagDoll(0); XYZ relative; relative=victim->coords-coords; @@ -3172,69 +2345,41 @@ void Person::DoAnimations(){ } victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].velocity+=relative*damagemult*400; - victim->targetframe=0; - victim->targetanimation=staggerbackhardanim; - victim->targetrotation=targetrotation+180; + victim->frameTarget=0; + victim->animTarget=staggerbackhardanim; + victim->targetyaw=targetyaw+180; victim->target=0; victim->stunned=1; victim->Puff(abdomen); victim->DoDamage(damagemult*60/victim->protectionhigh); - if(id==0){ - SolidHitBonus(); - } + SolidHitBonus(id); } } - if(targetanimation==blockhighleftanim&&animation[targetanimation].label[currentframe]==5){ - if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*4){ + if(animTarget==blockhighleftanim&&animation[animTarget].label[frameCurrent]==5){ + if(distsq(&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); - FSOUND_3D_SetAttributes(channels[landsound2], gLoc, vel); - FSOUND_SetVolume(channels[landsound2], 256); - FSOUND_SetPaused(channels[landsound2], false); + emit_sound_at(landsound2, victim->coords); Puff(righthand); } } - if(targetanimation==swordslashparryanim&&animation[targetanimation].label[currentframe]==5){ - if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*4){ + if(animTarget==swordslashparryanim&&animation[animTarget].label[frameCurrent]==5){ + if(distsq(&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); - FSOUND_3D_SetAttributes(channels[swordstaffsound], gLoc, vel); - FSOUND_SetVolume(channels[swordstaffsound], 512); - FSOUND_SetPaused(channels[swordstaffsound], false); + if(weapons[victim->weaponids[0]].getType()==staff||weapons[weaponids[0]].getType()==staff){ + if(weapons[victim->weaponids[0]].getType()==staff)weapons[victim->weaponids[0]].damage+=.2+float(abs(Random()%100)-50)/250; + if(weapons[weaponids[0]].getType()==staff)weapons[weaponids[0]].damage+=.2+float(abs(Random()%100)-50)/250; + + emit_sound_at(swordstaffsound, victim->coords); } else{ - PlaySoundEx( metalhitsound, samp[metalhitsound], NULL, true); - FSOUND_3D_SetAttributes(channels[metalhitsound], gLoc, vel); - FSOUND_SetVolume(channels[metalhitsound], 512); - FSOUND_SetPaused(channels[metalhitsound], false); + emit_sound_at(metalhitsound, victim->coords); } } @@ -3242,23 +2387,23 @@ void Person::DoAnimations(){ } } - if(targetanimation==knifethrowanim&&animation[targetanimation].label[currentframe]==5){ + if(animTarget==knifethrowanim&&animation[animTarget].label[frameCurrent]==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); + weapons[weaponids[0]].owner=-1; + aim=victim->coords+DoRotation(victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position,0,victim->yaw,0)*victim->scale+victim->velocity*findDistance(&victim->coords,&coords)/50-(coords+DoRotation(skeleton.joints[skeleton.jointlabels[righthand]].position,0,yaw,0)*scale); Normalise(&aim); - /*if(victim->targetanimation==jumpupanim||victim->targetanimation==jumpdownanim){ + /*if(victim->animTarget==jumpupanim||victim->animTarget==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; + weapons[weaponids[0]].velocity=aim*50; + weapons[weaponids[0]].tipvelocity=aim*50; + weapons[weaponids[0]].missed=0; + weapons[weaponids[0]].hitsomething=0; + weapons[weaponids[0]].freetime=0; + weapons[weaponids[0]].firstfree=1; + weapons[weaponids[0]].physics=0; num_weapons--; if(num_weapons){ weaponids[0]=weaponids[num_weapons]; @@ -3267,39 +2412,22 @@ void Person::DoAnimations(){ } } - if(targetanimation==knifeslashstartanim&&animation[targetanimation].label[currentframe]==5){ + if(animTarget==knifeslashstartanim&&animation[animTarget].label[frameCurrent]==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){ + if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*4.5&&/*animation[victim->animTarget].height!=lowheight&&*/victim->animTarget!=dodgebackanim&&victim->animTarget!=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; - } + award_bonus(id, Slicebonus); 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); - FSOUND_3D_SetAttributes(channels[knifeslicesound], gLoc, vel); - FSOUND_SetVolume(channels[knifeslicesound], 512); - FSOUND_SetPaused(channels[knifeslicesound], false); + emit_sound_at(knifeslicesound, victim->coords); } //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(animation[victim->animTarget].attack&&(victim->aitype!=playercontrolled||victim->animTarget==knifeslashstartanim)&&(victim->creature==rabbittype||victim->deathbleeding<=0)){ if(victim->id != 0 || difficulty==2){ - victim->targetframe=0; - victim->targetanimation=staggerbackhardanim; - victim->targetrotation=targetrotation+180; + victim->frameTarget=0; + victim->animTarget=staggerbackhardanim; + victim->targetyaw=targetyaw+180; victim->target=0; } } @@ -3307,8 +2435,8 @@ void Person::DoAnimations(){ 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; + if(tutoriallevel!=1)if(bloodtoggle&&!weapons[weaponids[weaponactive]].bloody)weapons[weaponids[weaponactive]].bloody=1; + if(tutoriallevel!=1)weapons[weaponids[weaponactive]].blooddrip+=3; XYZ footvel,footpoint; footvel=0; @@ -3316,69 +2444,50 @@ void Person::DoAnimations(){ 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; + footpoint=DoRotation((victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position+victim->skeleton.joints[victim->skeleton.jointlabels[neck]].position)/2,0,victim->yaw,0)*victim->scale+victim->coords; } if(tutoriallevel!=1){ - if(bloodtoggle)sprites.MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .6, .3); + if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .6, .3); footvel=DoRotation(facing,0,90,0)*.8; //footvel.y-=.3; - sprites.MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9); - sprites.MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9); - sprites.MakeSprite(bloodflamesprite, footpoint,footvel*5, 1,1,1, .2, 1); - sprites.MakeSprite(bloodflamesprite, footpoint,footvel*2, 1,1,1, .2, 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); } if(tutoriallevel==1){ - sprites.MakeSprite(cloudimpactsprite, footpoint,footvel, 1,1,1, .6, .3); + 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(animTarget==swordslashanim&&animation[animTarget].label[frameCurrent]==5&&victim->animTarget!=rollanim){ + if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5&&victim->animTarget!=dodgebackanim){ if(victim->weaponactive==-1||normaldotproduct(victim->facing,victim->coords-coords)>0||(Random()%2==0)){ - if(id==0){ - bonus=Slashbonus; - bonustime=0; - bonusvalue=40; - } + award_bonus(id, Slashbonus); 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); - FSOUND_3D_SetAttributes(channels[swordslicesound], gLoc, vel); - FSOUND_SetVolume(channels[swordslicesound], 512); - FSOUND_SetPaused(channels[swordslicesound], false); + emit_sound_at(swordslicesound, victim->coords); } //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->frameTarget=0; + victim->animTarget=staggerbackhardanim; + victim->targetyaw=targetyaw+180; victim->target=0; } - //} - //} if(tutoriallevel!=1){ - if(bloodtoggle&&!weapons.bloody[weaponids[weaponactive]])weapons.bloody[weaponids[weaponactive]]=1; - weapons.blooddrip[weaponids[weaponactive]]+=3; + if(bloodtoggle&&!weapons[weaponids[weaponactive]].bloody)weapons[weaponids[weaponactive]].bloody=1; + weapons[weaponids[weaponactive]].blooddrip+=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->bloodloss+=100*(6.5-distsq(&coords,&victim->coords)); victim->DoDamage(damagemult*0); XYZ footvel,footpoint; @@ -3387,43 +2496,27 @@ void Person::DoAnimations(){ 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; + footpoint=DoRotation((victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position+victim->skeleton.joints[victim->skeleton.jointlabels[neck]].position)/2,0,victim->yaw,0)*victim->scale+victim->coords; } - if(bloodtoggle)sprites.MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3); + if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3); footvel=DoRotation(facing,0,90,0)*.8; footvel.y-=.3; - sprites.MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9); - sprites.MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9); - sprites.MakeSprite(bloodflamesprite, footpoint,footvel*5, 1,1,1, .3, 1); - sprites.MakeSprite(bloodflamesprite, footpoint,footvel*2, 1,1,1, .3, 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); } } 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); - FSOUND_3D_SetAttributes(channels[swordstaffsound], gLoc, vel); - FSOUND_SetVolume(channels[swordstaffsound], 512); - FSOUND_SetPaused(channels[swordstaffsound], false); + if(weapons[victim->weaponids[0]].getType()==staff||weapons[weaponids[0]].getType()==staff){ + if(weapons[victim->weaponids[0]].getType()==staff)weapons[victim->weaponids[0]].damage+=.2+float(abs(Random()%100)-50)/250; + if(weapons[weaponids[0]].getType()==staff)weapons[weaponids[0]].damage+=.2+float(abs(Random()%100)-50)/250; + + emit_sound_at(swordstaffsound, victim->coords); } else{ - PlaySoundEx( metalhitsound, samp[metalhitsound], NULL, true); - FSOUND_3D_SetAttributes(channels[metalhitsound], gLoc, vel); - FSOUND_SetVolume(channels[metalhitsound], 512); - FSOUND_SetPaused(channels[metalhitsound], false); + emit_sound_at(metalhitsound, victim->coords); } } @@ -3431,20 +2524,20 @@ void Person::DoAnimations(){ XYZ aim; victim->Puff(righthand); victim->target=0; - victim->targetframe=0; - victim->targetanimation=staggerbackhighanim; - victim->targetrotation=targetrotation+180; + victim->frameTarget=0; + victim->animTarget=staggerbackhighanim; + victim->targetyaw=targetyaw+180; victim->target=0; - weapons.owner[victim->weaponids[0]]=-1; + weapons[victim->weaponids[0]].owner=-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; + weapons[victim->weaponids[0]].velocity=aim*-.2; + weapons[victim->weaponids[0]].tipvelocity=aim; + weapons[victim->weaponids[0]].missed=1; + weapons[weaponids[0]].hitsomething=0; + weapons[victim->weaponids[0]].freetime=0; + weapons[victim->weaponids[0]].firstfree=1; + weapons[victim->weaponids[0]].physics=1; victim->num_weapons--; if(victim->num_weapons){ victim->weaponids[0]=victim->weaponids[num_weapons]; @@ -3455,36 +2548,20 @@ void Person::DoAnimations(){ player[i].wentforweapon=0; } - /*PlaySoundEx( metalhitsound, samp[metalhitsound], NULL, true); - FSOUND_3D_SetAttributes(channels[metalhitsound], gLoc, vel); - FSOUND_SetVolume(channels[metalhitsound], 512); - FSOUND_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(animTarget==staffhitanim&&animation[animTarget].label[frameCurrent]==5&&victim->animTarget!=rollanim){ + if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5&&victim->animTarget!=dodgebackanim&&victim->animTarget!=sweepanim){ if(tutoriallevel!=1){ - weapons.damage[weaponids[0]]+=.4+float(abs(Random()%100)-50)/250; + weapons[weaponids[0]].damage+=.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); - FSOUND_3D_SetAttributes(channels[staffheadsound], gLoc, vel); - FSOUND_SetVolume(channels[staffheadsound], 256); - FSOUND_SetPaused(channels[staffheadsound], false); + emit_sound_at(staffheadsound, victim->coords); } victim->RagDoll(0); XYZ relative; @@ -3504,36 +2581,21 @@ void Person::DoAnimations(){ if(tutoriallevel!=1){ victim->DoDamage(damagemult*120/victim->protectionhigh); - if(id==0){ - bonus=solidhit; - bonustime=0; - bonusvalue=30; - } + award_bonus(id, solidhit, 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(animTarget==staffspinhitanim&&animation[animTarget].label[frameCurrent]==5&&victim->animTarget!=rollanim){ + if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5&&victim->animTarget!=dodgebackanim&&victim->animTarget!=sweepanim){ if(tutoriallevel!=1){ - weapons.damage[weaponids[0]]+=.6+float(abs(Random()%100)-50)/250; + weapons[weaponids[0]].damage+=.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); - FSOUND_3D_SetAttributes(channels[staffheadsound], gLoc, vel); - FSOUND_SetVolume(channels[staffheadsound], 256); - FSOUND_SetPaused(channels[staffheadsound], false); + emit_sound_at(staffheadsound, victim->coords); } victim->RagDoll(0); XYZ relative; @@ -3550,36 +2612,21 @@ void Person::DoAnimations(){ victim->Puff(head); if(tutoriallevel!=1){victim->DoDamage(damagemult*350/victim->protectionhead); - if(id==0){ - bonus=solidhit; - bonustime=0; - bonusvalue=60; - } + award_bonus(id, solidhit, 60); } } } - if(targetanimation==staffgroundsmashanim&&animation[targetanimation].label[currentframe]==5){ - if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5){ + if(animTarget==staffgroundsmashanim&&animation[animTarget].label[frameCurrent]==5){ + if(distsq(&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(!victim->dead)weapons[weaponids[0]].damage+=.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); - FSOUND_3D_SetAttributes(channels[staffbodysound], gLoc, vel); - FSOUND_SetVolume(channels[staffbodysound], 256); - FSOUND_SetPaused(channels[staffbodysound], false); + emit_sound_at(staffbodysound, victim->coords); } victim->skeleton.longdead=0; victim->skeleton.free=1; @@ -3618,38 +2665,24 @@ void Person::DoAnimations(){ if(tutoriallevel!=1){victim->DoDamage(damagemult*100/victim->protectionhigh); if(!victim->dead){ - if(id==0){ - bonus=solidhit; - bonustime=0; - bonusvalue=40; - } + award_bonus(id, solidhit, 40); } } } } - if(targetanimation==lowkickanim&&animation[targetanimation].label[currentframe]==5){ - if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->targetanimation].height!=highheight){ + if(animTarget==lowkickanim&&animation[animTarget].label[frameCurrent]==5){ + if(distsq(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&animation[victim->animTarget].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(); - } + SolidHitBonus(id); - if(animation[victim->targetanimation].height==lowheight){ + if(animation[victim->animTarget].height==lowheight){ if(Random()%2){ victim->spurt=1; DoBlood(.2,250); @@ -3660,19 +2693,13 @@ void Person::DoAnimations(){ } victim->skeleton.joints[victim->skeleton.jointlabels[head]].velocity+=relative*damagemult*200; if(tutoriallevel!=1){ - PlaySoundEx( heavyimpactsound, samp[heavyimpactsound], NULL, true); - FSOUND_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel); - FSOUND_SetVolume(channels[heavyimpactsound], 128); - FSOUND_SetPaused(channels[heavyimpactsound], false); + emit_sound_at(heavyimpactsound, victim->coords, 128.); } 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); - FSOUND_3D_SetAttributes(channels[clawslicesound], gLoc, vel); - FSOUND_SetVolume(channels[clawslicesound], 128); - FSOUND_SetPaused(channels[clawslicesound], false); + emit_sound_at(clawslicesound, victim->coords, 128.); victim->spurt=1; victim->DoBloodBig(2/victim->armorhead,175); } @@ -3683,23 +2710,17 @@ void Person::DoAnimations(){ 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->frameTarget=0; + victim->animTarget=staggerbackhighanim; + victim->targetyaw=targetyaw+180; victim->target=0; if(tutoriallevel!=1){ - PlaySoundEx( landsound2, samp[landsound2], NULL, true); - FSOUND_3D_SetAttributes(channels[landsound2], gLoc, vel); - FSOUND_SetVolume(channels[landsound2], 128); - FSOUND_SetPaused(channels[landsound2], false); + emit_sound_at(landsound2, victim->coords, 128.); } victim->Puff(abdomen); victim->DoDamage(damagemult*30/victim->protectionhigh); if(creature==wolftype){ - PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true); - FSOUND_3D_SetAttributes(channels[clawslicesound], gLoc, vel); - FSOUND_SetVolume(channels[clawslicesound], 128); - FSOUND_SetPaused(channels[clawslicesound], false); + emit_sound_at(clawslicesound, victim->coords, 128.); victim->spurt=1; victim->DoBloodBig(2/victim->armorhigh,170); } @@ -3708,30 +2729,19 @@ void Person::DoAnimations(){ } } - if(targetanimation==sweepanim&&animation[targetanimation].label[currentframe]==5){ - if(victim->targetanimation!=jumpupanim&&findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*3&&victim!=this){ + if(animTarget==sweepanim&&animation[animTarget].label[frameCurrent]==5){ + if(victim->animTarget!=jumpupanim&&distsq(&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); - FSOUND_3D_SetAttributes(channels[landsound2], gLoc, vel); - FSOUND_SetVolume(channels[landsound2], 128); - FSOUND_SetPaused(channels[landsound2], false); + emit_sound_at(landsound2, victim->coords, 128.); } 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){ + if(animation[victim->animTarget].height==middleheight||animation[victim->animCurrent].height==middleheight||victim->damage>=victim->damagetolerance-40){ victim->RagDoll(0); for(i=0;iskeleton.num_joints;i++){ @@ -3758,54 +2768,35 @@ void Person::DoAnimations(){ 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->frameTarget=0; + victim->animTarget=staggerbackhighanim; + victim->targetyaw=targetyaw+180; victim->target=0; if(tutoriallevel!=1){ - PlaySoundEx( landsound2, samp[landsound2], NULL, true); - FSOUND_3D_SetAttributes(channels[landsound2], gLoc, vel); - FSOUND_SetVolume(channels[landsound2], 128); - FSOUND_SetPaused(channels[landsound2], false); + emit_sound_at(landsound2, victim->coords, 128.); } victim->Puff(abdomen); victim->DoDamage(damagemult*30/victim->protectionlow); } - if(id==0){ - SolidHitBonus(); - } + SolidHitBonus(id); } } } - 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){ + if(animation[animTarget].attack==reversal&&(!victim->feint||(victim->lastattack==victim->lastattack2&&victim->lastattack2==victim->lastattack3&&Random()%2)||animTarget==knifefollowanim)){ + if(animTarget==spinkickreversalanim&&animation[animTarget].label[frameCurrent]==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); - FSOUND_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel); - FSOUND_SetVolume(channels[heavyimpactsound], 128); - FSOUND_SetPaused(channels[heavyimpactsound], false); + emit_sound_at(heavyimpactsound, victim->coords, 128.); } if(creature==wolftype){ - PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true); - FSOUND_3D_SetAttributes(channels[clawslicesound], gLoc, vel); - FSOUND_SetVolume(channels[clawslicesound], 128); - FSOUND_SetPaused(channels[clawslicesound], false); + emit_sound_at(clawslicesound, victim->coords, 128); victim->spurt=1; victim->DoBloodBig(2/victim->armorhigh,170); } @@ -3823,17 +2814,13 @@ void Person::DoAnimations(){ victim->Puff(abdomen); victim->DoDamage(damagemult*150/victim->protectionhigh); - if(id==0){ - bonus=Reversal; - bonustime=0; - bonusvalue=60; - } + award_bonus(id, Reversal); } - if((targetanimation==swordslashreversalanim||targetanimation==knifeslashreversalanim||targetanimation==staffhitreversalanim||targetanimation==staffspinhitreversalanim)&&animation[targetanimation].label[currentframe]==5){ + if((animTarget==swordslashreversalanim||animTarget==knifeslashreversalanim||animTarget==staffhitreversalanim||animTarget==staffspinhitreversalanim)&&animation[animTarget].label[frameCurrent]==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; + if(weapons[victim->weaponids[victim->weaponactive]].owner==victim->id){ + weapons[victim->weaponids[victim->weaponactive]].owner=id; weaponactive=0; if(num_weapons>0){ weaponids[num_weapons]=weaponids[victim->weaponactive]; @@ -3850,25 +2837,14 @@ void Person::DoAnimations(){ } } - if(targetanimation==staffhitreversalanim&&animation[targetanimation].label[currentframe]==5){ + if(animTarget==staffhitreversalanim&&animation[animTarget].label[frameCurrent]==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); - FSOUND_3D_SetAttributes(channels[whooshhitsound], gLoc, vel); - FSOUND_SetVolume(channels[whooshhitsound], 128); - FSOUND_SetPaused(channels[whooshhitsound], false); + emit_sound_at(whooshhitsound, victim->coords, 128.); victim->RagDoll(0); XYZ relative; relative=victim->coords-oldcoords; @@ -3884,40 +2860,21 @@ void Person::DoAnimations(){ victim->DoDamage(damagemult*70/victim->protectionhigh); } - if(targetanimation==staffspinhitreversalanim&&animation[targetanimation].label[currentframe]==7){ + if(animTarget==staffspinhitreversalanim&&animation[animTarget].label[frameCurrent]==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; - } + award_bonus(id, staffreversebonus); if(tutoriallevel!=1){ - PlaySoundEx( heavyimpactsound, samp[heavyimpactsound], NULL, true); - FSOUND_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel); - FSOUND_SetVolume(channels[heavyimpactsound], 128); - FSOUND_SetPaused(channels[heavyimpactsound], false); + emit_sound_at(heavyimpactsound, victim->coords, 128.); } victim->RagDoll(0); - if(id==0){ - bonus=staffreversebonus; - bonustime=0; - bonusvalue=100; - } + award_bonus(id, staffreversebonus); // Huh, again? XYZ relative; relative=victim->coords-oldcoords; @@ -3933,7 +2890,7 @@ void Person::DoAnimations(){ victim->DoDamage(damagemult*70/victim->protectionhigh); } - if(targetanimation==upunchreversalanim&&animation[targetanimation].label[currentframe]==7){ + if(animTarget==upunchreversalanim&&animation[animTarget].label[frameCurrent]==7){ escapednum=0; victim->RagDoll(1); XYZ relative; @@ -3957,39 +2914,21 @@ void Person::DoAnimations(){ victim->Puff(abdomen); victim->DoDamage(damagemult*90/victim->protectionhigh); - if(id==0){ - bonus=Reversal; - bonustime=0; - bonusvalue=60; - } + award_bonus(id, Reversal); 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(creature==rabbittype&&weaponactive!=-1)if(weapons[weaponids[0]].getType()==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); - FSOUND_3D_SetAttributes(channels[knifeslicesound], gLoc, vel); - FSOUND_SetVolume(channels[knifeslicesound], 512); - FSOUND_SetPaused(channels[knifeslicesound], false); - if(bloodtoggle&&!weapons.bloody[weaponids[weaponactive]])weapons.bloody[weaponids[weaponactive]]=1; - weapons.blooddrip[weaponids[weaponactive]]+=3; + emit_sound_at(knifeslicesound, victim->coords); + if(bloodtoggle&&!weapons[weaponids[weaponactive]].bloody)weapons[weaponids[weaponactive]].bloody=1; + weapons[weaponids[weaponactive]].blooddrip+=3; } - if(weaponactive==-1&&creature==wolftype){ - PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true); - FSOUND_3D_SetAttributes(channels[clawslicesound], gLoc, vel); - FSOUND_SetVolume(channels[clawslicesound], 128); - FSOUND_SetPaused(channels[clawslicesound], false); + if(weaponactive==-1&&creature==wolftype){; + emit_sound_at(clawslicesound, victim->coords, 128.); victim->spurt=1; victim->DoBloodBig(2/victim->armorhigh,175); } @@ -3998,7 +2937,7 @@ void Person::DoAnimations(){ - if(targetanimation==swordslashreversalanim&&animation[targetanimation].label[currentframe]==7){ + if(animTarget==swordslashreversalanim&&animation[animTarget].label[frameCurrent]==7){ escapednum=0; victim->RagDoll(1); XYZ relative; @@ -4019,52 +2958,18 @@ void Person::DoAnimations(){ 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); - FSOUND_3D_SetAttributes(channels[knifeslicesound], gLoc, vel); - FSOUND_SetVolume(channels[knifeslicesound], 512); - FSOUND_SetPaused(channels[knifeslicesound], false); - if(bloodtoggle&&!weapons.bloody[weaponids[weaponactive]])weapons.bloody[weaponids[weaponactive]]=1; - weapons.blooddrip[weaponids[weaponactive]]+=3; - }*/ + award_bonus(id, swordreversebonus); } - if(hasvictim&&targetanimation==knifeslashreversalanim&&animation[targetanimation].label[currentframe]==7){ + if(hasvictim&&animTarget==knifeslashreversalanim&&animation[animTarget].label[frameCurrent]==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); - FSOUND_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel); - FSOUND_SetVolume(channels[heavyimpactsound], 128); - FSOUND_SetPaused(channels[heavyimpactsound], false); + emit_sound_at(heavyimpactsound, victim->coords, 128.); } victim->RagDoll(0); XYZ relative; @@ -4080,14 +2985,10 @@ void Person::DoAnimations(){ victim->Puff(abdomen); victim->DoDamage(damagemult*30/victim->protectionhigh); - if(id==0){ - bonus=Reversal; - bonustime=0; - bonusvalue=60; - } + award_bonus(id, Reversal); } - if(hasvictim&&targetanimation==sneakattackanim&&animation[targetanimation].label[currentframe]==7){ + if(hasvictim&&animTarget==sneakattackanim&&animation[animTarget].label[frameCurrent]==7){ escapednum=0; victim->RagDoll(0); victim->skeleton.spinny=0; @@ -4105,275 +3006,178 @@ void Person::DoAnimations(){ 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(creature==rabbittype&&weaponactive!=-1)if(weapons[weaponids[0]].getType()==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); - FSOUND_3D_SetAttributes(channels[knifeslicesound], gLoc, vel); - FSOUND_SetVolume(channels[knifeslicesound], 512); - FSOUND_SetPaused(channels[knifeslicesound], false); - if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2; - weapons.blooddrip[weaponids[weaponactive]]+=5; + emit_sound_at(knifeslicesound, victim->coords); + if(bloodtoggle)weapons[weaponids[weaponactive]].bloody=2; + weapons[weaponids[weaponactive]].blooddrip+=5; } if(creature==wolftype&&weaponactive==-1){ - PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true); - FSOUND_3D_SetAttributes(channels[clawslicesound], gLoc, vel); - FSOUND_SetVolume(channels[clawslicesound], 128); - FSOUND_SetPaused(channels[clawslicesound], false); + emit_sound_at(clawslicesound, victim->coords, 128.); victim->spurt=1; victim->DoBloodBig(2,175); } } - if(id==0){ - bonus=spinecrusher; - bonustime=0; - bonusvalue=100; - } + award_bonus(id, spinecrusher); } - if(hasvictim&&(targetanimation==knifefollowanim||targetanimation==knifesneakattackanim)&&animation[targetanimation].label[currentframe]==5){ + if(hasvictim&&(animTarget==knifefollowanim||animTarget==knifesneakattackanim)&&animation[animTarget].label[frameCurrent]==5){ if(weaponactive!=-1&&victim->bloodlossdamagetolerance){ escapednum=0; - if(targetanimation==knifefollowanim)victim->DoBloodBig(200,210); - if(targetanimation==knifesneakattackanim){ + if(animTarget==knifefollowanim)victim->DoBloodBig(200,210); + if(animTarget==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; - sprites.MakeSprite(bloodsprite, DoRotation(skeleton.joints[skeleton.jointlabels[neck]].position,0,rotation,0)*scale+coords,bloodvel, 1,1,1, .05, 1); + bloodvel=DoRotation(bloodvel,((float)(Random()%100))/4,yaw+((float)(Random()%100))/4,0)*scale; + Sprite::MakeSprite(bloodsprite, DoRotation(skeleton.joints[skeleton.jointlabels[neck]].position,0,yaw,0)*scale+coords,bloodvel, 1,1,1, .05, 1); */ XYZ footvel,footpoint; footvel=0; - footpoint=weapons.tippoint[weaponids[0]]; - if(bloodtoggle)sprites.MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3); - footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]]); - sprites.MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9); - sprites.MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9); - sprites.MakeSprite(bloodflamesprite, footpoint,footvel*5, 1,1,1, .3, 1); - sprites.MakeSprite(bloodflamesprite, footpoint,footvel*2, 1,1,1, .3, 1); + footpoint=weapons[weaponids[0]].tippoint; + if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3); + footvel=(weapons[weaponids[0]].tippoint-weapons[weaponids[0]].position); + 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; + award_bonus(id, tracheotomy); } - if(targetanimation==knifefollowanim){ - if(id==0){ - bonus=Stabbonus; - bonustime=0; - bonusvalue=40; - } + if(animTarget==knifefollowanim){ + award_bonus(id, Stabbonus); XYZ footvel,footpoint; footvel=0; - footpoint=weapons.tippoint[weaponids[0]]; - if(bloodtoggle)sprites.MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3); - footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]])*-1; - sprites.MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9); - sprites.MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9); - sprites.MakeSprite(bloodflamesprite, footpoint,footvel*5, 1,1,1, .2, 1); - sprites.MakeSprite(bloodflamesprite, footpoint,footvel*2, 1,1,1, .2, 1); + footpoint=weapons[weaponids[0]].tippoint; + if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3); + footvel=(weapons[weaponids[0]].tippoint-weapons[weaponids[0]].position)*-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); - FSOUND_3D_SetAttributes(channels[fleshstabsound], gLoc, vel); - FSOUND_SetVolume(channels[fleshstabsound], 512); - FSOUND_SetPaused(channels[fleshstabsound], false); - if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2; - weapons.blooddrip[weaponids[weaponactive]]+=5; + emit_sound_at(fleshstabsound, victim->coords); + if(bloodtoggle)weapons[weaponids[weaponactive]].bloody=2; + weapons[weaponids[weaponactive]].blooddrip+=5; } } - if(hasvictim&&(targetanimation==knifefollowanim||targetanimation==knifesneakattackanim)&&animation[targetanimation].label[currentframe]==6){ + if(hasvictim&&(animTarget==knifefollowanim||animTarget==knifesneakattackanim)&&animation[animTarget].label[frameCurrent]==6){ escapednum=0; victim->velocity=0; for(i=0;iskeleton.num_joints;i++){ victim->skeleton.joints[i].velocity=0; } - if(targetanimation==knifefollowanim){ + if(animTarget==knifefollowanim){ victim->RagDoll(0); for(i=0;iskeleton.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); - FSOUND_3D_SetAttributes(channels[fleshstabremovesound], gLoc, vel); - FSOUND_SetVolume(channels[fleshstabremovesound], 512); - FSOUND_SetPaused(channels[fleshstabremovesound], false); - if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2; - weapons.blooddrip[weaponids[weaponactive]]+=5; + if(weaponactive!=-1&&animation[victim->animTarget].attack!=reversal){ + emit_sound_at(fleshstabremovesound, victim->coords); + if(bloodtoggle)weapons[weaponids[weaponactive]].bloody=2; + weapons[weaponids[weaponactive]].blooddrip+=5; XYZ footvel,footpoint; footvel=0; - footpoint=weapons.tippoint[weaponids[0]]; - if(bloodtoggle)sprites.MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3); - footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]])*-1; - sprites.MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9); - sprites.MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9); - sprites.MakeSprite(bloodflamesprite, footpoint,footvel*5, 1,1,1, .3, 1); - sprites.MakeSprite(bloodflamesprite, footpoint,footvel*2, 1,1,1, .3, 1); + footpoint=weapons[weaponids[0]].tippoint; + if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3); + footvel=(weapons[weaponids[0]].tippoint-weapons[weaponids[0]].position)*-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(hasvictim&&(animTarget==swordsneakattackanim)&&animation[animTarget].label[frameCurrent]==5){ if(weaponactive!=-1&&victim->bloodlossdamagetolerance){ - if(id==0){ - bonus=backstab; - bonustime=0; - bonusvalue=100; - } + award_bonus(id, backstab); escapednum=0; XYZ footvel,footpoint; footvel=0; - footpoint=(weapons.tippoint[weaponids[0]]+weapons.position[weaponids[0]])/2; - if(bloodtoggle)sprites.MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3); - footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]]); - sprites.MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9); - sprites.MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9); - sprites.MakeSprite(bloodflamesprite, footpoint,DoRotation(footvel*5,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .3, 1); - sprites.MakeSprite(bloodflamesprite, footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .3, 1); + footpoint=(weapons[weaponids[0]].tippoint+weapons[weaponids[0]].position)/2; + if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3); + footvel=(weapons[weaponids[0]].tippoint-weapons[weaponids[0]].position); + 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); - FSOUND_3D_SetAttributes(channels[fleshstabsound], gLoc, vel); - FSOUND_SetVolume(channels[fleshstabsound], 512); - FSOUND_SetPaused(channels[fleshstabsound], false); - if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2; - weapons.blooddrip[weaponids[weaponactive]]+=5; + emit_sound_at(fleshstabsound, victim->coords); + if(bloodtoggle)weapons[weaponids[weaponactive]].bloody=2; + weapons[weaponids[weaponactive]].blooddrip+=5; } } - if(hasvictim&&targetanimation==swordsneakattackanim&&animation[targetanimation].label[currentframe]==6){ + if(hasvictim&&animTarget==swordsneakattackanim&&animation[animTarget].label[frameCurrent]==6){ escapednum=0; victim->velocity=0; for(i=0;iskeleton.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); - FSOUND_3D_SetAttributes(channels[fleshstabremovesound], gLoc, vel); - FSOUND_SetVolume(channels[fleshstabremovesound], 512); - FSOUND_SetPaused(channels[fleshstabremovesound], false); - if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2; - weapons.blooddrip[weaponids[weaponactive]]+=5; + emit_sound_at(fleshstabremovesound, victim->coords); + if(bloodtoggle)weapons[weaponids[weaponactive]].bloody=2; + weapons[weaponids[weaponactive]].blooddrip+=5; XYZ footvel,footpoint; footvel=0; - footpoint=weapons.tippoint[weaponids[0]]; - if(bloodtoggle)sprites.MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3); - footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]])*-1; - sprites.MakeSprite(bloodsprite,footpoint,DoRotation(footvel*7,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9); - sprites.MakeSprite(bloodsprite,footpoint,DoRotation(footvel*3,(float)(Random()%20),(float)(Random()%20),0), 1,1,1, .05, .9); - sprites.MakeSprite(bloodflamesprite, footpoint,footvel*5, 1,1,1, .3, 1); - sprites.MakeSprite(bloodflamesprite, footpoint,footvel*2, 1,1,1, .3, 1); + footpoint=weapons[weaponids[0]].tippoint; + if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3); + footvel=(weapons[weaponids[0]].tippoint-weapons[weaponids[0]].position)*-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){ + if(animTarget==sweepreversalanim&&animation[animTarget].label[frameCurrent]==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); - FSOUND_3D_SetAttributes(channels[heavyimpactsound], gLoc, vel); - FSOUND_SetVolume(channels[heavyimpactsound], 128); - FSOUND_SetPaused(channels[heavyimpactsound], false); + emit_sound_at(heavyimpactsound, victim->coords, 128.); } } 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(creature==rabbittype&&weaponactive!=-1)if(weapons[weaponids[0]].getType()==staff)doslice=0; if(doslice){ if(weaponactive!=-1){ victim->DoBloodBig(2/victim->armorhead,225); - PlaySoundEx( knifeslicesound, samp[knifeslicesound], NULL, true); - FSOUND_3D_SetAttributes(channels[knifeslicesound], gLoc, vel); - FSOUND_SetVolume(channels[knifeslicesound], 512); - FSOUND_SetPaused(channels[knifeslicesound], false); - if(bloodtoggle&&!weapons.bloody[weaponids[weaponactive]])weapons.bloody[weaponids[weaponactive]]=1; - weapons.blooddrip[weaponids[weaponactive]]+=3; + emit_sound_at(knifeslicesound, victim->coords); + if(bloodtoggle&&!weapons[weaponids[weaponactive]].bloody)weapons[weaponids[weaponactive]].bloody=1; + weapons[weaponids[weaponactive]].blooddrip+=3; } if(weaponactive==-1&&creature==wolftype){ - PlaySoundEx( clawslicesound, samp[clawslicesound], NULL, true); - FSOUND_3D_SetAttributes(channels[clawslicesound], gLoc, vel); - FSOUND_SetVolume(channels[clawslicesound], 128); - FSOUND_SetPaused(channels[clawslicesound], false); + emit_sound_at(clawslicesound, victim->coords, 128.); victim->spurt=1; victim->DoBloodBig(2/victim->armorhead,175); } } - if(id==0){ - bonus=Reversal; - bonustime=0; - bonusvalue=60; - } + award_bonus(id, Reversal); victim->Puff(neck); @@ -4394,7 +3198,7 @@ void Person::DoAnimations(){ victim->velocity=0; } - if(targetanimation==sweepreversalanim&&((animation[targetanimation].label[currentframe]==9&&victim->damagedamagetolerance)||(animation[targetanimation].label[currentframe]==7&&victim->damage>victim->damagetolerance))){ + if(animTarget==sweepreversalanim&&((animation[animTarget].label[frameCurrent]==9&&victim->damagedamagetolerance)||(animation[animTarget].label[frameCurrent]==7&&victim->damage>victim->damagetolerance))){ escapednum=0; victim->RagDoll(0); XYZ relative; @@ -4411,67 +3215,51 @@ void Person::DoAnimations(){ 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(hasvictim&&(animTarget==spinkickreversalanim||animTarget==sweepreversalanim||animTarget==rabbitkickreversalanim||animTarget==upunchreversalanim||animTarget==jumpreversalanim||animTarget==swordslashreversalanim||animTarget==knifeslashreversalanim||animTarget==rabbittacklereversal||animTarget==wolftacklereversal||animTarget==staffhitreversalanim||animTarget==staffspinhitreversalanim)) if(victim->damage>victim->damagetolerance&&bonus!=reverseko){ - if(id==0){ - bonus=reverseko; - bonustime=0; - bonusvalue=100; - } + award_bonus(id, reverseko); } } //Animation end - if(targetframe>animation[currentanimation].numframes-1){ - targetframe=0; + if(frameTarget>animation[animCurrent].numframes-1){ + frameTarget=0; if(wasStop()){ - targetanimation=getIdle(); + animTarget=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); - FSOUND_3D_SetAttributes(channels[movewhooshsound], gLoc, vel); - FSOUND_SetVolume(channels[movewhooshsound], 128); - FSOUND_SetPaused(channels[movewhooshsound], false); + if(animCurrent==rabbittackleanim||animCurrent==rabbittacklinganim){ + animTarget=rollanim; + frameTarget=3; + emit_sound_at(movewhooshsound, coords, 128.); } - if(currentanimation==staggerbackhighanim){ - targetanimation=getIdle(); + if(animCurrent==staggerbackhighanim){ + animTarget=getIdle(); } - if(currentanimation==staggerbackhardanim){ - targetanimation=getIdle(); + if(animCurrent==staggerbackhardanim){ + animTarget=getIdle(); } - if(currentanimation==removeknifeanim){ - targetanimation=getIdle(); + if(animCurrent==removeknifeanim){ + animTarget=getIdle(); } - if(currentanimation==crouchremoveknifeanim){ - targetanimation=getCrouch(); + if(animCurrent==crouchremoveknifeanim){ + animTarget=getCrouch(); } - if(currentanimation==backhandspringanim){ - targetanimation=getIdle(); + if(animCurrent==backhandspringanim){ + animTarget=getIdle(); } - if(currentanimation==dodgebackanim){ - targetanimation=getIdle(); + if(animCurrent==dodgebackanim){ + animTarget=getIdle(); } - if(currentanimation==drawleftanim){ - targetanimation=getIdle(); + if(animCurrent==drawleftanim){ + animTarget=getIdle(); } - if(currentanimation==drawrightanim||currentanimation==crouchdrawrightanim){ - targetanimation=getIdle(); - if(currentanimation==crouchdrawrightanim){ - targetanimation=getCrouch(); + if(animCurrent==drawrightanim||animCurrent==crouchdrawrightanim){ + animTarget=getIdle(); + if(animCurrent==crouchdrawrightanim){ + animTarget=getCrouch(); } if(weaponactive==-1)weaponactive=0; else if(weaponactive==0){ @@ -4485,53 +3273,29 @@ void Person::DoAnimations(){ } 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); - FSOUND_3D_SetAttributes(channels[knifesheathesound], gLoc, vel); - FSOUND_SetVolume(channels[knifesheathesound], 128); - FSOUND_SetPaused(channels[knifesheathesound], false); + emit_sound_at(knifesheathesound, coords, 128.); } 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); - FSOUND_3D_SetAttributes(channels[knifedrawsound], gLoc, vel); - FSOUND_SetVolume(channels[knifedrawsound], 128); - FSOUND_SetPaused(channels[knifedrawsound], false); + emit_sound_at(knifedrawsound, coords, 128.); } } - if(currentanimation==rollanim){ - targetanimation=getCrouch(); + if(animCurrent==rollanim){ + animTarget=getCrouch(); FootLand(0,1); FootLand(1,1); } if(isFlip()){ - if(targetanimation==walljumprightkickanim){ + if(animTarget==walljumprightkickanim){ targetrot=-190; } - if(targetanimation==walljumpleftkickanim){ + if(animTarget==walljumpleftkickanim){ targetrot=190; } - targetanimation=jumpdownanim; + animTarget=jumpdownanim; } - if(currentanimation==climbanim){ - targetanimation=getCrouch(); - targetframe=1; + if(animCurrent==climbanim){ + animTarget=getCrouch(); + frameTarget=1; coords+=facing*.1; if(!isnormal(coords.x)) coords=oldcoords; @@ -4544,23 +3308,23 @@ void Person::DoAnimations(){ collided=0; avoidcollided=0; } - if(targetanimation==rabbitkickreversalanim){ - targetanimation=getCrouch(); + if(animTarget==rabbitkickreversalanim){ + animTarget=getCrouch(); lastfeint=0; } - if(targetanimation==jumpreversalanim){ - targetanimation=getCrouch(); + if(animTarget==jumpreversalanim){ + animTarget=getCrouch(); lastfeint=0; } - if(targetanimation==walljumprightanim||targetanimation==walljumpbackanim||targetanimation==walljumpfrontanim){ - if(attackkeydown&&targetanimation!=walljumpfrontanim){ + if(animTarget==walljumprightanim||animTarget==walljumpbackanim||animTarget==walljumpfrontanim){ + if(attackkeydown&&animTarget!=walljumpfrontanim){ int closest=-1; float closestdist=-1; float distance; if(numplayers>1) for(i=0;i0&&closest>=0&&closestdist<16){ victim=&player[closest]; - targetanimation=walljumprightkickanim; - targetframe=0; + animTarget=walljumprightkickanim; + frameTarget=0; XYZ rotatetarget=victim->coords-coords; Normalise(&rotatetarget); - rotation=-asin(0-rotatetarget.x); - rotation*=360/6.28; - if(rotatetarget.z<0)rotation=180-rotation; + yaw=-asin(0-rotatetarget.x); + yaw*=360/6.28; + if(rotatetarget.z<0)yaw=180-yaw; targettilt2=-asin(rotatetarget.y)*360/6.28; velocity=(victim->coords-coords)*4; velocity.y+=2; transspeed=40; } } - if(targetanimation==walljumpbackanim){ - targetanimation=backflipanim; - targetframe=3; + if(animTarget==walljumpbackanim){ + animTarget=backflipanim; + frameTarget=3; velocity=facing*-8; velocity.y=4; - if(id==0)FSOUND_SetPaused(channels[whooshsound], false); + if(id==0) + resume_stream(whooshsound); } - if(targetanimation==walljumprightanim){ - targetanimation=rightflipanim; - targetframe=4; - targetrotation-=90; - rotation-=90; + if(animTarget==walljumprightanim){ + animTarget=rightflipanim; + frameTarget=4; + targetyaw-=90; + yaw-=90; velocity=DoRotation(facing,0,30,0)*-8; velocity.y=4; } - if(targetanimation==walljumpfrontanim){ - targetanimation=frontflipanim; - targetframe=2; - //targetrotation-=180; - ////rotation-=180; + if(animTarget==walljumpfrontanim){ + animTarget=frontflipanim; + frameTarget=2; + //targetyaw-=180; + ////yaw-=180; velocity=facing*8; velocity.y=4; } - if(id==0)FSOUND_SetPaused(channels[whooshsound], false); + if(id==0) + resume_stream(whooshsound); } - if(targetanimation==walljumpleftanim){ + if(animTarget==walljumpleftanim){ if(attackkeydown){ int closest=-1; float closestdist=-1; @@ -4615,7 +3381,7 @@ void Person::DoAnimations(){ if(numplayers>1) for(i=0;i0&&closest>=0&&closestdist<16){ victim=&player[closest]; - targetanimation=walljumpleftkickanim; - targetframe=0; + animTarget=walljumpleftkickanim; + frameTarget=0; XYZ rotatetarget=victim->coords-coords; Normalise(&rotatetarget); - rotation=-asin(0-rotatetarget.x); - rotation*=360/6.28; - if(rotatetarget.z<0)rotation=180-rotation; + yaw=-asin(0-rotatetarget.x); + yaw*=360/6.28; + if(rotatetarget.z<0)yaw=180-yaw; 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; + if(animTarget!=walljumpleftkickanim){ + animTarget=leftflipanim; + frameTarget=4; + targetyaw+=90; + yaw+=90; velocity=DoRotation(facing,0,-30,0)*-8; velocity.y=4; } - if(id==0)FSOUND_SetPaused(channels[whooshsound], false); + if(id==0) + resume_stream(whooshsound); } - if(targetanimation==sneakattackanim){ - float ycoords=oldcoords.y; - currentanimation=getCrouch(); - targetanimation=getCrouch(); - targetframe=1; - currentframe=0; - targetrotation+=180; - rotation+=180; + if(animTarget==sneakattackanim){ + animCurrent=getCrouch(); + animTarget=getCrouch(); + frameTarget=1; + frameCurrent=0; + targetyaw+=180; + yaw+=180; targettilt2*=-1; tilt2*=-1; transspeed=1000000; - targetheadrotation+=180; + targetheadyaw+=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(animTarget==knifesneakattackanim||animTarget==swordsneakattackanim){ + animTarget=getIdle(); + frameTarget=0; if(onterrain)coords.y=terrain.getHeight(coords.x,coords.z); lastfeint=0; } - if(currentanimation==knifefollowanim){ - targetanimation=getIdle(); + if(animCurrent==knifefollowanim){ + animTarget=getIdle(); lastfeint=0; } - if(animation[targetanimation].attack==reversal&¤tanimation!=sneakattackanim&¤tanimation!=knifesneakattackanim&¤tanimation!=swordsneakattackanim&¤tanimation!=knifefollowanim){ + if(animation[animTarget].attack==reversal&&animCurrent!=sneakattackanim&&animCurrent!=knifesneakattackanim&&animCurrent!=swordsneakattackanim&&animCurrent!=knifefollowanim){ float ycoords=oldcoords.y; - targetanimation=getStop(); - targetrotation+=180; - rotation+=180; + animTarget=getStop(); + targetyaw+=180; + yaw+=180; targettilt2*=-1; tilt2*=-1; transspeed=1000000; - targetheadrotation+=180; + targetheadyaw+=180; if(!isnormal(coords.x)) coords=oldcoords; - if(currentanimation==spinkickreversalanim||currentanimation==swordslashreversalanim) + if(animCurrent==spinkickreversalanim||animCurrent==swordslashreversalanim) oldcoords=coords+facing*.5; - else if(currentanimation==sweepreversalanim) + else if(animCurrent==sweepreversalanim) oldcoords=coords+facing*1.1; - else if(currentanimation==upunchreversalanim){ + else if(animCurrent==upunchreversalanim){ oldcoords=coords+facing*1.5; - targetrotation+=180; - rotation+=180; - targetheadrotation+=180; + targetyaw+=180; + yaw+=180; + targetheadyaw+=180; targettilt2*=-1; tilt2*=-1; } - else if(currentanimation==knifeslashreversalanim){ + else if(animCurrent==knifeslashreversalanim){ oldcoords=coords+facing*.5; - targetrotation+=90; - rotation+=90; - targetheadrotation+=90; + targetyaw+=90; + yaw+=90; + targetheadyaw+=90; targettilt2=0; tilt2=0; } - else if(currentanimation==staffspinhitreversalanim){ - targetrotation+=180; - rotation+=180; - targetheadrotation+=180; + else if(animCurrent==staffspinhitreversalanim){ + targetyaw+=180; + yaw+=180; + targetheadyaw+=180; targettilt2=0; tilt2=0; } @@ -4722,189 +3487,178 @@ void Person::DoAnimations(){ lastfeint=0; } - if(currentanimation==knifesneakattackedanim||currentanimation==swordsneakattackedanim){ + if(animCurrent==knifesneakattackedanim||animCurrent==swordsneakattackedanim){ velocity=0; velocity.y=-5; RagDoll(0); } - if(animation[targetanimation].attack==reversed){ + if(animation[animTarget].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); - FSOUND_3D_SetAttributes(channels[landsound], gLoc, vel); - FSOUND_SetVolume(channels[landsound], 128); - FSOUND_SetPaused(channels[landsound], false); - - if(currentanimation==upunchreversedanim||currentanimation==swordslashreversedanim){ - targetanimation=rollanim; - targetframe=5; + if(animTarget==sweepreversedanim)targetyaw+=90; + animTarget=backhandspringanim; + frameTarget=2; + emit_sound_at(landsound, coords, 128); + + if(animCurrent==upunchreversedanim||animCurrent==swordslashreversedanim){ + animTarget=rollanim; + frameTarget=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+=(DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)+DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0))/2*scale; coords.y=oldcoords.y; } - if(currentanimation==knifeslashreversedanim){ - targetanimation=rollanim; - targetframe=0; - targetrotation+=90; - rotation+=90; + if(animCurrent==knifeslashreversedanim){ + animTarget=rollanim; + frameTarget=0; + targetyaw+=90; + yaw+=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+=(DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)+DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0))/2*scale; coords.y=oldcoords.y; } } if(wasFlip()){ - targetanimation=jumpdownanim; + animTarget=jumpdownanim; } - if(wasLanding())targetanimation=getIdle(); - if(wasLandhard())targetanimation=getIdle(); - if(currentanimation==spinkickanim||currentanimation==getupfrombackanim||currentanimation==getupfromfrontanim||currentanimation==lowkickanim){ - targetanimation=getIdle(); + if(wasLanding())animTarget=getIdle(); + if(wasLandhard())animTarget=getIdle(); + if(animCurrent==spinkickanim||animCurrent==getupfrombackanim||animCurrent==getupfromfrontanim||animCurrent==lowkickanim){ + animTarget=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+=(DoRotation(skeleton.joints[skeleton.jointlabels[leftfoot]].position,0,yaw,0)+DoRotation(skeleton.joints[skeleton.jointlabels[rightfoot]].position,0,yaw,0))/2*scale; coords.y=oldcoords.y; - //coords+=DoRotation(animation[currentanimation].offset,0,rotation,0)*scale; + //coords+=DoRotation(animation[animCurrent].offset,0,yaw,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=DoRotation(animation[animCurrent].offset*-1,0,yaw,0)*scale; currentoffset.y-=(coords.y-targetoffset.y); coords.y=targetoffset.y; targetoffset=0; normalsupdatedelay=0; } - if(currentanimation==upunchanim){ - targetanimation=getStop(); + if(animCurrent==upunchanim){ + animTarget=getStop(); normalsupdatedelay=0; lastfeint=0; } - if(currentanimation==rabbitkickanim&&targetanimation!=backflipanim){ - targetrotation=rotation; + if(animCurrent==rabbitkickanim&&animTarget!=backflipanim){ + targetyaw=yaw; bool hasstaff; hasstaff=0; - if(num_weapons>0)if(weapons.type[0]==staff)hasstaff=1; + if(num_weapons>0)if(weapons[0].getType()==staff)hasstaff=1; if(!hasstaff)DoDamage(35); RagDoll(0); lastfeint=0; rabbitkickragdoll=1; } - if(currentanimation==rabbitkickreversedanim){ + if(animCurrent==rabbitkickreversedanim){ if(!feint){ velocity=0; velocity.y=-10; //DoDamage(100); RagDoll(0); skeleton.spinny=0; - if(id!=0)SolidHitBonus(); + SolidHitBonus(!id); // FIXME: tricky id } if(feint){ escapednum++; - targetanimation=rollanim; + animTarget=rollanim; coords+=facing; - if(id==0)FSOUND_SetPaused(channels[whooshsound], true); + if(id==0)pause_sound(whooshsound); } lastfeint=0; } - if(currentanimation==rabbittackledbackanim||currentanimation==rabbittackledfrontanim){ + if(animCurrent==rabbittackledbackanim||animCurrent==rabbittackledfrontanim){ velocity=0; velocity.y=-10; RagDoll(0); skeleton.spinny=0; } - if(currentanimation==jumpreversedanim){ + if(animCurrent==jumpreversedanim){ if(!feint){ velocity=0; velocity.y=-10; //DoDamage(100); RagDoll(0); skeleton.spinny=0; - if(id!=0)SolidHitBonus(); + SolidHitBonus(!id); // FIXME: tricky id } if(feint){ escapednum++; - targetanimation=rollanim; + animTarget=rollanim; coords+=facing*2; - if(id==0)FSOUND_SetPaused(channels[whooshsound], true); + if(id==0)pause_sound(whooshsound); } 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; + if(animation[animCurrent].attack==normalattack&&!victim->skeleton.free&&victim->animTarget!=staggerbackhighanim&&victim->animTarget!=staggerbackhardanim&&animTarget!=winduppunchblockedanim&&animTarget!=blockhighleftanim&&animTarget!=swordslashparryanim&&animTarget!=swordslashparriedanim&&animTarget!=crouchstabanim&&animTarget!=swordgroundstabanim){ + animTarget=getupfromfrontanim; lastfeint=0; } - else if(animation[currentanimation].attack==normalattack){ - targetanimation=getIdle(); + else if(animation[animCurrent].attack==normalattack){ + animTarget=getIdle(); lastfeint=0; } - if(currentanimation==blockhighleftanim&&aitype!=playercontrolled){ - targetanimation=blockhighleftstrikeanim; + if(animCurrent==blockhighleftanim&&aitype!=playercontrolled){ + animTarget=blockhighleftstrikeanim; } - if(currentanimation==knifeslashstartanim||currentanimation==knifethrowanim||currentanimation==swordslashanim||currentanimation==staffhitanim||currentanimation==staffgroundsmashanim||currentanimation==staffspinhitanim){ - targetanimation=getIdle(); + if(animCurrent==knifeslashstartanim||animCurrent==knifethrowanim||animCurrent==swordslashanim||animCurrent==staffhitanim||animCurrent==staffgroundsmashanim||animCurrent==staffspinhitanim){ + animTarget=getIdle(); lastfeint=0; } - if(currentanimation==spinkickanim&&victim->skeleton.free){ - if(creature==rabbittype)targetanimation=fightidleanim; + if(animCurrent==spinkickanim&&victim->skeleton.free){ + if(creature==rabbittype)animTarget=fightidleanim; } } target=0; if(isIdle()&&!wasIdle())normalsupdatedelay=0; - if(currentanimation==jumpupanim&&velocity.y<0&&!isFlip()){ - targetanimation=jumpdownanim; + if(animCurrent==jumpupanim&&velocity.y<0&&!isFlip()){ + animTarget=jumpdownanim; } } if(!skeleton.free){ oldtarget=target; - if(!transspeed&&animation[targetanimation].attack!=2&&animation[targetanimation].attack!=3){ + if(!transspeed&&animation[animTarget].attack!=2&&animation[animTarget].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(animation[animTarget].speed[frameTarget]>animation[animCurrent].speed[frameCurrent]) + target+=multiplier*animation[animTarget].speed[frameTarget]*speed*2; + if(animation[animTarget].speed[frameTarget]<=animation[animCurrent].speed[frameCurrent]) + target+=multiplier*animation[animCurrent].speed[frameCurrent]*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); + target+=multiplier*animation[animTarget].speed[frameCurrent]*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(animation[animTarget].speed[frameTarget]>animation[animCurrent].speed[frameCurrent]) + target+=multiplier*animation[animTarget].speed[frameTarget]*2; + if(animation[animTarget].speed[frameTarget]<=animation[animCurrent].speed[frameCurrent]) + target+=multiplier*animation[animCurrent].speed[frameCurrent]*2; } } - if(currentanimation!=targetanimation)target=(target+oldtarget)/2; + if(animCurrent!=animTarget)target=(target+oldtarget)/2; - if(target>1){currentframe=targetframe; target=1;} + if(target>1){frameCurrent=frameTarget; target=1;} oldrot=rot; rot=targetrot*target; - rotation+=rot-oldrot; + yaw+=rot-oldrot; if(target==1){ rot=0; oldrot=0; targetrot=0; } - if(currentanimation!=oldcurrentanimation||targetanimation!=oldtargetanimation||((currentframe!=oldcurrentframe||targetframe!=oldtargetframe)&&!calcrot)){ + if(animCurrent!=oldanimCurrent||animTarget!=oldanimTarget||((frameCurrent!=oldframeCurrent||frameTarget!=oldframeTarget)&&!calcrot)){ //Old rotates for(i=0;i=animation[currentanimation].numframes)currentframe=animation[currentanimation].numframes-1; + if(frameCurrent>=animation[animCurrent].numframes)frameCurrent=animation[animCurrent].numframes-1; - oldcurrentanimation=currentanimation; - oldtargetanimation=targetanimation; - oldtargetframe=targetframe; - oldcurrentframe=currentframe; + oldanimCurrent=animCurrent; + oldanimTarget=animTarget; + oldframeTarget=frameTarget; + oldframeCurrent=frameCurrent; for(i=0;ifast_sqrt(velocity.x*velocity.x*velocity.z*velocity.z)){ if(id==0)camerashake+=.4; - targetanimation=getLandhard(); - targetframe=0; + animTarget=getLandhard(); + frameTarget=0; target=0; landhard=0; transspeed=15; - //} } } //skeleton.DoConstraints(); @@ -4998,7 +3750,6 @@ void Person::DoStuff(){ static int howmany; static int bloodsize; static int startx,starty,endx,endy; - static int texdetailint; static GLubyte color; static XYZ bloodvel; @@ -5044,24 +3795,18 @@ void Person::DoStuff(){ 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){ + if(aitype==attacktypecutoff&&(player[0].isIdle()||player[0].isCrouch()||player[0].skeleton.free||player[0].animTarget==getupfrombackanim||player[0].animTarget==getupfromfrontanim||player[0].animTarget==sneakanim)&&distsq(&coords,&player[0].coords)<16){ superruntoggle=0; } } if(scale<0.2)superruntoggle=0; - if(targetanimation==wolfrunninganim&&!superruntoggle){ - targetanimation=getRun(); - targetframe=0; + if(animTarget==wolfrunninganim&&!superruntoggle){ + animTarget=getRun(); + frameTarget=0; } - /*static float toggledelay; - toggledelay-=multiplier; - if(toggledelay<0){ - toggledelay=1; - if(Random()%3==0)superruntoggle=1-superruntoggle; - }*/ } if(weaponactive==-1&&num_weapons>0){ - if(weapons.type[weaponids[0]]==staff){ + if(weapons[weaponids[0]].getType()==staff){ weaponactive=0; } } @@ -5072,9 +3817,9 @@ void Person::DoStuff(){ /*if(aitype!=playercontrolled)*/ deathbleeding=1; if(burnt>.6)burnt=.6; - FSOUND_SetVolume(channels[stream_firesound], 256+256*findLength(&velocity)/3); + OPENAL_SetVolume(channels[stream_firesound], 256+256*findLength(&velocity)/3); - if(targetanimation==jumpupanim||targetanimation==jumpdownanim||isFlip()){ + if(animTarget==jumpupanim||animTarget==jumpdownanim||isFlip()){ float gLoc[3]; float vel[3]; gLoc[0]=coords.x; @@ -5085,8 +3830,8 @@ void Person::DoStuff(){ vel[2]=velocity.z; if(id==0){ - FSOUND_3D_SetAttributes(channels[whooshsound], gLoc, vel); - FSOUND_SetVolume(channels[whooshsound], 64*findLength(&velocity)/5); + OPENAL_3D_SetAttributes(channels[whooshsound], gLoc, vel); + OPENAL_SetVolume(channels[whooshsound], 64*findLength(&velocity)/5); } } } @@ -5095,9 +3840,9 @@ void Person::DoStuff(){ 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=DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position,0,0,tilt),tilt2,0,0),0,yaw,0)*scale+coords; if(skeleton.free)flatfacing=skeleton.joints[howmany].position*scale+coords; - sprites.MakeSprite(flamesprite, flatfacing,flatvelocity, 1,1,1, .6+(float)abs(Random()%100)/200-.25, 1); + Sprite::MakeSprite(flamesprite, flatfacing,flatvelocity, 1,1,1, .6+(float)abs(Random()%100)/200-.25, 1); } while(flamedelay<0&&!onfire&&tutoriallevel==1&&id!=0){ @@ -5105,16 +3850,16 @@ void Person::DoStuff(){ 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=DoRotation(DoRotation(DoRotation(skeleton.joints[howmany].position,0,0,tilt),tilt2,0,0),0,yaw,0)*scale+coords; if(skeleton.free)flatfacing=skeleton.joints[howmany].position*scale+coords; - sprites.MakeSprite(breathsprite, flatfacing,flatvelocity, 1,1,1, .6+(float)abs(Random()%100)/200-.25, .3); + 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); + skeleton.drawmodel.textureptr.bind(); + if(bleeding<=0&&(detail!=2||osx))DoMipmaps(); } } @@ -5127,15 +3872,15 @@ void Person::DoStuff(){ bloodvel=0; if(!skeleton.free){ bloodvel.z=5*neckspurtamount; - bloodvel=DoRotation(bloodvel,((float)(Random()%100))/40,rotation+((float)(Random()%100))/40,0)*scale; + bloodvel=DoRotation(bloodvel,((float)(Random()%100))/40,yaw+((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(skeleton.joints[skeleton.jointlabels[head]].velocity,((float)(Random()%100))/40,yaw+((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)sprites.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)sprites.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); + 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,yaw,0)*scale+coords,bloodvel, 1,1,1, .05, .9); neckspurtparticledelay=.05; } if(neckspurtdelay<0){ @@ -5151,31 +3896,27 @@ void Person::DoStuff(){ 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(skeleton.joints[skeleton.jointlabels[abdomen]].velocity,((float)(Random()%100))/4,yaw+((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)sprites.MakeSprite(bloodsprite, skeleton.joints[skeleton.jointlabels[abdomen]].position*scale+coords,bloodvel, 1,1,1, .05, 1); - if(!skeleton.free)sprites.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); + 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,yaw,0)*scale+coords,bloodvel, 1,1,1, .05, 1); } } - /*if(id==0){ - bloodloss+=deathbleeding*40; - deathbleeding=0; - }*/ 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(bloodloss>damagetolerance&&animation[animTarget].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; + weapons[weaponids[0]].owner=-1; + weapons[weaponids[0]].velocity=velocity*scale*-.3; + weapons[weaponids[0]].velocity.x+=.01; + weapons[weaponids[0]].tipvelocity=velocity*scale; + weapons[weaponids[0]].missed=1; + weapons[weaponids[0]].hitsomething=0; + weapons[weaponids[0]].freetime=0; + weapons[weaponids[0]].firstfree=1; + weapons[weaponids[0]].physics=1; num_weapons--; if(num_weapons){ weaponids[0]=weaponids[num_weapons]; @@ -5196,12 +3937,10 @@ void Person::DoStuff(){ } if(!dead&&creature==wolftype){ - bonus=Wolfbonus; - bonustime=0; - bonusvalue=300; + award_bonus(0, Wolfbonus); } dead=2; - if(targetanimation==knifefollowedanim&&!skeleton.free){ + if(animTarget==knifefollowedanim&&!skeleton.free){ for(i=0;i0&&bloodtoggle==2&&findDistancefast(&viewer,&coords)<9){ + if(texupdatedelay<0&&bleeding>0&&bloodtoggle==2&&distsq(&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; @@ -5234,10 +3972,6 @@ void Person::DoStuff(){ if(endy>skeleton.skinsize-1){endy=skeleton.skinsize-1;bleeding=0;} if(endx1){ - glBindTexture(GL_TEXTURE_2D,skeleton.drawmodel.textureptr); - DoMipmaps(0,startx,endx,starty,endy); + skeleton.drawmodel.textureptr.bind(); + DoMipmaps(); } if(!skeleton.free){ @@ -5375,12 +4109,12 @@ void Person::DoStuff(){ if(environment==snowyenvironment){ XYZ footpoint; XYZ footvel; - if(!skeleton.free)footvel=DoRotation(skeleton.specialforward[0],0,rotation,0)*-1; + if(!skeleton.free)footvel=DoRotation(skeleton.specialforward[0],0,yaw,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=DoRotation((skeleton.joints[skeleton.jointlabels[head]].position+skeleton.joints[skeleton.jointlabels[neck]].position)/2,0,yaw,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); - sprites.MakeSprite(breathsprite, footpoint+footvel*.2,footvel*.4, 1,1,1, .4, .3); + if(animTarget==sleepanim)footvel=DoRotation(footvel,0,90,0); + Sprite::MakeSprite(breathsprite, footpoint+footvel*.2,footvel*.4, 1,1,1, .4, .3); } } @@ -5400,7 +4134,7 @@ void Person::DoStuff(){ } if(!dead){ twitchdelay-=multiplier*1.5; - if(targetanimation!=hurtidleanim){ + if(animTarget!=hurtidleanim){ if(headmorphstart==0&&headmorphend==0&&twitchdelay<=0){ headmorphness=0; targetheadmorphness=1; @@ -5413,7 +4147,7 @@ void Person::DoStuff(){ headmorphend=0; } } - if((isIdle()||isCrouch())&&targetanimation!=hurtidleanim){ + if((isIdle()||isCrouch())&&animTarget!=hurtidleanim){ twitchdelay3-=multiplier*1; if(Random()%2==0){ if(righthandmorphstart==0&&righthandmorphend==0&&twitchdelay3<=0){ @@ -5471,14 +4205,14 @@ void Person::DoStuff(){ if(creature==wolftype){ twitchdelay2-=multiplier*1.5; if(tailmorphend!=0) - if((isRun()||targetanimation==jumpupanim||targetanimation==jumpdownanim||targetanimation==backflipanim)&&!skeleton.free){ + if((isRun()||animTarget==jumpupanim||animTarget==jumpdownanim||animTarget==backflipanim)&&!skeleton.free){ tailmorphness=0; targettailmorphness=1; tailmorphend=0; twitchdelay2=.1; } if(tailmorphend!=5) - if(targetanimation==flipanim||targetanimation==frontflipanim||targetanimation==rollanim||skeleton.free){ + if(animTarget==flipanim||animTarget==frontflipanim||animTarget==rollanim||skeleton.free){ tailmorphness=0; targettailmorphness=1; tailmorphend=5; @@ -5541,11 +4275,11 @@ void Person::DoStuff(){ if(bloodtoggle&&!bled) for(l=0;l1)&&(bonus!=FinishedBonus||bonustime>1)&&bloodloss1)&&(bonus!=FinishedBonus||bonustime>1)&&bloodloss.1){ numafterkill++; } @@ -5691,26 +4412,11 @@ void Person::DoStuff(){ 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); - FSOUND_3D_SetAttributes(channels[breaksound], gLoc, vel); - FSOUND_SetVolume(channels[breaksound], 512); - FSOUND_SetPaused(channels[breaksound], false); - /*if(id==0||findDistancefast(&coords,&viewer)<50){ - slomo=1; - slomodelay=.2; - }*/ + emit_sound_at(breaksound, coords); } if(skeleton.free==1){ - if(id==0)FSOUND_SetPaused(channels[whooshsound], true); + if(id==0)pause_sound(whooshsound); if(!dead){ //If knocked over, open hands and close mouth @@ -5732,11 +4438,8 @@ void Person::DoStuff(){ 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; - } + if(damage>damagetolerance-damageamount&&!dead&&(bonus!=spinecrusher||bonustime>1)&&(bonus!=style||bonustime>1)&&(bonus!=cannon||bonustime>1)) + award_bonus(id, deepimpact); DoDamage(damageamount/((protectionhigh+protectionhead+protectionlow)/3)); average=0; @@ -5763,20 +4466,11 @@ void Person::DoStuff(){ 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)FSOUND_SetPaused(channels[whooshsound], true); + if(id==0)pause_sound(whooshsound); skeleton.free=3; DrawSkeleton(); skeleton.free=2; @@ -5791,11 +4485,11 @@ void Person::DoStuff(){ if(bloodtoggle&&!bled) for(l=0;l-.3){ - // targetframe=2; - //} - targetanimation=flipanim; + targetyaw=-asin(0-terrainnormal.x); + targetyaw*=360/6.28; + if(terrainnormal.z<0)targetyaw=180-targetyaw; + yaw=targetyaw; + + frameTarget=0; + // frameTarget=2; + animTarget=flipanim; crouchtogglekeydown=1; target=0; tilt2=0; targettilt2=0; - currentanimation=tempanim; - currentframe=0; + animCurrent=tempanim; + frameCurrent=0; target=0; //tilt2=targettilt2; @@ -5881,7 +4571,7 @@ void Person::DoStuff(){ for(i=0;i(damage+500)*1.5){ - if(id==0)FSOUND_SetPaused(channels[whooshsound], true); + if(id==0)pause_sound(whooshsound); skeleton.free=0; velocity=0; XYZ middle; @@ -5910,124 +4600,99 @@ void Person::DoStuff(){ } 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)-.3){ - targetanimation=getupfromfrontanim; - rotation+=180; - targetrotation+=180; + animTarget=getupfromfrontanim; + yaw+=180; + targetyaw+=180; targettilt2*=-1; - targetframe=0; + frameTarget=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; + animTarget=rollanim; + targetyaw=lookyaw; if(id==0){ if(rightkeydown){ - targetrotation-=90; - if(forwardkeydown)targetrotation+=45; - if(backkeydown)targetrotation-=45; + targetyaw-=90; + if(forwardkeydown)targetyaw+=45; + if(backkeydown)targetyaw-=45; } if(leftkeydown){ - targetrotation+=90; - if(forwardkeydown)targetrotation-=45; - if(backkeydown)targetrotation+=45; + targetyaw+=90; + if(forwardkeydown)targetyaw-=45; + if(backkeydown)targetyaw+=45; } if(backkeydown){ if ( !leftkeydown&&!rightkeydown) - targetrotation+=180; + targetyaw+=180; } - targetrotation+=180; + targetyaw+=180; } } if(abs(targettilt2)>50)targettilt2=0; - currentanimation=tempanim; - currentframe=0; + animCurrent=tempanim; + frameCurrent=0; target=0; tilt2=targettilt2; - if(middle.y>0&&targetanimation!=rollanim)targetoffset.y=middle.y+1; + if(middle.y>0&&animTarget!=rollanim)targetoffset.y=middle.y+1; for(i=0;i0)if(weapons.type[0]==staff)hasstaff=1; + if(num_weapons>0)if(weapons[0].getType()==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; + targetyaw=-asin(0-tempvelocity.x); + targetyaw*=360/6.28; + if(velocity.z<0)targetyaw=180-targetyaw; + //targetyaw+=180; skeleton.free=0; if(dotproduct(&skeleton.forward,&tempvelocity)<0){ - targetanimation=rollanim; - targetframe=2; + animTarget=rollanim; + frameTarget=2; } else{ - targetanimation=backhandspringanim; - targetrotation+=180; - targetframe=6; + animTarget=backhandspringanim; + targetyaw+=180; + frameTarget=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); - FSOUND_3D_SetAttributes(channels[movewhooshsound], gLoc, vel); - FSOUND_SetVolume(channels[movewhooshsound], 128); - FSOUND_SetPaused(channels[movewhooshsound], false); - - currentanimation=targetanimation; - currentframe=targetframe-1; + emit_sound_at(movewhooshsound, coords, 128.); + + animCurrent=animTarget; + frameCurrent=frameTarget-1; target=0; velocity=0; - rotation=targetrotation; + yaw=targetyaw; tilt=0; targettilt=0; tilt2=0; @@ -6036,30 +4701,16 @@ void Person::DoStuff(){ } 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;iobjects.position[i].y+3*objects.scale[i]){ - /*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); - FSOUND_3D_SetAttributes(channels[firestartsound], gLoc, vel); - FSOUND_SetVolume(channels[firestartsound], 256); - FSOUND_SetPaused(channels[firestartsound], false); - objects.onfire[i]=1; - } - }*/ + if(distsqflat(&tempcoord,&objects.position[i])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); - FSOUND_3D_SetAttributes(channels[bushrustle], gLoc, vel); - FSOUND_SetVolume(channels[bushrustle], 40*findLength(&velocity)); - FSOUND_SetPaused(channels[bushrustle], false); + emit_sound_at(bushrustle, coords, 40*findLength(&velocity)); if(id==0){ envsound[numenvsounds]=coords; @@ -6221,8 +4822,8 @@ void Person::DoStuff(){ pos.x+=float(abs(Random()%100)-50)/150; pos.y+=float(abs(Random()%100)-50)/150; pos.z+=float(abs(Random()%100)-50)/150; - sprites.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); - sprites.special[sprites.numsprites-1]=1; + 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) @@ -6237,8 +4838,8 @@ void Person::DoStuff(){ pos.x+=float(abs(Random()%100)-50)/150; pos.y+=float(abs(Random()%100)-50)/150; pos.z+=float(abs(Random()%100)-50)/150; - sprites.MakeSprite(splintersprite, pos,tempvel*.3+velocity*float(abs(Random()%100))/100/2, 1,1,1, .1, 1); - sprites.special[sprites.numsprites-1]=2; + 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; @@ -6255,14 +4856,6 @@ void Person::DoStuff(){ 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){ @@ -6275,25 +4868,20 @@ void Person::DoStuff(){ } } speechdelay=.3; - //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); - FSOUND_3D_SetAttributes(channels[whichsound], gLoc, vel); - FSOUND_SetVolume(channels[whichsound], 512); - FSOUND_SetPaused(channels[whichsound], false); + emit_sound_at(whichsound, coords); } } - if(targetanimation==staggerbackhighanim)staggerdelay=1; - if(targetanimation==staggerbackhardanim)staggerdelay=1; + if(animTarget==staggerbackhighanim)staggerdelay=1; + if(animTarget==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; + if(animTarget!=crouchstabanim&&animTarget!=swordgroundstabanim&&animTarget!=staffgroundsmashanim)hasvictim=1; + if(velocity.y<-30&&animTarget==jumpdownanim)RagDoll(0); + if(animCurrent!=getIdle()&&wasIdle()&&animTarget!=getIdle()&&isIdle()){ + animTarget=getIdle(); + frameTarget=0; target=0; } weaponmissdelay-=multiplier; @@ -6310,13 +4898,12 @@ void Person::DoStuff(){ if(!isnormal(targettilt2)&&targettilt2){ targettilt2=0; } - if(!isnormal(targetrotation)&&targetrotation){ - targetrotation=0; + if(!isnormal(targetyaw)&&targetyaw){ + targetyaw=0; } - if(targetanimation==bounceidleanim||targetanimation==wolfidle||targetanimation==walkanim||targetanimation==drawrightanim||targetanimation==crouchdrawrightanim||targetanimation==drawleftanim||targetanimation==fightidleanim||targetanimation==fightsidestep||targetanimation==hanganim||isCrouch()||targetanimation==backhandspringanim){ + if(animTarget==bounceidleanim||animTarget==wolfidle||animTarget==walkanim||animTarget==drawrightanim||animTarget==crouchdrawrightanim||animTarget==drawleftanim||animTarget==fightidleanim||animTarget==fightsidestep||animTarget==hanganim||isCrouch()||animTarget==backhandspringanim){ //open hands and close mouth - //if(targetanimation!=wolfidle){ if(righthandmorphend!=0&&righthandmorphness==targetrighthandmorphness){ righthandmorphness=0; righthandmorphend=0; @@ -6328,7 +4915,6 @@ void Person::DoStuff(){ lefthandmorphend=0; targetlefthandmorphness=1; } - //s} if(headmorphend!=3&&headmorphend!=5&&headmorphstart!=3&&headmorphstart!=5&&headmorphend!=0&&headmorphness==targetheadmorphness){ headmorphness=0; @@ -6337,7 +4923,7 @@ void Person::DoStuff(){ } } - 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){ + if(animTarget==rollanim||animTarget==dodgebackanim||animTarget==removeknifeanim||animTarget==knifefightidleanim||animTarget==swordfightidleanim||animTarget==blockhighleftstrikeanim||animTarget==crouchremoveknifeanim||animTarget==sneakanim||animTarget==sweepanim||animTarget==spinkickreversedanim||animTarget==jumpdownanim||isWallJump()||isFlip()||animTarget==climbanim||isRun()||animTarget==getupfrombackanim||animTarget==getupfromfrontanim){ //open hands and mouth if(righthandmorphend!=0&&righthandmorphness==targetrighthandmorphness){ righthandmorphness=0; @@ -6358,7 +4944,7 @@ void Person::DoStuff(){ } } - if(targetanimation==jumpupanim||targetanimation==crouchstabanim||targetanimation==swordgroundstabanim||targetanimation==swordfightidlebothanim||targetanimation==blockhighleftanim||targetanimation==blockhighleftanim){ + if(animTarget==jumpupanim||animTarget==crouchstabanim||animTarget==swordgroundstabanim||animTarget==swordfightidlebothanim||animTarget==blockhighleftanim||animTarget==blockhighleftanim){ //close hands and mouth if(righthandmorphend!=1&&righthandmorphness==targetrighthandmorphness){ righthandmorphness=0; @@ -6379,7 +4965,7 @@ void Person::DoStuff(){ } } - 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){ + if(animTarget==spinkickanim||animTarget==staffspinhitreversalanim||animTarget==staffspinhitreversedanim||animTarget==staffhitreversalanim||animTarget==staffhitreversedanim||animTarget==hurtidleanim||animTarget==winduppunchanim||animTarget==swordslashreversalanim||animTarget==swordslashreversedanim||animTarget==knifeslashreversalanim||animTarget==knifeslashreversedanim||animTarget==knifethrowanim||animTarget==knifefollowanim||animTarget==knifefollowedanim||animTarget==killanim||animTarget==dropkickanim||animTarget==upunchanim||animTarget==knifeslashstartanim||animTarget==swordslashanim||animTarget==staffhitanim||animTarget==staffspinhitanim||animTarget==staffgroundsmashanim||animTarget==spinkickreversalanim||animTarget==sweepreversalanim||animTarget==lowkickanim||animTarget==sweepreversedanim||animTarget==rabbitkickreversalanim||animTarget==rabbitkickreversedanim||animTarget==jumpreversalanim||animTarget==jumpreversedanim){ //close hands and yell if(righthandmorphend!=1&&righthandmorphness==targetrighthandmorphness){ righthandmorphness=0; @@ -6399,13 +4985,7 @@ void Person::DoStuff(){ targetheadmorphness=1; } } - /* - if(speechdelay>.25){ - if(headmorphend!=2)headmorphness=0; - headmorphend=2; - targetheadmorphness=1; - } - */ + bool behind; behind=0; if(hasvictim){ @@ -6414,8 +4994,8 @@ void Person::DoStuff(){ } } - if(!dead&&targetanimation!=hurtidleanim) - if(behind||targetanimation==killanim||targetanimation==knifethrowanim||targetanimation==knifefollowanim||targetanimation==spinkickreversalanim||targetanimation==rabbitkickreversedanim||targetanimation==jumpreversedanim){ + if(!dead&&animTarget!=hurtidleanim) + if(behind||animTarget==killanim||animTarget==knifethrowanim||animTarget==knifefollowanim||animTarget==spinkickreversalanim||animTarget==rabbitkickreversedanim||animTarget==jumpreversedanim){ if(headmorphend!=4||headmorphness==targetheadmorphness){ headmorphend=4; //headmorphness=1; @@ -6424,11 +5004,11 @@ void Person::DoStuff(){ } if(weaponactive!=-1){ - if(weapons.type[weaponids[weaponactive]]!=staff){ + if(weapons[weaponids[weaponactive]].getType()!=staff){ righthandmorphstart=1; righthandmorphend=1; } - if(weapons.type[weaponids[weaponactive]]==staff){ + if(weapons[weaponids[weaponactive]].getType()==staff){ righthandmorphstart=2; righthandmorphend=2; } @@ -6437,7 +5017,7 @@ void Person::DoStuff(){ terrainnormal=terrain.getNormal(coords.x,coords.z); - if(animation[targetanimation].attack!=reversal){ + if(animation[animTarget].attack!=reversal){ if(!isnormal(coords.x)) coords=oldcoords; oldcoords=coords; @@ -6446,18 +5026,18 @@ void Person::DoStuff(){ flatfacing=0; flatfacing.z=1; - flatfacing=DoRotation(flatfacing,0,rotation,0); + flatfacing=DoRotation(flatfacing,0,yaw,0); facing=flatfacing; - ReflectVector(&facing,&terrainnormal); + ReflectVector(&facing,terrainnormal); Normalise(&facing); - if(isRun()||targetanimation==sneakanim||targetanimation==rollanim||targetanimation==walkanim){ + if(isRun()||animTarget==sneakanim||animTarget==rollanim||animTarget==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()){ + if(!isRun()&&!animation[animTarget].attack&&animTarget!=getupfromfrontanim&&animTarget!=getupfrombackanim&&animTarget!=sneakanim)targettilt2=0; + if(animTarget==jumpupanim||animTarget==jumpdownanim||isFlip()){ flatvelocity=velocity; flatvelocity.y=0; flatvelspeed=findLength(&flatvelocity); @@ -6478,7 +5058,7 @@ void Person::DoStuff(){ else if(tilt225)tilt2=25; if(tilt2<-25)tilt2=-25; } @@ -6491,8 +5071,8 @@ void Person::DoStuff(){ } //Running velocity - //if(!creature==wolftype||targetanimation==rabbitkickanim) - if(targetanimation==rabbittackleanim){ + //if(!creature==wolftype||animTarget==rabbitkickanim) + if(animTarget==rabbittackleanim){ velocity+=facing*multiplier*speed*700*scale; velspeed=findLength(&velocity); if(velspeed>speed*65*scale){ @@ -6501,12 +5081,12 @@ void Person::DoStuff(){ velocity*=velspeed; } velocity.y+=gravity*multiplier*20; - ReflectVector(&velocity,&terrain.getNormal(coords.x,coords.z)); + ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z)); velspeed=findLength(&velocity); velocity=flatfacing*velspeed; } - if(targetanimation!=rabbitrunninganim&&targetanimation!=wolfrunninganim){ - if(isRun()||targetanimation==rabbitkickanim){ + if(animTarget!=rabbitrunninganim&&animTarget!=wolfrunninganim){ + if(isRun()||animTarget==rabbitkickanim){ velocity+=facing*multiplier*speed*700*scale; velspeed=findLength(&velocity); if(velspeed>speed*45*scale){ @@ -6515,7 +5095,7 @@ void Person::DoStuff(){ velocity*=velspeed; } velocity.y+=gravity*multiplier*20; - ReflectVector(&velocity,&terrain.getNormal(coords.x,coords.z)); + ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z)); velspeed=findLength(&velocity); if(velspeedspeed*55*scale){ - velocity/=velspeed; - velspeed=speed*55*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){ + if(animTarget==rollanim&&animation[animTarget].label[frameTarget]!=6){ velocity+=facing*multiplier*speed*700*scale; velspeed=findLength(&velocity); if(velspeed>speed*45*scale){ @@ -6568,13 +5133,13 @@ void Person::DoStuff(){ velocity*=velspeed; } velocity.y+=gravity*multiplier*20; - ReflectVector(&velocity,&terrain.getNormal(coords.x,coords.z)); + ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z)); velspeed=findLength(&velocity); velocity=flatfacing*velspeed; } - /*if(currentanimation==rollanim&&(isCrouch()||isIdle())){ + /*if(animCurrent==rollanim&&(isCrouch()||isIdle())){ velocity+=facing*multiplier*speed*700*scale; velspeed=findLength(&velocity); if(velspeed>speed*25*scale){ @@ -6583,12 +5148,12 @@ void Person::DoStuff(){ velocity*=velspeed; } velocity.y+=gravity*multiplier*20; - ReflectVector(&velocity,&terrain.getNormal(coords.x,coords.z)); + ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z)); velspeed=findLength(&velocity); velocity=flatfacing*velspeed; }*/ - if(targetanimation==sneakanim||targetanimation==walkanim){ + if(animTarget==sneakanim||animTarget==walkanim){ velocity+=facing*multiplier*speed*700*scale; velspeed=findLength(&velocity); if(velspeed>speed*12*scale){ @@ -6597,12 +5162,12 @@ void Person::DoStuff(){ velocity*=velspeed; } velocity.y+=gravity*multiplier*20; - ReflectVector(&velocity,&terrain.getNormal(coords.x,coords.z)); + ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z)); velspeed=findLength(&velocity); velocity=flatfacing*velspeed; } - if((targetanimation==fightidleanim||targetanimation==knifefightidleanim)&&(currentanimation==bounceidleanim||currentanimation==hurtidleanim)){ + if((animTarget==fightidleanim||animTarget==knifefightidleanim)&&(animCurrent==bounceidleanim||animCurrent==hurtidleanim)){ velocity+=facing*multiplier*speed*700*scale; velspeed=findLength(&velocity); if(velspeed>speed*2*scale){ @@ -6611,13 +5176,13 @@ void Person::DoStuff(){ velocity*=velspeed; } velocity.y+=gravity*multiplier*20; - ReflectVector(&velocity,&terrain.getNormal(coords.x,coords.z)); + ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z)); velspeed=findLength(&velocity); velocity=flatfacing*velspeed; } - if((targetanimation==bounceidleanim||currentanimation==hurtidleanim)&&(currentanimation==fightidleanim||currentanimation==knifefightidleanim)){ + if((animTarget==bounceidleanim||animCurrent==hurtidleanim)&&(animCurrent==fightidleanim||animCurrent==knifefightidleanim)){ velocity-=facing*multiplier*speed*700*scale; velspeed=findLength(&velocity); if(velspeed>speed*2*scale){ @@ -6626,12 +5191,12 @@ void Person::DoStuff(){ velocity*=velspeed; } velocity.y+=gravity*multiplier*20; - ReflectVector(&velocity,&terrain.getNormal(coords.x,coords.z)); + ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z)); velspeed=findLength(&velocity); velocity=flatfacing*velspeed*-1; } - if(targetanimation==fightsidestep){ + if(animTarget==fightsidestep){ velocity+=DoRotation(facing*multiplier*speed*700*scale,0,-90,0); velspeed=findLength(&velocity); if(velspeed>speed*12*scale){ @@ -6640,21 +5205,21 @@ void Person::DoStuff(){ velocity*=velspeed; } velocity.y+=gravity*multiplier*20; - ReflectVector(&velocity,&terrain.getNormal(coords.x,coords.z)); + ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z)); velspeed=findLength(&velocity); velocity=DoRotation(flatfacing*velspeed,0,-90,0); } - if(targetanimation==staggerbackhighanim){ + if(animTarget==staggerbackhighanim){ coords-=facing*multiplier*speed*16*scale; velocity=0; } - if(targetanimation==staggerbackhardanim&&animation[staggerbackhardanim].label[targetframe]!=6){ + if(animTarget==staggerbackhardanim&&animation[staggerbackhardanim].label[frameTarget]!=6){ coords-=facing*multiplier*speed*20*scale; velocity=0; } - if(targetanimation==backhandspringanim){ + if(animTarget==backhandspringanim){ //coords-=facing*multiplier*50*scale; velocity+=facing*multiplier*speed*700*scale*-1; velspeed=findLength(&velocity); @@ -6664,11 +5229,11 @@ void Person::DoStuff(){ velocity*=velspeed; } velocity.y+=gravity*multiplier*20; - ReflectVector(&velocity,&terrain.getNormal(coords.x,coords.z)); + ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z)); velspeed=findLength(&velocity); velocity=flatfacing*velspeed*-1; } - if(targetanimation==dodgebackanim){ + if(animTarget==dodgebackanim){ //coords-=facing*multiplier*50*scale; velocity+=facing*multiplier*speed*700*scale*-1; velspeed=findLength(&velocity); @@ -6678,50 +5243,39 @@ void Person::DoStuff(){ velocity*=velspeed; } velocity.y+=gravity*multiplier*20; - ReflectVector(&velocity,&terrain.getNormal(coords.x,coords.z)); + ReflectVector(&velocity,terrain.getNormal(coords.x,coords.z)); velspeed=findLength(&velocity); velocity=flatfacing*velspeed*-1; } - if(targetanimation==jumpupanim||targetanimation==jumpdownanim||isFlip()){ + if(animTarget==jumpupanim||animTarget==jumpdownanim||isFlip()){ velspeed=findLength(&velocity); } - if(targetanimation==jumpupanim||targetanimation==jumpdownanim||isFlip()){ + if(animTarget==jumpupanim||animTarget==jumpdownanim||isFlip()){ velocity.y+=gravity*multiplier; } - if(targetanimation!=climbanim&&targetanimation!=hanganim&&!isWallJump())coords+=velocity*multiplier; + if(animTarget!=climbanim&&animTarget!=hanganim&&!isWallJump())coords+=velocity*multiplier; - if(coords.y.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); - FSOUND_3D_SetAttributes(channels[skidsound], gLoc, vel); - FSOUND_SetVolume(channels[skidsound], 128*velspeed/10); - FSOUND_SetPaused(channels[skidsound], false); + emit_sound_at(skidsound, coords, 128*velspeed/10); } else { - PlaySoundEx( snowskidsound, samp[snowskidsound], NULL, true); - FSOUND_3D_SetAttributes(channels[snowskidsound], gLoc, vel); - FSOUND_SetVolume(channels[snowskidsound], 128*velspeed/10); - FSOUND_SetPaused(channels[snowskidsound], false); + emit_sound_at(snowskidsound, coords, 128*velspeed/10); } } - if(animation[targetanimation].attack==normalattack&&targetanimation!=rabbitkickanim&&!victim->skeleton.free){ + if(animation[animTarget].attack==normalattack&&animTarget!=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; + targetyaw=-asin(0-terrainnormal.x); + targetyaw*=360/6.28; + if(terrainnormal.z<0)targetyaw=180-targetyaw; targettilt2=-asin(terrainnormal.y)*360/6.28;//*-70; } - if(animation[targetanimation].attack==reversal&&targetanimation!=rabbittacklinganim){ - targetrotation=victim->targetrotation; + if(animation[animTarget].attack==reversal&&animTarget!=rabbittacklinganim){ + targetyaw=victim->targetyaw; } - if(targetanimation==rabbittacklinganim){ + if(animTarget==rabbittacklinganim){ coords=victim->coords; } } @@ -6821,7 +5361,7 @@ void Person::DoStuff(){ 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)){ + if(distsqflat(&coords,&midterrain)>(terrain.size*terrain.scale/2-viewdistance)*(terrain.size*terrain.scale/2-viewdistance)){ XYZ tempposit; tempposit=coords-midterrain; tempposit.y=0; @@ -6834,7 +5374,7 @@ void Person::DoStuff(){ int Person::DrawSkeleton(){ int oldplayerdetail; - if((frustum.SphereInFrustum(coords.x,coords.y+scale*3,coords.z,scale*8)&&findDistancefast(&viewer,&coords)position+skeleton.muscles[i].parent2->position)/2; glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glPushMatrix(); @@ -7080,35 +5624,11 @@ int Person::DrawSkeleton(){ skeleton.muscles[i].lastrotate3=skeleton.muscles[i].rotate3; glRotatef(-skeleton.muscles[i].lastrotate3,0,1,0); - /* - if(!isnormal(proportionbody.x)||!isnormal(proportionbody.y)||!isnormal(proportionbody.z)){ - proportionbody=1; - proportionweird=1; - } - if(!isnormal(proportionarms.x)||!isnormal(proportionarms.y)||!isnormal(proportionarms.z)){ - proportionarms=1; - proportionweird=1; - } - if(!isnormal(proportionhead.x)||!isnormal(proportionhead.y)||!isnormal(proportionhead.z)){ - proportionhead=1; - proportionweird=1; - } - if(!isnormal(proportionlegs.x)||!isnormal(proportionlegs.y)||!isnormal(proportionlegs.z)){ - proportionlegs=1; - proportionweird=1; - }*/ if(playerdetail||skeleton.free==3) { for(j=0;j=0){*/ glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glPushMatrix(); if(skeleton.muscles[i].parent1->label==abdomen||skeleton.muscles[i].parent2->label==abdomen) @@ -7129,24 +5649,18 @@ int Person::DrawSkeleton(){ (skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]].z*(1-morphness)+skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]].z*morphness)*proportionhead.z); glGetFloatv(GL_MODELVIEW_MATRIX,M); //if(!isnormal(M[12])||!isnormal(M[13])||!isnormal(M[14]))test=0; - //if(isnormal(M[12])&&isnormal(M[13])&&isnormal(M[14])){ //if(!isnormal(scale))test=1; - //if(isnormal(scale)){ skeleton.drawmodel.vertex[skeleton.muscles[i].vertices[j]].x=M[12]*scale; skeleton.drawmodel.vertex[skeleton.muscles[i].vertices[j]].y=M[13]*scale; skeleton.drawmodel.vertex[skeleton.muscles[i].vertices[j]].z=M[14]*scale; //test=2; - //} - //} glPopMatrix(); - //} } } if(!playerdetail||skeleton.free==3) { for(j=0;j=0){ glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix glPushMatrix(); if(skeleton.muscles[i].parent1->label==abdomen||skeleton.muscles[i].parent2->label==abdomen) @@ -7171,7 +5685,6 @@ int Person::DrawSkeleton(){ skeleton.drawmodellow.vertex[skeleton.muscles[i].verticeslow[j]].y=M[13]*scale; skeleton.drawmodellow.vertex[skeleton.muscles[i].verticeslow[j]].z=M[14]*scale; glPopMatrix(); - //} } } glPopMatrix(); @@ -7223,7 +5736,7 @@ int Person::DrawSkeleton(){ } updatedelay=1+(float)(Random()%100)/1000; } - if(skeleton.free!=2&&(skeleton.free==1||skeleton.free==3||id==0||(normalsupdatedelay<=0)||targetanimation==getupfromfrontanim||targetanimation==getupfrombackanim||currentanimation==getupfromfrontanim||currentanimation==getupfrombackanim)){ + if(skeleton.free!=2&&(skeleton.free==1||skeleton.free==3||id==0||(normalsupdatedelay<=0)||animTarget==getupfromfrontanim||animTarget==getupfrombackanim||animCurrent==getupfromfrontanim||animCurrent==getupfrombackanim)){ normalsupdatedelay=1; if(playerdetail||skeleton.free==3)skeleton.drawmodel.CalculateNormals(0); if(!playerdetail||skeleton.free==3)skeleton.drawmodellow.CalculateNormals(0); @@ -7251,7 +5764,7 @@ int Person::DrawSkeleton(){ if(!skeleton.free)glTranslatef(coords.x,coords.y-.02,coords.z); if(skeleton.free)glTranslatef(coords.x,coords.y-.02,coords.z); if(!skeleton.free)glTranslatef(offset.x*scale,offset.y*scale,offset.z*scale); - if(!skeleton.free)glRotatef(rotation,0,1,0); + if(!skeleton.free)glRotatef(yaw,0,1,0); if(showpoints){ glPointSize(5); glColor4f(.4,1,.4,1); @@ -7279,7 +5792,7 @@ int Person::DrawSkeleton(){ } terrainlight=terrain.getLighting(coords.x,coords.z); - distance=findDistancefast(&viewer,&coords); + distance=distsq(&viewer,&coords); distance=(viewdistance*viewdistance-(distance-(viewdistance*viewdistance*fadestart))*(1/(1-fadestart)))/viewdistance/viewdistance; if(distance>1)distance=1; if(distance>0){ @@ -7306,7 +5819,7 @@ int Person::DrawSkeleton(){ glEnable(GL_LIGHTING); glEnable(GL_BLEND); if(canattack&&cananger) - if(animation[targetanimation].attack==normalattack||animation[targetanimation].attack==reversed){ + if(animation[animTarget].attack==normalattack||animation[animTarget].attack==reversed){ glDisable(GL_TEXTURE_2D); glColor4f(1,0,0,0.8); } @@ -7317,16 +5830,16 @@ int Person::DrawSkeleton(){ } if(playerdetail){ if(!showpoints){ - if((tutoriallevel&&id!=0))skeleton.drawmodel.drawdifftex(sprites.cloudimpacttexture); + if((tutoriallevel&&id!=0))skeleton.drawmodel.drawdifftex(Sprite::cloudimpacttexture); else skeleton.drawmodel.draw(); } } if(!playerdetail){ - if((tutoriallevel&&id!=0))skeleton.drawmodellow.drawdifftex(sprites.cloudimpacttexture); + if((tutoriallevel&&id!=0))skeleton.drawmodellow.drawdifftex(Sprite::cloudimpacttexture); else skeleton.drawmodellow.drawdifftex(skeleton.drawmodel.textureptr); } - if(!(animation[targetanimation].attack==normalattack||animation[targetanimation].attack==reversed)) + if(!(animation[animTarget].attack==normalattack||animation[animTarget].attack==reversed)) if(tutoriallevel&&id!=0){ glPopMatrix(); glMatrixMode(GL_MODELVIEW); @@ -7336,7 +5849,7 @@ int Person::DrawSkeleton(){ glEnable(GL_LIGHTING); glEnable(GL_BLEND); if(canattack&&cananger) - if(animation[targetanimation].attack==normalattack||animation[targetanimation].attack==reversed){ + if(animation[animTarget].attack==normalattack||animation[animTarget].attack==reversed){ glDisable(GL_TEXTURE_2D); glColor4f(1,0,0,0.8); } @@ -7346,12 +5859,12 @@ int Person::DrawSkeleton(){ glTranslatef(smoketex*.6,0,0); if(playerdetail){ if(!showpoints){ - if((tutoriallevel&&id!=0))skeleton.drawmodel.drawdifftex(sprites.cloudimpacttexture); + if((tutoriallevel&&id!=0))skeleton.drawmodel.drawdifftex(Sprite::cloudimpacttexture); else skeleton.drawmodel.draw(); } } if(!playerdetail){ - if((tutoriallevel&&id!=0))skeleton.drawmodellow.drawdifftex(sprites.cloudimpacttexture); + if((tutoriallevel&&id!=0))skeleton.drawmodellow.drawdifftex(Sprite::cloudimpacttexture); else skeleton.drawmodellow.drawdifftex(skeleton.drawmodel.textureptr); } } @@ -7376,7 +5889,7 @@ int Person::DrawSkeleton(){ for(k=0;klabel==righthand||skeleton.muscles[j].parent2->label==righthand)&&skeleton.muscles[j].numvertices>0){ weaponattachmuscle=j; @@ -7390,7 +5903,7 @@ int Person::DrawSkeleton(){ weaponpoint=(skeleton.muscles[weaponattachmuscle].parent1->position+skeleton.muscles[weaponattachmuscle].parent2->position)/2; if(creature==wolftype)weaponpoint=(skeleton.joints[skeleton.jointlabels[rightwrist]].position*.7+skeleton.joints[skeleton.jointlabels[righthand]].position*.3); } - if(weapons.type[i]==staff){ + if(weapons[i].getType()==staff){ for(j=0;jlabel==righthand||skeleton.muscles[j].parent2->label==righthand)&&skeleton.muscles[j].numvertices>0){ weaponattachmuscle=j; @@ -7409,20 +5922,13 @@ int Person::DrawSkeleton(){ vec2=(skeleton.joints[skeleton.jointlabels[rightwrist]].position-skeleton.joints[skeleton.jointlabels[rightshoulder]].position); CrossProduct(&vec1,&vec2,&tempnormthing); Normalise(&tempnormthing); - if(targetanimation!=staffhitanim&¤tanimation!=staffhitanim&&targetanimation!=staffgroundsmashanim&¤tanimation!=staffgroundsmashanim&&targetanimation!=staffspinhitanim&¤tanimation!=staffspinhitanim)weaponpoint+=tempnormthing*.1-skeleton.specialforward[1]*.3+(skeleton.joints[skeleton.jointlabels[rightwrist]].position-skeleton.joints[skeleton.jointlabels[rightelbow]].position); - /*if(targetanimation==staffhitanim||currentanimation==staffhitanim){ - XYZ weaptargnorm; - weaptargnorm=DoRotation(weapons.tippoint[i]-weapons.position[i],0,-rotation,0); - //weaptargnorm=animation[currentanimation].weapontarget[currentframe]*(1-target)+animation[targetanimation].weapontarget[targetframe]*(target); - Normalise(&weaptargnorm); - weaponpoint-=weaptargnorm*2; - }*/ + if(animTarget!=staffhitanim&&animCurrent!=staffhitanim&&animTarget!=staffgroundsmashanim&&animCurrent!=staffgroundsmashanim&&animTarget!=staffspinhitanim&&animCurrent!=staffspinhitanim)weaponpoint+=tempnormthing*.1-skeleton.specialforward[1]*.3+(skeleton.joints[skeleton.jointlabels[rightwrist]].position-skeleton.joints[skeleton.jointlabels[rightelbow]].position); } } if(weaponactive!=k&&weaponstuck!=k){ - if(weapons.type[i]==knife)weaponpoint=skeleton.joints[skeleton.jointlabels[abdomen]].position+(skeleton.joints[skeleton.jointlabels[righthip]].position-skeleton.joints[skeleton.jointlabels[lefthip]].position)*.1+(skeleton.joints[skeleton.jointlabels[rightshoulder]].position-skeleton.joints[skeleton.jointlabels[leftshoulder]].position)*.35; - if(weapons.type[i]==sword)weaponpoint=skeleton.joints[skeleton.jointlabels[abdomen]].position+(skeleton.joints[skeleton.jointlabels[lefthip]].position-skeleton.joints[skeleton.jointlabels[righthip]].position)*.09+(skeleton.joints[skeleton.jointlabels[leftshoulder]].position-skeleton.joints[skeleton.jointlabels[rightshoulder]].position)*.33; - if(weapons.type[i]==staff)weaponpoint=skeleton.joints[skeleton.jointlabels[abdomen]].position+(skeleton.joints[skeleton.jointlabels[lefthip]].position-skeleton.joints[skeleton.jointlabels[righthip]].position)*.09+(skeleton.joints[skeleton.jointlabels[leftshoulder]].position-skeleton.joints[skeleton.jointlabels[rightshoulder]].position)*.33; + if(weapons[i].getType()==knife)weaponpoint=skeleton.joints[skeleton.jointlabels[abdomen]].position+(skeleton.joints[skeleton.jointlabels[righthip]].position-skeleton.joints[skeleton.jointlabels[lefthip]].position)*.1+(skeleton.joints[skeleton.jointlabels[rightshoulder]].position-skeleton.joints[skeleton.jointlabels[leftshoulder]].position)*.35; + if(weapons[i].getType()==sword)weaponpoint=skeleton.joints[skeleton.jointlabels[abdomen]].position+(skeleton.joints[skeleton.jointlabels[lefthip]].position-skeleton.joints[skeleton.jointlabels[righthip]].position)*.09+(skeleton.joints[skeleton.jointlabels[leftshoulder]].position-skeleton.joints[skeleton.jointlabels[rightshoulder]].position)*.33; + if(weapons[i].getType()==staff)weaponpoint=skeleton.joints[skeleton.jointlabels[abdomen]].position+(skeleton.joints[skeleton.jointlabels[lefthip]].position-skeleton.joints[skeleton.jointlabels[righthip]].position)*.09+(skeleton.joints[skeleton.jointlabels[leftshoulder]].position-skeleton.joints[skeleton.jointlabels[rightshoulder]].position)*.33; for(j=0;jlabel==abdomen||skeleton.muscles[j].parent2->label==abdomen)&&(skeleton.muscles[j].parent1->label==neck||skeleton.muscles[j].parent2->label==neck)&&skeleton.muscles[j].numvertices>0){ weaponrotatemuscle=j; @@ -7438,154 +5944,153 @@ int Person::DrawSkeleton(){ } } } - if(!skeleton.free){ - weapons.position[i]=DoRotation(DoRotation(DoRotation(weaponpoint,0,0,tilt),tilt2,0,0),0,rotation,0)*scale+coords+currentoffset*(1-target)*scale+targetoffset*target*scale; - weapons.bigrotation[i]=rotation; - weapons.bigtilt[i]=tilt; - weapons.bigtilt2[i]=tilt2; - } if(skeleton.free){ - weapons.position[i]=weaponpoint*scale+coords; - weapons.bigrotation[i]=0; - weapons.bigtilt[i]=0; - weapons.bigtilt2[i]=0; + weapons[i].position=weaponpoint*scale+coords; + weapons[i].bigrotation=0; + weapons[i].bigtilt=0; + weapons[i].bigtilt2=0; + } else { + weapons[i].position=DoRotation(DoRotation(DoRotation(weaponpoint,0,0,tilt),tilt2,0,0),0,yaw,0)*scale+coords+currentoffset*(1-target)*scale+targetoffset*target*scale; + weapons[i].bigrotation=yaw; + weapons[i].bigtilt=tilt; + weapons[i].bigtilt2=tilt2; } - weapons.rotation1[i]=skeleton.muscles[weaponrotatemuscle].lastrotate1; - weapons.rotation2[i]=skeleton.muscles[weaponrotatemuscle].lastrotate2; - weapons.rotation3[i]=skeleton.muscles[weaponrotatemuscle].lastrotate3; + weapons[i].rotation1=skeleton.muscles[weaponrotatemuscle].lastrotate1; + weapons[i].rotation2=skeleton.muscles[weaponrotatemuscle].lastrotate2; + weapons[i].rotation3=skeleton.muscles[weaponrotatemuscle].lastrotate3; if(weaponactive==k){ - if(weapons.type[i]==knife){ - weapons.smallrotation[i]=180; - weapons.smallrotation2[i]=0; + if(weapons[i].getType()==knife){ + weapons[i].smallrotation=180; + weapons[i].smallrotation2=0; if(isCrouch()||wasCrouch()){ - weapons.smallrotation2[i]=20; + weapons[i].smallrotation2=20; } - if(targetanimation==hurtidleanim){ - weapons.smallrotation2[i]=50; + if(animTarget==hurtidleanim){ + weapons[i].smallrotation2=50; } - if((currentanimation==crouchstabanim&&targetanimation==crouchstabanim)||(currentanimation==backhandspringanim&&targetanimation==backhandspringanim)){ + if((animCurrent==crouchstabanim&&animTarget==crouchstabanim)||(animCurrent==backhandspringanim&&animTarget==backhandspringanim)){ XYZ temppoint1,temppoint2,tempforward; float distance; temppoint1=skeleton.joints[skeleton.jointlabels[righthand]].position; - temppoint2=animation[currentanimation].weapontarget[currentframe]*(1-target)+animation[targetanimation].weapontarget[targetframe]*(target); + temppoint2=animation[animCurrent].weapontarget[frameCurrent]*(1-target)+animation[animTarget].weapontarget[frameTarget]*(target); distance=findDistance(&temppoint1,&temppoint2); - weapons.rotation2[i]=asin((temppoint1.y-temppoint2.y)/distance); - weapons.rotation2[i]*=360/6.28; + weapons[i].rotation2=asin((temppoint1.y-temppoint2.y)/distance); + weapons[i].rotation2*=360/6.28; temppoint1.y=0; temppoint2.y=0; - weapons.rotation1[i]=acos((temppoint1.z-temppoint2.z)/findDistance(&temppoint1,&temppoint2)); - weapons.rotation1[i]*=360/6.28; - weapons.rotation3[i]=0; - weapons.smallrotation[i]=-90; - weapons.smallrotation2[i]=0; - if(temppoint1.x>temppoint2.x)weapons.rotation1[i]=360-weapons.rotation1[i]; + weapons[i].rotation1=acos((temppoint1.z-temppoint2.z)/findDistance(&temppoint1,&temppoint2)); + weapons[i].rotation1*=360/6.28; + weapons[i].rotation3=0; + weapons[i].smallrotation=-90; + weapons[i].smallrotation2=0; + if(temppoint1.x>temppoint2.x)weapons[i].rotation1=360-weapons[i].rotation1; } - if((currentanimation==knifeslashreversalanim&&targetanimation==knifeslashreversalanim)||(currentanimation==knifeslashreversedanim&&targetanimation==knifeslashreversedanim)){ + if((animCurrent==knifeslashreversalanim&&animTarget==knifeslashreversalanim)||(animCurrent==knifeslashreversedanim&&animTarget==knifeslashreversedanim)){ XYZ temppoint1,temppoint2,tempforward; float distance; temppoint1=skeleton.joints[skeleton.jointlabels[righthand]].position; - temppoint2=animation[currentanimation].weapontarget[currentframe]*(1-target)+animation[targetanimation].weapontarget[targetframe]*(target); + temppoint2=animation[animCurrent].weapontarget[frameCurrent]*(1-target)+animation[animTarget].weapontarget[frameTarget]*(target); distance=findDistance(&temppoint1,&temppoint2); - weapons.rotation2[i]=asin((temppoint1.y-temppoint2.y)/distance); - weapons.rotation2[i]*=360/6.28; + weapons[i].rotation2=asin((temppoint1.y-temppoint2.y)/distance); + weapons[i].rotation2*=360/6.28; temppoint1.y=0; temppoint2.y=0; - weapons.rotation1[i]=acos((temppoint1.z-temppoint2.z)/findDistance(&temppoint1,&temppoint2)); - weapons.rotation1[i]*=360/6.28; - weapons.rotation3[i]=0; - weapons.smallrotation[i]=90; - weapons.smallrotation2[i]=0; - if(temppoint1.x>temppoint2.x)weapons.rotation1[i]=360-weapons.rotation1[i]; + weapons[i].rotation1=acos((temppoint1.z-temppoint2.z)/findDistance(&temppoint1,&temppoint2)); + weapons[i].rotation1*=360/6.28; + weapons[i].rotation3=0; + weapons[i].smallrotation=90; + weapons[i].smallrotation2=0; + if(temppoint1.x>temppoint2.x)weapons[i].rotation1=360-weapons[i].rotation1; } - if(targetanimation==knifethrowanim){ - weapons.smallrotation[i]=90; - //weapons.smallrotation2[i]=-90; - weapons.smallrotation2[i]=0; - weapons.rotation1[i]=0; - weapons.rotation2[i]=0; - weapons.rotation3[i]=0; + if(animTarget==knifethrowanim){ + weapons[i].smallrotation=90; + //weapons[i].smallrotation2=-90; + weapons[i].smallrotation2=0; + weapons[i].rotation1=0; + weapons[i].rotation2=0; + weapons[i].rotation3=0; } - if(targetanimation==knifesneakattackanim&&targetframe<5){ - weapons.smallrotation[i]=-90; - weapons.rotation1[i]=0; - weapons.rotation2[i]=0; - weapons.rotation3[i]=0; + if(animTarget==knifesneakattackanim&&frameTarget<5){ + weapons[i].smallrotation=-90; + weapons[i].rotation1=0; + weapons[i].rotation2=0; + weapons[i].rotation3=0; } } - if(weapons.type[i]==sword){ - weapons.smallrotation[i]=0; - weapons.smallrotation2[i]=0; - if(targetanimation==knifethrowanim){ - weapons.smallrotation[i]=-90; - weapons.smallrotation2[i]=0; - weapons.rotation1[i]=0; - weapons.rotation2[i]=0; - weapons.rotation3[i]=0; + if(weapons[i].getType()==sword){ + weapons[i].smallrotation=0; + weapons[i].smallrotation2=0; + if(animTarget==knifethrowanim){ + weapons[i].smallrotation=-90; + weapons[i].smallrotation2=0; + weapons[i].rotation1=0; + weapons[i].rotation2=0; + weapons[i].rotation3=0; } - if((targetanimation==swordgroundstabanim&¤tanimation==swordgroundstabanim)||(targetanimation==swordsneakattackanim&¤tanimation==swordsneakattackanim)||(targetanimation==swordslashparryanim&¤tanimation==swordslashparryanim)||(targetanimation==swordslashparriedanim&¤tanimation==swordslashparriedanim)||(targetanimation==swordslashreversalanim&¤tanimation==swordslashreversalanim)||(targetanimation==swordslashreversedanim&¤tanimation==swordslashreversedanim)||(targetanimation==knifeslashreversalanim&¤tanimation==knifeslashreversalanim)||(targetanimation==knifeslashreversedanim&¤tanimation==knifeslashreversedanim)||(targetanimation==swordslashanim&¤tanimation==swordslashanim)||(targetanimation==drawleftanim&¤tanimation==drawleftanim)||(currentanimation==backhandspringanim&&targetanimation==backhandspringanim)){ + if((animTarget==swordgroundstabanim&&animCurrent==swordgroundstabanim)||(animTarget==swordsneakattackanim&&animCurrent==swordsneakattackanim)||(animTarget==swordslashparryanim&&animCurrent==swordslashparryanim)||(animTarget==swordslashparriedanim&&animCurrent==swordslashparriedanim)||(animTarget==swordslashreversalanim&&animCurrent==swordslashreversalanim)||(animTarget==swordslashreversedanim&&animCurrent==swordslashreversedanim)||(animTarget==knifeslashreversalanim&&animCurrent==knifeslashreversalanim)||(animTarget==knifeslashreversedanim&&animCurrent==knifeslashreversedanim)||(animTarget==swordslashanim&&animCurrent==swordslashanim)||(animTarget==drawleftanim&&animCurrent==drawleftanim)||(animCurrent==backhandspringanim&&animTarget==backhandspringanim)){ XYZ temppoint1,temppoint2,tempforward; float distance; - temppoint1=animation[currentanimation].position[skeleton.jointlabels[righthand]][currentframe]*(1-target)+animation[targetanimation].position[skeleton.jointlabels[righthand]][targetframe]*(target); //skeleton.joints[skeleton.jointlabels[righthand]].position; - temppoint2=animation[currentanimation].weapontarget[currentframe]*(1-target)+animation[targetanimation].weapontarget[targetframe]*(target); + temppoint1=animation[animCurrent].position[skeleton.jointlabels[righthand]][frameCurrent]*(1-target)+animation[animTarget].position[skeleton.jointlabels[righthand]][frameTarget]*(target); //skeleton.joints[skeleton.jointlabels[righthand]].position; + temppoint2=animation[animCurrent].weapontarget[frameCurrent]*(1-target)+animation[animTarget].weapontarget[frameTarget]*(target); distance=findDistance(&temppoint1,&temppoint2); - weapons.rotation2[i]=asin((temppoint1.y-temppoint2.y)/distance); - weapons.rotation2[i]*=360/6.28; + weapons[i].rotation2=asin((temppoint1.y-temppoint2.y)/distance); + weapons[i].rotation2*=360/6.28; temppoint1.y=0; temppoint2.y=0; - weapons.rotation1[i]=acos((temppoint1.z-temppoint2.z)/findDistance(&temppoint1,&temppoint2)); - weapons.rotation1[i]*=360/6.28; - weapons.rotation3[i]=0; - weapons.smallrotation[i]=90; - weapons.smallrotation2[i]=0; - if(temppoint1.x>temppoint2.x)weapons.rotation1[i]=360-weapons.rotation1[i]; + weapons[i].rotation1=acos((temppoint1.z-temppoint2.z)/findDistance(&temppoint1,&temppoint2)); + weapons[i].rotation1*=360/6.28; + weapons[i].rotation3=0; + weapons[i].smallrotation=90; + weapons[i].smallrotation2=0; + if(temppoint1.x>temppoint2.x)weapons[i].rotation1=360-weapons[i].rotation1; } } - if(weapons.type[i]==staff){ - weapons.smallrotation[i]=100; - weapons.smallrotation2[i]=0; - if((targetanimation==staffhitanim&¤tanimation==staffhitanim)||(targetanimation==staffhitreversedanim&¤tanimation==staffhitreversedanim)||(targetanimation==staffspinhitreversedanim&¤tanimation==staffspinhitreversedanim)||(targetanimation==staffgroundsmashanim&¤tanimation==staffgroundsmashanim)||(targetanimation==staffspinhitanim&¤tanimation==staffspinhitanim)){ + if(weapons[i].getType()==staff){ + weapons[i].smallrotation=100; + weapons[i].smallrotation2=0; + if((animTarget==staffhitanim&&animCurrent==staffhitanim)||(animTarget==staffhitreversedanim&&animCurrent==staffhitreversedanim)||(animTarget==staffspinhitreversedanim&&animCurrent==staffspinhitreversedanim)||(animTarget==staffgroundsmashanim&&animCurrent==staffgroundsmashanim)||(animTarget==staffspinhitanim&&animCurrent==staffspinhitanim)){ XYZ temppoint1,temppoint2,tempforward; float distance; - temppoint1=animation[currentanimation].position[skeleton.jointlabels[righthand]][currentframe]*(1-target)+animation[targetanimation].position[skeleton.jointlabels[righthand]][targetframe]*(target); //skeleton.joints[skeleton.jointlabels[righthand]].position; - temppoint2=animation[currentanimation].weapontarget[currentframe]*(1-target)+animation[targetanimation].weapontarget[targetframe]*(target); + temppoint1=animation[animCurrent].position[skeleton.jointlabels[righthand]][frameCurrent]*(1-target)+animation[animTarget].position[skeleton.jointlabels[righthand]][frameTarget]*(target); //skeleton.joints[skeleton.jointlabels[righthand]].position; + temppoint2=animation[animCurrent].weapontarget[frameCurrent]*(1-target)+animation[animTarget].weapontarget[frameTarget]*(target); distance=findDistance(&temppoint1,&temppoint2); - weapons.rotation2[i]=asin((temppoint1.y-temppoint2.y)/distance); - weapons.rotation2[i]*=360/6.28; + weapons[i].rotation2=asin((temppoint1.y-temppoint2.y)/distance); + weapons[i].rotation2*=360/6.28; temppoint1.y=0; temppoint2.y=0; - weapons.rotation1[i]=acos((temppoint1.z-temppoint2.z)/findDistance(&temppoint1,&temppoint2)); - weapons.rotation1[i]*=360/6.28; - weapons.rotation3[i]=0; - weapons.smallrotation[i]=90; - weapons.smallrotation2[i]=0; - if(temppoint1.x>temppoint2.x)weapons.rotation1[i]=360-weapons.rotation1[i]; + weapons[i].rotation1=acos((temppoint1.z-temppoint2.z)/findDistance(&temppoint1,&temppoint2)); + weapons[i].rotation1*=360/6.28; + weapons[i].rotation3=0; + weapons[i].smallrotation=90; + weapons[i].smallrotation2=0; + if(temppoint1.x>temppoint2.x)weapons[i].rotation1=360-weapons[i].rotation1; } } } if(weaponactive!=k&&weaponstuck!=k){ - if(weapons.type[i]==knife){ - weapons.smallrotation[i]=-70; - weapons.smallrotation2[i]=10; + if(weapons[i].getType()==knife){ + weapons[i].smallrotation=-70; + weapons[i].smallrotation2=10; } - if(weapons.type[i]==sword){ - weapons.smallrotation[i]=-100; - weapons.smallrotation2[i]=-8; + if(weapons[i].getType()==sword){ + weapons[i].smallrotation=-100; + weapons[i].smallrotation2=-8; } - if(weapons.type[i]==staff){ - weapons.smallrotation[i]=-100; - weapons.smallrotation2[i]=-8; + if(weapons[i].getType()==staff){ + weapons[i].smallrotation=-100; + weapons[i].smallrotation2=-8; } } if(weaponstuck==k){ - if(weaponstuckwhere==0)weapons.smallrotation[i]=180; - else weapons.smallrotation[i]=0; - weapons.smallrotation2[i]=10; - //if(animation[targetanimation].height==lowheight&&animation[targetanimation].attack==neutral){ - //} + if(weaponstuckwhere==0) + weapons[i].smallrotation=180; + else + weapons[i].smallrotation=0; + weapons[i].smallrotation2=10; } } } @@ -7593,8 +6098,8 @@ int Person::DrawSkeleton(){ calcrot=0; if(skeleton.free)calcrot=1; - if(animation[targetanimation].attack||isRun()||targetanimation==staggerbackhardanim||isFlip()||targetanimation==climbanim||targetanimation==sneakanim||targetanimation==rollanim||targetanimation==walkanim||targetanimation==backhandspringanim||isFlip()||isWallJump())calcrot=1; - if(currentanimation!=targetanimation)calcrot=1; + if(animation[animTarget].attack||isRun()||animTarget==staggerbackhardanim||isFlip()||animTarget==climbanim||animTarget==sneakanim||animTarget==rollanim||animTarget==walkanim||animTarget==backhandspringanim||isFlip()||isWallJump())calcrot=1; + if(animCurrent!=animTarget)calcrot=1; //if(id==0)calcrot=1; if(skeleton.free==2)calcrot=0; @@ -7618,7 +6123,7 @@ int Person::SphereCheck(XYZ *p1,float radius, XYZ *p, XYZ *move, float *rotate, oldp1=*p1; *p1=*p1-*move; - if(findDistancefast(p1,&model->boundingspherecenter)>radius*radius+model->boundingsphereradius*model->boundingsphereradius)return -1; + if(distsq(p1,&model->boundingspherecenter)>radius*radius+model->boundingsphereradius*model->boundingsphereradius)return -1; if(*rotate)*p1=DoRotation(*p1,0,-*rotate,0); for(i=0;i<4;i++){ for (j=0;jTriangleNum;j++){ @@ -7644,34 +6149,23 @@ int Person::SphereCheck(XYZ *p1,float radius, XYZ *p, XYZ *move, float *rotate, end.y-=radius; if(LineFacetd(&start,&end,&model->vertex[model->Triangles[j].vertex[0]],&model->vertex[model->Triangles[j].vertex[1]],&model->vertex[model->Triangles[j].vertex[2]],&model->facenormals[j],&point)){ p1->y=point.y+radius; - if((targetanimation==jumpdownanim||isFlip())){ - if(isFlip()&&(targetframe<5||animation[targetanimation].label[targetframe]==7||animation[targetanimation].label[targetframe]==4))RagDoll(0); + if((animTarget==jumpdownanim||isFlip())){ + if(isFlip()&&(frameTarget<5||animation[animTarget].label[frameTarget]==7||animation[animTarget].label[frameTarget]==4))RagDoll(0); - if(targetanimation==jumpupanim){jumppower=-4;targetanimation=getIdle();} + if(animTarget==jumpupanim){jumppower=-4;animTarget=getIdle();} target=0; - targetframe=0; + frameTarget=0; onterrain=1; if(id==0){ - FSOUND_SetPaused(channels[whooshsound], true); - FSOUND_SetVolume(channels[whooshsound], 0); + pause_sound(whooshsound); + OPENAL_SetVolume(channels[whooshsound], 0); } - if((targetanimation==jumpdownanim||isFlip())&&!wasLanding()&&!wasLandhard()){ + if((animTarget==jumpdownanim||isFlip())&&!wasLanding()&&!wasLandhard()){ 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); - FSOUND_3D_SetAttributes(channels[landsound], gLoc, vel); - FSOUND_SetVolume(channels[landsound], 128); - FSOUND_SetPaused(channels[landsound], false); + animTarget=getLanding(); + emit_sound_at(landsound, coords, 128.); if(id==0){ envsound[numenvsounds]=coords; @@ -7707,7 +6201,7 @@ int Person::SphereCheck(XYZ *p1,float radius, XYZ *p, XYZ *move, float *rotate, p1->x, p1->y, p1->z, radius/2); end=*p1-point; if(dotproduct(&model->facenormals[j],&end)>0&&intersecting){ - if((targetanimation==jumpdownanim||targetanimation==jumpupanim||isFlip())){ + if((animTarget==jumpdownanim||animTarget==jumpupanim||isFlip())){ start=velocity; velocity-=DoRotation(model->facenormals[j],0,*rotate,0)*findLength(&velocity)*abs(normaldotproduct(velocity,DoRotation(model->facenormals[j],0,*rotate,0)));//(distance-radius*.5)/multiplier; if(findLengthfast(&start)