Beispiel #1
0
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++;
  }
Beispiel #2
0
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++;
  }
Beispiel #3
0
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);
    }
  }
Beispiel #4
0
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++;
  }
Beispiel #5
0
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++;
  }
Beispiel #6
0
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++;
  }
Beispiel #7
0
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++;
  }
Beispiel #8
0
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++;
  }
Beispiel #9
0
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++;
    }
  }
Beispiel #10
0
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++;
  }
Beispiel #11
0
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++;
}