void StartServer_MenuInit (void) { static const char *dm_coop_names[] = { "deathmatch", "cooperative", 0 }; char *buffer; char *s; int length; int i; float y; // initialize list of maps once, reuse it afterwards (=> it isn't freed) if (mapnames == NULL) { // load the list of map names if ((length = FS_LoadFile("maps.lst", (void **)&buffer)) == -1) Com_Error (ERR_DROP, "couldn't find maps.lst\n"); s = buffer; i = 0; while (i < length) { if (s[i] == '\r') nummaps++; i++; } if (nummaps == 0) Com_Error (ERR_DROP, "no maps in maps.lst\n"); mapnames = malloc (sizeof (char *) * (nummaps + 1)); memset (mapnames, 0, sizeof (char *) * (nummaps + 1)); s = buffer; for (i = 0; i < nummaps; i++) { char shortname[MAX_TOKEN_CHARS]; char longname[MAX_TOKEN_CHARS]; char scratch[200]; int j, l; strcpy (shortname, COM_Parse (&s)); l = strlen (shortname); for (j = 0; j < l; j++) shortname[j] = toupper (shortname[j]); strcpy (longname, COM_Parse (&s)); Com_sprintf (scratch, sizeof (scratch), "%s\n%s", longname, shortname); mapnames[i] = malloc (strlen (scratch) + 1); strcpy (mapnames[i], scratch); } // levelshot found table if (levelshotvalid) free(levelshotvalid); levelshotvalid = malloc(sizeof(byte) * (nummaps + 1)); memset(levelshotvalid, 0, sizeof(byte) * (nummaps + 1)); // register null levelshot if (levelshotvalid[nummaps] == M_UNSET) { if (RE_Draw_RegisterPic("levelshots/unknownmap.png")) levelshotvalid[nummaps] = M_FOUND; else levelshotvalid[nummaps] = M_MISSING; } mapnames[nummaps] = 0; FS_FreeFile (buffer); } // initialize the menu stuff memset(&s_startserver_menu, 0, sizeof(s_startserver_menu)); s_startserver_menu.x = (int)(SCREEN_WIDTH * 0.50f) - 140; s_startserver_menu.nitems = 0; y = 0; s_startmap_list.generic.type = MTYPE_SPINCONTROL; s_startmap_list.generic.x = 0; s_startmap_list.generic.y = y; s_startmap_list.generic.name = "initial map"; s_startmap_list.itemnames = (const char **)mapnames; y += 2 * MENU_LINE_SIZE; s_rules_box.generic.type = MTYPE_SPINCONTROL; s_rules_box.generic.x = 0; s_rules_box.generic.y = y; s_rules_box.generic.name = "rules"; s_rules_box.itemnames = dm_coop_names; if (Cvar_VariableValue ("coop")) s_rules_box.curvalue = 1; else s_rules_box.curvalue = 0; s_rules_box.generic.callback = RulesChangeFunc; y += 2 * MENU_LINE_SIZE; s_timelimit_field.generic.type = MTYPE_FIELD; s_timelimit_field.generic.name = "time limit"; s_timelimit_field.generic.flags = QMF_NUMBERSONLY; s_timelimit_field.generic.x = 0; s_timelimit_field.generic.y = y; s_timelimit_field.generic.statusbar = "0 = no limit"; s_timelimit_field.length = 4; s_timelimit_field.visible_length = 4; strcpy (s_timelimit_field.buffer, Cvar_VariableString ("timelimit")); s_timelimit_field.cursor = strlen(s_timelimit_field.buffer); y += 2 * MENU_LINE_SIZE; s_fraglimit_field.generic.type = MTYPE_FIELD; s_fraglimit_field.generic.name = "frag limit"; s_fraglimit_field.generic.flags = QMF_NUMBERSONLY; s_fraglimit_field.generic.x = 0; s_fraglimit_field.generic.y = y; s_fraglimit_field.generic.statusbar = "0 = no limit"; s_fraglimit_field.length = 4; s_fraglimit_field.visible_length = 4; strcpy (s_fraglimit_field.buffer, Cvar_VariableString ("fraglimit")); s_fraglimit_field.cursor = strlen(s_fraglimit_field.buffer); // maxclients determines the maximum number of players that can join // the game. If maxclients is only "1" then we should default the menu // option to 8 players, otherwise use whatever its current value is. // Clamping will be done when the server is actually started. y += 2 * MENU_LINE_SIZE; s_maxclients_field.generic.type = MTYPE_FIELD; s_maxclients_field.generic.name = "max players"; s_maxclients_field.generic.flags = QMF_NUMBERSONLY; s_maxclients_field.generic.x = 0; s_maxclients_field.generic.y = y; s_maxclients_field.generic.statusbar = NULL; s_maxclients_field.length = 3; s_maxclients_field.visible_length = 3; if (Cvar_VariableValue ("maxclients") == 1) strcpy (s_maxclients_field.buffer, "8"); else strcpy (s_maxclients_field.buffer, Cvar_VariableString ("maxclients")); s_maxclients_field.cursor = strlen(s_maxclients_field.buffer); y += 2 * MENU_LINE_SIZE; s_hostname_field.generic.type = MTYPE_FIELD; s_hostname_field.generic.name = "hostname"; s_hostname_field.generic.x = 0; s_hostname_field.generic.y = y; s_hostname_field.generic.statusbar = NULL; s_hostname_field.length = 12; s_hostname_field.visible_length = 12; strcpy (s_hostname_field.buffer, Cvar_VariableString ("hostname")); s_hostname_field.cursor = strlen(s_hostname_field.buffer); y += 2 * MENU_LINE_SIZE; s_startserver_dmoptions_action.generic.type = MTYPE_ACTION; s_startserver_dmoptions_action.generic.name = S_COLOR_BLUE " deathmatch flags"; s_startserver_dmoptions_action.generic.flags = QMF_LEFT_JUSTIFY; s_startserver_dmoptions_action.generic.x = 0; s_startserver_dmoptions_action.generic.y = y; s_startserver_dmoptions_action.generic.statusbar = NULL; s_startserver_dmoptions_action.generic.callback = DMOptionsFunc; y += 3 * MENU_LINE_SIZE; s_startserver_start_action.generic.type = MTYPE_ACTION; s_startserver_start_action.generic.name = S_COLOR_BLUE " begin"; s_startserver_start_action.generic.flags = QMF_LEFT_JUSTIFY; s_startserver_start_action.generic.x = 0; s_startserver_start_action.generic.y = y; s_startserver_start_action.generic.callback = StartServerActionFunc; s_startserver_menu.draw = StartServer_MenuDraw; s_startserver_menu.key = NULL; Menu_AddItem (&s_startserver_menu, &s_startmap_list); Menu_AddItem (&s_startserver_menu, &s_rules_box); Menu_AddItem (&s_startserver_menu, &s_timelimit_field); Menu_AddItem (&s_startserver_menu, &s_fraglimit_field); Menu_AddItem (&s_startserver_menu, &s_maxclients_field); Menu_AddItem (&s_startserver_menu, &s_hostname_field); Menu_AddItem (&s_startserver_menu, &s_startserver_dmoptions_action); Menu_AddItem (&s_startserver_menu, &s_startserver_start_action); Menu_Center (&s_startserver_menu); // call this now to set proper inital state RulesChangeFunc (NULL); }
void StartServer_MenuInit( void ) { static const char *dm_coop_names[] = { "deathmatch", "cooperative", 0 }; //======= //PGM static const char *dm_coop_names_rogue[] = { "deathmatch", "cooperative", "tag", // "deathball", 0 }; int x = 0, y = 0; memset(&s_startserver_menu, 0, sizeof(s_startserver_menu)); // initialize the menu stuff //s_startserver_menu.x = viddef.width * 0.50; s_startserver_menu.x = 0; s_startserver_menu.y = 0; s_startserver_menu.nitems = 0; /*s_startmap_list.generic.type = MTYPE_SPINCONTROL; s_startmap_list.generic.x = 0; s_startmap_list.generic.y = 0; s_startmap_list.generic.name = "initial map"; s_startmap_list.itemnames = (const char **)mapnames;*/ maplist.generic.type = MTYPE_LIST; maplist.generic.flags = QMF_LEFT_JUSTIFY; maplist.generic.name = NULL; maplist.generic.callback = NULL; maplist.generic.x = 20; maplist.generic.y = 30; //maplist.width = viddef.width - 40; maplist.width = (viddef.width - 40) / 2; maplist.height = viddef.height - 110; MenuList_Init(&maplist); x = maplist.width + 20 + ((viddef.width - maplist.width - 20)/ 2); y = 30; Build_MapList(); s_rules_box.generic.type = MTYPE_SPINCONTROL; s_rules_box.generic.flags = QMF_LEFT_JUSTIFY; s_rules_box.generic.cursor_offset = 24; s_rules_box.generic.x = x; s_rules_box.generic.y = y+20; s_rules_box.generic.name = "rules"; //PGM - rogue games only available with rogue DLL. if(Developer_searchpath() == 2) s_rules_box.itemnames = dm_coop_names_rogue; else s_rules_box.itemnames = dm_coop_names; //PGM if (Cvar_VariableIntValue("coop")) s_rules_box.curvalue = 1; else s_rules_box.curvalue = 0; s_rules_box.generic.callback = RulesChangeFunc; s_timelimit_field.generic.type = MTYPE_FIELD; s_timelimit_field.generic.name = "time limit"; s_timelimit_field.generic.flags = QMF_NUMBERSONLY; s_timelimit_field.generic.x = x; s_timelimit_field.generic.y = y+36; s_timelimit_field.generic.statusbar = "0 = no limit"; s_timelimit_field.length = 3; s_timelimit_field.visible_length = 3; strcpy( s_timelimit_field.buffer, Cvar_VariableString("timelimit") ); s_fraglimit_field.generic.type = MTYPE_FIELD; s_fraglimit_field.generic.name = "frag limit"; s_fraglimit_field.generic.flags = QMF_NUMBERSONLY; s_fraglimit_field.generic.x = x; s_fraglimit_field.generic.y = y+54; s_fraglimit_field.generic.statusbar = "0 = no limit"; s_fraglimit_field.length = 3; s_fraglimit_field.visible_length = 3; strcpy( s_fraglimit_field.buffer, Cvar_VariableString("fraglimit") ); /* ** maxclients determines the maximum number of players that can join ** the game. If maxclients is only "1" then we should default the menu ** option to 8 players, otherwise use whatever its current value is. ** Clamping will be done when the server is actually started. */ s_maxclients_field.generic.type = MTYPE_FIELD; s_maxclients_field.generic.name = "max players"; s_maxclients_field.generic.flags = QMF_NUMBERSONLY; s_maxclients_field.generic.x = x; s_maxclients_field.generic.y = y+72; s_maxclients_field.generic.statusbar = NULL; s_maxclients_field.length = 3; s_maxclients_field.visible_length = 3; if (Cvar_VariableIntValue( "maxclients" ) == 1) strcpy( s_maxclients_field.buffer, "8" ); else strcpy( s_maxclients_field.buffer, Cvar_VariableString("maxclients") ); s_hostname_field.generic.type = MTYPE_FIELD; s_hostname_field.generic.name = "hostname"; s_hostname_field.generic.flags = 0; s_hostname_field.generic.x = x; s_hostname_field.generic.y = y+90; s_hostname_field.generic.statusbar = NULL; s_hostname_field.length = 12; s_hostname_field.visible_length = 12; strcpy( s_hostname_field.buffer, Cvar_VariableString("hostname") ); s_startserver_dmoptions_action.generic.type = MTYPE_ACTION; s_startserver_dmoptions_action.generic.name = " deathmatch flags"; s_startserver_dmoptions_action.generic.flags= QMF_LEFT_JUSTIFY; s_startserver_dmoptions_action.generic.x = x+24; s_startserver_dmoptions_action.generic.y = y+108; s_startserver_dmoptions_action.generic.statusbar = NULL; s_startserver_dmoptions_action.generic.callback = DMOptionsFunc; s_startserver_start_action.generic.type = MTYPE_ACTION; s_startserver_start_action.generic.name = " begin"; s_startserver_start_action.generic.flags= QMF_LEFT_JUSTIFY; s_startserver_start_action.generic.x = x+24; s_startserver_start_action.generic.y = y+128; s_startserver_start_action.generic.callback = StartServerActionFunc; s_startserver_menu.draw = NULL; s_startserver_menu.key = StartServer_MenuKey; // Menu_AddItem( &s_startserver_menu, &s_startmap_list ); Menu_AddItem( &s_startserver_menu, &maplist ); Menu_AddItem( &s_startserver_menu, &s_rules_box ); Menu_AddItem( &s_startserver_menu, &s_timelimit_field ); Menu_AddItem( &s_startserver_menu, &s_fraglimit_field ); Menu_AddItem( &s_startserver_menu, &s_maxclients_field ); Menu_AddItem( &s_startserver_menu, &s_hostname_field ); Menu_AddItem( &s_startserver_menu, &s_startserver_dmoptions_action ); Menu_AddItem( &s_startserver_menu, &s_startserver_start_action ); //Menu_Center( &s_startserver_menu ); // call this now to set proper inital state RulesChangeFunc ( NULL ); }