void progress_step(void) { if (goal > 0) { goal = goal_i - curr_coins(); if (goal <= 0) { if (!replay) game_set_goal(); goal = 0; } } }
void hud_timer(float dt) { const int clock = curr_clock(); const int balls = curr_balls(); const int coins = curr_coins(); const int score = curr_score(); const int goal = curr_goal(); if (gui_value(time_id) != clock) gui_set_clock(time_id, clock); if (gui_value(ball_id) != balls) gui_set_count(ball_id, balls); if (gui_value(scor_id) != score) gui_set_count(scor_id, score); if (gui_value(coin_id) != coins) gui_set_count(coin_id, coins); if (gui_value(goal_id) != goal) gui_set_count(goal_id, goal); if (config_get_d(CONFIG_FPS)) hud_fps(); view_timer -= dt; gui_timer(Rhud_id, dt); gui_timer(Lhud_id, dt); gui_timer(time_id, dt); gui_timer(view_id, dt); }
static int goal_gui(void) { const char *s1 = _("New Record"); const char *s2 = _("GOAL"); int id, jd, kd, ld, md; int high = progress_lvl_high(); if ((id = gui_vstack(0))) { int gid = 0; if (curr_mode() == MODE_CHALLENGE) { int coins, score, balls; int i; /* Reverse-engineer initial score and balls. */ if (resume) { coins = 0; score = curr_score(); balls = curr_balls(); } else { coins = curr_coins(); score = curr_score() - coins; balls = curr_balls(); for (i = curr_score(); i > score; i--) if (progress_reward_ball(i)) balls--; } /*if ((jd = gui_hstack(id))) { gui_filler(jd);*/ if ((kd = gui_vstack(id))) { if ((ld = video.device_w < video.device_h ? gui_vstack(kd) : gui_hstack(kd))) { if ((md = gui_harray(ld))) { balls_id = gui_count(md, 100, GUI_MED); gui_label(md, _("Balls"), GUI_MED, gui_wht, gui_wht); } if ((md = gui_harray(ld))) { score_id = gui_count(md, 1000, GUI_MED); gui_label(md, _("Score"), GUI_MED, gui_wht, gui_wht); } if ((md = gui_harray(ld))) { coins_id = gui_count(md, 100, GUI_MED); gui_label(md, _("Coins"), GUI_MED, gui_wht, gui_wht); } gui_set_count(balls_id, balls); gui_set_count(score_id, score); gui_set_count(coins_id, coins); } if ((ld = gui_harray(kd))) { const struct level *l; gui_label(ld, "", GUI_SML, 0, 0); for (i = MAXLVL - 1; i >= 0; i--) if ((l = get_level(i)) && level_bonus(l)) { const GLubyte *c = (level_opened(l) ? gui_grn : gui_gry); gui_label(ld, level_name(l), GUI_SML, c, c); } gui_label(ld, "", GUI_SML, 0, 0); } gui_set_rect(kd, GUI_ALL); } /*gui_filler(jd); }*/ gui_space(id); } else { gid = gui_label(id, high ? s1 : s2, GUI_LRG, gui_blu, gui_grn); gui_space(id); balls_id = score_id = coins_id = 0; } gui_score_board(id, (GUI_SCORE_COIN | GUI_SCORE_TIME | GUI_SCORE_GOAL | GUI_SCORE_SAVE), 1, high); gui_space(id); if ((jd = gui_harray(id))) { if (progress_done()) gui_start(jd, _("Finish"), GUI_MED, GOAL_DONE, 0); else if (progress_last()) gui_start(jd, _("Finish"), GUI_MED, GOAL_LAST, 0); if (progress_next_avail()) gui_start(jd, _("Next"), GUI_MED, GOAL_NEXT, 0); if (progress_same_avail()) gui_start(jd, _("Retry"), GUI_MED, GOAL_SAME, 0); if (!progress_done() && !progress_last()) gui_start(jd, _("Quit"), GUI_MED, GOAL_DONE, 0); //if (demo_saved()) // gui_state(jd, _("Save Replay"), GUI_SML, GOAL_SAVE, 0); } if (!resume && gid) gui_pulse(gid, 1.2f); gui_layout(id, 0, 0); } set_score_board(level_score(curr_level(), SCORE_COIN), progress_coin_rank(), level_score(curr_level(), SCORE_TIME), progress_time_rank(), level_score(curr_level(), SCORE_GOAL), progress_goal_rank()); return id; }
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); }
static int goal_enter(void) { const char *s1 = _("New Record"); const char *s2 = _("GOAL"); int id, jd, kd, ld, md; const struct level *l = get_level(curr_level()); int high = progress_lvl_high(); if (new_name) { progress_rename(0); new_name = 0; } if ((id = gui_vstack(0))) { int gid; if (high) gid = gui_label(id, s1, GUI_MED, GUI_ALL, gui_grn, gui_grn); else gid = gui_label(id, s2, GUI_LRG, GUI_ALL, gui_blu, gui_grn); gui_space(id); if (curr_mode() == MODE_CHALLENGE) { int coins, score, balls; char msg[MAXSTR] = ""; int i; /* Reverse-engineer initial score and balls. */ if (resume) { coins = 0; score = curr_score(); balls = curr_balls(); } else { coins = curr_coins(); score = curr_score() - coins; balls = curr_balls(); for (i = curr_score(); i > score; i--) if (progress_reward_ball(i)) balls--; } sprintf(msg, ngettext("%d new bonus level", "%d new bonus levels", curr_bonus()), curr_bonus()); if ((jd = gui_hstack(id))) { gui_filler(jd); if ((kd = gui_vstack(jd))) { if ((ld = gui_hstack(kd))) { if ((md = gui_harray(ld))) { balls_id = gui_count(md, 100, GUI_MED, GUI_NE); gui_label(md, _("Balls"), GUI_SML, 0, gui_wht, gui_wht); } if ((md = gui_harray(ld))) { score_id = gui_count(md, 1000, GUI_MED, 0); gui_label(md, _("Score"), GUI_SML, 0, gui_wht, gui_wht); } if ((md = gui_harray(ld))) { coins_id = gui_count(md, 100, GUI_MED, 0); gui_label(md, _("Coins"), GUI_SML, GUI_NW, gui_wht, gui_wht); } gui_set_count(balls_id, balls); gui_set_count(score_id, score); gui_set_count(coins_id, coins); } gui_label(kd, msg, GUI_SML, GUI_BOT, 0, 0); } gui_filler(jd); } gui_space(id); } else { balls_id = score_id = coins_id = 0; } gui_score_board(id, (GUI_MOST_COINS | GUI_BEST_TIMES | GUI_FAST_UNLOCK), 1, high); gui_space(id); if ((jd = gui_harray(id))) { if (progress_done()) gui_start(jd, _("Finish"), GUI_SML, GOAL_DONE, 0); else if (progress_last()) gui_start(jd, _("Finish"), GUI_SML, GOAL_LAST, 0); if (progress_next_avail()) gui_start(jd, _("Next Level"), GUI_SML, GOAL_NEXT, 0); if (progress_same_avail()) gui_start(jd, _("Retry Level"), GUI_SML, GOAL_SAME, 0); if (demo_saved()) gui_state(jd, _("Save Replay"), GUI_SML, GOAL_SAVE, 0); } if (!resume) gui_pulse(gid, 1.2f); gui_layout(id, 0, 0); } set_score_board(&l->score.most_coins, progress_coin_rank(), &l->score.best_times, progress_time_rank(), &l->score.fast_unlock, progress_goal_rank()); audio_music_fade_out(2.0f); video_clr_grab(); /* Reset hack. */ resume = 0; return id; }