void compile_single_session_list (session_list_data_type **list) { connection_data_type *this_connection; this_connection = direct_play_get_connection_data (); if ( ( this_connection ) && ( this_connection->is_initialised ) ) { if ( ( this_connection->one_way_hosting_setup ) && ( !this_connection->is_hosting ) ) { return; } } // Jabberwock 040201 Session filter if (!command_line_session_filter || (strcmp (session_filter_value, "root") == 0)) { recursive_check_campaign_files ("..\\common\\maps", list, game_type_extensions [get_game_type ()]); } else { if ((strcmp (session_filter_value, "-Multiplayer-") != 0)) { recursive_check_campaign_files (session_filter_value, list, game_type_extensions [get_game_type ()]); } } }
int server_create_session (void) { int connection_created; connection_data_type *comms_connection; comms_connection = direct_play_get_connection_data (); if ( ( comms_connection ) && ( comms_connection->is_initialised ) ) { if ( !comms_connection->one_way_hosting_setup ) { direct_play_close_session (); connection_created = FALSE; if ( direct_play_create_session (get_game_type ()) ) { if ( direct_play_session_capabilities () ) { // Jabberwock 050303 Remove DP groups // if ( direct_play_create_group () ) { if ( direct_play_create_player () ) { set_server_id (direct_play_get_player_id ()); connection_created = TRUE; } } } } if ( !connection_created ) { comms_connection->is_initialised = FALSE; } } else { direct_play_set_session_type_and_name ( get_game_type () ); } } return ( TRUE ); }
void loading_function (ui_object *obj, void *arg) { switch (get_game_type ()) { case GAME_TYPE_DEMO: { initialise_demoload_graphic (obj); set_ui_object_drawable (loading_text, TRUE); break; } case GAME_TYPE_CAMPAIGN: case GAME_TYPE_SKIRMISH: case GAME_TYPE_FREE_FLIGHT: default: { set_ui_object_drawable (loading_text, FALSE); switch (global_options.gunship_type) { case GUNSHIP_TYPE_APACHE: { //set_ui_object_graphic (loading_screen, (unsigned short int *) get_graphics_file_data (GRAPHICS_UI_APACHE_LOADING_SCREEN)); break; } case GUNSHIP_TYPE_HAVOC: { //set_ui_object_graphic (loading_screen, (unsigned short int *) get_graphics_file_data (GRAPHICS_UI_HAVOC_LOADING_SCREEN)); break; } } break; } } }
entity *free_flight_auto_assign_gunship (void) { vec3d *pos; entity *force, *new_task, *group, *member, **gunship_list, *en; entity_sub_types sub_type; int c, index, count; // // Auto assign a helicopter for free flight // ASSERT (get_comms_model () == COMMS_MODEL_SERVER); ASSERT (get_game_type () == GAME_TYPE_FREE_FLIGHT); ASSERT (get_pilot_entity ()); if (get_gunship_entity ()) { return NULL; } force = get_local_entity_parent (get_pilot_entity (), LIST_TYPE_PILOT); ASSERT (force); // // Count up candidates // count = 0; en = get_local_entity_first_child (force, LIST_TYPE_AIR_REGISTRY); while (en) { if (get_local_entity_int_value (en, INT_TYPE_GROUP_MODE) == GROUP_MODE_IDLE) { member = get_local_entity_first_child (en, LIST_TYPE_MEMBER); while (member) { sub_type = get_local_entity_int_value (member, INT_TYPE_ENTITY_SUB_TYPE); if ((sub_type == ENTITY_SUB_TYPE_AIRCRAFT_RAH66_COMANCHE) || (sub_type == ENTITY_SUB_TYPE_AIRCRAFT_KA52_HOKUM_B)) { if (get_local_entity_suitable_for_player (member, get_pilot_entity ())) { count ++; } } member = get_local_entity_child_succ (member, LIST_TYPE_MEMBER); } } en = get_local_entity_child_succ (en, LIST_TYPE_AIR_REGISTRY); } if (count == 0) { return NULL; } // // Create list of candidates // gunship_list = safe_malloc (sizeof (entity *) * count); count = 0; en = get_local_entity_first_child (force, LIST_TYPE_AIR_REGISTRY); while (en) { if (get_local_entity_int_value (en, INT_TYPE_GROUP_MODE) == GROUP_MODE_IDLE) { member = get_local_entity_first_child (en, LIST_TYPE_MEMBER); while (member) { sub_type = get_local_entity_int_value (member, INT_TYPE_ENTITY_SUB_TYPE); if ((sub_type == ENTITY_SUB_TYPE_AIRCRAFT_RAH66_COMANCHE) || (sub_type == ENTITY_SUB_TYPE_AIRCRAFT_KA52_HOKUM_B)) { if (get_local_entity_suitable_for_player (member, get_pilot_entity ())) { gunship_list [count] = member; count ++; } } member = get_local_entity_child_succ (member, LIST_TYPE_MEMBER); } } en = get_local_entity_child_succ (en, LIST_TYPE_AIR_REGISTRY); } // // Pick one... // ASSERT (count > 0); index = rand16 () % count; for (c = 0; c < count; c ++) { en = gunship_list [index]; group = get_local_entity_parent (en, LIST_TYPE_MEMBER); pos = get_local_entity_vec3d_ptr (en, VEC3D_TYPE_POSITION); new_task = create_user_task (en, ENTITY_SUB_TYPE_TASK_FREE_FLIGHT, pos, NULL, NULL); set_assign_create_waypoint_route (FALSE); if (assign_primary_task_to_group (group, new_task)) { set_gunship_entity (en); set_view_mode (VIEW_MODE_COCKPIT_PANEL_LEVEL_AHEAD); safe_free (gunship_list); initialise_free_flight_screen_map_page_objects (); return en; } else { debug_log ("FLIGHT: can't assign user to Created task"); destroy_client_server_entity (new_task); } set_assign_create_waypoint_route (TRUE); index ++; if (index == count) { index = 0; } } safe_free (gunship_list); return NULL; }
void display_campaign_criteria_time_remaining (void) { #if 0 entity *force_en; force *force_raw; //session //*session_raw; //campaign_criteria_type //*this_campaign_criteria; //float //elapsed_hours, //elapsed_minutes, //elapsed_seconds; //int //remaining_hours, //remaining_minutes, //remaining_seconds; //int //x, y; //char //s [20]; // // display count down timer until campaign completiion (NOT "tour of duty" timer) // // // currently used only for special games, so I have tailored it to suit :- // only displays minutes and seconds, // doesn't display on the clients until after first time-of-day resync // if ((get_game_type () != GAME_TYPE_SPECIAL) && (get_game_type () != GAME_TYPE_MAGAZINE_DEMO)) { return; } ASSERT (get_session_entity ()); force_en = get_local_force_entity (get_global_gunship_side ()); ASSERT (force_en); force_raw = (force *) get_local_entity_data (force_en); /* this_campaign_criteria = force_raw->campaign_criteria; while (this_campaign_criteria) { if (this_campaign_criteria->criteria_type == CAMPAIGN_CRITERIA_TIME_DURATION) { break; } this_campaign_criteria = this_campaign_criteria->next; } if (this_campaign_criteria) { if (this_campaign_criteria->valid) { session_raw = (force *) get_local_entity_data (get_session_entity ()); // // clients don't display until AFTER first resync (otherwise time will be wrong) // if (get_comms_model () == COMMS_MODEL_CLIENT) { if (!display_timer_valid) { return; } } // // get time remaining // get_digital_clock_values (session_raw->elapsed_time_of_day, &elapsed_hours, &elapsed_minutes, &elapsed_seconds); remaining_seconds = (this_campaign_criteria->days - session_raw->elapsed_days) * ONE_DAY; remaining_seconds += (this_campaign_criteria->hours - elapsed_hours) * ONE_HOUR; remaining_seconds += (this_campaign_criteria->minutes - elapsed_minutes) * ONE_MINUTE; remaining_seconds += (this_campaign_criteria->seconds - elapsed_seconds) * ONE_SECOND; if ((remaining_seconds > 0.0) && (remaining_seconds < ONE_HOUR)) { if (remaining_seconds < ONE_MINUTE) { if (remaining_seconds < 10.0) { // // flash if < 10 seconds // if (frac (session_raw->elapsed_time_of_day) < 0.5) { return; } } set_ui_font (UI_FONT_ADS_15_ORANGE); } else { set_ui_font (UI_FONT_ADS_15_WHITE); } get_digital_clock_int_values (remaining_seconds, &remaining_hours, &remaining_minutes, &remaining_seconds); if (lock_screen (active_screen)) { set_full_screen_viewport (); sprintf (s, "T-%02d:%02d", remaining_minutes, remaining_seconds); // string WAS right-justified, but looked bad due to proportional fonts changing the width every second ! // x = get_screen_width (active_screen) - ui_get_string_length (s); x = get_screen_width (active_screen) - 62; y = ui_get_font_height () + 2; ui_display_text (s, x, y); unlock_screen (active_screen); } } } } */ #endif }
void build_save_file_list (void) { session_list_data_type *game_session; directory_file_list *directory_listing; ui_object *new_item; int valid_file; char *p, filename [256], extension [8]; ui_object_destroy_list_items (save_file_list); game_session = get_current_game_session (); ASSERT (game_session); sprintf (full_filename, "%s//%s//*.", game_session->data_path, game_session->campaign_directory); sprintf (extension, "%s", game_type_extensions [get_game_type ()]); extension [2] = extension [1]; extension [1] = extension [0]; extension [0] = 'S'; strcat (full_filename, extension); directory_listing = get_first_directory_file (full_filename); if (directory_listing) { valid_file = TRUE; while (valid_file) { if (get_directory_file_type (directory_listing) == DIRECTORY_FILE_TYPE_FILE) { sprintf (filename, get_directory_file_filename (directory_listing)); p = strchr (filename, '.'); if (p) { *p = '\0'; } new_item = add_to_pop_up_list (filename, save_file_list, NULL, ENTITY_INDEX_DONT_CARE, UI_FONT_ARIAL_16, ui_ingame_live_text_colour); set_ingame_ui_object_mouse_over_properties (new_item); } valid_file = get_next_directory_file (directory_listing); } destroy_directory_file_list (directory_listing); } resize_pop_up_list (save_file_list); }
int store_session (session_list_data_type *game_session, const char *filename) { #if !DEMO_VERSION entity *force; int count; char limited_filename [32], title [128], extension [5], data_filename [256], script_filename [256]; FILE *file_ptr; count = 0; strncpy (limited_filename, filename, sizeof (limited_filename) - 2); limited_filename [31] = '\0'; sprintf (data_filename, "%s\\%s\\%s", game_session->data_path, game_session->campaign_directory, limited_filename); strcat (data_filename, ".sav"); sprintf (script_filename, "%s\\%s\\%s.", game_session->data_path, game_session->campaign_directory, limited_filename); sprintf (extension, "%s", game_type_extensions [get_game_type ()]); extension [2] = extension [1]; extension [1] = extension [0]; extension [0] = 'S'; strcat(script_filename, extension); // // Create scripting file // file_ptr = fopen (script_filename, "w"); if (!file_ptr) { debug_log ("SESSION: failed to open file %s", script_filename); return FALSE; } ASSERT (file_ptr); // Start set_file_comment (file_ptr, "/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); set_file_tag (file_ptr, application_tag_strings, FILE_TAG_START); set_file_comment (file_ptr, "/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); // Campaign title set_file_new_line (file_ptr, 1); sprintf (title, "%s", game_session->title); set_file_comment (file_ptr, "/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); set_file_tag (file_ptr, application_tag_strings, FILE_TAG_TITLE); set_file_string (file_ptr, title); set_file_comment (file_ptr, "/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); set_file_new_line (file_ptr, 1); set_file_comment (file_ptr, "/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); set_file_tag (file_ptr, application_tag_strings, FILE_TAG_SHORT_TEXT_START); // campaign title set_file_string (file_ptr, game_session->title); set_file_new_line (file_ptr, 2); // elapsed campaign time { float elapsed_time; int hours, minutes, seconds, elapsed_days; elapsed_time = get_local_entity_float_value (get_session_entity (), FLOAT_TYPE_ELAPSED_TIME); convert_float_to_int (elapsed_time / ONE_DAY, &elapsed_days); elapsed_time = fmod (elapsed_time, ONE_DAY); get_digital_clock_int_values (elapsed_time, &hours, &minutes, &seconds); sprintf (script_filename, "%s %d %s, %02d.%02d.%02d", get_trans ("Elapsed Time"), elapsed_days, get_trans ("days"), hours, minutes, seconds); set_file_string (file_ptr, script_filename); set_file_new_line (file_ptr, 1); } set_file_tag (file_ptr, application_tag_strings, FILE_TAG_TEXT_END); set_file_comment (file_ptr, "/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); set_file_new_line (file_ptr, 1); set_file_tag (file_ptr, application_tag_strings, FILE_TAG_CAMPAIGN_DATA); if (side_data_filename) { // side data set_file_tag (file_ptr, application_tag_strings, FILE_TAG_FILENAME); set_file_string (file_ptr, side_data_filename); } if (population_placement_filename) { // population data set_file_tag (file_ptr, application_tag_strings, FILE_TAG_FILENAME); set_file_string (file_ptr, population_placement_filename); } set_file_tag (file_ptr, application_tag_strings, FILE_TAG_MAP_X_SIZE); set_file_int (file_ptr, world_map.num_map_x_sectors); set_file_tag (file_ptr, application_tag_strings, FILE_TAG_MAP_Z_SIZE); set_file_int (file_ptr, world_map.num_map_z_sectors); set_file_tag (file_ptr, application_tag_strings, FILE_TAG_MAP_SECTOR_SIZE); set_file_int (file_ptr, world_map.sector_side_length); if (campaign_population_filename) { // population data set_file_tag (file_ptr, application_tag_strings, FILE_TAG_FILENAME); set_file_string (file_ptr, campaign_population_filename); } // // save force in reverse order to list (so that they are read_in in the correct order) // force = get_local_entity_first_child (get_session_entity (), LIST_TYPE_FORCE); ASSERT (force); while (get_local_entity_child_succ (force, LIST_TYPE_FORCE)) { force = get_local_entity_child_succ (force, LIST_TYPE_FORCE); } while (force) { set_file_tag (file_ptr, application_tag_strings, FILE_TAG_FACTION); set_file_tag (file_ptr, application_tag_strings, FILE_TAG_SIDE); set_file_enum (file_ptr, entity_side_names, get_local_entity_int_value (force, INT_TYPE_SIDE)); set_file_tag (file_ptr, application_tag_strings, FILE_TAG_COLOUR); set_file_enum (file_ptr, sys_colour_names, get_local_entity_int_value (force, INT_TYPE_COLOUR)); force = get_local_entity_child_pred (force, LIST_TYPE_FORCE); } set_file_tag (file_ptr, application_tag_strings, FILE_TAG_END); // Campaign saved filename set_file_new_line (file_ptr, 1); set_file_comment (file_ptr, "/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); set_file_tag (file_ptr, application_tag_strings, FILE_TAG_SAVED_CAMPAIGN); set_file_tag (file_ptr, application_tag_strings, FILE_TAG_PATH); set_file_string (file_ptr, game_session->data_path); set_file_tag (file_ptr, application_tag_strings, FILE_TAG_PATH); set_file_string (file_ptr, game_session->campaign_directory); set_file_tag (file_ptr, application_tag_strings, FILE_TAG_FILENAME); set_file_string (file_ptr, game_session->campaign_filename); set_file_comment (file_ptr, "/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); set_file_new_line (file_ptr, 1); // // Version number // { int value; set_file_comment (file_ptr, "/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); set_file_tag (file_ptr, application_tag_strings, FILE_TAG_VERSION_NUMBER); value = get_local_entity_int_value ( get_session_entity (), INT_TYPE_VERSION_NUMBER ); set_file_int (file_ptr, value); set_file_comment (file_ptr, "/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); } // End //VJ 051202 add season (camo) info to file description //use set and get_global_season set_file_comment (file_ptr, "/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); set_file_tag (file_ptr, application_tag_strings, FILE_TAG_SEASON); set_file_int (file_ptr, (int) get_global_season() ); set_file_comment (file_ptr, "/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); set_file_comment (file_ptr, "/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); set_file_tag (file_ptr, application_tag_strings, FILE_TAG_END); set_file_comment (file_ptr, "/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"); fclose (file_ptr); // // Save entity data // file_ptr = fopen (data_filename, "wb"); if (file_ptr) { unsigned char *save_ptr, *buffer; int extra_data, server_version_number, buffer_size; buffer_size = 1024 * 1024; buffer = (unsigned char *) malloc_heap_mem (buffer_size); save_ptr = buffer; extra_data = 0; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // write out version number server_version_number = get_local_entity_int_value (get_session_entity (), INT_TYPE_VERSION_NUMBER); quick_set_list_item (save_ptr, int, server_version_number); buffer_size -= sizeof (int); extra_data += sizeof (int); // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // write out session ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// while (pack_session (save_ptr, &buffer_size, PACK_MODE_SERVER_SESSION)) { debug_log ("SESSION: mallocing store pack buffer from %d to %d", buffer_size, buffer_size * 2); free_mem (buffer); buffer_size *= 2; buffer = (unsigned char *) malloc_heap_mem (buffer_size); save_ptr = buffer; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // write out version number server_version_number = get_local_entity_int_value (get_session_entity (), INT_TYPE_VERSION_NUMBER); quick_set_list_item (save_ptr, int, server_version_number); buffer_size -= sizeof (int); // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } fwrite (buffer, buffer_size + extra_data, 1, file_ptr); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// free_mem (buffer); } fclose (file_ptr); // // // // arneh feb 2009 - this call shouldn't be necessary, and it will double initialise things which confuses EECH // set_current_game_session (game_session); #endif return TRUE; }