/* =============== UI_MainMenu The main menu only comes up when not in a game, so make sure that the attract loop server is down and that local cinematics are killed =============== */ void UI_MainMenu( void ) { int y; qboolean teamArena = qfalse; int style = UI_CENTER | UI_DROPSHADOW | UI_SMALLFONT; int type; trap_Cvar_Set( "sv_killserver", "1" ); #if 0 if (0) { //( !uis.demoversion && !ui_cdkeychecked.integer ) { char key[17]; trap_GetCDKey( key, sizeof(key) ); if( trap_VerifyCDKey( key, NULL ) == qfalse ) { UI_CDKeyMenu(); return; } } #endif memset( &s_main, 0 ,sizeof(mainmenu_t) ); memset( &s_errorMessage, 0 ,sizeof(errorMessage_t) ); // com_errorMessage would need that too MainMenu_Cache(); trap_Cvar_VariableStringBuffer( "com_errorMessage", s_errorMessage.errorMessage, sizeof(s_errorMessage.errorMessage) ); if (strlen(s_errorMessage.errorMessage)) { s_errorMessage.menu.draw = Main_MenuDraw; s_errorMessage.menu.key = ErrorMessage_Key; s_errorMessage.menu.fullscreen = qtrue; s_errorMessage.menu.wrapAround = qtrue; s_errorMessage.menu.showlogo = qtrue; trap_Key_SetCatcher( KEYCATCH_UI ); uis.menusp = 0; UI_PushMenu ( &s_errorMessage.menu ); return; } s_main.menu.draw = Main_MenuDraw; s_main.menu.fullscreen = qtrue; s_main.menu.wrapAround = qtrue; s_main.menu.showlogo = qfalse; //qtrue; type = MTYPE_PTEXT; //MTYPE_TEXT; // MTYPE_PTEXT y = 134; s_main.singleplayer.generic.type = type; s_main.singleplayer.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; s_main.singleplayer.generic.x = 320; s_main.singleplayer.generic.y = y; s_main.singleplayer.generic.id = ID_SINGLEPLAYER; s_main.singleplayer.generic.callback = Main_MenuEvent; s_main.singleplayer.string = "SINGLE PLAYER"; s_main.singleplayer.color = color_red; s_main.singleplayer.style = style; //y += MAIN_MENU_VERTICAL_SPACING; s_main.multiplayer.generic.type = type; s_main.multiplayer.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; s_main.multiplayer.generic.x = 320; s_main.multiplayer.generic.y = y; s_main.multiplayer.generic.id = ID_MULTIPLAYER; s_main.multiplayer.generic.callback = Main_MenuEvent; s_main.multiplayer.string = "MULTIPLAYER"; s_main.multiplayer.color = color_red; s_main.multiplayer.style = style; y += MAIN_MENU_VERTICAL_SPACING; s_main.demos.generic.type = type; s_main.demos.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; s_main.demos.generic.x = 320; s_main.demos.generic.y = y; s_main.demos.generic.id = ID_DEMOS; s_main.demos.generic.callback = Main_MenuEvent; s_main.demos.string = "WOLFCAM-DEMOS"; s_main.demos.color = color_red; s_main.demos.style = style; #if 1 y += MAIN_MENU_VERTICAL_SPACING; s_main.qldemos.generic.type = type; s_main.qldemos.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; s_main.qldemos.generic.x = 320; s_main.qldemos.generic.y = y; s_main.qldemos.generic.id = ID_QLDEMOS; s_main.qldemos.generic.callback = Main_MenuEvent; s_main.qldemos.string = "QUAKELIVE-DEMOS"; s_main.qldemos.color = color_red; s_main.qldemos.style = style; #endif #if 0 y += MAIN_MENU_VERTICAL_SPACING; s_main.cinematics.generic.type = type; s_main.cinematics.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; s_main.cinematics.generic.x = 320; s_main.cinematics.generic.y = y; s_main.cinematics.generic.id = ID_CINEMATICS; s_main.cinematics.generic.callback = Main_MenuEvent; s_main.cinematics.string = "CINEMATICS"; s_main.cinematics.color = color_red; s_main.cinematics.style = style; #endif y += MAIN_MENU_VERTICAL_SPACING; s_main.setup.generic.type = type; s_main.setup.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; s_main.setup.generic.x = 320; s_main.setup.generic.y = y; s_main.setup.generic.id = ID_SETUP; s_main.setup.generic.callback = Main_MenuEvent; s_main.setup.string = "SETUP"; s_main.setup.color = color_red; s_main.setup.style = style; if ( !uis.demoversion && UI_TeamArenaExists() ) { teamArena = qtrue; //y += MAIN_MENU_VERTICAL_SPACING; s_main.teamArena.generic.type = type; s_main.teamArena.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; s_main.teamArena.generic.x = 320; s_main.teamArena.generic.y = y; s_main.teamArena.generic.id = ID_TEAMARENA; s_main.teamArena.generic.callback = Main_MenuEvent; s_main.teamArena.string = "TEAM ARENA"; s_main.teamArena.color = color_red; s_main.teamArena.style = style; } if ( !uis.demoversion ) { //y += MAIN_MENU_VERTICAL_SPACING; s_main.mods.generic.type = type; s_main.mods.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; s_main.mods.generic.x = 320; s_main.mods.generic.y = y; s_main.mods.generic.id = ID_MODS; s_main.mods.generic.callback = Main_MenuEvent; s_main.mods.string = "MODS"; s_main.mods.color = color_red; s_main.mods.style = style; } y += MAIN_MENU_VERTICAL_SPACING; s_main.openQuakeLiveDirectory.generic.type = type; s_main.openQuakeLiveDirectory.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; s_main.openQuakeLiveDirectory.generic.x = 320; s_main.openQuakeLiveDirectory.generic.y = y; s_main.openQuakeLiveDirectory.generic.id = ID_OPEN_QUAKE_LIVE_DIRECTORY; s_main.openQuakeLiveDirectory.generic.callback = Main_MenuEvent; s_main.openQuakeLiveDirectory.string = "OPEN QUAKE LIVE DIRECTORY"; s_main.openQuakeLiveDirectory.color = color_red; s_main.openQuakeLiveDirectory.style = style; y += MAIN_MENU_VERTICAL_SPACING; s_main.openWolfcamDirectory.generic.type = type; s_main.openWolfcamDirectory.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; s_main.openWolfcamDirectory.generic.x = 320; s_main.openWolfcamDirectory.generic.y = y; s_main.openWolfcamDirectory.generic.id = ID_OPEN_WOLFCAM_DIRECTORY; s_main.openWolfcamDirectory.generic.callback = Main_MenuEvent; s_main.openWolfcamDirectory.string = "OPEN WOLFCAM DIRECTORY"; s_main.openWolfcamDirectory.color = color_red; s_main.openWolfcamDirectory.style = style; y += MAIN_MENU_VERTICAL_SPACING; s_main.exit.generic.type = type; s_main.exit.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS; s_main.exit.generic.x = 320; s_main.exit.generic.y = y; s_main.exit.generic.id = ID_EXIT; s_main.exit.generic.callback = Main_MenuEvent; s_main.exit.string = "EXIT"; s_main.exit.color = color_red; s_main.exit.style = style; //Menu_AddItem( &s_main.menu, &s_main.singleplayer ); //Menu_AddItem( &s_main.menu, &s_main.multiplayer ); if (!uis.showErrorMenu) { Menu_AddItem( &s_main.menu, &s_main.demos ); Menu_AddItem(&s_main.menu, &s_main.qldemos); //Menu_AddItem( &s_main.menu, &s_main.cinematics ); if (teamArena) { //Menu_AddItem( &s_main.menu, &s_main.teamArena ); } if ( !uis.demoversion ) { //Menu_AddItem( &s_main.menu, &s_main.mods ); } Menu_AddItem( &s_main.menu, &s_main.setup ); } Menu_AddItem(&s_main.menu, &s_main.openQuakeLiveDirectory); Menu_AddItem(&s_main.menu, &s_main.openWolfcamDirectory); Menu_AddItem( &s_main.menu, &s_main.exit ); trap_Key_SetCatcher( KEYCATCH_UI ); uis.menusp = 0; UI_PushMenu ( &s_main.menu ); }
/* =============== UI_CDKeyMenu_Init =============== */ static void UI_CDKeyMenu_Init(void) { trap_Cvar_Set("ui_cdkeychecked", "1"); UI_CDKeyMenu_Cache(); memset(&cdkeyMenuInfo, 0, sizeof (cdkeyMenuInfo)); cdkeyMenuInfo.menu.wrapAround = qtrue; cdkeyMenuInfo.menu.fullscreen = qtrue; cdkeyMenuInfo.banner.generic.type = MTYPE_BTEXT; cdkeyMenuInfo.banner.generic.x = 320; cdkeyMenuInfo.banner.generic.y = 16; cdkeyMenuInfo.banner.string = "CD KEY"; cdkeyMenuInfo.banner.color = color_white; cdkeyMenuInfo.banner.style = UI_CENTER; cdkeyMenuInfo.frame.generic.type = MTYPE_BITMAP; cdkeyMenuInfo.frame.generic.name = ART_FRAME; cdkeyMenuInfo.frame.generic.flags = QMF_INACTIVE; cdkeyMenuInfo.frame.generic.x = 142; cdkeyMenuInfo.frame.generic.y = 118; cdkeyMenuInfo.frame.width = 359; cdkeyMenuInfo.frame.height = 256; cdkeyMenuInfo.cdkey.generic.type = MTYPE_FIELD; cdkeyMenuInfo.cdkey.generic.name = "CD Key:"; cdkeyMenuInfo.cdkey.generic.flags = QMF_LOWERCASE; cdkeyMenuInfo.cdkey.generic.x = 320 - BIGCHAR_WIDTH * 2.5; cdkeyMenuInfo.cdkey.generic.y = 240 - BIGCHAR_HEIGHT / 2; cdkeyMenuInfo.cdkey.field.widthInChars = 16; cdkeyMenuInfo.cdkey.field.maxchars = 16; cdkeyMenuInfo.cdkey.generic.ownerdraw = UI_CDKeyMenu_DrawKey; cdkeyMenuInfo.accept.generic.type = MTYPE_BITMAP; cdkeyMenuInfo.accept.generic.name = ART_ACCEPT0; cdkeyMenuInfo.accept.generic.flags = QMF_RIGHT_JUSTIFY | QMF_PULSEIFFOCUS; cdkeyMenuInfo.accept.generic.id = ID_ACCEPT; cdkeyMenuInfo.accept.generic.callback = UI_CDKeyMenu_Event; cdkeyMenuInfo.accept.generic.x = 640; cdkeyMenuInfo.accept.generic.y = 480 - 64; cdkeyMenuInfo.accept.width = 128; cdkeyMenuInfo.accept.height = 64; cdkeyMenuInfo.accept.focuspic = ART_ACCEPT1; cdkeyMenuInfo.back.generic.type = MTYPE_BITMAP; cdkeyMenuInfo.back.generic.name = ART_BACK0; cdkeyMenuInfo.back.generic.flags = QMF_LEFT_JUSTIFY | QMF_PULSEIFFOCUS; cdkeyMenuInfo.back.generic.id = ID_BACK; cdkeyMenuInfo.back.generic.callback = UI_CDKeyMenu_Event; cdkeyMenuInfo.back.generic.x = 0; cdkeyMenuInfo.back.generic.y = 480 - 64; cdkeyMenuInfo.back.width = 128; cdkeyMenuInfo.back.height = 64; cdkeyMenuInfo.back.focuspic = ART_BACK1; Menu_AddItem(&cdkeyMenuInfo.menu, &cdkeyMenuInfo.banner); Menu_AddItem(&cdkeyMenuInfo.menu, &cdkeyMenuInfo.frame); Menu_AddItem(&cdkeyMenuInfo.menu, &cdkeyMenuInfo.cdkey); Menu_AddItem(&cdkeyMenuInfo.menu, &cdkeyMenuInfo.accept); if (uis.menusp) { Menu_AddItem(&cdkeyMenuInfo.menu, &cdkeyMenuInfo.back); } trap_GetCDKey(cdkeyMenuInfo.cdkey.field.buffer, cdkeyMenuInfo.cdkey.field.maxchars + 1); if (trap_VerifyCDKey(cdkeyMenuInfo.cdkey.field.buffer, NULL) == qfalse) { cdkeyMenuInfo.cdkey.field.buffer[0] = 0; } }
/* =============== UI_MainMenu The main menu only comes up when not in a game, so make sure that the attract loop server is down and that local cinematics are killed =============== */ void UI_MainMenu( void ) { int y; qboolean teamArena = qfalse; int style = UI_LEFT | UI_CURSORSHADOW; trap_Cvar_Set( "sv_killserver", "1" ); if( !uis.demoversion && !ui_cdkeychecked.integer ) { char key[17]; trap_GetCDKey( key, sizeof(key) ); if( trap_VerifyCDKey( key, NULL ) == qfalse ) { UI_CDKeyMenu(); return; } } memset( &s_main, 0 ,sizeof(mainmenu_t) ); MainMenu_Cache(); s_main.menu.draw = Main_MenuDraw; s_main.menu.fullscreen = qtrue; s_main.menu.wrapAround = qtrue; s_main.backleft.generic.type = MTYPE_BITMAP; s_main.backleft.generic.name = MAIN_BACKGROUND_LEFT; s_main.backleft.generic.flags = QMF_INACTIVE; s_main.backleft.generic.x = 0; s_main.backleft.generic.y = 120; s_main.backleft.width = 320; s_main.backleft.height = 360; s_main.backright.generic.type = MTYPE_BITMAP; s_main.backright.generic.name = MAIN_BACKGROUND_RIGHT; s_main.backright.generic.flags = QMF_INACTIVE; s_main.backright.generic.x = 320; s_main.backright.generic.y = 120; s_main.backright.width = 320; s_main.backright.height = 360; y = 160; s_main.joingame.generic.type = MTYPE_PTEXT; s_main.joingame.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; s_main.joingame.generic.x = 20; s_main.joingame.generic.y = y; s_main.joingame.generic.id = ID_JOINGAME; s_main.joingame.generic.callback = Main_MenuEvent; s_main.joingame.string = "JOIN GAME"; s_main.joingame.color = color_orange; s_main.joingame.style = style; y += MAIN_MENU_VERTICAL_SPACING; s_main.startserver.generic.type = MTYPE_PTEXT; s_main.startserver.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; s_main.startserver.generic.x = 20; s_main.startserver.generic.y = y; s_main.startserver.generic.id = ID_STARTSERVER; s_main.startserver.generic.callback = Main_MenuEvent; s_main.startserver.string = "START SERVER"; s_main.startserver.color = color_orange; s_main.startserver.style = style; y += MAIN_MENU_VERTICAL_SPACING; s_main.setup.generic.type = MTYPE_PTEXT; s_main.setup.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; s_main.setup.generic.x = 20; s_main.setup.generic.y = y; s_main.setup.generic.id = ID_SETUP; s_main.setup.generic.callback = Main_MenuEvent; s_main.setup.string = "SETUP"; s_main.setup.color = color_orange; s_main.setup.style = style; y += MAIN_MENU_VERTICAL_SPACING; s_main.demos.generic.type = MTYPE_PTEXT; s_main.demos.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; s_main.demos.generic.x = 20; s_main.demos.generic.y = y; s_main.demos.generic.id = ID_DEMOS; s_main.demos.generic.callback = Main_MenuEvent; s_main.demos.string = "DEMOS"; s_main.demos.color = color_orange; s_main.demos.style = style; y += MAIN_MENU_VERTICAL_SPACING; s_main.mods.generic.type = MTYPE_PTEXT; s_main.mods.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; s_main.mods.generic.x = 20; s_main.mods.generic.y = y; s_main.mods.generic.id = ID_MODS; s_main.mods.generic.callback = Main_MenuEvent; s_main.mods.string = "MODS"; s_main.mods.color = color_orange; s_main.mods.style = style; y += MAIN_MENU_VERTICAL_SPACING; s_main.exit.generic.type = MTYPE_PTEXT; s_main.exit.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; s_main.exit.generic.x = 20; s_main.exit.generic.y = y; s_main.exit.generic.id = ID_EXIT; s_main.exit.generic.callback = Main_MenuEvent; s_main.exit.string = "EXIT"; s_main.exit.color = color_orange; s_main.exit.style = style; Menu_AddItem( &s_main.menu, &s_main.backleft ); Menu_AddItem( &s_main.menu, &s_main.backright ); Menu_AddItem( &s_main.menu, &s_main.joingame ); Menu_AddItem( &s_main.menu, &s_main.startserver ); Menu_AddItem( &s_main.menu, &s_main.setup ); Menu_AddItem( &s_main.menu, &s_main.demos ); Menu_AddItem( &s_main.menu, &s_main.mods ); Menu_AddItem( &s_main.menu, &s_main.exit ); uis.addToFavorites = qfalse; trap_Key_SetCatcher( KEYCATCH_UI ); uis.menusp = 0; UI_PushMenu ( &s_main.menu ); }