void create_client_pilot (void) { client_pilot_request_data pilot_data; ASSERT (get_comms_model () == COMMS_MODEL_CLIENT); // // pack required gunship data // strcpy (pilot_data.name, get_player_log_name (get_current_player_log ())); pilot_data.side = get_global_gunship_side (); pilot_data.rank = get_player_log_rank (get_global_gunship_side (), get_current_player_log ()); pilot_data.sub_type = ENTITY_SUB_TYPE_PILOT_PILOT; pilot_data.unique_id = direct_play_get_player_id (); pilot_data.difficulty = get_global_difficulty_level (); // // Send request // send_packet (get_server_id (), PACKET_TYPE_CLIENT_PILOT_REQUEST, (unsigned char *) &pilot_data, sizeof (client_pilot_request_data), SEND_TYPE_PERSONAL); // turn off NEXT button while Pilot entity is being created client_server if (get_comms_model () == COMMS_MODEL_CLIENT) { set_display_gunship_buttons (FALSE, "ENGAGE"); } }
int award_aviator_wings (int side) { player_log_type *player; int *medals, medal_type, award_medal; float hours; ASSERT ((side >= 0) && (side <= NUM_ENTITY_SIDES)); award_medal = 1; player = get_current_player_log (); medals = player->side_log[side].medals; hours = get_player_log_flying_seconds (side, player) / ONE_HOUR; if (hours >= MEDAL_HOURS_TO_BECOME_MASTER_AVIATOR) { medal_type = MEDAL_MASTER_AVIATOR; } else if (hours >= MEDAL_HOURS_TO_BECOME_SENIOR_AVIATOR) { medal_type = MEDAL_SENIOR_AVIATOR; } else if (hours >= MEDAL_HOURS_TO_BECOME_ARMY_AVIATOR) { medal_type = MEDAL_ARMY_AVIATOR; } else { award_medal = 0; } // aviator badges only awarded once if (award_medal) { if (medals [medal_type]) { return MEDAL_TYPE_NONE; } else { medals [medal_type] = 1; return medal_type; } } else { return MEDAL_TYPE_NONE; } }
int award_player_rank (int side) { player_log_type *player; int new_rank; ASSERT ((side >= 0) && (side <= NUM_ENTITY_SIDES)); player = get_current_player_log (); new_rank = get_player_rank_from_points (player->side_log[side].experience); if (new_rank != player->side_log[side].rank) { player->side_log[side].rank = new_rank; return new_rank; } else { return PILOT_RANK_NONE; } }
int award_valour_medal (int side, int points) { player_log_type *player; player_medal_criteria *criteria; int *medals, award, i; medal_types medal_type; // find out which medal the mission points qualify the player for ASSERT ((side >= 0) && (side <= NUM_ENTITY_SIDES)); i = award = 0; player = get_current_player_log (); medals = player->side_log[side].medals; criteria = valour_medal_award_criteria; medal_type = MEDAL_MEDAL_OF_HONOUR; while ((!award) && (i < NUMBER_OF_VALOUR_MEDALS)) { if (points > criteria->points_req) { award = query_award_medal (player, medals, criteria, medal_type, side); } if (!award) { i++; criteria++; medal_type--; } } if (award) { medals [medal_type] += 1; return medal_type; } else { return MEDAL_TYPE_NONE; } }
void notify_award_clicked_medal (ui_object *obj, void *arg) { player_log_type *player; int *medals, medal_number, graphic_number; player = get_current_player_log (); medals = player->side_log[player_log_current_side].medals; medal_number = graphic_number = get_ui_object_item_number (obj); // account for double graphics on last 2 medals if (graphic_number == 10) { graphic_number = 11; } else if (graphic_number == 11) { graphic_number = 13; } if (player_log_current_side == ENTITY_SIDE_RED_FORCE) { if (medals [medal_number] == 0) { set_ui_object_drawable (us_medal_objects [graphic_number], TRUE); medals [medal_number] = 1; } else { set_ui_object_drawable (us_medal_objects [graphic_number], FALSE); medals [medal_number] = 0; } } else { if (medals [medal_number] == 0) { set_ui_object_drawable (russian_medal_objects [graphic_number], TRUE); medals [medal_number] = 1; } else { set_ui_object_drawable (russian_medal_objects [graphic_number], FALSE); medals [medal_number] = 0; } } }
int award_air_medal_medal (int side, int success) { player_log_type *player; int *medals; ASSERT ((side >= 0) && (side <= NUM_ENTITY_SIDES)); player = get_current_player_log (); medals = player->side_log[side].medals; if (success) { player->side_log [side].air_medal_counter++; if (player->side_log [side].air_medal_counter >= NUM_NEEDED_TO_AWARD_AIR_MEDAL) { medals [MEDAL_AIR_MEDAL] += 1; player->side_log [side].air_medal_counter = 0; #if DEBUG_MODULE debug_filtered_log ("Awarded Air Medal, reset counter"); #endif return MEDAL_AIR_MEDAL; } else { #if DEBUG_MODULE debug_filtered_log ("Air Medal Not Awarded (count = %d)", player->side_log[side].air_medal_counter); #endif return MEDAL_TYPE_NONE; } } else { #if DEBUG_MODULE debug_filtered_log ("Air Medal Not Awarded: resetting air_medal_counter"); #endif player->side_log [side].air_medal_counter = 0; } return MEDAL_TYPE_NONE; }
void create_server_pilot (void) { entity *en; ASSERT (get_comms_model () == COMMS_MODEL_SERVER); en = create_new_pilot_entity ( get_player_log_name (get_current_player_log ()), get_global_gunship_side (), get_player_log_rank (get_global_gunship_side (), get_current_player_log ()), ENTITY_SUB_TYPE_PILOT_PILOT, direct_play_get_player_id (), get_global_difficulty_level () ); set_pilot_entity (en); }
int award_purple_heart_medal (int side) { player_log_type *player; int *medals, damage; ASSERT ((side >= 0) && (side <= NUM_ENTITY_SIDES)); player = get_current_player_log (); medals = player->side_log[side].medals; // get helicopter damage damage = get_dynamics_damage_type (DYNAMICS_DAMAGE_MAIN_ROTOR | DYNAMICS_DAMAGE_TAIL_ROTOR | DYNAMICS_DAMAGE_LEFT_ENGINE | DYNAMICS_DAMAGE_RIGHT_ENGINE | DYNAMICS_DAMAGE_LEFT_ENGINE_FIRE | DYNAMICS_DAMAGE_RIGHT_ENGINE_FIRE | DYNAMICS_DAMAGE_LOW_HYDRAULICS | DYNAMICS_DAMAGE_LOW_OIL_PRESSURE | DYNAMICS_DAMAGE_HIGH_OIL_PRESSURE | DYNAMICS_DAMAGE_STABILISER); if ((get_gunship_entity ()) && (get_local_entity_int_value (get_gunship_entity (), INT_TYPE_ALIVE))) { if (damage) { medals [MEDAL_PURPLE_HEART] += 1; #if DEBUG_MODULE debug_filtered_log ("Awarded Purple Heart Medal"); #endif return MEDAL_PURPLE_HEART; } } #if DEBUG_MODULE debug_filtered_log ("Purple Heart Medal Not Awarded"); #endif return MEDAL_TYPE_NONE; }
void highlight_russian_medal_info (ui_object *obj, void *arg) { player_log_type *player; char name_text [128], info_text [128]; int medal_number, medal_count; player = get_current_player_log (); medal_number = get_ui_object_item_number (obj); medal_count = player->side_log [player_log_current_side].medals [medal_number]; if ( (medal_number != MEDAL_MASTER_AVIATOR) && (medal_number != MEDAL_SENIOR_AVIATOR) && (medal_number != MEDAL_ARMY_AVIATOR) ) { sprintf (name_text, "(%d) %s", medal_count, russian_medal_info_array [medal_number].name); } else { sprintf (name_text, "%s", russian_medal_info_array [medal_number].name); } sprintf (info_text, "%s", russian_medal_info_array [medal_number].info); if ((int) arg == BUTTON_STATE_DOWN) { set_ui_object_text (medals_text_name, name_text); set_ui_object_text (medals_text_info, info_text); } else { set_ui_object_text (medals_text_name, ""); set_ui_object_text (medals_text_info, ""); } }
void set_medal_states (ui_object *medal_objects[]) { int *medals, i; player_log_type *player; player = get_current_player_log (); medals = player->side_log[player_log_current_side].medals; for (i = 1; i < (NUM_MEDAL_TYPES); i++) { if (medals [i]) { set_ui_object_drawable (medal_objects [i], TRUE); } else { set_ui_object_drawable (medal_objects [i], FALSE); } } // always draw medal backdrops for dist.service & medal of honour if (medals [MEDAL_DISTINGUISHED_SERVICE]) { set_ui_object_drawable (medal_objects [MEDAL_DISTINGUISHED_SERVICE + 2], FALSE); } else { set_ui_object_drawable (medal_objects [MEDAL_DISTINGUISHED_SERVICE + 2], TRUE); } if (medals [MEDAL_MEDAL_OF_HONOUR]) { set_ui_object_drawable (medal_objects [MEDAL_MEDAL_OF_HONOUR + 2], FALSE); } else { set_ui_object_drawable (medal_objects [MEDAL_MEDAL_OF_HONOUR + 2], TRUE); } }
void award_campaign_medal (int side, int medal) { player_log_type *player; int *medals; ASSERT ((side >= 0) && (side <= NUM_ENTITY_SIDES)); player = get_current_player_log (); medals = player->side_log [side].medals; if ((medal > MEDAL_TYPE_NONE) && (medal <= MEDAL_TAIWAN)) { medals [medal] += 1; } #if DEBUG_MEDALS // clear medals memset (medals, 0, sizeof (int) * (NUM_MEDAL_TYPES - 1)); if (check_key (SDLK_F1)) { medals [MEDAL_SAUDI] = 1; } if (check_key (SDLK_F2)) { medals [MEDAL_LEBANON] = 1; } if (check_key (SDLK_F3)) { medals [MEDAL_TAIWAN] = 1; } #endif }
void recursive_check_campaign_files (const char *directory, session_list_data_type **list, const char *extension) { session_list_types session_type; directory_file_list *warzone_file, *directory_listing; unsigned int i, upper; int value, valid_file, season; static char operator_ [64], variable [64], temp_warzone_name [128], *warzone_name, warzone_path [1024], directory_search_path [1024]; // // First, go through any files in this directory. // sprintf (directory_search_path, "%s\\*.%s", directory, extension); // Jabberwock 0400201 Session filter revised //VJ 050123 small bug fix: check for lowercase AND uppercase if ((strstr(directory, "CAMP01") || strstr(directory, "camp01")) && command_line_session_filter) { sprintf(warzone_path, "%s\\*.chc", directory); warzone_file = get_first_directory_file(warzone_path); sprintf(temp_warzone_name, "%s", get_directory_file_filename (warzone_file)); // Vadim 051120, if chc filename has spaces, capitalize every word for (upper=1, i = 0; i < (strlen (temp_warzone_name) - 4); i++) { if (upper) { temp_warzone_name[i] = toupper (temp_warzone_name[i]); upper=0; } else if (isspace(temp_warzone_name[i])) { upper=1; } else { temp_warzone_name[i] = tolower (temp_warzone_name[i]); } } temp_warzone_name[i] = '\0'; for (i = 0; i < (strlen (directory) - 7); i++) { warzone_path[i] = directory[i]; } warzone_path[i] = '\0'; add_session (temp_warzone_name, SESSION_LIST_TYPE_FILTER, 1, NULL, warzone_path, NULL, NULL, temp_warzone_name, list, NULL, SESSION_SEASON_INVALID); } directory_listing = get_first_directory_file (directory_search_path); // JB 030313 Enable running out of separate directories if (!directory_listing) { char fn[1024]; fn[0] = 0; strcpy(fn, comanche_hokum_installation_path); strcat(fn, "\\common\\"); strcat(fn, directory_search_path); directory_listing = get_first_directory_file ( fn ); } if (directory_listing) { valid_file = TRUE; while (valid_file) { session_type = SESSION_LIST_TYPE_HOST; if (get_directory_file_type (directory_listing) == DIRECTORY_FILE_TYPE_FILE) { FILE *file_ptr; file_tags tag; int end_flag; static char *ptr, *last_ptr, path [1024], full_filename [1024], campaign_title [1024], campaign_directory [32], campaign_filename [1024]; // // Add campaign file to list // sprintf (full_filename, "%s\\%s", directory, get_directory_file_filename (directory_listing)); file_ptr = safe_fopen (full_filename, "r"); end_flag = FALSE; warzone_name = NULL; season = SESSION_SEASON_INVALID; while (!end_flag) { tag = (file_tags) get_next_file_tag (file_ptr, application_tag_strings, FILE_TAG_APPLICATION_LAST_TAG); switch (tag) { case FILE_TAG_WARZONE_NAME: { get_next_file_string (file_ptr, temp_warzone_name, sizeof (temp_warzone_name)); warzone_name = temp_warzone_name; break; } case FILE_TAG_TITLE: { get_next_file_string (file_ptr, campaign_title, sizeof (campaign_title)); // // Create data path, ie strip off the last directory name // N.B. valid data directories are in any directory below 'MAPS'. // strcpy (path, directory); ptr = strstr (path, "\\maps\\"); ptr += strlen ("\\maps\\"); while (ptr = strstr (ptr, "\\")) { ptr += strlen ("\\"); last_ptr = ptr; } sprintf (campaign_directory, "%s", last_ptr); sprintf (campaign_filename, "%s", get_directory_file_filename (directory_listing)); last_ptr -= strlen ("\\"); *last_ptr = '\0'; break; } case FILE_TAG_LANGUAGE_TEXT_START: { // skip script till correct language while (tag = (file_tags) get_next_file_tag (file_ptr, application_tag_strings, FILE_TAG_APPLICATION_LAST_TAG)) { #if (LANGUAGE == LANGUAGE_FRENCH) if (tag == FILE_TAG_LANGUAGE_FRENCH) { break; } #elif (LANGUAGE == LANGUAGE_GERMAN) if (tag == FILE_TAG_LANGUAGE_GERMAN) { break; } #elif (LANGUAGE == LANGUAGE_ITALIAN) if (tag == FILE_TAG_LANGUAGE_ITALIAN) { break; } #elif (LANGUAGE == LANGUAGE_SPANISH) if (tag == FILE_TAG_LANGUAGE_SPANISH) { break; } #else //LANGUAGE_ENGLISH if (tag == FILE_TAG_LANGUAGE_ENGLISH) { break; } #endif if (tag == FILE_TAG_LANGUAGE_TEXT_STOP) { break; } } break; } case FILE_TAG_LANGUAGE_TEXT_END: { // skip script till end of languages while (tag = (file_tags) get_next_file_tag (file_ptr, application_tag_strings, FILE_TAG_APPLICATION_LAST_TAG)) { if (tag == FILE_TAG_LANGUAGE_TEXT_STOP) { break; } } break; } case FILE_TAG_CAMPAIGN_DATA: { while (tag = (file_tags) get_next_file_tag (file_ptr, application_tag_strings, FILE_TAG_APPLICATION_LAST_TAG)) { if (tag == FILE_TAG_END) { break; } } break; } case FILE_TAG_SAVED_CAMPAIGN: { session_type = SESSION_LIST_TYPE_RESTORE; break; } case FILE_TAG_IF: { ASSERT (get_current_player_log ()); get_next_file_word (file_ptr, variable, sizeof (variable)); get_next_file_word (file_ptr, operator_, sizeof (operator_)); value = get_next_file_int (file_ptr); if (!if_file_tag_variable (variable, operator_, value)) { // skip script till endif while (tag = (file_tags) get_next_file_tag (file_ptr, application_tag_strings, FILE_TAG_APPLICATION_LAST_TAG)) { if ((tag == FILE_TAG_ENDIF) || (tag == FILE_TAG_END)) { break; } } } break; } case FILE_TAG_ENDIF: { break; } case FILE_TAG_SEASON: { // 15JUN09 Casm retrieving season earlier season = get_next_file_int (file_ptr); break; } case FILE_TAG_CAMPAIGN_REQUIRES_APACHE_HAVOC: { debug_log("session filter: campaign_title %s", campaign_title); // VJ 050123 aphavoc install hack, do not close map if it exists but EEAH is not offcially installed if (!global_aphavoc_maps) { if (!get_global_apache_havoc_installed ()) { end_flag = TRUE; debug_log ("SESSION: Campaign %s required Apache-Havoc to be installed", campaign_title); break; } } } case FILE_TAG_END: case FILE_TAG_UNKNOWN: { end_flag = TRUE; if ((!command_line_session_filter) || (strcmp(session_filter_value, "root") != 0)) { // 15JUN09 Casm retrieving season earlier const char *title; // if host get the Translated campaign name // not hosted game so just use the name title = session_type == SESSION_LIST_TYPE_HOST ? get_trans (campaign_title) : campaign_title; if (session_type == SESSION_LIST_TYPE_HOST || (session_type == SESSION_LIST_TYPE_MASTER) || (session_type == SESSION_LIST_TYPE_RESTORE)) { add_session (title, session_type, 1, NULL, path, campaign_directory, campaign_filename, warzone_name, list, NULL, season); } } // Jabberwock 0400201 ends break; } } } fclose (file_ptr); } valid_file = get_next_directory_file (directory_listing); } destroy_directory_file_list (directory_listing); } // // Next, go through any directories, recursing into them. // sprintf (directory_search_path, "%s\\*", directory); directory_listing = get_first_directory_file (directory_search_path); // JB 030313 Enable running out of separate directories if (!directory_listing) { char fn[1024]; fn[0] = 0; strcpy(fn, comanche_hokum_installation_path); strcat(fn, "\\common\\"); strcat(fn, directory_search_path); directory_listing = get_first_directory_file ( fn ); } if (directory_listing) { valid_file = TRUE; while (valid_file) { if (get_directory_file_type (directory_listing) == DIRECTORY_FILE_TYPE_DIRECTORY) { if ((strcmp (get_directory_file_filename (directory_listing), ".") != 0) && (strcmp (get_directory_file_filename (directory_listing), "..") != 0)) { char full_directory [1024]; // // Create the full directory name // sprintf (full_directory, "%s\\%s", directory, get_directory_file_filename (directory_listing)); // // Recurse into this directory // recursive_check_campaign_files (full_directory, list, extension); } } valid_file = get_next_directory_file (directory_listing); } destroy_directory_file_list (directory_listing); } }
int combat_zone_read_text (void) { ui_object *ui_line, *destroy_ui_line; int long_text_flag, value, line_count; FILE *file_ptr; char variable [64], operator_ [64], line [1024], filename [1024]; file_tags tag; ui_line = get_ui_object_child (combat_zone_text_area); while (ui_line) { destroy_ui_line = ui_line; ui_line = get_ui_object_next (ui_line); destroy_ui_object (destroy_ui_line); } // // // line_count = 0; sprintf (filename, "%s\\%s\\%s", current_game_session->data_path, current_game_session->campaign_directory, current_game_session->campaign_filename); file_ptr = safe_fopen (filename, "r"); long_text_flag = FALSE; while (TRUE) { tag = (file_tags) get_next_file_tag (file_ptr, application_tag_strings, FILE_TAG_APPLICATION_LAST_TAG); switch (tag) { case FILE_TAG_LANGUAGE_TEXT_START: { get_next_file_word (file_ptr, operator_, sizeof (operator_)); // skip script till correct language while (tag = (file_tags) get_next_file_tag (file_ptr, application_tag_strings, FILE_TAG_APPLICATION_LAST_TAG)) { #if (LANGUAGE == LANGUAGE_FRENCH) if (tag == FILE_TAG_LANGUAGE_FRENCH) { break; } #elif (LANGUAGE == LANGUAGE_GERMAN) if (tag == FILE_TAG_LANGUAGE_GERMAN) { break; } #elif (LANGUAGE == LANGUAGE_ITALIAN) if (tag == FILE_TAG_LANGUAGE_ITALIAN) { break; } #elif (LANGUAGE == LANGUAGE_SPANISH) if (tag == FILE_TAG_LANGUAGE_SPANISH) { break; } #else //LANGUAGE_ENGLISH if (tag == FILE_TAG_LANGUAGE_ENGLISH) { break; } #endif if (tag == FILE_TAG_LANGUAGE_TEXT_STOP) { break; } } break; } case FILE_TAG_LANGUAGE_TEXT_END: { get_next_file_word (file_ptr, operator_, sizeof (operator_)); // skip script till end of languages while (tag = (file_tags) get_next_file_tag (file_ptr, application_tag_strings, FILE_TAG_APPLICATION_LAST_TAG)) { if (tag == FILE_TAG_LANGUAGE_TEXT_STOP) { break; } } break; } case FILE_TAG_LONG_TEXT_START: { long_text_flag = TRUE; while (TRUE) { get_next_file_string (file_ptr, line, sizeof (line)); if (strcmp ((line + 1), application_tag_strings [FILE_TAG_TEXT_END]) == 0) { break; } create_ui_object ( UI_TYPE_TEXT, UI_ATTR_PARENT (combat_zone_text_area), UI_ATTR_POSITION (10, (line_count + 1) * 12), UI_ATTR_TEXT (line), UI_ATTR_FONT_TYPE (UI_FONT_ARIAL_10), UI_ATTR_END ); line_count ++; } break; } case FILE_TAG_IF: { ASSERT (get_current_player_log ()); get_next_file_word (file_ptr, variable, sizeof (variable)); get_next_file_word (file_ptr, operator_, sizeof (operator_)); value = get_next_file_int (file_ptr); if (!if_file_tag_variable (variable, operator_, value)) { // skip script till endif while (tag = (file_tags) get_next_file_tag (file_ptr, application_tag_strings, FILE_TAG_APPLICATION_LAST_TAG)) { if ((tag == FILE_TAG_ENDIF) || (tag == FILE_TAG_END)) { break; } } } break; } case FILE_TAG_ENDIF: { break; } case FILE_TAG_END: { fclose (file_ptr); return long_text_flag; } } } return FALSE; }