thirtyflightsofloving/ui/menu_game.c
Knightmare66 3ce18b138c Refactored spincontrol menu control with value lists, simplifying menu implementations.
Simplified loading and saving of cvars in slider menu control.
Enlarged text in Game, Multiplayer, and Options menus.
Fixed repeat of failed file causing HTTP downloads to restart.
Added cl_zoommode cvar to simplify Lazarus zoom command.
Changed zoom command to use new cl_zoommode cvar in default Lazarus and missionpack DLLs.
Removed unused "crossh" cvar in default Lazarus and missionpack DLLs.
Fixed Makron not having a classname when spawned from Jorg in default Lazarus and missionpack DLLs.
Made Tactician Gunner ignore small amounts of damage in missionpack DLL.
2021-09-04 02:18:06 -04:00

204 lines
6.5 KiB
C

/*
===========================================================================
Copyright (C) 1997-2001 Id Software, Inc.
This file is part of Quake 2 source code.
Quake 2 source code is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the License,
or (at your option) any later version.
Quake 2 source code is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Quake 2 source code; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
===========================================================================
*/
// menu_game.c -- the single player menu and credits
#include <ctype.h>
#ifdef _WIN32
#include <io.h>
#endif
#include "../client/client.h"
#include "ui_local.h"
/*
=============================================================================
GAME MENU
=============================================================================
*/
static int m_game_cursor;
static menuframework_s s_game_menu;
static menuaction_s s_easy_game_action;
static menuaction_s s_medium_game_action;
static menuaction_s s_hard_game_action;
static menuaction_s s_nitemare_game_action;
static menuaction_s s_load_game_action;
static menuaction_s s_save_game_action;
static menuaction_s s_credits_action;
static menuseparator_s s_blankline;
static menuaction_s s_game_back_action;
static void EasyGameFunc (void *data)
{
Cvar_ForceSet ("skill", "0");
UIStartSPGame ();
}
static void MediumGameFunc (void *data)
{
Cvar_ForceSet ("skill", "1");
UIStartSPGame ();
}
static void HardGameFunc (void *data)
{
Cvar_ForceSet ("skill", "2");
UIStartSPGame ();
}
static void NitemareGameFunc (void *data)
{
Cvar_ForceSet ("skill", "3");
UIStartSPGame ();
}
static void LoadGameFunc (void *unused)
{
Menu_LoadGame_f ();
}
static void SaveGameFunc (void *unused)
{
Menu_SaveGame_f ();
}
static void CreditsFunc (void *unused)
{
Menu_Credits_f ();
}
//=======================================================================
void Menu_Game_Init (void)
{
int x = 0, y = 0;
s_game_menu.x = SCREEN_WIDTH*0.5 - 3*MENU_LINE_SIZE;
s_game_menu.y = SCREEN_HEIGHT*0.5 - 5*MENU_LINE_SIZE; // 0
s_game_menu.nitems = 0;
s_easy_game_action.generic.type = MTYPE_ACTION;
s_easy_game_action.generic.textSize = MENU_HEADER_FONT_SIZE;
s_easy_game_action.generic.flags = QMF_LEFT_JUSTIFY;
s_easy_game_action.generic.x = x;
s_easy_game_action.generic.y = y; // 0
s_easy_game_action.generic.name = "Easy";
s_easy_game_action.generic.callback = EasyGameFunc;
s_medium_game_action.generic.type = MTYPE_ACTION;
s_medium_game_action.generic.textSize = MENU_HEADER_FONT_SIZE;
s_medium_game_action.generic.flags = QMF_LEFT_JUSTIFY;
s_medium_game_action.generic.x = x;
s_medium_game_action.generic.y = y += 1.5*MENU_LINE_SIZE;
s_medium_game_action.generic.name = "Medium";
s_medium_game_action.generic.callback = MediumGameFunc;
s_hard_game_action.generic.type = MTYPE_ACTION;
s_hard_game_action.generic.textSize = MENU_HEADER_FONT_SIZE;
s_hard_game_action.generic.flags = QMF_LEFT_JUSTIFY;
s_hard_game_action.generic.x = x;
s_hard_game_action.generic.y = y += 1.5*MENU_LINE_SIZE;
s_hard_game_action.generic.name = "Hard";
s_hard_game_action.generic.callback = HardGameFunc;
s_nitemare_game_action.generic.type = MTYPE_ACTION;
s_nitemare_game_action.generic.textSize = MENU_HEADER_FONT_SIZE;
s_nitemare_game_action.generic.flags = QMF_LEFT_JUSTIFY;
s_nitemare_game_action.generic.x = x;
s_nitemare_game_action.generic.y = y += 1.5*MENU_LINE_SIZE;
s_nitemare_game_action.generic.name = "Nightmare";
s_nitemare_game_action.generic.callback = NitemareGameFunc;
s_blankline.generic.type = MTYPE_SEPARATOR;
s_blankline.generic.textSize = MENU_FONT_SIZE;
s_load_game_action.generic.type = MTYPE_ACTION;
s_load_game_action.generic.textSize = MENU_HEADER_FONT_SIZE;
s_load_game_action.generic.flags = QMF_LEFT_JUSTIFY;
s_load_game_action.generic.x = x;
s_load_game_action.generic.y = y += 2*MENU_HEADER_LINE_SIZE; // 2*MENU_LINE_SIZE
s_load_game_action.generic.name = "Load Game";
s_load_game_action.generic.callback = LoadGameFunc;
s_save_game_action.generic.type = MTYPE_ACTION;
s_save_game_action.generic.textSize = MENU_HEADER_FONT_SIZE;
s_save_game_action.generic.flags = QMF_LEFT_JUSTIFY;
s_save_game_action.generic.x = x;
s_save_game_action.generic.y = y += 1.5*MENU_LINE_SIZE;
s_save_game_action.generic.name = "Save Game";
s_save_game_action.generic.callback = SaveGameFunc;
s_credits_action.generic.type = MTYPE_ACTION;
s_credits_action.generic.textSize = MENU_HEADER_FONT_SIZE;
s_credits_action.generic.flags = QMF_LEFT_JUSTIFY;
s_credits_action.generic.x = x;
s_credits_action.generic.y = y += 2*MENU_HEADER_LINE_SIZE; // 1.5*MENU_LINE_SIZE
s_credits_action.generic.name = "Credits";
s_credits_action.generic.callback = CreditsFunc;
s_game_back_action.generic.type = MTYPE_ACTION;
s_game_back_action.generic.textSize = MENU_HEADER_FONT_SIZE;
s_game_back_action.generic.flags = QMF_LEFT_JUSTIFY;
s_game_back_action.generic.x = x;
s_game_back_action.generic.y = y += 3*MENU_HEADER_LINE_SIZE; // 2*MENU_LINE_SIZE
s_game_back_action.generic.name = "Back to Main";
s_game_back_action.generic.callback = UI_BackMenu;
UI_AddMenuItem (&s_game_menu, (void *) &s_easy_game_action);
UI_AddMenuItem (&s_game_menu, (void *) &s_medium_game_action);
UI_AddMenuItem (&s_game_menu, (void *) &s_hard_game_action);
UI_AddMenuItem (&s_game_menu, (void *) &s_nitemare_game_action);
UI_AddMenuItem (&s_game_menu, (void *) &s_blankline);
UI_AddMenuItem (&s_game_menu, (void *) &s_load_game_action);
UI_AddMenuItem (&s_game_menu, (void *) &s_save_game_action);
UI_AddMenuItem (&s_game_menu, (void *) &s_blankline);
UI_AddMenuItem (&s_game_menu, (void *) &s_credits_action);
UI_AddMenuItem (&s_game_menu, (void *) &s_game_back_action);
// UI_CenterMenu (&s_game_menu);
}
void Menu_Game_Draw (void)
{
UI_DrawBanner ("m_banner_game");
UI_AdjustMenuCursor (&s_game_menu, 1);
UI_DrawMenu (&s_game_menu);
}
const char *Menu_Game_Key (int key)
{
return UI_DefaultMenuKey (&s_game_menu, key);
}
void Menu_Game_f (void)
{
Menu_Game_Init ();
UI_PushMenu (Menu_Game_Draw, Menu_Game_Key);
m_game_cursor = 1;
}