Exemplo n.º 1
0
//returns flag, true means quit menu
void do_option ( int select) 
{
	switch (select) {
		case MENU_NEW_GAME:
			do_new_game_menu();
			break;
		case MENU_GAME:
			break;
		case MENU_DEMO_PLAY:
			{ 
				char demo_file[16];
				if (newmenu_get_filename( TXT_SELECT_DEMO, "*.dem", demo_file, 1 ))	{
					newdemo_start_playback(demo_file);
				}
			}
			break;
		case MENU_LOAD_GAME:
#ifdef SHAREWARE
			do_load_game_menu();
#else
			state_restore_all(0);	
#endif
			break;
		#ifdef EDITOR
		case MENU_EDITOR:
			Function_mode = FMODE_EDITOR;
			init_cockpit();
			break;
		#endif
		case MENU_VIEW_SCORES:
			gr_palette_fade_out( gr_palette,32,0 );
			scores_view(-1);
			break;
		#ifdef SHAREWARE
		case MENU_ORDER_INFO:
			show_order_form();
			break;
		#endif
		case MENU_QUIT:
			#ifdef EDITOR
			if (! SafetyCheck()) break;
			#endif
			gr_palette_fade_out( gr_palette,32,0);
			Function_mode = FMODE_EXIT;
			break;
		case MENU_NEW_PLAYER:
			RegisterPlayer();		//1 == allow escape out of menu
			break;

		case MENU_HELP:
			do_show_help();
			break;

                #ifndef RELEASE

		case MENU_PLAY_SONG:	{
				int i;
				char * m[MAX_SONGS];

				for (i=0;i<MAX_SONGS;i++) {
					m[i] = Songs[i].filename;
				}
				i = newmenu_listbox( "Select Song", MAX_SONGS, m, 1, NULL );

				if ( i > -1 )	{
					songs_play_song( i, 0 );
				}
			}
			break;
		case MENU_LOAD_LEVEL: {
			newmenu_item m;
			char text[10]="";
			int new_level_num;

			m.type=NM_TYPE_INPUT; m.text_len = 10; m.text = text;

			newmenu_do( NULL, "Enter level to load", 1, &m, NULL );

			new_level_num = atoi(m.text);

			if (new_level_num!=0 && new_level_num>=Last_secret_level && new_level_num<=Last_level)	{
				gr_palette_fade_out( gr_palette, 32, 0 );
				StartNewGame(new_level_num);
			}

			break;
		}
                #endif


		case MENU_START_NETGAME:
#ifdef NETWORK
//temp!
#ifndef SHAREWARE
			load_mission(0);
#endif
                        read_player_file();
			network_start_game();
#endif
			break;
		case MENU_JOIN_NETGAME:
//temp!
#ifdef NETWORK
#ifndef SHAREWARE
			load_mission(0);
#endif
                        read_player_file();
			network_join_game();
#endif
			break;
#ifdef NETWORK
		case MENU_IPX_MULTIPLAYER:
			do_ipx_multi_player_menu();
			break;
		case MENU_KALI_MULTIPLAYER:
			do_kali_multi_player_menu();
			break;
#ifdef SUPPORTS_NET_IP
		case MENU_IP_MULTIPLAYER:
			do_ip_multi_player_menu();
			break;
		case MENU_IP_SERV_CONNECT:
			do_ip_serv_connect_menu();
			break;
		case MENU_MANUAL_IP_JOIN:
			do_ip_manual_join_menu();
			break;
#endif
		case MENU_START_SERIAL:
			com_main_menu();
			break;
		case MENU_MULTIPLAYER:
			do_multi_player_menu();
			break;
#endif //NETWORK
		case MENU_CONFIG:
			do_options_menu();
			break;
		case MENU_SHOW_CREDITS:
			gr_palette_fade_out( gr_palette,32,0);
			credits_show();	
			break;
		default:
			Error("Unknown option %d in do_option",select);
			break;
        }

}
Exemplo n.º 2
0
int network_listen(void *v) {
	struct network_client *nc = v;
	TCPsocket sock = nc->s;
	struct network *n = nc->n;
	uint8_t command;
	while (1) {
		if (SDLNet_TCP_Recv(sock,&command,1) < 1) {
			network_leave(n, nc);
			return 1;
		}
		switch (command) {
			case 1:;//login
				char *pass = network_read_string_1(sock);
				if (!pass)
					break;
				if (!strcmp(pass,"926452")) {
					nc->in = 1;
					SDLNet_TCP_Send(sock,"\1\0",2);
				} else {
					SDLNet_TCP_Send(sock,"\1\1",2);
				}
				free(pass);
				break;
			case 2:;//Create a game 
				char *name = network_read_string_1(sock);
				if (!name) {
					break;
				}
				if (!nc->in) {
					SDLNet_TCP_Send(sock,"\2\1",2);
					break;
				}
				FILE *f = fopen(name, "r");
				free(name);
				if (!f) {
					SDLNet_TCP_Send(sock,"\2\2",2);
					break;
				}
				struct game *g = network_create_game(n, f);
				fclose(f);
				if (!g) {
					SDLNet_TCP_Send(sock,"\2\3",2);
					break;
				}
				SDLNet_TCP_Send(sock,"\2\0",2);
				break;
			case 3://Start the game (must be creator)
				if (!nc->in) {
					SDLNet_TCP_Send(sock,"\3\3",2);
					break;
				}
				if (!nc->g) {
					SDLNet_TCP_Send(sock,"\3\1",2);
					break;
				}
				if (nc->g->timer) {
					SDLNet_TCP_Send(sock,"\3\2",2);
					break;
				}
				network_start_game(nc->g);
				SDLNet_TCP_Send(sock,"\3\0",2);
				break;
			case 4:;//Join a game
				uint32_t ident;
				SDLNet_TCP_Recv(sock,&ident,4);
				ident = ntohl(ident);
				if (network_join_game(n,nc,ident)) {
					SDLNet_TCP_Send(sock,"\4\1",2);
					break;
				}
				SDLNet_TCP_Send(sock,"\4\0",2);
				break;
			case 5://list game, [client]
				break;
			case 6://now playing, [client]
				break;
			case 7://game over, [client]
				break;
			case 8://data, [client]
				break;
			case 9:;//Action. See player.data for possible transmitted data
				uint8_t dir;
				SDLNet_TCP_Recv(sock, &dir, 1);
				if (nc->p) {
					nc->p->data = (nc->p->data & ~0xf) | (dir & 0xf);
				}
				break;
			case 10://map list, [client]
				break;
			case 11://Player died
				break;
			/*case 9://move right
				printf("Right\n");
				if (nc->p) {
					//cpBodySetVel(&nc->p->body,cpv(40, 0));
					nc->p->data |= 0x2;
				}
				break;
			case 10://move left
				printf("Left\n");
				if (nc->p) {
					//cpBodySetVel(&nc->p->body,cpv(-40, 0));
					nc->p->data |= 0x1;
				}
				break;
			case 11://stop
				printf("Stop\n");
				if (nc->p) {
					cpBodySetVel(&nc->p->body, cpv(0, 0));
					nc->p->data |= 0x3;
				}
				break;*/
		}
	}
}