void progress_stat(int s) { int i, dirty = 0; status = s; coins = curr_coins(); timer = (level_time(level) == 0 ? curr_clock() : level_time(level) - curr_clock()); switch (status) { case GAME_GOAL: for (i = curr.score + 1; i <= curr.score + coins; i++) if (progress_reward_ball(i)) curr.balls++; curr.score += coins; curr.times += timer; dirty = level_score_update(level, timer, coins, &time_rank, goal == 0 ? &goal_rank : NULL, &coin_rank); if (!level_completed(level)) { level_complete(level); dirty = 1; } /* Compute next level. */ if (mode == MODE_CHALLENGE) { for (next = level->next; next && level_bonus(next); next = next->next) { if (!level_opened(next)) { level_open(next); dirty = 1; } } } else { for (next = level->next; next && level_bonus(next) && !level_opened(next); next = next->next) /* Do nothing */; } /* Open next level or complete the set. */ if (next) { level_open(next); dirty = 1; } else done = mode == MODE_CHALLENGE; break; case GAME_FALL: /* Fall through. */ case GAME_TIME: for (next = level->next; next && !level_opened(next); next = next->next) /* Do nothing */; curr.times += timer; curr.balls -= 1; break; } if (dirty && mode != MODE_STANDALONE) set_store_hs(); demo_play_stat(status, coins, timer); }
void del_cube (void) { cubes--; if (cubes == 0) level_complete(); }