void activate_bad_guys(void)
{
- int x,y;
-
- /* Activate bad guys: */
-
- for (y = 0; y < 15; y++)
+ for (std::vector<BadGuyData>::iterator i = current_level.badguy_data.begin();
+ i != current_level.badguy_data.end();
+ ++i)
{
- for (x = 0; x < current_level.width; x++)
- {
- if (current_level.dn_tiles[y][x] >= '0' && current_level.dn_tiles[y][x] <= '9')
- {
- add_bad_guy(x * 32, y * 32, static_cast<BadGuyKind>(current_level.dn_tiles[y][x] - '0'));
- current_level.dn_tiles[y][x] = 0;
- }
- }
+ add_bad_guy(i->x, i->y, i->kind);
}
}
void activate_particle_systems(void)
{
- printf("PSys: %s\n", current_level.particle_system.c_str());
if(current_level.particle_system == "clouds")
{
particle_systems.push_back(new CloudParticleSystem);
{
while (SDL_PollEvent(&event))
{
+ /* Check for menu-events, if the menu is shown */
+ if(show_menu)
+ menu_event(event);
switch(event.type)
{
case SDL_QUIT: /* Quit event - quit: */
case SDL_KEYDOWN: /* A keypress! */
key = event.key.keysym.sym;
- /* Check for menu-events, if the menu is shown */
- if(show_menu)
- menu_event(&event.key.keysym);
-
if(tux.key_event(key,DOWN))
break;
tux.input.down = UP;
else
tux.input.down = UP;
-
- /* Handle joystick for the menu */
- if(show_menu)
- {
- if(tux.input.down == DOWN)
- menuaction = MENU_ACTION_DOWN;
- else
- menuaction = MENU_ACTION_UP;
- }
- break;
+
+ break;
default:
break;
}
tux.input.up = UP;
else if (event.jbutton.button == JOY_B)
tux.input.fire = UP;
-
- if(show_menu)
- menuaction = MENU_ACTION_HIT;
+
break;
default:
void game_draw(void)
{
-int y,x;
+ int y,x;
/* Draw screen: */
if (tux.dying && (global_frame_counter % 4) == 0)
}
/* Draw interactive tiles: */
-
for (y = 0; y < 15; ++y)
{
for (x = 0; x < 21; ++x)
}
/* (Bouncy bricks): */
-
for (unsigned int i = 0; i < bouncy_bricks.size(); ++i)
bouncy_brick_draw(&bouncy_bricks[i]);
upgrade_draw(&upgrades[i]);
for (unsigned int i = 0; i < bouncy_distros.size(); ++i)
- bouncy_distro_draw(&bouncy_distros[i]);
+ bouncy_distro_draw(&bouncy_distros[i]);
for (unsigned int i = 0; i < broken_bricks.size(); ++i)
broken_brick_draw(&broken_bricks[i]);
/* Draw foreground: */
-
for (y = 0; y < 15; ++y)
{
for (x = 0; x < 21; ++x)
"/images/shared/bag-right-1.png",
USE_ALPHA);
+ /* Mr. Bomb */
+ for(int i=0; i<4; ++i) {
+ char num[4];
+ snprintf(num, 4, "%d", i);
+ texture_load(&img_mrbomb_left[i],
+ datadir + "/images/shared/mrbomb-left-" + num + ".png", USE_ALPHA);
+ texture_load(&img_mrbomb_right[i],
+ datadir + "/images/shared/mrbomb-right-" + num + ".png", USE_ALPHA);
+ }
+ /* stalactite */
+ texture_load(&img_stalactite,
+ datadir + "/images/shared/stalactite.png", USE_ALPHA);
+ texture_load(&img_stalactite_broken,
+ datadir + "/images/shared/stalactite-broken.png", USE_ALPHA);
/* Upgrades: */
texture_free(&img_money_right[i]);
}
+ for(i = 0; i < 4; i++) {
+ texture_free(&img_mrbomb_left[i]);
+ texture_free(&img_mrbomb_right[i]);
+ }
+
+ texture_free(&img_stalactite);
+ texture_free(&img_stalactite_broken);
+
texture_free(&img_box_full);
texture_free(&img_box_empty);
void drawshape(float x, float y, unsigned int c)
{
- int z;
-
- Tile* ptile = TileManager::instance()->get
- (c);
- if(ptile)
+ if (c != 0)
{
- if(ptile->images.size() > 1)
+ Tile* ptile = TileManager::instance()->get(c);
+ if(ptile)
{
- texture_draw(&ptile->images[( ((global_frame_counter*25) / ptile->anim_speed) % (ptile->images.size()))],x,y);
- }
- else
- {
- texture_draw(&ptile->images[0],x,y);
+ if(ptile->images.size() > 1)
+ {
+ texture_draw(&ptile->images[( ((global_frame_counter*25) / ptile->anim_speed) % (ptile->images.size()))],x,y);
+ }
+ else if (ptile->images.size() == 1)
+ {
+ texture_draw(&ptile->images[0],x,y);
+ }
+ else
+ {
+ printf("Tile not dravable %u\n", c);
+ }
}
}
/* What shape is at some position? */
-
unsigned int shape(float x, float y)
{
c = current_level.ia_tiles[yy][xx];
}
else
- c = '.';
+ c = 0;
return(c);
}
-/* Is is ground? */
-
+Tile* gettile(float x, float y)
+{
+ return TileManager::instance()->get(shape(x, y));
+}
bool issolid(float x, float y)
{
}
}
+bool isdistro(float x, float y)
+{
+ Tile* tile = TileManager::instance()->get(shape(x,y));
+ return tile && tile->distro;
+}
+
/* Break a brick: */
void trybreakbrick(float x, float y)
{
- if (isbrick(x, y))
+ Tile* tile = gettile(x, y);
+ if (tile->brick)
{
- if (shape(x, y) == 'x' || shape(x, y) == 'y')
+ if (tile->data > 0)
{
/* Get a distro from it: */
-
add_bouncy_distro(((int)(x + 1) / 32) * 32,
(int)(y / 32) * 32);
}
if (distro_counter <= 0)
- level_change(¤t_level,x, y, TM_IA, 'a');
+ level_change(¤t_level,x, y, TM_IA, tile->next_tile2);
play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER);
score = score + SCORE_DISTRO;
else
{
/* Get rid of it: */
-
- level_change(¤t_level,x, y, TM_IA, '.');
+ level_change(¤t_level,x, y, TM_IA, tile->next_tile);
}
/* Empty a box: */
-
void tryemptybox(float x, float y, int col_side)
{
- if (!isfullbox(x, y))
+ Tile* tile = gettile(x,y);
+ if (!tile->fullbox)
return;
// according to the collision side, set the upgrade direction
-
if(col_side == LEFT)
col_side = RIGHT;
else
col_side = LEFT;
- switch(shape(x,y))
+ switch(tile->data)
{
- case 'A': /* Box with a distro! */
+ case 1: //'A': /* Box with a distro! */
add_bouncy_distro(((int)(x + 1) / 32) * 32, (int)(y / 32) * 32 - 32);
play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER);
score = score + SCORE_DISTRO;
distros++;
break;
- case 'B': /* Add an upgrade! */
+
+ case 2: // 'B': /* Add an upgrade! */
if (tux.size == SMALL) /* Tux is small, add mints! */
add_upgrade((int)((x + 1) / 32) * 32, (int)(y / 32) * 32 - 32, col_side, UPGRADE_MINTS);
else /* Tux is big, add coffee: */
add_upgrade((int)((x + 1) / 32) * 32, (int)(y / 32) * 32 - 32, col_side, UPGRADE_COFFEE);
play_sound(sounds[SND_UPGRADE], SOUND_CENTER_SPEAKER);
break;
- case '!': /* Add a golden herring */
+
+ case 3:// '!': /* Add a golden herring */
add_upgrade((int)((x + 1) / 32) * 32, (int)(y / 32) * 32 - 32, col_side, UPGRADE_HERRING);
break;
default:
}
/* Empty the box: */
- level_change(¤t_level,x, y, TM_IA, 'a');
+ level_change(¤t_level,x, y, TM_IA, tile->next_tile);
}
-
/* Try to grab a distro: */
-
void trygrabdistro(float x, float y, int bounciness)
{
- if (shape(x, y) == '$')
+ Tile* tile = gettile(x, y);
+ if (tile && tile->distro)
{
- level_change(¤t_level,x, y, TM_IA, '.');
+ level_change(¤t_level,x, y, TM_IA, tile->next_tile);
play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER);
if (bounciness == BOUNCE)
}
/* Try to bump a bad guy from below: */
-
void trybumpbadguy(float x, float y)
{
- unsigned int i;
-
/* Bad guys: */
- for (i = 0; i < bad_guys.size(); i++)
+ for (unsigned int i = 0; i < bad_guys.size(); i++)
{
if (bad_guys[i].base.x >= x - 32 && bad_guys[i].base.x <= x + 32 &&
bad_guys[i].base.y >= y - 16 && bad_guys[i].base.y <= y + 16)
{
- if (bad_guys[i].kind == BAD_BSOD ||
- bad_guys[i].kind == BAD_LAPTOP)
- {
- bad_guys[i].dying = DYING_FALLING;
- bad_guys[i].base.ym = -8;
- play_sound(sounds[SND_FALL], SOUND_CENTER_SPEAKER);
- }
+ bad_guys[i].collision(&tux, CO_PLAYER, COLLISION_BUMP);
}
}
/* Upgrades: */
- for (i = 0; i < upgrades.size(); i++)
+ for (unsigned int i = 0; i < upgrades.size(); i++)
{
if (upgrades[i].base.height == 32 &&
upgrades[i].base.x >= x - 32 && upgrades[i].base.x <= x + 32 &&
if (fi == NULL)
{
fprintf(stderr, "Warning: I could not open the slot file ");
-
}
else
{