All pastes #204434 Raw Edit

Someone

public text v1 · immutable
#204434 ·published 2006-10-15 23:21 UTC
rendered paste body
/*
			ixGamer.c
			--> Core functioning
			_______________________
			Created by
					Daniel Shaw
			_______________________
			
			Version		:		Alpha ( 0.0.1 )
			Last Updated	:		15/10/2006
*/

/* Core Libraries & References*/
#include <stdio.h>
#include <string.h>
#include <ttk.h>

/* Windows */
TWindow *main_scene; // --> Dummy sequence

/* Widgets */
TWidget *splash_image; // --> Splash picture
TWidget *title_image; // --> Title image
TWidget *map_screen; // --> Map screen

/* Surfaces */
ttk_surface main_surface; // --> Main surface for writing
ttk_surface splash_surface; // --> Splash image surface
ttk_surface title_surface; // --> Title surface
ttk_surface map_tiles; // --> Map tileset

/* Game Data & Configuration Settings */
char generation[1], game_name[20], *map_id[3], *char_a[25], *logo[104], *title_logo[50], *wskin[50];
int player_x = 0, player_y = 0, facing = 0, title_selector_position = 0, title_xa = 5, title_xb = 50;

/* Files */
FILE *data_cfg, *game_data, *map_file;

// OLD -- REDOOOOOOOOOOOOOOOOOOOO
int max_x;
int max_y;
int max;
char *tileset;
int ***get;

/* Character Data */
typedef struct character
	{
		char *Name;	/* Name */
		int HP;		/* Hit Points */
		int MP;		/* Magic Points */
		int Level;		/* Level of abilities */
		int X;		/* X Co-ordinate */
		int Y;		/* Y Co-ordinate */
		int Dir;		/* Facing Direction */
		int Visible;	/* Visible State */
	} character;

/* Declare all functions */
void load_map(char id[3]);
void start_new_game();
void rmtitle_func();
int titlein_func(TWidget *title_image, int input_type);
void title_func(TWidget *title_image, ttk_surface title_surface);
void rmsplash_func();
int splashin_func(TWidget *splash_image, int input_type);
void splash_func(TWidget *splash_image, ttk_surface splash_surface);
void load_fonts();
void check_files();
int main(int argc, char **argv);

/* Draw Layer 1 */ // REDOOOOOOOOOOOOOO
void draw_layer_one(ttk_surface srf)
	{
	int unsigned x_row_get = 0;
	int unsigned y_row_get = 0;

	for (y_row_get = 0; y_row_get < max_y; y_row_get++)
		{
			for (x_row_get = 0; x_row_get < max_x; x_row_get++)
				{
				ttk_blit_image_ex(map_tiles, get[0][y_row_get][x_row_get] * 32, get[1][y_row_get][x_row_get] * 32
				, 32, 32, srf, x_row_get * 32, y_row_get * 32);
				}
		}
	}

/* Load Map */ // REDOOOOOOOOOOOOO
void load_map(char id[3])
	{
		char map_path_name[48];
		int unsigned x_row_get = 0;
		int unsigned y_row_get = 0;

		sprintf(map_path_name, "game_data/Maps/Map%s.igame", map_id);

		// Forge path and tileset name into one
		map_file = fopen(map_path_name, "r");
		fscanf(map_file, "%s", tileset);

		// Get limit counts
		fscanf(map_file, "%d", &max_x);
		fscanf(map_file, "%d", &max_y);

		// Make the limit				
		max = max_x * max_y;

		// Get the maps
		for (y_row_get = 0; y_row_get < max_y; y_row_get++)
			{
				for (x_row_get = 0; x_row_get < max_x; x_row_get++)
					{
				// Load the map data
				fscanf(map_file, "%d %d %d %d %d %d %d", &get[0][y_row_get][x_row_get], &get[1][y_row_get][x_row_get], &get[2][y_row_get][x_row_get], 
				&get[3][y_row_get][x_row_get], &get[4][y_row_get][x_row_get], &get[5][y_row_get][x_row_get], &get[6][y_row_get][x_row_get]);
					}
			}

		fclose(map_file); // Close the file
	}

/* New Game */
void start_new_game(TWidget *map_screen, ttk_surface main_surface)
	{
		// Make player using character attributes
		character player;
		
		// Give the player default stats (HP, MP, etc, etc)
		player.Name = "Daniel";
		player.HP = 60;
		player.MP = 10;
		player.Level = 1;
		player.X = player_x;
		player.Y = player_y;
		player.Dir = facing;
		player.Visible = 1;

		// Load map file data co-ordinates
		load_map("3");

		// Make tileset path
		char *tileset_path;
		sprintf(tileset_path, "game_data/Visuals/Tiles/%s", tileset);

		// Load map tiles
		map_tiles = ttk_load_image(tileset_path);

		// Draw layer one
		draw_layer_one(main_surface);
	}

/* Remove title function */
void rmtitle_func()
	{
		// Add map widget
		ttk_add_widget(main_scene, map_screen);

		// Remove title widget
		ttk_remove_widget(main_scene, title_image);
		map_screen->draw = start_new_game;
		map_screen->dirty++;
		// Start the game!
		//start_new_game();
	}

/* Title input functionality */
int titlein_func(TWidget *title_image, int input_type)
	{
		// Create default return mode
		int input_return;

		// Skip splash screen on the Action Button press
		switch (input_type)
			{
				case TTK_BUTTON_ACTION: // Center / Action
				switch (title_selector_position)
					{
						case 0: // New Game

						// Remove widget and start game
						rmtitle_func();

						// Return key
						input_return = TTK_EV_CLICK;
						break;

						case 1: // Load Game

						// Return key
						input_return = TTK_EV_CLICK;
						break;

						case 2: // Quit Game

						// Return key
						input_return = TTK_EV_DONE;
						break;
					}
				break;

				case TTK_BUTTON_PREVIOUS: // Rewind
				// Make selector go back one
				if (title_selector_position > 0)
				title_selector_position--;

				// Return key
				input_return = TTK_EV_CLICK;
				break;

				case TTK_BUTTON_NEXT: // Fast Forward
				// Make selector go forward one
				if (title_selector_position < 2)
				title_selector_position++;

				// Return key
				input_return = TTK_EV_CLICK;
				break;

				default: // No input or invalid input
				// Return no key
				input_return = TTK_EV_UNUSED;
				break;
			}

		// Refresh title screen
		title_image->dirty++;

		// Return raw click data
		return input_return;
	}

/* Show title function */
void title_func(TWidget *title_image, ttk_surface main_surface)
	{
		// Combine title image filename into path
		char tmptitleimage[105];
		sprintf(tmptitleimage, "game_data/Visuals/Title/%s", title_logo);

		// Load logo
		if((title_surface = ttk_load_image(tmptitleimage)) == NULL)
			{
				// Error message
				printf("File Error: Unable to open title image\n--------------\n%s\n--------------\n", tmptitleimage);
			}
		else
			{
				// Display title image on surface
				ttk_blit_image(title_surface, main_surface, 0, 0);

				// Load default title options
				ttk_text(main_surface, ttk_menufont, 10, main_scene->h - 32, ttk_makecol(BLACK), "Begin");
				ttk_text(main_surface, ttk_menufont, 68, main_scene->h - 32, ttk_makecol(BLACK), "Load");
				ttk_text(main_surface, ttk_menufont, 128, main_scene->h - 32, ttk_makecol(BLACK), "Exit!");

				// Draw selector
				ttk_rect(main_surface, title_xa, main_scene->h - 34, title_xb, main_scene->h - 15, ttk_makecol(0, 255, 0));

				// Determine which option to select
				switch (title_selector_position)
					{
						// New Game
						case 0:
						title_xa = 50;
						title_xb = 5;
						break;

						// Load Game
						case 1:
						title_xa = 108;
						title_xb = 63;
						break;

						// Quit Game
						case 2:
						title_xa = 168;
						title_xb = 123;
						break;
					}
			}
	}

/* Remove splash function */
void rmsplash_func()
	{
		// Remove the splash screen widget
		ttk_remove_widget(main_scene, splash_image);

		// Assign widget properties to title widget
		title_image = ttk_new_widget(main_scene->x, main_scene->y);

		// Add drawing & input properties to title_image & allow input
		title_image->focusable = 1;
		title_image->draw = title_func;
		title_image->down = titlein_func;

		// Add new title screen widget
		ttk_add_widget(main_scene, title_image);
	}

/* Splash input functionality */
int splashin_func(TWidget *splash_image, int input_type)
	{
		// Create default return mode
		int input_return;

		// Skip splash screen on the Action Button press
		if (input_type == TTK_BUTTON_ACTION)
			{
				// Remove splash screen and go to title
				rmsplash_func();

				// Return key
				input_return = TTK_EV_CLICK;
			}
		else
			{
				// Return no key
				input_return = TTK_EV_UNUSED;
			}

		// Return raw click data
		return input_return;
	}

/* Splash function */
void splash_func(TWidget *splash_image, ttk_surface main_surface)
	{
		// Add splash timer
		ttk_create_timer(2400, rmsplash_func);

		// Show splash image
		ttk_blit_image(splash_surface, main_surface, ((main_surface->w - splash_surface->w) / 2), ((main_surface->h - splash_surface->h) / 2));
	}

/* Load Default Fonts */
void load_fonts()
	{
		// Load fonts
		ttk_menufont = ttk_get_font ("Chicago", 12);
	}

/* Check for necessary files */
void check_files()
	{
		// iGamer Configuration
		if ((data_cfg = fopen("igamer.cfg", "r")) == NULL)
			{
				// Warning message
				printf("Warning: No configuration file is detected, Default settings will be used!\n");
			}
		else
			{
				// Add generation
				fscanf(data_cfg, "%s", &generation);

				// -- \\
				fclose(data_cfg);
			}

		// -------------------------------------------|Game|Data|-------------------------------------------- //

		// Game Configuration
    		if ((game_data = fopen("game_data/gdata.igame", "r")) == NULL)
			{
				// Error message
				printf ("Error: Unable to locate project data!\n");
			}
		else
			{
				// Add Gamename
				fscanf(game_data, "%s", game_name);

				// Add start map id and positions
				fscanf(game_data, "%s", &map_id);
				fscanf(game_data, "%d", &player_x);
				fscanf(game_data, "%d", &player_y);
				fscanf(game_data, "%d", &facing);
				fscanf(game_data, "%s", &char_a);
				fscanf(game_data, "%s", &logo);
				fscanf(game_data, "%s", &title_logo);
				fscanf(game_data, "%s", &wskin);

				// -- \\
				fclose(game_data);
			}
	}

/* Start Function */
int main(int argc, char **argv)
	{
		// Tell TTK Where to find the schemes
		#define SCHEMESDIR "/gamer/share/schemes/"

		// Show screen
		ttk_set_emulation(176, 132, 16);

		// Set initializing screen
		if ((main_scene = ttk_init()) == 0)
			{
				// Error message
				printf("Critical Error: Failed to initialize ttk\n");
				return 0;
			}

		// Change default title to loading
		ttk_window_title(main_scene, "iGamer - Loading...");

		// Load fonts
		load_fonts();

		// Check for files
		check_files();

		// Make fullscreen
		ttk_window_hide_header(main_scene);

		// Combine logo filename into path
		char tmplogo[105];
		sprintf(tmplogo, "game_data/Visuals/Logos/%s", logo);

		// Load logo
		if((splash_surface = ttk_load_image(tmplogo)) == NULL)
			{
				// Error message
				printf("File Error: Unable to open logo\n--------------\n%s\n--------------\n", tmplogo);
				return 0;
			}
		else
			{
				// Give splash image, image view properties
				splash_image = ttk_new_widget(main_scene->x, main_scene->y);

				// Assign draw & input properties to appropriate splash function and allow input
				splash_image->focusable = 1;
				splash_image->draw = splash_func;
				splash_image->down = splashin_func;

				// Add Widget to screen
				ttk_add_widget(main_scene, splash_image);
			}

		// Change title to game name
		ttk_window_title(main_scene, game_name);

		// Run
		ttk_run();

		// Remove follow elements from memory before ending application:
		// --> Windows
		ttk_free_window(main_scene);

		// --> Widgets
		ttk_free_widget(splash_image);
		ttk_free_widget(title_image);
		ttk_free_widget(map_screen);

		// --> Surfaces
		ttk_free_surface(main_surface);
		ttk_free_surface(splash_surface);
		ttk_free_surface(title_surface);
		ttk_free_surface(map_tiles);

		// Quit igamer
		ttk_quit();
	}