- Tile* tile = solids->get_tile_at(pos);
- if (!tile)
- {
- char errmsg[64];
- sprintf(errmsg, "Invalid tile at %i,%i", (int)((pos.x+1)/32*32), (int)((pos.y+1)/32*32));
- throw SuperTuxException(errmsg, __FILE__, __LINE__);
- }
-
-
- if (!(tile->attributes & Tile::FULLBOX))
- return;
-
- // according to the collision side, set the upgrade direction
- if(col_side == LEFT)
- col_side = RIGHT;
- else
- col_side = LEFT;
-
- int posx = ((int)(pos.x+1) / 32) * 32;
- int posy = (int)(pos.y/32) * 32 - 32;
- switch(tile->data)
- {
- case 1: // Box with a distro!
- add_bouncy_distro(Vector(posx, posy));
- sound_manager->play_sound(sounds[SND_DISTRO]);
- player_status.score = player_status.score + SCORE_DISTRO;
- player_status.distros++;
- break;
-
- case 2: // Add a fire flower upgrade!
- if (player->size == SMALL) /* Tux is small, add mints! */
- add_upgrade(Vector(posx, posy), col_side, UPGRADE_GROWUP);
- else /* Tux is big, add a fireflower: */
- add_upgrade(Vector(posx, posy), col_side, UPGRADE_FIREFLOWER);
- sound_manager->play_sound(sounds[SND_UPGRADE]);
- break;
-
- case 5: // Add an ice flower upgrade!
- if (player->size == SMALL) /* Tux is small, add mints! */
- add_upgrade(Vector(posx, posy), col_side, UPGRADE_GROWUP);
- else /* Tux is big, add an iceflower: */
- add_upgrade(Vector(posx, posy), col_side, UPGRADE_ICEFLOWER);
- sound_manager->play_sound(sounds[SND_UPGRADE]);
- break;
-
- case 3: // Add a golden herring
- add_upgrade(Vector(posx, posy), col_side, UPGRADE_HERRING);
- break;
-
- case 4: // Add a 1up extra
- add_upgrade(Vector(posx, posy), col_side, UPGRADE_1UP);
- break;
- default:
- break;
- }
-
- /* Empty the box: */
- solids->change_at(pos, tile->next_tile);