void scoreboard_render_overlay(scene *scene) { scoreboard_local *local = scene_get_userdata(scene); video_render_sprite_size(&local->black_surface, 0, 0, 320, 200); char row[128]; char score_text[15]; char temp_name[17]; const char* score_row_format = "%-18s%-9s%-9s%11s"; // Header text sprintf(row, "SCOREBOARD - %s", round_get_name(local->page)); int title_x = 62 + (local->page == 0 ? 8 : 0); font_render(&font_large, row, title_x, 5, TEXT_COLOR_HEADER); // Column names sprintf(row, score_row_format, "PLAYER NAME", "ROBOT", "PILOT", "SCORE"); font_render(&font_small, row, 20, 20, TEXT_COLOR_HEADER); // Scores information unsigned int score, har_id, pilot_id; char *player_name; int entry = 0; int found_slot = 0; for(int r = 0; r < 20; r++) { score = local->data.entries[local->page][entry].score; row[0] = 0; // If this slot is the slot where the new, pending score data should be written, // show pending data and text input field. Otherwise just show next line of // original saved score data. if(local->has_pending_data && score < local->pending_data.score && !found_slot) { sprintf(temp_name, "%s%s", local->pending_data.name, CURSOR_STR); score_format(local->pending_data.score, score_text); sprintf(row, score_row_format, temp_name, har_get_name(local->pending_data.har_id), pilot_get_name(local->pending_data.pilot_id), score_text); found_slot = 1; } else { har_id = local->data.entries[local->page][entry].har_id; pilot_id = local->data.entries[local->page][entry].pilot_id; player_name = local->data.entries[local->page][entry].name; if(score > 0) { score_format(score, score_text); sprintf(row, score_row_format, player_name, har_get_name(har_id), pilot_get_name(pilot_id), score_text); } entry++; } font_render(&font_small, row, 20, 30 + r*8, TEXT_COLOR_SCORES); } }
int newsroom_create(scene *scene) { newsroom_local *local = malloc(sizeof(newsroom_local)); local->news_id = rand_int(24)*2; local->screen = 0; menu_background_create(&local->news_bg, 280, 50); str_create(&local->news_str); str_create(&local->pilot1); str_create(&local->pilot2); str_create(&local->har1); str_create(&local->har2); game_player *p1 = game_state_get_player(scene->gs, 0); game_player *p2 = game_state_get_player(scene->gs, 1); int health = 0; if (p2->sp_wins > 0) { // AI won, player lost local->won = 0; health = game_player_get_score(p2)->health; } else { local->won = 1; health = game_player_get_score(p1)->health; } DEBUG("health is %d", health); if (health > 40 && local->won == 1) { local->news_id = rand_int(6)*2; } else if (local->won == 1) { local->news_id = 12+rand_int(6)*2; } else if (health < 40 && local->won == 0) { local->news_id = 38+rand_int(5)*2; } else { local->news_id = 24+rand_int(7)*2; } // XXX TODO get the real sex of pilot // XXX TODO strip spaces from the end of the pilots name // XXX TODO set winner/loser names properly newsroom_set_names(local, lang_get(20+p1->pilot_id), lang_get(20+p2->pilot_id), har_get_name(p1->har_id), har_get_name(p2->har_id), pilot_sex(p1->pilot_id), pilot_sex(p2->pilot_id)); newsroom_fixup_str(local); // Continue Dialog dialog_create(&local->continue_dialog, DIALOG_STYLE_YES_NO, "DO YOU WISH TO CONTINUE?", 72, 60); local->continue_dialog.userdata = scene; local->continue_dialog.clicked = newsroom_continue_dialog_clicked; // Set callbacks scene_set_userdata(scene, local); scene_set_input_poll_cb(scene, newsroom_input_tick); scene_set_render_overlay_cb(scene, newsroom_overlay_render); scene_set_free_cb(scene, newsroom_free); scene_set_static_tick_cb(scene, newsroom_static_tick); scene_set_startup_cb(scene, newsroom_startup); // Start correct music music_play(PSM_MENU); // Pick renderer video_select_renderer(VIDEO_RENDERER_HW); return 0; }
void melee_render(scene *scene) { melee_local *local = scene_get_userdata(scene); game_player *player2 = game_state_get_player(scene->gs, 1); int current_a = 5*local->row_a + local->column_a; int current_b = 5*local->row_b + local->column_b; if (local->selection == 0) { video_render_sprite(&local->feh, 70, 0, BLEND_ALPHA, 0); video_render_sprite(&local->bleh, 0, 62, BLEND_ALPHA, 0); // player bio font_render_wrapped_shadowed(&font_small, lang_get(135+current_a), 4, 66, 152, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); // player stats font_render_shadowed(&font_small, lang_get(216), 74+27, 4, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); font_render_shadowed(&font_small, lang_get(217), 74+19, 22, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); font_render_shadowed(&font_small, lang_get(218), 74+12, 40, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); component_render(local->bar_power[0]); component_render(local->bar_agility[0]); component_render(local->bar_endurance[0]); if (player2->selectable) { video_render_sprite(&local->feh, 320-70-local->feh.w, 0, BLEND_ALPHA, 0); video_render_sprite(&local->bleh, 320-local->bleh.w, 62, BLEND_ALPHA, 0); // player bio font_render_wrapped_shadowed(&font_small, lang_get(135+current_b), 320-local->bleh.w+4, 66, 152, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); // player stats font_render_shadowed(&font_small, lang_get(216), 320-66-local->feh.w+27, 4, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); font_render_shadowed(&font_small, lang_get(217), 320-66-local->feh.w+19, 22, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); font_render_shadowed(&font_small, lang_get(218), 320-66-local->feh.w+12, 40, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); component_render(local->bar_power[1]); component_render(local->bar_agility[1]); component_render(local->bar_endurance[1]); } else { // 'choose your pilot' font_render_wrapped_shadowed(&font_small, lang_get(187), 160, 97, 160, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); } } object_render(&local->player2_placeholder); if (local->selection == 0) { // player 1 name font_render_wrapped_shadowed(&font_small, lang_get(20+current_a), 0, 52, 66, COLOR_BLACK, TEXT_SHADOW_TOP|TEXT_SHADOW_LEFT); if (player2->selectable) { // player 2 name font_render_wrapped_shadowed(&font_small, lang_get(20+current_b), 320-66, 52, 66, COLOR_BLACK, TEXT_SHADOW_TOP|TEXT_SHADOW_LEFT); } render_highlights(scene); for(int i = 0; i < 10; i++) { object_render(&local->pilots[i]); } object_render(&local->bigportrait1); if (player2->selectable) { object_render(&local->bigportrait2); } } else { // render the stupid unselected HAR portraits before anything // so we can render anything else on top of them object_render(&local->unselected_har_portraits); render_highlights(scene); // currently selected player object_render(&local->bigportrait1); //currently selected HAR object_render(&local->harportraits_player1[5*local->row_a + local->column_a]); object_render(&local->har_player1[5*local->row_a + local->column_a]); // player 1 name font_render_wrapped_shadowed(&font_small, lang_get(20+local->pilot_id_a), 0, 52, 66, COLOR_BLACK, TEXT_SHADOW_TOP|TEXT_SHADOW_LEFT); if (player2->selectable) { // player 2 name font_render_wrapped_shadowed(&font_small, lang_get(20+local->pilot_id_b), 320-66, 52, 66, COLOR_BLACK, TEXT_SHADOW_TOP|TEXT_SHADOW_LEFT); // currently selected player object_render(&local->bigportrait2); // currently selected HAR object_render(&local->harportraits_player2[5*local->row_b + local->column_b]); object_render(&local->har_player2[5*local->row_b + local->column_b]); // render HAR name (Har1 VS. Har2) char vstext[48]; strcpy(vstext, har_get_name(5*local->row_a + local->column_a)); strcat(vstext, " VS. "); strcat(vstext, har_get_name(5*local->row_b + local->column_b)); font_render_wrapped_shadowed(&font_small, vstext, 80, 107, 150, COLOR_BLACK, TEXT_SHADOW_TOP|TEXT_SHADOW_LEFT); } else { // 'choose your HAR' font_render_wrapped_shadowed(&font_small, lang_get(186), 160, 97, 160, COLOR_GREEN, TEXT_SHADOW_RIGHT|TEXT_SHADOW_BOTTOM); // render HAR name font_render_wrapped_shadowed(&font_small, har_get_name(5*local->row_a + local->column_a), 130, 107, 66, COLOR_BLACK, TEXT_SHADOW_TOP|TEXT_SHADOW_LEFT); } } if (player2->selectable) { chr_score *s1 = game_player_get_score(game_state_get_player(scene->gs, 0)); chr_score *s2 = game_player_get_score(game_state_get_player(scene->gs, 1)); char winstext[48]; snprintf(winstext, 48, "Wins: %d", s1->wins); font_render_shadowed(&font_small, winstext, 8, 107, COLOR_BLACK, TEXT_SHADOW_TOP|TEXT_SHADOW_LEFT); snprintf(winstext, 48, "Wins: %d", s2->wins); font_render_shadowed(&font_small, winstext, 312-(strlen(winstext)*font_small.w), 107, COLOR_BLACK, TEXT_SHADOW_TOP|TEXT_SHADOW_LEFT); } }