#include "Game.h"
extern float multiplier;
-extern int channels[100];
extern Terrain terrain;
extern float gravity;
extern int environment;
extern bool autoslomo;
extern float camerashake;
extern float woozy;
-extern float terraindetail;
extern float viewdistance;
extern float blackout;
extern int difficulty;
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 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;i<victim->skeleton.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;i<victim->skeleton.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(){
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;
}
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]<which-4||bleedxint<10||bleedyint<10||bleedxint>500||bleedyint>500){
bleedxint=abs(Random()%512);
offsetx=Random()%20;
}
if(which==220||which==215){
- //offsety=Random()%20;
offsetx=20;
- //offsetx=abs(Random()%80);
}
}
}
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;
}
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;
}
}
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;
}
-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;i<skeleton.skinsize*skeleton.skinsize*bytesPerPixel;i++){
- texture[i]=skeleton.skinText[i];
- }
- */
- if((!osx||howmanylevels)){
-
- if(startx<0)startx=0;
- if(starty<0)starty=0;
- if(endx>skeleton.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;i<endx;i++){
- for(j=starty;j<endy;j++){
- texturearray[(i-newstartx)*(newendy-newstarty)*3+(j-newstarty)*3+0]=skeleton.skinText[i*skeleton.skinsize*3+j*3+0];
- texturearray[(i-newstartx)*(newendy-newstarty)*3+(j-newstarty)*3+1]=skeleton.skinText[i*skeleton.skinsize*3+j*3+1];
- texturearray[(i-newstartx)*(newendy-newstarty)*3+(j-newstarty)*3+2]=skeleton.skinText[i*skeleton.skinsize*3+j*3+2];
- }
- }
-
- glBindTexture(GL_TEXTURE_2D,skeleton.drawmodel.textureptr);
-
- if(!howmanylevels){
- if(!osx)glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS,GL_TRUE);
- glTexSubImage2D(GL_TEXTURE_2D,0,starty,startx,endy-starty,endx-startx,GL_RGB,GL_UNSIGNED_BYTE,texturearray);
- if(!osx)glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS,GL_FALSE);
- }
-
- newsize=skeleton.skinsize;
- if(howmanylevels)
- gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGB, skeleton.skinsize, skeleton.skinsize, GL_RGB, GL_UNSIGNED_BYTE, &skeleton.skinText[0] );
+void Person::Reverse()
+{
+ if (!((victim->aitype == 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;j<numplayers;j++){
+ player[j].wentforweapon=0;
+ }
+ }
+
+ targetanimation=staffhitreversedanim;
+ currentanimation=staffhitreversedanim;
+ victim->currentanimation=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;j<numplayers;j++){
+ player[j].wentforweapon=0;
+ }
+ }
+ targetanimation=staffspinhitreversedanim;
+ currentanimation=staffspinhitreversedanim;
+ victim->currentanimation=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;j<numplayers;j++){
+ player[j].wentforweapon=0;
+ }
+ }
+ targetanimation=swordslashreversedanim;
+ currentanimation=swordslashreversedanim;
+ victim->currentanimation=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;j<numplayers;j++){
+ player[j].wentforweapon=0;
+ }
+ }
+ targetanimation=knifeslashreversedanim;
+ currentanimation=knifeslashreversedanim;
+ victim->currentanimation=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;i<numplayers;i++){
+ player[i].wentforweapon=0;
+ }
+ }
+
+ if(abs(Random()%20)==0){
+ if(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, 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;j<numplayers;j++){
- player[j].wentforweapon=0;
- }
- }
-
- targetanimation=staffhitreversedanim;
- currentanimation=staffhitreversedanim;
- victim->currentanimation=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;j<numplayers;j++){
- player[j].wentforweapon=0;
- }
- }
- targetanimation=staffspinhitreversedanim;
- currentanimation=staffspinhitreversedanim;
- victim->currentanimation=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;j<numplayers;j++){
- player[j].wentforweapon=0;
- }
- }
- targetanimation=swordslashreversedanim;
- currentanimation=swordslashreversedanim;
- victim->currentanimation=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;j<numplayers;j++){
- player[j].wentforweapon=0;
- }
- }
- targetanimation=knifeslashreversedanim;
- currentanimation=knifeslashreversedanim;
- victim->currentanimation=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;i<numplayers;i++){
- player[i].wentforweapon=0;
- }
-
-
-
-
-
- /*PlaySoundEx( metalhitsound, samp[metalhitsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[metalhitsound], gLoc, vel);
- OPENAL_SetVolume(channels[metalhitsound], 512);
- OPENAL_SetPaused(channels[metalhitsound], false);*/
- }
-
- if(abs(Random()%20)==0){
- 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;
-
- 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;i<numplayers;i++){
- player[i].wentforweapon=0;
- }
-
-
- /*PlaySoundEx( metalhitsound, samp[metalhitsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[metalhitsound], gLoc, vel);
- OPENAL_SetVolume(channels[metalhitsound], 512);
- OPENAL_SetPaused(channels[metalhitsound], false);*/
- }
- }
- if(hasvictim)
- if(targetanimation==knifeslashstartanim||targetanimation==swordslashanim||targetanimation==staffhitanim||targetanimation==staffspinhitanim){
- if((targetanimation!=staffhitanim&&targetanimation!=staffspinhitanim)||findDistancefast(&coords,&victim->coords)>.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;i<numplayers;i++){
+ player[i].wentforweapon=0;
+ }
+
+
+ }
+ }
+ if(hasvictim)
+ if(targetanimation==knifeslashstartanim||targetanimation==swordslashanim||targetanimation==staffhitanim||targetanimation==staffspinhitanim){
+ if((targetanimation!=staffhitanim&&targetanimation!=staffspinhitanim)||findDistancefast(&coords,&victim->coords)>.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){
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;l<terrain.patchobjectnum[whichpatchx][whichpatchz];l++){
i=terrain.patchobjects[whichpatchx][whichpatchz][l];
if(Random()%2==0){
if(weaponactive!=-1&&targetanimation!=rabbitkickanim&&num_weapons>0){
- 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];
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;
}
}
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;
if(tutoriallevel!=1||id==0)
if((animation[targetanimation].label[targetframe]&&(animation[targetanimation].label[targetframe]<5||animation[targetanimation].label[targetframe]==8))/*||(targetanimation==rollanim&&targetframe==animation[rollanim].numframes-1)*/){
int whichsound;
- float gLoc[3];
- float vel[3];
- gLoc[0]=coords.x;
- gLoc[1]=coords.y;
- gLoc[2]=coords.z;
- vel[0]=velocity.x;
- vel[1]=velocity.y;
- vel[2]=velocity.z;
if(onterrain){
if(terrain.getOpacity(coords.x,coords.z)<.2){
if(animation[targetanimation].label[targetframe]==1)whichsound=footstepsound;
else 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){
targetframe++;
if(targetanimation==removeknifeanim&&animation[targetanimation].label[currentframe]==5){
- for(i=0;i<weapons.numweapons;i++){
- if(/*weapons.velocity[i].x==0&&weapons.velocity[i].y==0&&weapons.velocity[i].z==0&&*/weapons.owner[i]==-1)
- if(findDistancefastflat(&coords,&weapons.position[i])<4&&weaponactive==-1){
- if(findDistancefast(&coords,&weapons.position[i])>=1){
- if(weapons.type[i]!=staff){
+ for(i=0;i<weapons.size();i++){
+ if(weapons[i].owner==-1)
+ if(findDistancefastflat(&coords,&weapons[i].position)<4&&weaponactive==-1){
+ if(findDistancefast(&coords,&weapons[i].position)>=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];
}
}
}
- static bool willwork;
if(targetanimation==crouchremoveknifeanim&&animation[targetanimation].label[currentframe]==5){
- for(i=0;i<weapons.numweapons;i++){
- bool willwork=1;
- if(weapons.owner[i]!=-1)
- if(player[weapons.owner[i]].weaponstuck!=-1)
- if(player[weapons.owner[i]].weaponids[player[weapons.owner[i]].weaponstuck]==i)
- if(player[weapons.owner[i]].num_weapons>1)willwork=0;
- if((/*weapons.velocity[i].x==0&&weapons.velocity[i].y==0&&weapons.velocity[i].z==0&&*/weapons.owner[i]==-1)||(hasvictim&&weapons.owner[i]==victim->id&&victim->skeleton.free))
- if(willwork&&findDistancefastflat(&coords,&weapons.position[i])<3&&weaponactive==-1){
- if(findDistancefast(&coords,&weapons.position[i])<1||hasvictim){
- bool fleshstuck=0;
- if(weapons.owner[i]!=-1)
+ for(i=0;i<weapons.size();i++){
+ bool willwork=true;
+ if(weapons[i].owner!=-1)
+ if(player[weapons[i].owner].weaponstuck!=-1)
+ if(player[weapons[i].owner].weaponids[player[weapons[i].owner].weaponstuck]==i)
+ if(player[weapons[i].owner].num_weapons>1)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;
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;
}
}
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];
}
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.);
}
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;
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;
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;
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;
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;
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;
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&&onterrain){
- weapons.bloody[weaponids[weaponactive]]=0;
- weapons.blooddrip[weaponids[weaponactive]]=0;
+ weapons[weaponids[weaponactive]].bloody=0;
+ weapons[weaponids[weaponactive]].blooddrip=0;
}
}
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);
}
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];
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;
}
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;
}
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);
}
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];
player[i].wentforweapon=0;
}
- /*PlaySoundEx( metalhitsound, samp[metalhitsound], NULL, true);
- OPENAL_3D_SetAttributes(channels[metalhitsound], gLoc, vel);
- OPENAL_SetVolume(channels[metalhitsound], 512);
- OPENAL_SetPaused(channels[metalhitsound], false);*/
-
}
}
}
if(targetanimation==staffhitanim&&animation[targetanimation].label[currentframe]==5&&victim->targetanimation!=rollanim){
if(findDistancefast(&coords,&victim->coords)<(scale*5)*(scale*5)*6.5&&victim->targetanimation!=dodgebackanim&&victim->targetanimation!=sweepanim){
if(tutoriallevel!=1){
- weapons.damage[weaponids[0]]+=.4+float(abs(Random()%100)-50)/250;
+ weapons[weaponids[0]].damage+=.4+float(abs(Random()%100)-50)/250;
escapednum=0;
if(id==0)camerashake+=.4;
if(Random()%2||creature==wolftype){
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){
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;
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];
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.);
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){
*/
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);
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);
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;
}
}
}
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);
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);
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;
}
}
}
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);
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.);
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;
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){
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;
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);
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;
escapednum++;
targetanimation=rollanim;
coords+=facing;
- if(id==0)OPENAL_SetPaused(channels[whooshsound], true);
+ if(id==0)pause_sound(whooshsound);
}
lastfeint=0;
}
escapednum++;
targetanimation=rollanim;
coords+=facing*2;
- if(id==0)OPENAL_SetPaused(channels[whooshsound], true);
+ if(id==0)pause_sound(whooshsound);
}
lastfeint=0;
}
static int howmany;
static int bloodsize;
static int startx,starty,endx,endy;
- static int texdetailint;
static GLubyte color;
static XYZ bloodvel;
}
}
if(weaponactive==-1&&num_weapons>0){
- if(weapons.type[weaponids[0]]==staff){
+ if(weapons[weaponids[0]].getType()==staff){
weaponactive=0;
}
}
bleeding-=multiplier*.3;
if(bloodtoggle==2){
glBindTexture(GL_TEXTURE_2D,skeleton.drawmodel.textureptr);
- if(bleeding<=0&&(detail!=2||osx))DoMipmaps(5,0,0,skeleton.skinsize,skeleton.skinsize);
+ if(bleeding<=0&&(detail!=2||osx))DoMipmaps();
}
}
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];
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;
}
if(!osx&&detail>1){
glBindTexture(GL_TEXTURE_2D,skeleton.drawmodel.textureptr);
- DoMipmaps(0,startx,endx,starty,endy);
+ DoMipmaps();
}
if(!skeleton.free){
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];
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];
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
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;
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;
if(terrainnormal.z<0)targetrotation=180-targetrotation;
rotation=targetrotation;
- /*if(onterrain){
- terrainnormal=terrain.getNormal(coords.x,coords.z);
- targettilt2=asin(terrainnormal.y)*180/3.14*-1;
- }
- else*/
-
- /*XYZ otherterrainnormal;
- otherterrainnormal=terrain.getNormal(coords.x,coords.y);
- otherterrainnormal.y=fast_sqrt(otherterrainnormal.x*otherterrainnormal.x+otherterrainnormal.z*otherterrainnormal.z)*-1;
- if(abs(terrainnormal.y)<abs(otherterrainnormal.y))terrainnormal.y=fast_sqrt(otherterrainnormal.x*otherterrainnormal.x+otherterrainnormal.z*otherterrainnormal.z)*-1;
- targettilt2=asin(otherterrainnormal.y)*180/3.14;
- */
-
targettilt2=asin(terrainnormal.y)*180/3.14*-1;
-
if(skeleton.forward.y<0){
targetanimation=getupfrombackanim;
targetframe=0;
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(!skeleton.freefall&&freefall&&((jumpkeydown&&jumpkeydowntime<.2)||(hasstaff&&rabbitkickragdoll))&&!dead){
if(velocity.y>-30){
XYZ tempvelocity;
}
if(skeleton.freefall==0)freefall=0;
- if(!isnormal(velocity.x)&&velocity.x){
- int xy=1;
- }
}
if(aitype!=passivetype||skeleton.free==1)
targetheadmorphness=1;
}
}
- /*
- if(speechdelay>.25){
- if(headmorphend!=2)headmorphness=0;
- headmorphend=2;
- targetheadmorphness=1;
- }
- */
+
bool behind;
behind=0;
if(hasvictim){
}
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;
}
onterrain=1;
if(id==0){
- OPENAL_SetPaused(channels[whooshsound], true);
+ pause_sound(whooshsound);
OPENAL_SetVolume(channels[whooshsound], 0);
}
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){
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<skeleton.muscles[i].numvertices;j++)
{
- /*if(!isnormal(skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]].x))vertexweird[0]=1;
- if(!isnormal(skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]].y))vertexweird[1]=1;
- if(!isnormal(skeleton.model[start].vertex[skeleton.muscles[i].vertices[j]].z))vertexweird[2]=1;
- if(!isnormal(skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]].x))vertexweird[3]=1;
- if(!isnormal(skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]].y))vertexweird[4]=1;
- if(!isnormal(skeleton.model[endthing].vertex[skeleton.muscles[i].vertices[j]].z))vertexweird[5]=1;
- if(skeleton.muscles[i].vertices[j]<skeleton.model[start].vertexNum&&skeleton.muscles[i].vertices[j]>=0){*/
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glPushMatrix();
if(skeleton.muscles[i].parent1->label==abdomen||skeleton.muscles[i].parent2->label==abdomen)
for(k=0;k<num_weapons;k++){
i=weaponids[k];
if(weaponactive==k){
- if(weapons.type[i]!=staff){
+ if(weapons[i].getType()!=staff){
for(j=0;j<skeleton.num_muscles;j++){
if((skeleton.muscles[j].parent1->label==righthand||skeleton.muscles[j].parent2->label==righthand)&&skeleton.muscles[j].numvertices>0){
weaponattachmuscle=j;
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;j<skeleton.num_muscles;j++){
if((skeleton.muscles[j].parent1->label==righthand||skeleton.muscles[j].parent2->label==righthand)&&skeleton.muscles[j].numvertices>0){
weaponattachmuscle=j;
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;j<skeleton.num_muscles;j++){
if((skeleton.muscles[j].parent1->label==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;
}
}
}
- 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;
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;
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;
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;
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;
}
}
}
onterrain=1;
if(id==0){
- OPENAL_SetPaused(channels[whooshsound], true);
+ pause_sound(whooshsound);
OPENAL_SetVolume(channels[whooshsound], 0);
}
*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()
-{
-}
-