X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FPerson.cpp;h=122800b519a37d459278e090a18f7da52cd47cde;hb=8afdcba610cded0e54b85069ba051268b29669a6;hp=30d4f47aa3d6a7507d1ab690b135423237cd70da;hpb=429b479f57d0a432b07deb320d8f3e9e7c75c5df;p=lugaru.git diff --git a/Source/Person.cpp b/Source/Person.cpp index 30d4f47..122800b 100644 --- a/Source/Person.cpp +++ b/Source/Person.cpp @@ -28,7 +28,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Game.h" extern float multiplier; -extern int channels[100]; extern Terrain terrain; extern float gravity; extern int environment; @@ -49,7 +48,6 @@ extern bool osx; extern bool autoslomo; extern float camerashake; extern float woozy; -extern float terraindetail; extern float viewdistance; extern float blackout; extern int difficulty; @@ -67,7 +65,6 @@ 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]; @@ -86,69 +83,67 @@ extern int indialogue; extern bool gamestarted; -extern "C" void PlaySoundEx(int channel, OPENAL_SAMPLE *sptr, OPENAL_DSPUNIT *dsp, signed char startpaused); -extern "C" void PlayStreamEx(int chan, OPENAL_STREAM *sptr, OPENAL_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); - if(tutoriallevel!=1) - emit_sound_at(heavyimpactsound, victim->coords); - 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)OPENAL_SetPaused(channels[whooshsound], false); - - award_bonus(id, cannon); - } - 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 + && (targetanimation == rabbitkickanim + && victim + && victim != this + && currentframe >= 2 + && currentanimation == rabbitkickanim) + && (findDistancefast(&coords,&victim->coords) < 1.2) + && (!victim->skeleton.free))) + return; + + if (animation[victim->targetanimation].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; + currentframe=3; + targetanimation=backflipanim; + targetframe=4; + velocity=facing*-10; + velocity.y=5; + skeleton.free=0; + if(id==0) + resume_stream(whooshsound); + + award_bonus(id, cannon); + } + 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::CatchFire(){ @@ -182,10 +177,14 @@ int Person::getIdle(){ if(creature==wolftype)return wolfidle; } if(aitype==playercontrolled&&stunned<=0&&weaponactive!=-1){ - if(weapons.type[weaponids[weaponactive]]==knife)return knifefightidleanim; - if(weapons.type[weaponids[weaponactive]]==sword&&victim->weaponactive!=-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; } @@ -223,56 +222,18 @@ int Person::getStop(){ 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; -} - static void SolidHitBonus(int playerid) { @@ -335,7 +296,6 @@ 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); @@ -440,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); } @@ -518,8 +476,7 @@ 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); + DoMipmaps(); bleedxint=0; bleedyint=0; @@ -559,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; @@ -747,8 +704,7 @@ 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); + DoMipmaps(); bleedy=(1+coordsy)*512; bleedx=coordsx*512; @@ -778,398 +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->targetanimation != jumpupanim + && victim->targetanimation != 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(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[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;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[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;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[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;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[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;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[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->targetframe=0; + victim->targetanimation=staggerbackhighanim; + victim->targetrotation=targetrotation+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){ - 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; - emit_sound_at(swordstaffsound, victim->coords); - } - else{ - emit_sound_at(metalhitsound, victim->coords); - } - } - 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; - - emit_sound_at(swordstaffsound, coords); - } - else{ - emit_sound_at(metalhitsound, coords); - } - } - - 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; + targetframe=0; + targetanimation=staggerbackhighanim; + targetrotation=targetrotation+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->targetanimation=dodgebackanim; + 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 + { + 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; + } + } - 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->targetanimation].attack==reversal)numreversals++; } void Person::DoDamage(float howmuch){ @@ -1440,8 +1326,8 @@ void Person::RagDoll(bool checkcollision){ skeleton.joints[j].position-=average; } - whichpatchx=coords.x/(terrain.size/subdivision*terrain.scale*terraindetail); - whichpatchz=coords.z/(terrain.size/subdivision*terrain.scale*terraindetail); + whichpatchx=coords.x/(terrain.size/subdivision*terrain.scale); + whichpatchz=coords.z/(terrain.size/subdivision*terrain.scale); if(terrain.patchobjectnum[whichpatchx][whichpatchz]) for(l=0;l0){ - 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; + 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]; @@ -1619,7 +1505,7 @@ void Person::DoAnimations(){ if(targetanimation==rollanim&&targetframe==3&&onfire){ onfire=0; emit_sound_at(fireendsound, coords); - OPENAL_SetPaused(channels[stream_firesound], true); + pause_sound(stream_firesound); deathbleeding=0; } @@ -1647,7 +1533,7 @@ void Person::DoAnimations(){ } 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(weapons[weaponids[0]].getType()==knife){ if(weaponactive==-1)weaponactive=0; else if(weaponactive==0)weaponactive=-1; @@ -1664,14 +1550,6 @@ void Person::DoAnimations(){ if(tutoriallevel!=1||id==0) if((animation[targetanimation].label[targetframe]&&(animation[targetanimation].label[targetframe]<5||animation[targetanimation].label[targetframe]==8))/*||(targetanimation==rollanim&&targetframe==animation[rollanim].numframes-1)*/){ int whichsound; - float gLoc[3]; - float vel[3]; - gLoc[0]=coords.x; - gLoc[1]=coords.y; - gLoc[2]=coords.z; - vel[0]=velocity.x; - vel[1]=velocity.y; - vel[2]=velocity.z; if(onterrain){ if(terrain.getOpacity(coords.x,coords.z)<.2){ if(animation[targetanimation].label[targetframe]==1)whichsound=footstepsound; @@ -1705,12 +1583,7 @@ void Person::DoAnimations(){ else if(animation[targetanimation].label[targetframe]==4)whichsound=knifeswishsound; if(animation[targetanimation].label[targetframe]==8&&tutoriallevel!=1)whichsound=landsound2; - PlaySoundEx( whichsound, samp[whichsound], NULL, true); - OPENAL_3D_SetAttributes(channels[whichsound], gLoc, vel); - if(whichsound!=knifeswishsound)OPENAL_SetVolume(channels[whichsound], 128); - if(whichsound!=knifeswishsound&&(targetanimation==staffhitanim||targetanimation==staffgroundsmashanim||targetanimation==staffspinhitanim))OPENAL_SetVolume(channels[whichsound], 256); - if(whichsound==knifeswishsound)OPENAL_SetVolume(channels[whichsound], 512); - OPENAL_SetPaused(channels[whichsound], false); + emit_sound_at(whichsound, coords, 256.); if(id==0) if(whichsound==footstepsound||whichsound==footstepsound2||whichsound==footstepsound3||whichsound==footstepsound4){ @@ -1774,16 +1647,16 @@ void Person::DoAnimations(){ targetframe++; if(targetanimation==removeknifeanim&&animation[targetanimation].label[currentframe]==5){ - for(i=0;i=1){ - if(weapons.type[i]!=staff){ + 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]; } @@ -1794,36 +1667,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){ - bool fleshstuck=0; - if(weapons.owner[i]!=-1) + for(i=0;i1)willwork=0; + if((weapons[i].owner==-1)||(hasvictim&&weapons[i].owner==victim->id&&victim->skeleton.free)) + if(willwork&&findDistancefastflat(&coords,&weapons[i].position)<3&&weaponactive==-1){ + if(findDistancefast(&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){ - emit_sound_at(knifedrawsound, coords, 128.); + fleshstuck=true; } } if(fleshstuck){ 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; @@ -1843,12 +1714,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)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .8, .3); - weapons.bloody[i]=2; - weapons.blooddrip[i]=5; + weapons[i].bloody=2; + weapons[i].blooddrip=5; victim->weaponstuck=-1; } } @@ -1863,7 +1734,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]; } @@ -2225,7 +2096,7 @@ void Person::DoAnimations(){ 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); + terrain.MakeDecal(blooddecalfast,(weapons[weaponids[weaponactive]].tippoint*.8+weapons[weaponids[weaponactive]].position*.2),.08,.6,Random()%360); emit_sound_at(knifesheathesound, coords, 128.); } @@ -2235,8 +2106,8 @@ void Person::DoAnimations(){ 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); //where=scale; @@ -2245,22 +2116,22 @@ void Person::DoAnimations(){ 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); 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); 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); 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); endpoint=where; @@ -2275,7 +2146,7 @@ void Person::DoAnimations(){ 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; @@ -2289,9 +2160,9 @@ void Person::DoAnimations(){ 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; @@ -2312,18 +2183,18 @@ void Person::DoAnimations(){ 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); 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); endpoint=where; @@ -2334,19 +2205,19 @@ 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); 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); endpoint=where; @@ -2357,7 +2228,7 @@ 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); @@ -2390,8 +2261,8 @@ 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; } } @@ -2492,9 +2363,9 @@ void Person::DoAnimations(){ if(victim->id==0)camerashake+=.4; 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; + 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); } @@ -2511,19 +2382,19 @@ void Person::DoAnimations(){ if(weaponactive!=-1){ escapednum=0; XYZ aim; - weapons.owner[weaponids[0]]=-1; + weapons[weaponids[0]].owner=-1; aim=victim->coords+DoRotation(victim->skeleton.joints[victim->skeleton.jointlabels[abdomen]].position,0,victim->rotation,0)*victim->scale+victim->velocity*findDistance(&victim->coords,&coords)/50-(coords+DoRotation(skeleton.joints[skeleton.jointlabels[righthand]].position,0,rotation,0)*scale); Normalise(&aim); /*if(victim->targetanimation==jumpupanim||victim->targetanimation==jumpdownanim){ aim=DoRotation(aim,(float)abs(Random()%15)-7,(float)abs(Random()%15)-7,0); }*/ - weapons.velocity[weaponids[0]]=aim*50; - weapons.tipvelocity[weaponids[0]]=aim*50; - weapons.missed[weaponids[0]]=0; - weapons.hitsomething[weaponids[0]]=0; - weapons.freetime[weaponids[0]]=0; - weapons.firstfree[weaponids[0]]=1; - weapons.physics[weaponids[0]]=0; + 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]; @@ -2555,8 +2426,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; @@ -2601,8 +2472,8 @@ void Person::DoAnimations(){ } 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; @@ -2629,9 +2500,9 @@ void Person::DoAnimations(){ } else { 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; + 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); } @@ -2648,16 +2519,16 @@ void Person::DoAnimations(){ victim->targetanimation=staggerbackhighanim; victim->targetrotation=targetrotation+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]; @@ -2668,11 +2539,6 @@ void Person::DoAnimations(){ player[i].wentforweapon=0; } - /*PlaySoundEx( metalhitsound, samp[metalhitsound], NULL, true); - OPENAL_3D_SetAttributes(channels[metalhitsound], gLoc, vel); - OPENAL_SetVolume(channels[metalhitsound], 512); - OPENAL_SetPaused(channels[metalhitsound], false);*/ - } } } @@ -2680,7 +2546,7 @@ void Person::DoAnimations(){ if(targetanimation==staffhitanim&&animation[targetanimation].label[currentframe]==5&&victim->targetanimation!=rollanim){ if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5&&victim->targetanimation!=dodgebackanim&&victim->targetanimation!=sweepanim){ if(tutoriallevel!=1){ - weapons.damage[weaponids[0]]+=.4+float(abs(Random()%100)-50)/250; + weapons[weaponids[0]].damage+=.4+float(abs(Random()%100)-50)/250; escapednum=0; if(id==0)camerashake+=.4; if(Random()%2||creature==wolftype){ @@ -2714,7 +2580,7 @@ void Person::DoAnimations(){ if(targetanimation==staffspinhitanim&&animation[targetanimation].label[currentframe]==5&&victim->targetanimation!=rollanim){ if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5&&victim->targetanimation!=dodgebackanim&&victim->targetanimation!=sweepanim){ if(tutoriallevel!=1){ - weapons.damage[weaponids[0]]+=.6+float(abs(Random()%100)-50)/250; + weapons[weaponids[0]].damage+=.6+float(abs(Random()%100)-50)/250; escapednum=0; if(id==0)camerashake+=.4; if(Random()%2||creature==wolftype){ @@ -2746,7 +2612,7 @@ void Person::DoAnimations(){ if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5){ escapednum=0; if(tutoriallevel!=1){ - if(!victim->dead)weapons.damage[weaponids[0]]+=.4+float(abs(Random()%100)-50)/500; + if(!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; @@ -2944,8 +2810,8 @@ void Person::DoAnimations(){ if((targetanimation==swordslashreversalanim||targetanimation==knifeslashreversalanim||targetanimation==staffhitreversalanim||targetanimation==staffspinhitreversalanim)&&animation[targetanimation].label[currentframe]==5){ if(victim->weaponactive!=-1&&victim->num_weapons>0){ - if(weapons.owner[victim->weaponids[victim->weaponactive]]==victim->id){ - weapons.owner[victim->weaponids[victim->weaponactive]]=id; + 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]; @@ -3044,13 +2910,13 @@ 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){ if(weaponactive!=-1){ victim->DoBloodBig(2/victim->armorhigh,225); emit_sound_at(knifeslicesound, victim->coords); - 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; } if(weaponactive==-1&&creature==wolftype){; emit_sound_at(clawslicesound, victim->coords, 128.); @@ -3131,13 +2997,13 @@ 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){ if(weaponactive!=-1){ victim->DoBloodBig(200,225); emit_sound_at(knifeslicesound, victim->coords); - if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2; - weapons.blooddrip[weaponids[weaponactive]]+=5; + if(bloodtoggle)weapons[weaponids[weaponactive]].bloody=2; + weapons[weaponids[weaponactive]].blooddrip+=5; } if(creature==wolftype&&weaponactive==-1){ @@ -3164,9 +3030,9 @@ void Person::DoAnimations(){ */ XYZ footvel,footpoint; footvel=0; - footpoint=weapons.tippoint[weaponids[0]]; + footpoint=weapons[weaponids[0]].tippoint; if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3); - footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]]); + 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); @@ -3178,9 +3044,9 @@ void Person::DoAnimations(){ award_bonus(id, Stabbonus); XYZ footvel,footpoint; footvel=0; - footpoint=weapons.tippoint[weaponids[0]]; + footpoint=weapons[weaponids[0]].tippoint; if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3); - footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]])*-1; + 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); @@ -3190,8 +3056,8 @@ void Person::DoAnimations(){ victim->bloodloss+=10000; victim->velocity=0; emit_sound_at(fleshstabsound, victim->coords); - if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2; - weapons.blooddrip[weaponids[weaponactive]]+=5; + if(bloodtoggle)weapons[weaponids[weaponactive]].bloody=2; + weapons[weaponids[weaponactive]].blooddrip+=5; } } @@ -3209,14 +3075,14 @@ void Person::DoAnimations(){ } if(weaponactive!=-1&&animation[victim->targetanimation].attack!=reversal){ emit_sound_at(fleshstabremovesound, victim->coords); - if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2; - weapons.blooddrip[weaponids[weaponactive]]+=5; + if(bloodtoggle)weapons[weaponids[weaponactive]].bloody=2; + weapons[weaponids[weaponactive]].blooddrip+=5; XYZ footvel,footpoint; footvel=0; - footpoint=weapons.tippoint[weaponids[0]]; + footpoint=weapons[weaponids[0]].tippoint; if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3); - footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]])*-1; + 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); @@ -3232,9 +3098,9 @@ void Person::DoAnimations(){ XYZ footvel,footpoint; footvel=0; - footpoint=(weapons.tippoint[weaponids[0]]+weapons.position[weaponids[0]])/2; + footpoint=(weapons[weaponids[0]].tippoint+weapons[weaponids[0]].position)/2; if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3); - footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]]); + 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); @@ -3244,8 +3110,8 @@ void Person::DoAnimations(){ victim->bloodloss+=10000; victim->velocity=0; emit_sound_at(fleshstabsound, victim->coords); - if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2; - weapons.blooddrip[weaponids[weaponactive]]+=5; + if(bloodtoggle)weapons[weaponids[weaponactive]].bloody=2; + weapons[weaponids[weaponactive]].blooddrip+=5; } } @@ -3257,14 +3123,14 @@ void Person::DoAnimations(){ } if(weaponactive!=-1){ emit_sound_at(fleshstabremovesound, victim->coords); - if(bloodtoggle)weapons.bloody[weaponids[weaponactive]]=2; - weapons.blooddrip[weaponids[weaponactive]]+=5; + if(bloodtoggle)weapons[weaponids[weaponactive]].bloody=2; + weapons[weaponids[weaponactive]].blooddrip+=5; XYZ footvel,footpoint; footvel=0; - footpoint=weapons.tippoint[weaponids[0]]; + footpoint=weapons[weaponids[0]].tippoint; if(bloodtoggle)Sprite::MakeSprite(cloudimpactsprite, footpoint,footvel, 1,0,0, .9, .3); - footvel=(weapons.tippoint[weaponids[0]]-weapons.position[weaponids[0]])*-1; + 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); @@ -3287,13 +3153,13 @@ 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){ if(weaponactive!=-1){ victim->DoBloodBig(2/victim->armorhead,225); emit_sound_at(knifeslicesound, victim->coords); - 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; } if(weaponactive==-1&&creature==wolftype){ emit_sound_at(clawslicesound, victim->coords, 128.); @@ -3476,7 +3342,8 @@ void Person::DoAnimations(){ targetframe=3; velocity=facing*-8; velocity.y=4; - if(id==0)OPENAL_SetPaused(channels[whooshsound], false); + if(id==0) + resume_stream(whooshsound); } if(targetanimation==walljumprightanim){ targetanimation=rightflipanim; @@ -3494,7 +3361,8 @@ void Person::DoAnimations(){ velocity=facing*8; velocity.y=4; } - if(id==0)OPENAL_SetPaused(channels[whooshsound], false); + if(id==0) + resume_stream(whooshsound); } if(targetanimation==walljumpleftanim){ if(attackkeydown){ @@ -3534,10 +3402,10 @@ void Person::DoAnimations(){ velocity=DoRotation(facing,0,-30,0)*-8; velocity.y=4; } - if(id==0)OPENAL_SetPaused(channels[whooshsound], false); + if(id==0) + resume_stream(whooshsound); } if(targetanimation==sneakattackanim){ - float ycoords=oldcoords.y; currentanimation=getCrouch(); targetanimation=getCrouch(); targetframe=1; @@ -3554,7 +3422,6 @@ void Person::DoAnimations(){ lastfeint=0; } if(targetanimation==knifesneakattackanim||targetanimation==swordsneakattackanim){ - float ycoords=oldcoords.y; targetanimation=getIdle(); targetframe=0; if(onterrain)coords.y=terrain.getHeight(coords.x,coords.z); @@ -3668,7 +3535,7 @@ void Person::DoAnimations(){ targetrotation=rotation; 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; @@ -3687,7 +3554,7 @@ void Person::DoAnimations(){ escapednum++; targetanimation=rollanim; coords+=facing; - if(id==0)OPENAL_SetPaused(channels[whooshsound], true); + if(id==0)pause_sound(whooshsound); } lastfeint=0; } @@ -3710,7 +3577,7 @@ void Person::DoAnimations(){ escapednum++; targetanimation=rollanim; coords+=facing*2; - if(id==0)OPENAL_SetPaused(channels[whooshsound], true); + if(id==0)pause_sound(whooshsound); } lastfeint=0; } @@ -3874,7 +3741,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; @@ -3931,7 +3797,7 @@ void Person::DoStuff(){ } } if(weaponactive==-1&&num_weapons>0){ - if(weapons.type[weaponids[0]]==staff){ + if(weapons[weaponids[0]].getType()==staff){ weaponactive=0; } } @@ -3984,7 +3850,7 @@ void Person::DoStuff(){ bleeding-=multiplier*.3; if(bloodtoggle==2){ glBindTexture(GL_TEXTURE_2D,skeleton.drawmodel.textureptr); - if(bleeding<=0&&(detail!=2||osx))DoMipmaps(5,0,0,skeleton.skinsize,skeleton.skinsize); + if(bleeding<=0&&(detail!=2||osx))DoMipmaps(); } } @@ -4033,15 +3899,15 @@ void Person::DoStuff(){ if(deathbleeding<0)deathbleeding=0; if(bloodloss>damagetolerance&&animation[targetanimation].attack==neutral){ if(weaponactive!=-1){ - weapons.owner[weaponids[0]]=-1; - weapons.velocity[weaponids[0]]=velocity*scale*-.3; - weapons.velocity[weaponids[0]].x+=.01; - weapons.tipvelocity[weaponids[0]]=velocity*scale; - weapons.missed[weaponids[0]]=1; - weapons.hitsomething[weaponids[0]]=0; - weapons.freetime[weaponids[0]]=0; - weapons.firstfree[weaponids[0]]=1; - weapons.physics[weaponids[0]]=1; + 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]; @@ -4086,7 +3952,6 @@ void Person::DoStuff(){ 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; @@ -4111,7 +3976,7 @@ void Person::DoStuff(){ } if(!osx&&detail>1){ glBindTexture(GL_TEXTURE_2D,skeleton.drawmodel.textureptr); - DoMipmaps(0,startx,endx,starty,endy); + DoMipmaps(); } if(!skeleton.free){ @@ -4443,15 +4308,15 @@ void Person::DoStuff(){ RagDoll(0); if(weaponactive!=-1){ - weapons.owner[weaponids[0]]=-1; - weapons.velocity[weaponids[0]]=velocity*scale*-.3; - weapons.velocity[weaponids[0]].x+=.01; - weapons.tipvelocity[weaponids[0]]=velocity*scale; - weapons.missed[weaponids[0]]=1; - weapons.hitsomething[weaponids[0]]=0; - weapons.freetime[weaponids[0]]=0; - weapons.firstfree[weaponids[0]]=1; - weapons.physics[weaponids[0]]=1; + 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]; @@ -4502,15 +4367,15 @@ void Person::DoStuff(){ DoBlood(1,255); if(weaponactive!=-1){ - weapons.owner[weaponids[0]]=-1; - weapons.velocity[weaponids[0]]=velocity*scale*-.3; - weapons.velocity[weaponids[0]].x+=.01; - weapons.tipvelocity[weaponids[0]]=velocity*scale; - weapons.missed[weaponids[0]]=1; - weapons.hitsomething[weaponids[0]]=0; - weapons.freetime[weaponids[0]]=0; - weapons.firstfree[weaponids[0]]=1; - weapons.physics[weaponids[0]]=1; + 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]; @@ -4539,14 +4404,10 @@ void Person::DoStuff(){ skeleton.free=1; emit_sound_at(breaksound, coords); - /*if(id==0||findDistancefast(&coords,&viewer)<50){ - slomo=1; - slomodelay=.2; - }*/ } if(skeleton.free==1){ - if(id==0)OPENAL_SetPaused(channels[whooshsound], true); + if(id==0)pause_sound(whooshsound); if(!dead){ //If knocked over, open hands and close mouth @@ -4596,20 +4457,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)OPENAL_SetPaused(channels[whooshsound], true); + if(id==0)pause_sound(whooshsound); skeleton.free=3; DrawSkeleton(); skeleton.free=2; @@ -4718,7 +4570,7 @@ void Person::DoStuff(){ if(findLength(&average)<10&&!dead&&skeleton.free){ skeleton.longdead+=(2000-findLength(&average))*multiplier+multiplier; if(skeleton.longdead>(damage+500)*1.5){ - if(id==0)OPENAL_SetPaused(channels[whooshsound], true); + if(id==0)pause_sound(whooshsound); skeleton.free=0; velocity=0; XYZ middle; @@ -4744,21 +4596,7 @@ void Person::DoStuff(){ 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)0)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; @@ -4854,9 +4692,6 @@ void Person::DoStuff(){ } if(skeleton.freefall==0)freefall=0; - if(!isnormal(velocity.x)&&velocity.x){ - int xy=1; - } } if(aitype!=passivetype||skeleton.free==1) @@ -5141,13 +4976,7 @@ void Person::DoStuff(){ targetheadmorphness=1; } } - /* - if(speechdelay>.25){ - if(headmorphend!=2)headmorphness=0; - headmorphend=2; - targetheadmorphness=1; - } - */ + bool behind; behind=0; if(hasvictim){ @@ -5166,11 +4995,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; } @@ -5430,7 +5259,7 @@ void Person::DoStuff(){ onterrain=1; if(id==0){ - OPENAL_SetPaused(channels[whooshsound], true); + pause_sound(whooshsound); OPENAL_SetVolume(channels[whooshsound], 0); } @@ -5585,7 +5414,7 @@ int Person::DrawSkeleton(){ static float M[16]; static int i,j,k; static int weaponattachmuscle; - static int weaponrotatemuscle,weaponrotatemuscle2; + static int weaponrotatemuscle; static XYZ weaponpoint; static int start,endthing; if((dead!=2||skeleton.free!=2)&&updatedelay<=0){ @@ -5786,35 +5615,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) @@ -6075,7 +5880,7 @@ int Person::DrawSkeleton(){ for(k=0;klabel==righthand||skeleton.muscles[j].parent2->label==righthand)&&skeleton.muscles[j].numvertices>0){ weaponattachmuscle=j; @@ -6089,7 +5894,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; @@ -6109,19 +5914,12 @@ int Person::DrawSkeleton(){ 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(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; @@ -6137,30 +5935,29 @@ 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,rotation,0)*scale+coords+currentoffset*(1-target)*scale+targetoffset*target*scale; + weapons[i].bigrotation=rotation; + 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; + weapons[i].smallrotation2=50; } if((currentanimation==crouchstabanim&&targetanimation==crouchstabanim)||(currentanimation==backhandspringanim&&targetanimation==backhandspringanim)){ XYZ temppoint1,temppoint2,tempforward; @@ -6169,16 +5966,16 @@ int Person::DrawSkeleton(){ temppoint1=skeleton.joints[skeleton.jointlabels[righthand]].position; temppoint2=animation[currentanimation].weapontarget[currentframe]*(1-target)+animation[targetanimation].weapontarget[targetframe]*(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)){ XYZ temppoint1,temppoint2,tempforward; @@ -6187,41 +5984,41 @@ int Person::DrawSkeleton(){ temppoint1=skeleton.joints[skeleton.jointlabels[righthand]].position; temppoint2=animation[currentanimation].weapontarget[currentframe]*(1-target)+animation[targetanimation].weapontarget[targetframe]*(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; + 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; + 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(weapons[i].getType()==sword){ + weapons[i].smallrotation=0; + weapons[i].smallrotation2=0; if(targetanimation==knifethrowanim){ - weapons.smallrotation[i]=-90; - weapons.smallrotation2[i]=0; - weapons.rotation1[i]=0; - weapons.rotation2[i]=0; - weapons.rotation3[i]=0; + 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)){ XYZ temppoint1,temppoint2,tempforward; @@ -6230,21 +6027,21 @@ int Person::DrawSkeleton(){ 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); 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(weapons[i].getType()==staff){ + weapons[i].smallrotation=100; + weapons[i].smallrotation2=0; if((targetanimation==staffhitanim&¤tanimation==staffhitanim)||(targetanimation==staffhitreversedanim&¤tanimation==staffhitreversedanim)||(targetanimation==staffspinhitreversedanim&¤tanimation==staffspinhitreversedanim)||(targetanimation==staffgroundsmashanim&¤tanimation==staffgroundsmashanim)||(targetanimation==staffspinhitanim&¤tanimation==staffspinhitanim)){ XYZ temppoint1,temppoint2,tempforward; float distance; @@ -6252,37 +6049,39 @@ int Person::DrawSkeleton(){ 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); 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(weaponstuckwhere==0) + weapons[i].smallrotation=180; + else + weapons[i].smallrotation=0; + weapons[i].smallrotation2=10; } } } @@ -6350,7 +6149,7 @@ int Person::SphereCheck(XYZ *p1,float radius, XYZ *p, XYZ *move, float *rotate, onterrain=1; if(id==0){ - OPENAL_SetPaused(channels[whooshsound], true); + pause_sound(whooshsound); OPENAL_SetVolume(channels[whooshsound], 0); } @@ -6411,281 +6210,3 @@ int Person::SphereCheck(XYZ *p1,float radius, XYZ *p, XYZ *move, float *rotate, *p1+=*move; return firstintersecting; } - -Person::Person() -{ - whichpatchx = 0; - whichpatchz = 0; - - currentframe = 0; - targetframe = 0; - currentanimation = 0; - targetanimation = 0; - oldcurrentframe = 0; - oldtargetframe = 0; - oldcurrentanimation = 0; - oldtargetanimation = 0; - - howactive = 0; - - parriedrecently = 0; - - superruntoggle = 0; - - lastattack = 0,lastattack2 = 0,lastattack3 = 0; - - currentoffset = 0,targetoffset = 0,offset = 0; - target = 0; - transspeed = 0; - - realoldcoords = 0; - oldcoords = 0; - coords = 0; - originalcoords = 0; - velocity = 0; - - proportionhead = 0; - proportionlegs = 0; - proportionarms = 0; - proportionbody = 0; - - heightleft = 0; - heightright = 0; - - unconscioustime = 0; - - immobile = 0; - - velspeed = 0; - targetrotation = 0; - targetrot = 0; - rot = 0; - oldrot = 0; - lookrotation = 0; - lookrotation2 = 0; - rotation = 0; - rotation2 = 0; - lowrotation = 0; - tilt = 0; - targettilt = 0; - tilt2 = 0; - targettilt2 = 0; - rabbitkickenabled = 0; - - bloodloss = 0; - bleeddelay = 0; - skiddelay = 0; - skiddingdelay = 0; - deathbleeding = 0; - tempdeltav = 0; - - damagetolerance = 0; - damage = 0; - permanentdamage = 0; - superpermanentdamage = 0; lastcollide = 0; - dead = 0; - - jumppower = 0; - onground = 0; - madskills = 0; - - wentforweapon = 0; - - calcrot = 0; - - backwardsanim = 0; - - facing = 0; - - bleeding = 0; - bleedx = 0,bleedy; - direction = 0; - texupdatedelay = 0; - - headrotation = 0,headrotation2 = 0; - targetheadrotation = 0,targetheadrotation2 = 0; - - onterrain = 0; - pause = 0; - - grabdelay = 0; - - victim = 0; - hasvictim = 0; - - updatedelay = 0; - normalsupdatedelay = 0; - - jumpstart = 0; - - forwardkeydown = 0; - forwardstogglekeydown = 0; - rightkeydown = 0; - leftkeydown = 0; - backkeydown = 0; - jumpkeydown = 0; - jumptogglekeydown = 0; - crouchkeydown = 0; - crouchtogglekeydown = 0; - drawkeydown = 0; - drawtogglekeydown = 0; - throwkeydown = 0; - throwtogglekeydown = 0; - attackkeydown = 0; - feint = 0; - lastfeint = 0; - headless = 0; - - crouchkeydowntime = 0; - jumpkeydowntime = 0; - freefall = 0; - - - turnspeed = 0; - - aitype = 0; - aitarget = 0; - aiupdatedelay = 0; - losupdatedelay = 0; - ally = 0; - movetarget = 0; - collide = 0; - collided = 0; - avoidcollided = 0; - loaded = 0; - whichdirection = 0; - whichdirectiondelay = 0; - avoidsomething = 0; avoidwhere = 0; - blooddimamount = 0; - - staggerdelay = 0; - blinkdelay = 0; - twitchdelay = 0; - twitchdelay2 = 0; - twitchdelay3 = 0; - lefthandmorphness = 0; - righthandmorphness = 0; - headmorphness = 0; - chestmorphness = 0; - tailmorphness = 0; - targetlefthandmorphness = 0; - targetrighthandmorphness = 0; - targetheadmorphness = 0; - targetchestmorphness = 0; - targettailmorphness = 0; - lefthandmorphstart = 0,lefthandmorphend = 0; - righthandmorphstart = 0,righthandmorphend = 0; - headmorphstart = 0,headmorphend = 0; - chestmorphstart = 0,chestmorphend = 0; - tailmorphstart = 0,tailmorphend = 0; - - weaponmissdelay = 0; - highreversaldelay = 0; - lowreversaldelay = 0; - nocollidedelay = 0; - - creature = 0; - - id = 0; - - //Skeleton skeleton; - - speed = 0; - scale = 0; - power = 0; - speedmult = 0; - - protectionhead = 0; - protectionhigh = 0; - protectionlow = 0; - armorhead = 0; - armorhigh = 0; - armorlow = 0; - metalhead = 0; - metalhigh = 0; - metallow = 0; - - numclothes = 0; - - memset(clothes, 0, sizeof(clothes)); - memset(clothestintr, 0, sizeof(clothestintr)); - memset(clothestintg, 0, sizeof(clothestintg)); - memset(clothestintb, 0, sizeof(clothestintb)); - - landhard = 0; - bled = 0; - spurt = 0; - onfire = 0; - onfiredelay = 0; burnt = 0; - fireduration = 0; - - flamedelay = 0; - updatestuffdelay = 0; - - playerdetail = 0; - - num_weapons = 0; - - memset(weaponids, 0, sizeof(weaponids)); - - weaponactive = 0; - weaponstuck = 0; - weaponstuckwhere = 0; - weaponwhere = 0; - - numwaypoints = 0; - - memset(waypoints, 0, sizeof(waypoints)); - memset(waypointtype, 0, sizeof(waypointtype)); - - pausetime = 0; - hastempwaypoint = 0; - tempwaypoint = 0; - - headtarget = 0; - interestdelay = 0; - - finalfinaltarget = 0; - finaltarget = 0; - finalpathfindpoint = 0; - targetpathfindpoint = 0; - lastpathfindpoint = 0; - lastpathfindpoint2 = 0; - lastpathfindpoint3 = 0; - lastpathfindpoint4 = 0; - onpath = 0; - - waypoint = 0; - jumppath = 0; - - lastseen = 0; - lastseentime = 0; - lastchecktime = 0; - stunned = 0; - surprised = 0; - runninghowlong = 0; lastoccluded = 0; - laststanding = 0; - escapednum = 0; - - speechdelay = 0; - neckspurtdelay = 0; - neckspurtparticledelay = 0; - neckspurtamount = 0; - - whichskin = 0; - rabbitkickragdoll = 0; - - averageloc = 0; - oldaverageloc = 0; - - //Animation tempanimation; - - occluded = 0; - - jumpclimb = 0; -} - -Person::~Person() -{ -} -