// draw the shield icon and integrity for the escort ship void hud_escort_show_icon(int x, int y, int index) { #ifndef NEW_HUD if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_DOGFIGHT) && index <= 2) { hud_escort_show_icon_dogfight(x, y, index); return; } float shields, integrity; int screen_integrity, offset; char buf[255]; object *objp = &Objects[Escort_ships[index].objnum]; ship *sp = &Ships[objp->instance]; // determine if its "friendly" or not // Goober5000 - changed in favor of just passing the team hud_escort_set_gauge_color(index, sp->team); /* if(Player_ship != NULL){ hud_escort_set_gauge_color(index, (sp->team == Player_ship->team) ? 1 : 0); } else { hud_escort_set_gauge_color(index, 1); } */ // draw a 'D' if a ship is disabled if ( (sp->flags & SF_DISABLED) || (ship_subsys_disrupted(sp, SUBSYSTEM_ENGINE)) ) { emp_hud_string( x + current_hud->Escort_status[0], y + current_hud->Escort_status[1], EG_NULL, XSTR( "D", 284)); } // print out ship name strcpy(buf, sp->ship_name); gr_force_fit_string(buf, 255, 100); emp_hud_string( x + current_hud->Escort_name[0], y + current_hud->Escort_name[1], EG_ESCORT1 + index, buf); // show ship integrity hud_get_target_strength(objp, &shields, &integrity); screen_integrity = fl2i(integrity*100 + 0.5f); offset = 0; if ( screen_integrity < 100 ) { offset = 2; if ( screen_integrity == 0 ) { if ( integrity > 0 ) { screen_integrity = 1; } } } emp_hud_printf( x+current_hud->Escort_integrity[0] + offset, y+current_hud->Escort_integrity[1], EG_NULL, "%d", screen_integrity); //Let's be nice. hud_set_gauge_color(HUD_ESCORT_VIEW); #endif }
// multiplayer dogfight void hud_escort_show_icon_dogfight(int x, int y, int index) { #ifndef NEW_HUD int hull_integrity = 100; char buf[255]; int np_index; object *objp; ship_info *sip; int stat_shift = 40; // always use the standard color to avoid confusion hud_set_gauge_color(HUD_ESCORT_VIEW); // netplayer index np_index = find_player_id(Escort_ships[index].np_id); if((np_index < 0) || (np_index >= MAX_PLAYERS) || (Net_players[np_index].m_player == NULL)){ return; } // print out player name strcpy(buf, Net_players[np_index].m_player->callsign); gr_force_fit_string(buf, 255, 100 - stat_shift); emp_hud_string( x + current_hud->Escort_name[0], y + current_hud->Escort_name[1], EG_ESCORT1 + index, buf); // can we get the player object? objp = NULL; if((Net_players[np_index].m_player->objnum >= 0) && (Net_players[np_index].m_player->objnum < MAX_OBJECTS) && (Objects[Net_players[np_index].m_player->objnum].type == OBJ_SHIP)){ objp = &Objects[Net_players[np_index].m_player->objnum]; if((objp->instance >= 0) && (objp->instance < MAX_SHIPS) && (Ships[objp->instance].ship_info_index >= 0) && (Ships[objp->instance].ship_info_index < MAX_SHIPS)){ sip = &Ship_info[Ships[objp->instance].ship_info_index]; } else { return; } hull_integrity = (int)(((float)objp->hull_strength / (float)Ships[objp->instance].ship_max_hull_strength) * 100.0f); if(hull_integrity < 0){ hull_integrity = 0; } } // show ship integrity if(objp == NULL){ emp_hud_printf( x+current_hud->Escort_integrity[0] - stat_shift, y+current_hud->Escort_integrity[1], EG_NULL, "%d", Net_players[np_index].m_player->stats.m_kill_count_ok); } else { emp_hud_printf( x+current_hud->Escort_integrity[0] - stat_shift, y+current_hud->Escort_integrity[1], EG_NULL, "(%d%%) %d", hull_integrity, Net_players[np_index].m_player->stats.m_kill_count_ok); } #endif }
// displays (renders) the training objectives list void training_obj_display() { char buf[256], *second_line; int i, t, x, y, z, height, end, offset, bx, by, y_count; color *c; if (!Training_obj_num_lines){ return; } if ( !hud_gauge_active(HUD_DIRECTIVES_VIEW) ) { // Always draw the directives display if this is a training mission if ( !(The_mission.game_type & MISSION_TYPE_TRAINING) ) { return; } } // don't ever display directives display in multiplayer missions // if ( Game_mode & GM_MULTIPLAYER ){ // return; // } height = gr_get_font_height(); offset = 0; end = Training_obj_num_lines; if (end > TRAINING_OBJ_DISPLAY_LINES) { end = TRAINING_OBJ_DISPLAY_LINES; offset = Training_obj_num_lines - end; } // draw top of objective display // hud_set_default_color(); hud_set_gauge_color(HUD_DIRECTIVES_VIEW); GR_AABITMAP(Directive_gauge[0].first_frame, Directive_coords[gr_screen.res][DIRECTIVE_COORDS_TOP][0]+fl2i(HUD_offset_x), Directive_coords[gr_screen.res][DIRECTIVE_COORDS_TOP][1]+fl2i(HUD_offset_y)); // gr_set_bitmap(Directive_gauge[0].first_frame); // gr_aabitmap(Directive_coords[DIRECTIVE_COORDS_TOP][0]+fl2i(HUD_offset_x), Directive_coords[DIRECTIVE_COORDS_TOP][1]+fl2i(HUD_offset_y)); // print out title emp_hud_printf(Directive_coords[gr_screen.res][DIRECTIVE_COORDS_TITLE][0]+fl2i(HUD_offset_x), Directive_coords[gr_screen.res][DIRECTIVE_COORDS_TITLE][1]+fl2i(HUD_offset_y), EG_OBJ_TITLE, XSTR( "Directives", 422)); // gr_printf(Directive_coords[DIRECTIVE_COORDS_TITLE][0]+fl2i(HUD_offset_x), Directive_coords[DIRECTIVE_COORDS_TITLE][1]+fl2i(HUD_offset_y), XSTR( "directives", 422)); bx = DIRECTIVE_X+fl2i(HUD_offset_x); by = Directive_coords[gr_screen.res][DIRECTIVE_COORDS_MIDDLE][1]+fl2i(HUD_offset_y); y_count = 0; for (i=0; i<end; i++) { x = DIRECTIVE_X + 5 + fl2i(HUD_offset_x); y = Training_obj_window_coords[gr_screen.res][1] + fl2i(HUD_offset_y) + y_count * height + height / 2 + 1; z = TRAINING_OBJ_LINES_MASK(i + offset); c = &Color_normal; if (Training_obj_lines[i + offset] & TRAINING_OBJ_LINES_KEY) { message_translate_tokens(buf, Mission_events[z].objective_key_text); // remap keys // gr_set_color_fast(&Color_normal); c = &Color_bright_green; } else { strcpy(buf, Mission_events[z].objective_text); if (Mission_events[z].count){ sprintf(buf + strlen(buf), NOX(" [%d]"), Mission_events[z].count); } #ifndef NO_NETWORK // if this is a multiplayer tvt game, and this is event is not for my team, don't display it if((Game_mode & GM_MULTIPLAYER) && (Netgame.type_flags & NG_TYPE_TEAM) && (Net_player != NULL)){ if((Mission_events[z].team != -1) && (Net_player->p_info.team != Mission_events[z].team)){ continue; } } #endif switch (mission_get_event_status(z)) { case EVENT_CURRENT: // gr_set_color_fast(&Color_bright_white); c = &Color_bright_white; break; case EVENT_FAILED: // gr_set_color_fast(&Color_bright_red); c = &Color_bright_red; break; case EVENT_SATISFIED: // gr_set_color_fast(&Color_bright_blue); t = Mission_events[z].satisfied_time; if (t + i2f(2) > Missiontime) { if (Missiontime % fl2f(.4f) < fl2f(.2f)){ c = &Color_bright_blue; } else { c = &Color_bright_white; } } else { c = &Color_bright_blue; } break; } } // maybe split the directives line second_line = split_str_once(buf, 167); // blit the background frames // hud_set_default_color(); hud_set_gauge_color(HUD_DIRECTIVES_VIEW); GR_AABITMAP(Directive_gauge[1].first_frame, bx, by); // gr_set_bitmap(Directive_gauge[1].first_frame); // gr_aabitmap(bx, by); by += DIRECTIVE_H; if ( second_line ) { GR_AABITMAP(Directive_gauge[1].first_frame, bx, by); // gr_set_bitmap(Directive_gauge[1].first_frame); // gr_aabitmap(bx, by); by += DIRECTIVE_H; } // blit the text gr_set_color_fast(c); emp_hud_string(x, y, EG_OBJ1 + i, buf); // gr_printf(x, y, buf); y_count++; if ( second_line ) { y = Training_obj_window_coords[gr_screen.res][1] + fl2i(HUD_offset_y) + y_count * height + height / 2 + 1; emp_hud_string(x+12, y, EG_OBJ1 + i + 1, second_line); // gr_printf(x+12, y, second_line); y_count++; } } // draw the bottom of objective display // hud_set_default_color(); hud_set_gauge_color(HUD_DIRECTIVES_VIEW); GR_AABITMAP(Directive_gauge[2].first_frame, bx, by); // gr_set_bitmap(Directive_gauge[2].first_frame); // gr_aabitmap(bx, by); }