//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; } }
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;*/ } } }