void createhead(float position[3],float sizex,float sizey,float mass,float friction) { int count; float vec[3]; float angle; memset(&object[numofobjects],0,sizeof(object[numofobjects])); object[numofobjects].type = OBJ_TYPE_HEAD; object[numofobjects].timetolive=10000; if (sizex>=sizey) object[numofobjects].radius=sizex*1.25f; else object[numofobjects].radius=sizey*1.25f; object[numofobjects].mass=mass; object[numofobjects].texturenum=animation[19].stand[0]; object[numofobjects].friction=friction; object[numofobjects].numofparticles=8; for (count=0;count<8;count++) { angle=(float)count*pi/4.0f; vec[0]=position[0]+cos(angle)*sizex*0.5f; vec[1]=position[1]-sin(angle)*sizey*0.5f; vec[2]=0.0f; createparticle(3,vec,NULL,mass/8.0f,numofobjects,10000); object[numofobjects].particle[count]=numofparticles-1; } for (count=0;count<8;count++) { createbond(object[numofobjects].particle[((count+1)&7)],object[numofobjects].particle[count],1,numofobjects); createbond(object[numofobjects].particle[((count+2)&7)],object[numofobjects].particle[count],1,numofobjects); createbond(object[numofobjects].particle[((count+4)&7)],object[numofobjects].particle[count],1,numofobjects); } copyvector(object[numofobjects].position,position); object[numofobjects].numofcdlines=8; for (count=0;count<8;count++) { object[numofobjects].cdline[count][0]=count; object[numofobjects].cdline[count][1]=((count+1)&7); } object[numofobjects].soundnum[0]=-1; object[numofobjects].soundnum[1]=-1; object[numofobjects].soundnum[2]=-1; object[numofobjects].soundnum[3]=-1; numofobjects++; }
void createamber(float position[3]) { int count; float vec[3]; float angle; memset(&object[numofobjects],0,sizeof(object[numofobjects])); object[numofobjects].type = OBJ_TYPE_AMBER; object[numofobjects].timetolive=10000; object[numofobjects].radius=1.0f; object[numofobjects].texturenum=369; object[numofobjects].friction=0.3f; object[numofobjects].numofparticles=8; for (count=0;count<8;count++) { angle=(float)count*pi/4.0f; vec[0]=position[0]+cos(angle)*0.35f; vec[1]=position[1]-sin(angle)*0.35f; vec[2]=0.0f; createparticle(3,vec,NULL,0.125f,numofobjects,10000); object[numofobjects].particle[count]=numofparticles-1; } for (count=0;count<8;count++) { createbond(object[numofobjects].particle[((count+1)&7)],object[numofobjects].particle[count],1,numofobjects); createbond(object[numofobjects].particle[((count+2)&7)],object[numofobjects].particle[count],1,numofobjects); createbond(object[numofobjects].particle[((count+4)&7)],object[numofobjects].particle[count],1,numofobjects); } copyvector(object[numofobjects].position,position); object[numofobjects].numofcdlines=8; for (count=0;count<8;count++) { object[numofobjects].cdline[count][0]=count; object[numofobjects].cdline[count][1]=((count+1)&7); } object[numofobjects].soundnum[0]=-1; object[numofobjects].soundnum[1]=-1; object[numofobjects].soundnum[2]=-1; object[numofobjects].soundnum[3]=-1; numofobjects++; }
void setuplevel(void) { int count,count2; int numofobjectstemp; float vec[3]; for (count=0;count<256;count++) for (count2=0;count2<256;count2++) level.gridmod[count][count2]=0; setuplevellines(1,1,254,254); numofparticles=0; numofbonds=0; numofobjects=0; numofropes=0; physicstemp.numofbonds=0; numofsprites=0; numofbosses=0; for (count=0;count<level.numofobjects;count++) if (level.object[count].type>=20 && level.object[count].type<40) { if (animation[level.object[count].type-20].loaded==0) animation[level.object[count].type-20].loaded=2; if (level.object[count].type-20==7) if (animation[2].loaded==0) animation[2].loaded=2; if (level.object[count].type-20==13) if (animation[8].loaded==0) animation[8].loaded=2; if (level.object[count].type-20==12) if (animation[11].loaded==0) animation[11].loaded=2; } loadanimations(); for (count=0;count<level.numofobjects;count++) { numofobjectstemp=numofobjects; if (level.object[count].type==1) { createtarboy(level.object[count].position); object[numofobjects-1].texturenum=1; } if (level.object[count].type==2) createbox(level.object[count].position,level.object[count].size[0],level.object[count].size[1],level.object[count].mass,level.object[count].friction); if (level.object[count].type==3) { createbox(level.object[count].position,level.object[count].size[0],level.object[count].size[1],level.object[count].mass,level.object[count].friction); createparticle(2,level.object[count].position,NULL,10000.0f,-1,10000); createbond(numofparticles-5,numofparticles-1,1,-1); createbond(numofparticles-4,numofparticles-1,1,-1); createbond(numofparticles-3,numofparticles-1,1,-1); createbond(numofparticles-2,numofparticles-1,1,-1); } if (level.object[count].type==4) { if (level.gametype!=16) { createbox(level.object[count].position,level.object[count].size[0],level.object[count].size[1],level.object[count].mass,level.object[count].friction); vec[0]=level.object[count].position[0]-(level.object[count].size[0]-1.0f)*0.5f; vec[1]=level.object[count].position[1]-(level.object[count].size[1]-1.0f)*0.5f; vec[2]=0.0f; createparticle(2,vec,NULL,10000.0f,-1,10000); createbond(numofparticles-5,numofparticles-1,1,-1); createbond(numofparticles-4,numofparticles-1,1,-1); createbond(numofparticles-3,numofparticles-1,1,-1); createbond(numofparticles-2,numofparticles-1,1,-1); } else createcar(level.object[count].position,level.object[count].size[0],level.object[count].size[1],level.object[count].mass,level.object[count].friction); } if (level.object[count].type==5) { createbox(level.object[count].position,level.object[count].size[0],level.object[count].size[1],level.object[count].mass,level.object[count].friction); vec[0]=level.object[count].position[0]+(level.object[count].size[0]-1.0f)*0.5f; vec[1]=level.object[count].position[1]+(level.object[count].size[1]-1.0f)*0.5f; vec[2]=0.0f; createparticle(2,vec,NULL,10000.0f,-1,10000); createbond(numofparticles-5,numofparticles-1,1,-1); createbond(numofparticles-4,numofparticles-1,1,-1); createbond(numofparticles-3,numofparticles-1,1,-1); createbond(numofparticles-2,numofparticles-1,1,-1); } if (level.object[count].type==6) { createwheel(level.object[count].position,level.object[count].size[0],level.object[count].size[1],level.object[count].mass,level.object[count].friction,0); } if (level.object[count].type==7) { createwheel(level.object[count].position,level.object[count].size[0],level.object[count].size[1],level.object[count].mass,level.object[count].friction,1); //createparticle(2,level.object[count].position,NULL,10000.0f,-1,10000); //for (count2=0;count2<16;count2++) // createbond(numofparticles-17+count2,numofparticles-1,1,-1); } if (level.object[count].type==8) createanchor(level.object[count].position); if (level.object[count].type==9) createbutton(level.object[count].position,level.object[count].mass); if (level.object[count].type==10) { createbutton(level.object[count].position,level.object[count].mass); object[numofobjects-1].idata[1]=1; } if (level.object[count].type==11) createswitch(level.object[count].position,level.object[count].mass,0); if (level.object[count].type==12) createswitch(level.object[count].position,level.object[count].mass,1); if (level.object[count].type==13) createswitch(level.object[count].position,level.object[count].mass,2); if (level.object[count].type==14) createswitch(level.object[count].position,level.object[count].mass,3); if (level.object[count].type==15) createareaswitch(level.object[count].position,level.object[count].size[0],level.object[count].size[1]); if (level.object[count].type==16) { createareaswitch(level.object[count].position,level.object[count].size[0],level.object[count].size[1]); object[numofobjects-1].idata[1]=1; } if (level.object[count].type==18) { createareaswitch(level.object[count].position,level.object[count].size[0],level.object[count].size[1]); object[numofobjects-1].idata[1]=2; } if (level.object[count].type==17) creategenerator(level.object[count].position,level.object[count].mass); if (level.object[count].type==20) createbeast(0,level.object[count].position,1.0f,1.0f,1.0f,0.2f); if (level.object[count].type==21) createbeast(1,level.object[count].position,1.0f,1.0f,1.0f,0.2f); if (level.object[count].type==22) createbeast(2,level.object[count].position,1.0f,1.0f,1.0f,0.2f); if (level.object[count].type==23) createbeast(3,level.object[count].position,1.5f,1.1f,8.0f,0.2f); if (level.object[count].type==24) createbeast(4,level.object[count].position,1.5f,1.1f,8.0f,0.2f); if (level.object[count].type==25) createbeast(5,level.object[count].position,1.5f,1.1f,8.0f,0.2f); if (level.object[count].type==26) createbeast(6,level.object[count].position,1.5f,1.1f,8.0f,0.2f); if (level.object[count].type==27) createbeast(7,level.object[count].position,3.0f,3.0f,20.0f,0.2f); if (level.object[count].type==28) createbeast(8,level.object[count].position,1.0f,1.0f,1.0f,0.2f); if (level.object[count].type==29) createbeast(9,level.object[count].position,1.5f,1.1f,8.0f,0.2f); if (level.object[count].type==30) createbeast(10,level.object[count].position,1.5f,1.1f,8.0f,0.2f); if (level.object[count].type==31) createbeast(11,level.object[count].position,1.0f,1.0f,1.0f,0.2f); if (level.object[count].type==32) createbeast(12,level.object[count].position,2.0f,0.85f,3.0f,0.2f); if (level.object[count].type==33) createbeast(13,level.object[count].position,3.0f,3.0f,20.0f,0.2f); if (level.object[count].type==34) createboss(14,level.object[count].position); if (level.object[count].type==35) createbeast(15,level.object[count].position,2.0f,2.0f,8.0f,0.2f); if (level.object[count].type==36) createbeast(16,level.object[count].position,1.0f,1.0f,1.0f,0.2f); if (numofobjects!=numofobjectstemp) { if (level.object[count].type>1 && level.object[count].type<20) object[numofobjects-1].texturenum=level.object[count].texturenum; object[numofobjects-1].link=level.object[count].link; object[numofobjects-1].lighttype=level.object[count].lighttype; if (level.object[count].lighttype==1 || level.object[count].lighttype==3) object[numofobjects-1].lighton=1; if (level.object[count].lighttype==2) object[numofobjects-1].lighton=0; object[numofobjects-1].size[0]=level.object[count].size[0]; object[numofobjects-1].size[1]=level.object[count].size[1]; object[numofobjects-1].lightcolor[0]=level.object[count].lightcolor[0]; object[numofobjects-1].lightcolor[1]=level.object[count].lightcolor[1]; object[numofobjects-1].lightcolor[2]=level.object[count].lightcolor[2]; object[numofobjects-1].lightintensity=level.object[count].lightintensity; object[numofobjects-1].lightintensitymax=level.object[count].lightintensity; } } for (count=0;count<level.numofobjects;count++) { if ((level.object[count].type>=23 && level.object[count].type<=26) || level.object[count].type==29 || level.object[count].type==30) { vec[0]=level.object[count].position[0]; vec[1]=level.object[count].position[1]+1.4f;//+1.42f; vec[2]=0.0f; createhead(vec,2.0f,1.6f,2.0f,0.5f); object[count].link=numofobjects-1; //createbond(object[numofobjects-1].particle[0],object[count].particle[0],6,count); createbond(object[numofobjects-1].particle[2],object[count].particle[0],6,count); createbond(object[numofobjects-1].particle[4],object[count].particle[0],6,count); createbond(object[numofobjects-1].particle[0],object[count].particle[1],6,count); createbond(object[numofobjects-1].particle[2],object[count].particle[1],6,count); //createbond(object[numofobjects-1].particle[4],object[count].particle[1],6,count); } } for (count=0;count<level.numofropes;count++) { createrope(level.rope[count].type,object[level.rope[count].obj1].particle[level.rope[count].obj1part],object[level.rope[count].obj2].particle[level.rope[count].obj2part],level.rope[count].obj1,level.rope[count].obj2,level.rope[count].texturenum); } }
void createbobble(int beasttype,float position[3],float sizex,float sizey,float mass,float friction) { int count,count2; float vec[3]; memset(&object[numofobjects],0,sizeof(object[numofobjects])); object[numofobjects].type = OBJ_TYPE_BEAST; object[numofobjects].timetolive=10000; object[numofobjects].mass=mass; object[numofobjects].beasttype=beasttype; if (beasttype==1) object[numofobjects].texturenum=500; if (beasttype==2) object[numofobjects].texturenum=540; object[numofobjects].numofparticles=6; if (sizex>=sizey) object[numofobjects].radius=sizex*1.5f; else object[numofobjects].radius=sizey*1.5f; object[numofobjects].friction=friction; count=0; vec[0]=-sizex*0.5f; vec[1]=sizey*0.5f; vec[2]=0.0f; addvectors(vec,vec,position); object[numofobjects].particle[count]=numofparticles; count++; createparticle(3,vec,NULL,mass*0.25f,-1,10000); vec[0]=sizex*0.5f; vec[1]=sizey*0.5f; vec[2]=0.0f; addvectors(vec,vec,position); object[numofobjects].particle[count]=numofparticles; count++; createparticle(3,vec,NULL,mass*0.25f,-1,10000); vec[0]=sizex*0.5f; vec[1]=-sizey*0.5f; vec[2]=0.0f; addvectors(vec,vec,position); object[numofobjects].particle[count]=numofparticles; count++; createparticle(3,vec,NULL,mass*0.25f,-1,10000); vec[0]=-sizex*0.5f; vec[1]=-sizey*0.5f; vec[2]=0.0f; addvectors(vec,vec,position); object[numofobjects].particle[count]=numofparticles; count++; createparticle(3,vec,NULL,mass*0.25f,-1,10000); vec[0]=-sizex*0.25f; vec[1]=sizey*0.65f; vec[2]=0.0f; addvectors(vec,vec,position); object[numofobjects].particle[count]=numofparticles; count++; createparticle(3,vec,NULL,mass*0.25f,-1,10000); vec[0]=sizex*0.25f; vec[1]=sizey*0.65f; vec[2]=0.0f; addvectors(vec,vec,position); object[numofobjects].particle[count]=numofparticles; count++; createparticle(3,vec,NULL,mass*0.25f,-1,10000); for (count=0;count<object[numofobjects].numofparticles;count++) for (count2=count+1;count2<object[numofobjects].numofparticles;count2++) createbond(object[numofobjects].particle[count],object[numofobjects].particle[count2],6,numofobjects); object[numofobjects].numofcdlines=6; count=0; object[numofobjects].cdline[count][0]=4; object[numofobjects].cdline[count][1]=5; count=1; object[numofobjects].cdline[count][0]=5; object[numofobjects].cdline[count][1]=1; count=2; object[numofobjects].cdline[count][0]=1; object[numofobjects].cdline[count][1]=2; count=3; object[numofobjects].cdline[count][0]=2; object[numofobjects].cdline[count][1]=3; count=4; object[numofobjects].cdline[count][0]=3; object[numofobjects].cdline[count][1]=0; count=5; object[numofobjects].cdline[count][0]=0; object[numofobjects].cdline[count][1]=4; object[numofobjects].soundnum[0]=-1; object[numofobjects].soundnum[1]=-1; object[numofobjects].soundnum[2]=-1; object[numofobjects].soundnum[3]=-1; numofobjects++; }
void createbeast(int beasttype,float position[3],float sizex,float sizey,float mass,float friction) { int count,count2; float vec[3]; memset(&object[numofobjects],0,sizeof(object[numofobjects])); object[numofobjects].type = OBJ_TYPE_BEAST; object[numofobjects].timetolive=10000; object[numofobjects].beasttype=beasttype; object[numofobjects].animationnum=beasttype; object[numofobjects].texturenum=animation[object[numofobjects].animationnum].stand[0]; object[numofobjects].mass=mass; object[numofobjects].hitpoints=250; if (beasttype==7 || beasttype==13) object[numofobjects].hitpoints=15000; object[numofobjects].size[0]=sizex; object[numofobjects].size[1]=sizey; object[numofobjects].numofparticles=4; if (sizex>=sizey) object[numofobjects].radius=sizex*1.5f; else object[numofobjects].radius=sizey*1.5f; object[numofobjects].friction=friction; count=0; vec[0]=-sizex*0.5f; vec[1]=sizey*0.5f; vec[2]=0.0f; addvectors(vec,vec,position); object[numofobjects].particle[count]=numofparticles; count++; createparticle(3,vec,NULL,mass*0.5f,-1,10000); vec[0]=sizex*0.5f; vec[1]=sizey*0.5f; vec[2]=0.0f; addvectors(vec,vec,position); object[numofobjects].particle[count]=numofparticles; count++; createparticle(3,vec,NULL,mass*0.5f,-1,10000); vec[0]=sizex*0.5f; vec[1]=-sizey*0.5f; vec[2]=0.0f; addvectors(vec,vec,position); object[numofobjects].particle[count]=numofparticles; count++; if (beasttype!=12) createparticle(3,vec,NULL,mass*0.5f,-1,10000); else createparticle(2,vec,NULL,mass*0.5f,-1,10000); vec[0]=-sizex*0.5f; vec[1]=-sizey*0.5f; vec[2]=0.0f; addvectors(vec,vec,position); object[numofobjects].particle[count]=numofparticles; count++; if (beasttype!=12) createparticle(3,vec,NULL,mass*0.5f,-1,10000); else createparticle(2,vec,NULL,mass*0.5f,-1,10000); for (count=0;count<object[numofobjects].numofparticles;count++) for (count2=count+1;count2<object[numofobjects].numofparticles;count2++) createbond(object[numofobjects].particle[count],object[numofobjects].particle[count2],6,numofobjects); copyvector(object[numofobjects].position,position); object[numofobjects].numofcdlines=4; for (count=0;count<4;count++) { object[numofobjects].cdline[count][0]=count; object[numofobjects].cdline[count][1]=((count+1)&3); } object[numofobjects].soundnum[0]=-1; object[numofobjects].soundnum[1]=-1; object[numofobjects].soundnum[2]=-1; object[numofobjects].soundnum[3]=-1; numofobjects++; }
void createswitch(float position[3],float mass,int rotate) { int count,count2; float vec[3],vec2[3]; float orientation[2][2]; if (rotate==0) { orientation[0][0]=1.0f; orientation[0][1]=0.0f; orientation[1][0]=0.0f; orientation[1][1]=1.0f; } if (rotate==1) { orientation[0][0]=0.0f; orientation[0][1]=-1.0f; orientation[1][0]=1.0f; orientation[1][1]=0.0f; } if (rotate==2) { orientation[0][0]=-1.0f; orientation[0][1]=0.0f; orientation[1][0]=0.0f; orientation[1][1]=-1.0f; } if (rotate==3) { orientation[0][0]=0.0f; orientation[0][1]=-1.0f; orientation[1][0]=-1.0f; orientation[1][1]=0.0f; } memset(&object[numofobjects],0,sizeof(object[numofobjects])); object[numofobjects].type = OBJ_TYPE_SWITCH; object[numofobjects].timetolive=10000; object[numofobjects].radius=1.5f; object[numofobjects].friction=0.3f; object[numofobjects].rotate=rotate; object[numofobjects].numofparticles=5; count=0; vec[0]=-0.875f; vec[1]=0.875f; vec2[0]=position[0]+vec[0]*orientation[0][0]+vec[1]*orientation[1][0]; vec2[1]=position[1]+vec[0]*orientation[0][1]+vec[1]*orientation[1][1]; vec2[2]=0.0f; createparticle(3,vec2,NULL,mass/8.0f,numofobjects,10000); object[numofobjects].particle[count]=numofparticles-1; count++; vec[0]=0.25f; vec[1]=0.0f; vec2[0]=position[0]+vec[0]*orientation[0][0]+vec[1]*orientation[1][0]; vec2[1]=position[1]+vec[0]*orientation[0][1]+vec[1]*orientation[1][1]; vec2[2]=0.0f; createparticle(3,vec2,NULL,mass/8.0f,numofobjects,10000); object[numofobjects].particle[count]=numofparticles-1; count++; vec[0]=-0.25f; vec[1]=-0.5f; vec[2]=0.0f; vec2[0]=position[0]+vec[0]*orientation[0][0]+vec[1]*orientation[1][0]; vec2[1]=position[1]+vec[0]*orientation[0][1]+vec[1]*orientation[1][1]; vec2[2]=0.0f; createparticle(3,vec2,NULL,mass/8.0f,numofobjects,10000); object[numofobjects].particle[count]=numofparticles-1; count++; vec[0]=-1.125f; vec[1]=0.625f; vec[2]=0.0f; vec2[0]=position[0]+vec[0]*orientation[0][0]+vec[1]*orientation[1][0]; vec2[1]=position[1]+vec[0]*orientation[0][1]+vec[1]*orientation[1][1]; vec2[2]=0.0f; createparticle(3,vec2,NULL,mass/8.0f,numofobjects,10000); object[numofobjects].particle[count]=numofparticles-1; count++; vec[0]=0.0f; vec[1]=-0.25f; vec[2]=0.0f; vec2[0]=position[0]+vec[0]*orientation[0][0]+vec[1]*orientation[1][0]; vec2[1]=position[1]+vec[0]*orientation[0][1]+vec[1]*orientation[1][1]; vec2[2]=0.0f; createparticle(2,vec2,NULL,10000.0f,numofobjects,10000); object[numofobjects].particle[count]=numofparticles-1; count++; for (count=0;count<5;count++) for (count2=count+1;count2<5;count2++) createbond(object[numofobjects].particle[count],object[numofobjects].particle[count2],1,numofobjects); copyvector(object[numofobjects].position,position); object[numofobjects].numofcdlines=4; for (count=0;count<4;count++) { object[numofobjects].cdline[count][0]=count; if (rotate!=3) object[numofobjects].cdline[count][1]=((count+1)&3); else object[numofobjects].cdline[count][1]=((count-1)&3); } object[numofobjects].texcoord[0][0]=0.0f; object[numofobjects].texcoord[0][1]=0.0f; object[numofobjects].texcoord[1][0]=1.0f; object[numofobjects].texcoord[1][1]=0.0f; object[numofobjects].texcoord[2][0]=1.0f; object[numofobjects].texcoord[2][1]=1.0f; object[numofobjects].texcoord[3][0]=0.0f; object[numofobjects].texcoord[3][1]=1.0f; object[numofobjects].soundnum[0]=-1; object[numofobjects].soundnum[1]=-1; object[numofobjects].soundnum[2]=-1; object[numofobjects].soundnum[3]=-1; numofobjects++; }
void createbutton(float position[3],float mass) { int count,count2; float vec[3]; memset(&object[numofobjects],0,sizeof(object[numofobjects])); object[numofobjects].type = OBJ_TYPE_BUTTON; object[numofobjects].timetolive=10000; object[numofobjects].friction=0.3f; object[numofobjects].radius=1.5f; object[numofobjects].numofparticles=7; count=0; vec[0]=position[0]-0.499f; vec[1]=position[1]+0.5f; vec[2]=0.0f; createparticle(3,vec,NULL,mass/16.0f,numofobjects,10000); object[numofobjects].particle[count]=numofparticles-1; count++; vec[0]=position[0]-0.125f; vec[1]=position[1]+0.75f; vec[2]=0.0f; createparticle(3,vec,NULL,mass/16.0f,numofobjects,10000); object[numofobjects].particle[count]=numofparticles-1; count++; vec[0]=position[0]+0.125f; vec[1]=position[1]+0.75f; vec[2]=0.0f; createparticle(3,vec,NULL,mass/16.0f,numofobjects,10000); object[numofobjects].particle[count]=numofparticles-1; count++; vec[0]=position[0]+0.499f; vec[1]=position[1]+0.5f; vec[2]=0.0f; createparticle(3,vec,NULL,mass/16.0f,numofobjects,10000); object[numofobjects].particle[count]=numofparticles-1; count++; vec[0]=position[0]+0.499f; vec[1]=position[1]-0.125f; vec[2]=0.0f; createparticle(3,vec,NULL,mass/16.0f,numofobjects,10000); object[numofobjects].particle[count]=numofparticles-1; count++; vec[0]=position[0]-0.499f; vec[1]=position[1]-0.125f; vec[2]=0.0f; createparticle(3,vec,NULL,mass/16.0f,numofobjects,10000); object[numofobjects].particle[count]=numofparticles-1; count++; vec[0]=position[0]; vec[1]=position[1]-0.125f; vec[2]=0.0f; createparticle(2,vec,NULL,1.0f,numofobjects,10000); object[numofobjects].particle[count]=numofparticles-1; count++; for (count=0;count<6;count++) for (count2=count+1;count2<6;count2++) createbond(object[numofobjects].particle[count],object[numofobjects].particle[count2],1,numofobjects); copyvector(object[numofobjects].position,position); object[numofobjects].numofcdlines=6; for (count=0;count<6;count++) { object[numofobjects].cdline[count][0]=count; object[numofobjects].cdline[count][1]=((count+1)%6); } object[numofobjects].soundnum[0]=-1; object[numofobjects].soundnum[1]=-1; object[numofobjects].soundnum[2]=-1; object[numofobjects].soundnum[3]=-1; numofobjects++; }
void createbox(float position[3],float sizex,float sizey,float mass,float friction) { int count,count2; float vec[3]; memset(&object[numofobjects],0,sizeof(object[numofobjects])); object[numofobjects].type = OBJ_TYPE_BOX; object[numofobjects].timetolive=10000; object[numofobjects].mass=mass; object[numofobjects].numofparticles=4; if (sizex>=sizey) object[numofobjects].radius=sizex*1.5f; else object[numofobjects].radius=sizey*1.5f; object[numofobjects].size[0]=sizex; object[numofobjects].size[1]=sizey; object[numofobjects].friction=friction; count=0; vec[0]=-sizex*0.5f; vec[1]=sizey*0.5f; vec[2]=0.0f; addvectors(vec,vec,position); object[numofobjects].particle[count]=numofparticles; count++; createparticle(3,vec,NULL,mass*0.25f,-1,10000); vec[0]=sizex*0.5f; vec[1]=sizey*0.5f; vec[2]=0.0f; addvectors(vec,vec,position); object[numofobjects].particle[count]=numofparticles; count++; createparticle(3,vec,NULL,mass*0.25f,-1,10000); vec[0]=sizex*0.5f; vec[1]=-sizey*0.5f; vec[2]=0.0f; addvectors(vec,vec,position); object[numofobjects].particle[count]=numofparticles; count++; createparticle(3,vec,NULL,mass*0.25f,-1,10000); vec[0]=-sizex*0.5f; vec[1]=-sizey*0.5f; vec[2]=0.0f; addvectors(vec,vec,position); object[numofobjects].particle[count]=numofparticles; count++; createparticle(3,vec,NULL,mass*0.25f,-1,10000); for (count=0;count<object[numofobjects].numofparticles;count++) for (count2=count+1;count2<object[numofobjects].numofparticles;count2++) createbond(object[numofobjects].particle[count],object[numofobjects].particle[count2],1,-1); copyvector(object[numofobjects].position,position); object[numofobjects].numofcdlines=4; for (count=0;count<4;count++) { object[numofobjects].cdline[count][0]=count; object[numofobjects].cdline[count][1]=((count+1)&3); } object[numofobjects].texcoord[0][0]=0.0f; object[numofobjects].texcoord[0][1]=0.0f; object[numofobjects].texcoord[1][0]=1.0f; object[numofobjects].texcoord[1][1]=0.0f; object[numofobjects].texcoord[2][0]=1.0f; object[numofobjects].texcoord[2][1]=1.0f; object[numofobjects].texcoord[3][0]=0.0f; object[numofobjects].texcoord[3][1]=1.0f; object[numofobjects].soundnum[0]=-1; object[numofobjects].soundnum[1]=-1; object[numofobjects].soundnum[2]=-1; object[numofobjects].soundnum[3]=-1; numofobjects++; }
void createrope(int type,int particlenum,int particlenum2,int objectnum,int objectnum2,int texturenum) { int count/*,count2*/; int length; float vec[3],vec2[3]; float mass; if (type<5) { if (type==1) mass=0.125f; if (type==2) mass=0.25f; if (type==3) mass=1.0f; if (type==4) mass=2.0f; subtractvectors(vec,particle[particlenum2].position,particle[particlenum].position); length=vectorlength(vec); if (length<1) length=1; length*=2; scalevector(vec,vec,1.0f/(float)length); copyvector(vec2,particle[particlenum].position); addvectors(vec2,vec2,vec); createparticle(4,vec2,NULL,mass,-1,10000); createbond(particlenum,numofparticles-1,4,numofropes); rope[numofropes].type=type; rope[numofropes].part1=particlenum; rope[numofropes].part2=numofparticles-1; if (type<3) rope[numofropes].texturenum=360; else rope[numofropes].texturenum=361; numofropes++; for (count=1;count<length-1;count++) { addvectors(vec2,vec2,vec); createparticle(4,vec2,NULL,mass,-1,10000); createbond(numofparticles-2,numofparticles-1,4,numofropes); rope[numofropes].type=type; rope[numofropes].part1=numofparticles-2; rope[numofropes].part2=numofparticles-1; if (type<3) rope[numofropes].texturenum=360; else rope[numofropes].texturenum=361; numofropes++; } createbond(numofparticles-1,particlenum2,4,numofropes); rope[numofropes].type=type; rope[numofropes].part1=numofparticles-1; rope[numofropes].part2=particlenum2; if (type<3) rope[numofropes].texturenum=360; else rope[numofropes].texturenum=361; numofropes++; } else { if (type<10) createbond(particlenum,particlenum2,7,numofropes); else createbond(particlenum,particlenum2,8,numofropes); if (type<9) { if (level.object[objectnum2].type==6 || level.object[objectnum2].type==7) { subtractvectors(vec,level.object[objectnum2].position,particle[particlenum].position); subtractvectors(vec2,particle[particlenum2].position,object[objectnum2].position); rope[numofropes].range=vectorlength(vec2); bond[numofbonds-1].length=vectorlength(vec)-rope[numofropes].range; bond[numofbonds-1].maxlength=vectorlength(vec)-rope[numofropes].range; } if (level.object[objectnum2].type>=2 && level.object[objectnum2].type<6) { subtractvectors(vec2,level.object[objectnum2].position,object[objectnum].position); subtractvectors(vec,particle[particlenum2].position,particle[particlenum].position); if (fabs(vec2[0])>fabs(vec2[1])) vec[1]=0.0f; else vec[0]=0.0f; normalizevector(vec,vec); if (type==5 || type==9) copyvector(vec2,particle[particlenum2].position); if (type==6 || type==8) scaleaddvectors(vec2,particle[particlenum2].position,vec,-level.object[objectnum].lightcolor[0]*0.5f); if (type==7) scaleaddvectors(vec2,particle[particlenum2].position,vec,-level.object[objectnum].lightcolor[0]); subtractvectors(vec2,particle[particlenum].position,vec2); bond[numofbonds-1].length=vectorlength(vec2); bond[numofbonds-1].maxlength=vectorlength(vec2); if (type==5) scaleaddvectors(vec2,particle[particlenum2].position,vec,level.object[objectnum].lightcolor[0]); if (type==6 || type==8) scaleaddvectors(vec2,particle[particlenum2].position,vec,level.object[objectnum].lightcolor[0]*0.5f); if (type==7 || type==9) copyvector(vec2,particle[particlenum2].position); subtractvectors(vec2,particle[particlenum].position,vec2); rope[numofropes].range=(vectorlength(vec2)-bond[numofbonds-1].maxlength)*0.5f; } } rope[numofropes].type=type; rope[numofropes].part1=particlenum; rope[numofropes].part2=particlenum2; rope[numofropes].bondnum=numofbonds-1; if (type==5) rope[numofropes].angle=0.0f; if (type==6) rope[numofropes].angle=pi/2.0f; if (type==7) rope[numofropes].angle=pi; if (type==8) rope[numofropes].angle=3.0f*pi/2.0f; rope[numofropes].cycle=level.object[objectnum].lightcolor[1]; rope[numofropes].cyclelength=level.object[objectnum].lightcolor[2]; rope[numofropes].cyclecount=0.0f; rope[numofropes].link=level.object[objectnum].link; if (texturenum==0) rope[numofropes].texturenum=0; if (texturenum==1) rope[numofropes].texturenum=362; if (texturenum==2) rope[numofropes].texturenum=362; if (texturenum==3) rope[numofropes].texturenum=362; numofropes++; } }
void createwheel(float position[3],float sizex,float sizey,float mass,float friction,int anchor) { int count; float vec[3]; float angle; memset(&object[numofobjects],0,sizeof(object[numofobjects])); object[numofobjects].type = OBJ_TYPE_WHEEL; object[numofobjects].timetolive=10000; if (sizex>=sizey) object[numofobjects].radius=sizex*1.25f; else object[numofobjects].radius=sizey*1.25f; object[numofobjects].mass=mass; object[numofobjects].friction=friction; object[numofobjects].numofparticles=17; for (count=0;count<16;count++) { angle=(float)count*pi/8.0f; vec[0]=position[0]+cos(angle)*sizex*0.5f; vec[1]=position[1]-sin(angle)*sizey*0.5f; vec[2]=0.0f; createparticle(3,vec,NULL,mass/20.0f,numofobjects,10000); object[numofobjects].particle[count]=numofparticles-1; } count=16; if (!anchor) createparticle(3,position,NULL,mass/5.0f,numofobjects,10000); else createparticle(2,position,NULL,mass/5.0f,numofobjects,10000); object[numofobjects].particle[count]=numofparticles-1; for (count=0;count<16;count++) { createbond(object[numofobjects].particle[((count+1)&15)],object[numofobjects].particle[(count&15)],1,numofobjects); createbond(object[numofobjects].particle[((count+2)&15)],object[numofobjects].particle[(count&15)],1,numofobjects); createbond(object[numofobjects].particle[((count+3)&15)],object[numofobjects].particle[(count&15)],1,numofobjects); //createbond(object[numofobjects].particle[((count+4)&15)],object[numofobjects].particle[(count&15)],1,numofobjects); //createbond(object[numofobjects].particle[((count+8)&15)],object[numofobjects].particle[(count&15)],1,numofobjects); createbond(object[numofobjects].particle[16],object[numofobjects].particle[(count&15)],1,numofobjects); } copyvector(object[numofobjects].position,position); object[numofobjects].numofcdlines=16; for (count=0;count<16;count++) { object[numofobjects].cdline[count][0]=count; object[numofobjects].cdline[count][1]=((count+1)&15); } object[numofobjects].soundnum[0]=-1; object[numofobjects].soundnum[1]=-1; object[numofobjects].soundnum[2]=-1; object[numofobjects].soundnum[3]=-1; numofobjects++; }
void createtarboy(float position[3]) { int resolution = 16; //standard: 16 int count; float vec[3]; float angle; float size; memset(&object[numofobjects],0,sizeof(object[numofobjects])); object[numofobjects].type = OBJ_TYPE_GISH; object[numofobjects].timetolive=10000; object[numofobjects].radius=1.5f; object[numofobjects].mass=4.0f; object[numofobjects].friction=1.2f; if (numofobjects==0) object[numofobjects].direction=1; object[numofobjects].hitpoints=1000; /* Particles */ object[numofobjects].numofparticles = resolution; for (count=0; count < resolution; count++) { // Changing resolution changes count range. angle=(float)count*pi/8.0f; size=0.9f; if (game.supersize) size=0.9f*1.25f; if (game.difficulty==4) size=0.9f*0.8f; vec[0]=position[0]+cos(angle)*size; vec[1]=position[1]-sin(angle)*size; vec[2]=0.0f; createparticle(1,vec,NULL,0.25f,numofobjects,10000); object[numofobjects].particle[count] = numofparticles - 1; } /* Create bonds */ for (count = 0; count < resolution; count++) { _object *o; int i1, i2; o = &object[numofobjects]; i1 = o->particle[(count+1)&(resolution-1)]; i2 = o->particle[(count&(resolution-1))]; createbond(i1, i2, 3, -1); i1 = o->particle[((count+2)&(resolution-1))]; i2 = o->particle[(count&(resolution-1))]; createbond(i1, i2, 3, -1); i1 = o->particle[((count+(resolution / 2))&(resolution-1))]; i2 = o->particle[(count&(resolution-1))]; createbond(i1, i2, 2, numofobjects); } copyvector(object[numofobjects].position, position); object[numofobjects].numofcdlines = resolution; /* lines around */ for (count = 0; count < resolution; count++) { object[numofobjects].cdline[count][0]=count; object[numofobjects].cdline[count][1]=((count+1)&(resolution-1)); } /* set no sounds */ object[numofobjects].soundnum[0]=-1; object[numofobjects].soundnum[1]=-1; object[numofobjects].soundnum[2]=-1; object[numofobjects].soundnum[3]=-1; numofobjects++; }