Ejemplo n.º 1
0
void eat_fruit(int eactor, int pcount)
{
  switch(pickup[pcount].contains)
  {
    case FRUITS_CHERRY:
    case FRUITS_BLUEBERRY:
    case FRUITS_FIG:
    case FRUITS_STRAWBERRY:
    score_event(eactor, SCORE_SFRUIT, pickup[pcount].contains);
    create_cloud(CLOUD_1_POINT, pickup[pcount].x, pickup[pcount].y, 0, -20, 65, 1, 0, 0);
    break;
    case FRUITM_PEACH:
    case FRUITM_RAPPLE:
    case FRUITM_PEAR:
    score_event(eactor, SCORE_MFRUIT, pickup[pcount].contains);
    create_cloud(CLOUD_3_POINTS, pickup[pcount].x, pickup[pcount].y, 0, -20, 65, 1, 0, 0);
    break;
    case FRUITL_DURIAN:
    case FRUITL_PINEAPPLE:
    score_event(eactor, SCORE_LFRUIT, pickup[pcount].contains);
    create_cloud(CLOUD_5_POINTS, pickup[pcount].x, pickup[pcount].y, 0, -20, 65, 1, 0, 0);
    break;
  }

}
Ejemplo n.º 2
0
void run_th_bases(void)
{

 int i;
 for (i = 0; i < game[0].th_base_no; i ++)
 {
  arena[0].th_base_x [i] = pickup[arena[0].th_base_pickup [i]].x;
  arena[0].th_base_y [i] = pickup[arena[0].th_base_pickup [i]].y;
  if (arena[0].th_base_taken [i] == TEAM_NONE)
   continue;
  if (arena[0].th_base_counter [i] == 1
      && serial[0].game_type != SERIAL_CLIENT)
  {
       score_message(SMESSAGE_TH, arena[0].th_base_taken [i], 0, 0);
       score_event(arena[0].th_base_taken [i], SCORE_TH, 0);
       arena[0].th_base_counter [i] = 900;
       arena[0].th_base_speed [i] = 1;
       arena[0].th_base_direction [i] *= -1;
       arena[0].th_base_move [i] ++;
       if (arena[0].th_base_move [i] >= 5)
       {
        teleport_th_base(i);
        arena[0].th_base_move [i] = 0;
        arena[0].th_base_taken [i] = TEAM_NONE;
        arena[0].th_base_angle [i] = 128;
       }
       continue;
  }
  arena[0].th_base_counter [i] --;
  if (arena[0].th_base_counter [i] % 33 == 0) arena[0].th_base_speed [i] ++;
  arena[0].th_base_angle [i] += arena[0].th_base_speed [i] * arena[0].th_base_direction [i];
  if (arena[0].th_base_angle [i] >= 255)
   arena[0].th_base_angle [i] -= 255;
  if (arena[0].th_base_angle [i] <= 0)
   arena[0].th_base_angle [i] += 255;
 }

}
Ejemplo n.º 3
0
/*
There's usually no collision detection between actors or between actors
and pickups (ie bases). So the porkball needs it specially:
*/
void run_porkball(int pactor)
{

 int i;

 if (arena[0].who_has_porkball == -1 && actor[pactor].jump_delay == 0)
 {
  for (i = 0; i < NO_ACTORS; i ++)
  {
   if (actor[i].aclass == ACLASS_NONE
    || actor[i].aclass == ACLASS_GHOST
    || actor[i].aclass == ACLASS_PORKBALL) continue;

   if (actor[pactor].x + actor[pactor].width * GRAIN>= actor[i].x - (actor[i].width * GRAIN)
       && actor[pactor].x - actor[pactor].width * GRAIN <= actor[i].x + (actor[i].width * GRAIN)
       && actor[pactor].y - actor[pactor].height * GRAIN <= actor[i].y + (actor[i].height * GRAIN)
       && actor[pactor].y + actor[pactor].height * GRAIN >= actor[i].y - (actor[i].height * GRAIN))
   {
    arena[0].who_has_porkball = i;
    actor[i].has_porkball = pactor;
    break;
   }
  }
 }


 for (i = 0; i < NO_TEAMS; i ++)
 {
  if (team[i].active == 0) continue;

  if (i == arena[0].porkball_state) continue;
  
  if (actor[pactor].x > team[i].base_x - (15 * GRAIN)
   && actor[pactor].x < team[i].base_x + (15 * GRAIN)
   && actor[pactor].y > team[i].base_y - (15 * GRAIN)
   && actor[pactor].y < team[i].base_y + (15 * GRAIN))
  {
   if (arena[0].porkball_state != -1)
   {
    score_event(arena[0].porkball_state, SCORE_GOAL, i);
    score_message(SMESSAGE_GOAL, arena[0].porkball_state, i, 0);
/*    team[arena[0].porkball_state].base_counter ++;
   if (team[arena[0].porkball_state].base_counter >= 5)
   {
    teleport_team_base(arena[0].porkball_state);
    team[arena[0].porkball_state].base_counter = 0;
   }*/
    team[i].base_counter ++;
   if (team[i].base_counter >= 5)
   {
    teleport_team_base(i);
    team[i].base_counter = 0;
   }
   }
   drop_porkball(pactor);
   break;
  }
 }


// now see if it should be rolling:

 if (abs(actor[pactor].x_speed) < 500)
 {

  char dirt_left = 0, dirt_right = 0, dirt_centre = 0;

  for (i = (actor[pactor].x / GRAIN) - actor[pactor].width; i < (actor[pactor].x / GRAIN) + actor[pactor].width; i++)
  {
   if (get_dirt(i, (actor[pactor].y / GRAIN) + actor[pactor].height + 1))
   {
    if (i < (actor[pactor].x / GRAIN)) dirt_left = 1;
     else
      if (i > (actor[pactor].x / GRAIN)) dirt_right = 1;
       else
        if (i == (actor[pactor].x / GRAIN)) dirt_centre = 1;
   }
  }

  if (dirt_left == 1 && dirt_right == 0)
   actor[pactor].x_speed += 20;
 
  if (dirt_left == 0 && dirt_right == 1)
   actor[pactor].x_speed -= 20;

 }

}
Ejemplo n.º 4
0
void near_base(int bactor)
{

   int i;
   int j;
   char occupied = 0;

 switch(game[0].game_type)
 {
  default: return;
  case GAME_GRAIL:
  if (actor[bactor].has_grail == 0 || serial[0].game_type == SERIAL_CLIENT)
   return;
  break;
  case GAME_CAP_FLAG:
  if (actor[bactor].has_flag == -1 || serial[0].game_type == SERIAL_CLIENT)
   return;
  break;
  case GAME_TAKEHOLD:
  if (serial[0].game_type == SERIAL_CLIENT) return;
  for (i = 0; i < game[0].th_base_no; i ++)
  {
   occupied = 0;
   if (arena[0].th_base_taken [i] == actor[bactor].team) continue;
   if (actor[bactor].x > arena[0].th_base_x [i] - (15 * GRAIN)
    && actor[bactor].x < arena[0].th_base_x [i] + (15 * GRAIN)
    && actor[bactor].y > arena[0].th_base_y [i] - (15 * GRAIN)
    && actor[bactor].y < arena[0].th_base_y [i] + (15 * GRAIN))
   {
    if (arena[0].th_base_taken [i] != TEAM_NONE)
    {
     for (j = 0; j < NO_ACTORS; j ++)
     {
      if (actor[j].aclass != ACLASS_PLAYER) continue;
      if (actor[j].team == actor[bactor].team) continue;
      if (actor[j].x > arena[0].th_base_x [i] - (15 * GRAIN)
       && actor[j].x < arena[0].th_base_x [i] + (15 * GRAIN)
       && actor[j].y > arena[0].th_base_y [i] - (15 * GRAIN)
       && actor[j].y < arena[0].th_base_y [i] + (15 * GRAIN))
      {
       occupied = 1;
      }
     }
     if (occupied == 0)
     {
       arena[0].th_base_taken [i] = actor[bactor].team;
       arena[0].th_base_counter [i] = 900;
       arena[0].th_base_speed [i] = 0;
       arena[0].th_base_direction [i] *= -1;
       score_message(SMESSAGE_CAPTURE, actor[bactor].user, actor[bactor].team, 0);
     }
    }
     else
      {
       arena[0].th_base_taken [i] = actor[bactor].team;
       arena[0].th_base_counter [i] = 900;
       arena[0].th_base_speed [i] = 0;
       arena[0].th_base_direction [i] *= -1;
       score_message(SMESSAGE_CAPTURE, actor[bactor].user, actor[bactor].team, 0);
//       arena[0].th_
      }
   }
  }
  return;
 }

 if (actor[bactor].x > team[actor[bactor].team].base_x - (15 * GRAIN)
  && actor[bactor].x < team[actor[bactor].team].base_x + (15 * GRAIN)
  && actor[bactor].y > team[actor[bactor].team].base_y - (15 * GRAIN)
  && actor[bactor].y < team[actor[bactor].team].base_y + (15 * GRAIN))
 {
  switch(game[0].game_type)
  {
   default: return;
   case GAME_GRAIL:
   score_message(SMESSAGE_GRAIL, actor[bactor].user, actor[bactor].team, 0);
   score_event(bactor, SCORE_GRAIL, 0);
   actor[bactor].has_grail = 0;
   drop_pickups(PICKUP_GRAIL, 0);
   team[actor[bactor].team].base_counter ++;
   if (team[actor[bactor].team].base_counter >= 5)
   {
    teleport_team_base(actor[bactor].team);
    team[actor[bactor].team].base_counter = 0;
   }
//   play_sound(WAV_SCORE);
   break;
   case GAME_CAP_FLAG:
   if (actor[bactor].has_flag == -1
       || team[actor[bactor].team].flag_at_base == 0) return;
   score_event(actor[bactor].team, SCORE_FLAG, actor[bactor].has_flag);
   score_message(SMESSAGE_FLAG, actor[bactor].user, actor[bactor].has_flag, 0);

   team[actor[bactor].team].base_counter ++;
   if (team[actor[bactor].team].base_counter >= 5)
   {
    teleport_team_base(actor[bactor].team);
    team[actor[bactor].team].base_counter = 0;
   }
   create_pickup(PICKUP_FLAG, actor[bactor].has_flag,
     team[actor[bactor].has_flag].base_x, team[actor[bactor].has_flag].base_y,
     0, 0, 0, -1, -1);
   team[actor[bactor].has_flag].flag_at_base = 1;
   actor[bactor].has_flag = -1;
//   play_sound(WAV_SCORE);
   break;
  }
 }
}
Ejemplo n.º 5
0
Archivo: main.c Proyecto: pbos/kth
void send_controller_event(controller_event_t event)
{
    score_event(event);
    interface_event(event);
}