コード例 #1
0
ファイル: uisession.c プロジェクト: Comanche93/eech
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 ()]);
		}
	}
}
コード例 #2
0
ファイル: commsserver.c プロジェクト: Comanche93/eech
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 );
}
コード例 #3
0
ファイル: load_sc.c プロジェクト: Comanche93/eech
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;
		}
	}
}
コード例 #4
0
ファイル: fflight.c プロジェクト: DexterWard/comanche
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;
}
コード例 #5
0
ファイル: force.c プロジェクト: Comanche93/eech
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
}
コード例 #6
0
ファイル: ca_save.c プロジェクト: DexterWard/comanche
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);
}
コード例 #7
0
ファイル: uisession.c プロジェクト: Comanche93/eech
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;
}