mirror of
https://github.com/UberGames/RPG-X2.git
synced 2024-11-21 20:11:21 +00:00
494 lines
13 KiB
C
494 lines
13 KiB
C
// Copyright (C) 1999-2000 Id Software, Inc.
|
|
//
|
|
/*
|
|
=======================================================================
|
|
|
|
CD KEY MENU
|
|
|
|
=======================================================================
|
|
*/
|
|
|
|
|
|
#include "ui_local.h"
|
|
|
|
#define ID_CDKEY 10
|
|
#define ID_ACCEPT 11
|
|
#define ID_ACCEPTLATER 12
|
|
|
|
|
|
typedef struct {
|
|
menuframework_s menu;
|
|
|
|
menufield_s cdkey;
|
|
|
|
menubitmap_s accept;
|
|
menubitmap_s acceptlater;
|
|
int keyResult;
|
|
|
|
qhandle_t halfround;
|
|
int fromMenu;
|
|
} cdkeyMenuInfo_t;
|
|
|
|
static cdkeyMenuInfo_t cdkeyMenuInfo;
|
|
|
|
/*
|
|
=================
|
|
UI_CDKeyMenu_PreValidateKey
|
|
=================
|
|
*/
|
|
static int UI_CDKeyMenu_PreValidateKey( const char *key )
|
|
{
|
|
int cnt, i;
|
|
|
|
// With dashes can't be more than 21 long
|
|
if( strlen( key ) > 22 )
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
cnt = 0;
|
|
for(i = 0; i < strlen( key ) && key[i]; i++)
|
|
{
|
|
if ( ( key[i] >= '0' && key[i] <= '9' )
|
|
|| ( key[i] >= 'a' && key[i] <= 'z' )
|
|
|| ( key[i] >= 'A' && key[i] <= 'Z' )
|
|
)
|
|
{
|
|
cnt++;
|
|
}
|
|
}
|
|
|
|
// Count without dashes (Should be 18 but 0's at the end weren't printed on the documentation so we're allowing 16 and adding the 0's in the keycheck)
|
|
if ((cnt < 16) || (cnt > 18))
|
|
// if (cnt != 18)
|
|
{
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*
|
|
===============
|
|
UI_CDKeyMenu_Event
|
|
===============
|
|
*/
|
|
static void UI_CDKeyMenu_Event( void *ptr, int event )
|
|
{
|
|
if( event != QM_ACTIVATED )
|
|
{
|
|
return;
|
|
}
|
|
|
|
switch( ((menucommon_s*)ptr)->id )
|
|
{
|
|
case ID_ACCEPT:
|
|
|
|
cdkeyMenuInfo.keyResult = UI_CDKeyMenu_PreValidateKey( cdkeyMenuInfo.cdkey.field.buffer);
|
|
|
|
if (cdkeyMenuInfo.keyResult == 0)
|
|
{//passed quick check, now check for real
|
|
if(trap_SetCDKey( cdkeyMenuInfo.cdkey.field.buffer ))
|
|
{//success
|
|
trap_Cvar_Set( "ui_cdkeychecked", "1" );
|
|
if (cdkeyMenuInfo.fromMenu)
|
|
{
|
|
UI_PopMenu();
|
|
}
|
|
}
|
|
else
|
|
{//failed real check
|
|
cdkeyMenuInfo.keyResult = -1;
|
|
trap_S_StartLocalSound( menu_buzz_sound, CHAN_MENU1); // WRONG!!!! sound
|
|
}
|
|
}
|
|
else if (cdkeyMenuInfo.keyResult < 0)
|
|
{//failed ui quick check
|
|
trap_S_StartLocalSound( menu_buzz_sound, CHAN_MENU1); // WRONG!!!! sound
|
|
}
|
|
break;
|
|
|
|
case ID_ACCEPTLATER:
|
|
if (cdkeyMenuInfo.keyResult != 0) { //not valid or not entered
|
|
trap_Cvar_Set( "ui_cdkeychecked", "-1" );
|
|
}
|
|
UI_PopMenu();
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
=================
|
|
UI_CDKeyMenu_DrawKey
|
|
=================
|
|
*/
|
|
static void UI_CDKeyMenu_DrawKey( void *self )
|
|
{
|
|
menufield_s *f;
|
|
qboolean focus;
|
|
int style;
|
|
char c;
|
|
float *color;
|
|
int x, y;
|
|
|
|
f = (menufield_s *)self;
|
|
|
|
focus = (f->generic.parent->cursor == f->generic.menuPosition);
|
|
|
|
style = UI_LEFT;
|
|
if( focus )
|
|
{
|
|
color = colorTable[CT_LTGOLD1];
|
|
}
|
|
else
|
|
{
|
|
color = colorTable[CT_DKGOLD1];
|
|
}
|
|
|
|
x = cdkeyMenuInfo.cdkey.generic.x;
|
|
y = cdkeyMenuInfo.cdkey.generic.y;
|
|
|
|
UI_FillRect( x, y, cdkeyMenuInfo.cdkey.field.widthInChars * SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, colorTable[CT_BLACK] );
|
|
UI_FillRect( x, y, cdkeyMenuInfo.cdkey.field.widthInChars * SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, listbar_color );
|
|
UI_DrawString( x, y, f->field.buffer, style, color, qtrue );
|
|
|
|
// draw cursor if we have focus
|
|
if( focus )
|
|
{
|
|
if ( trap_Key_GetOverstrikeMode() )
|
|
{
|
|
c = 11;
|
|
}
|
|
else
|
|
{
|
|
c = 10;
|
|
}
|
|
|
|
style &= ~UI_PULSE;
|
|
style |= UI_BLINK;
|
|
|
|
UI_DrawChar( x + f->field.cursor * SMALLCHAR_WIDTH, y, c, style, color_white );
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
=================
|
|
CDKeyMenu_Graphics
|
|
=================
|
|
*/
|
|
void CDKeyMenu_Graphics (void)
|
|
{
|
|
int x,y;
|
|
|
|
// Draw the basic screen layout
|
|
UI_MenuFrame(&cdkeyMenuInfo.menu);
|
|
|
|
trap_R_SetColor( colorTable[CT_LTBROWN1]);
|
|
UI_DrawHandlePic(30,203, 47, 186, uis.whiteShader); // Middle left line of frame
|
|
|
|
trap_R_SetColor( colorTable[CT_DKPURPLE1]);
|
|
UI_DrawHandlePic( 246, 238, 197, 24, uis.whiteShader);
|
|
UI_DrawHandlePic( 227, 238, -16, 32, cdkeyMenuInfo.halfround); // Left round
|
|
UI_DrawHandlePic( 446, 238, 16, 32, cdkeyMenuInfo.halfround); // Right round
|
|
|
|
UI_DrawProportionalString( 74, 66, "557",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
|
|
UI_DrawProportionalString( 74, 84, "2344",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
|
|
UI_DrawProportionalString( 74, 188, "89-35",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
|
|
UI_DrawProportionalString( 74, 206, "32906",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
|
|
UI_DrawProportionalString( 74, 395, "30-1789",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
|
|
|
|
x = 344;
|
|
y = 279;
|
|
if ( cdkeyMenuInfo.keyResult == 0 )
|
|
{
|
|
UI_DrawProportionalString( x, y, menu_normal_text[MNT_VALID_CDKEY], UI_CENTER|UI_SMALLFONT, colorTable[CT_WHITE] );
|
|
}
|
|
else if( cdkeyMenuInfo.keyResult == 1 )
|
|
{
|
|
UI_DrawProportionalString( x, y, menu_normal_text[MNT_ENTER_CDKEY], UI_CENTER|UI_SMALLFONT, colorTable[CT_LTGOLD1] );
|
|
}
|
|
else
|
|
{
|
|
UI_DrawProportionalString( x, y, menu_normal_text[MNT_CDKEY_INVALID], UI_CENTER|UI_SMALLFONT, colorTable[CT_RED] );
|
|
}
|
|
|
|
UI_Setup_MenuButtons();
|
|
|
|
}
|
|
|
|
/*
|
|
=================
|
|
CDKey_MenuDraw
|
|
=================
|
|
*/
|
|
static void CDKey_MenuDraw (void)
|
|
{
|
|
CDKeyMenu_Graphics();
|
|
Menu_Draw( &cdkeyMenuInfo.menu );
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_CDKeyMenu_Init
|
|
===============
|
|
*/
|
|
static void UI_CDKeyMenu_Init( void )
|
|
{
|
|
memset( &cdkeyMenuInfo, 0, sizeof(cdkeyMenuInfo) );
|
|
|
|
UI_CDKeyMenu_Cache();
|
|
|
|
cdkeyMenuInfo.menu.wrapAround = qtrue;
|
|
cdkeyMenuInfo.menu.fullscreen = qtrue;
|
|
cdkeyMenuInfo.menu.draw = CDKey_MenuDraw;
|
|
cdkeyMenuInfo.menu.descX = MENU_DESC_X;
|
|
cdkeyMenuInfo.menu.descY = MENU_DESC_Y;
|
|
cdkeyMenuInfo.menu.titleX = MENU_TITLE_X;
|
|
cdkeyMenuInfo.menu.titleY = MENU_TITLE_Y;
|
|
cdkeyMenuInfo.menu.titleI = MNT_CDKEYMENU_TITLE;
|
|
cdkeyMenuInfo.menu.footNoteEnum = MNT_CDKEY;
|
|
|
|
cdkeyMenuInfo.cdkey.generic.type = MTYPE_FIELD;
|
|
cdkeyMenuInfo.cdkey.generic.flags = QMF_UPPERCASE;
|
|
cdkeyMenuInfo.cdkey.generic.x = 256;
|
|
cdkeyMenuInfo.cdkey.generic.y = 242;
|
|
cdkeyMenuInfo.cdkey.field.style = UI_SMALLFONT;
|
|
cdkeyMenuInfo.cdkey.field.widthInChars = 22;
|
|
cdkeyMenuInfo.cdkey.field.maxchars = 22;
|
|
cdkeyMenuInfo.cdkey.generic.ownerdraw = UI_CDKeyMenu_DrawKey;
|
|
cdkeyMenuInfo.cdkey.field.titleEnum = MNT_CDKEY;
|
|
cdkeyMenuInfo.cdkey.field.titlecolor = CT_LTGOLD1;
|
|
cdkeyMenuInfo.cdkey.field.textcolor = CT_DKGOLD1;
|
|
cdkeyMenuInfo.cdkey.field.textcolor2 = CT_LTGOLD1;
|
|
|
|
|
|
cdkeyMenuInfo.accept.generic.type = MTYPE_BITMAP;
|
|
cdkeyMenuInfo.accept.generic.name = GRAPHIC_SQUARE;
|
|
cdkeyMenuInfo.accept.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
cdkeyMenuInfo.accept.generic.id = ID_ACCEPT;
|
|
cdkeyMenuInfo.accept.generic.callback = UI_CDKeyMenu_Event;
|
|
cdkeyMenuInfo.accept.generic.x = 279;
|
|
cdkeyMenuInfo.accept.generic.y = 391;
|
|
cdkeyMenuInfo.accept.width = MENU_BUTTON_MED_WIDTH;
|
|
cdkeyMenuInfo.accept.height = 42;
|
|
cdkeyMenuInfo.accept.color = CT_DKPURPLE1;
|
|
cdkeyMenuInfo.accept.color2 = CT_LTPURPLE1;
|
|
cdkeyMenuInfo.accept.textX = MENU_BUTTON_TEXT_X;
|
|
cdkeyMenuInfo.accept.textY = MENU_BUTTON_TEXT_Y;
|
|
cdkeyMenuInfo.accept.textEnum = MBT_ACCEPT;
|
|
cdkeyMenuInfo.accept.textcolor = CT_BLACK;
|
|
cdkeyMenuInfo.accept.textcolor2 = CT_WHITE;
|
|
|
|
|
|
SetupMenu_TopButtons(&cdkeyMenuInfo.menu,MENU_CDKEY,NULL);
|
|
|
|
Menu_AddItem( &cdkeyMenuInfo.menu, &cdkeyMenuInfo.cdkey );
|
|
Menu_AddItem( &cdkeyMenuInfo.menu, &cdkeyMenuInfo.accept );
|
|
|
|
if (ui_cdkeychecked.integer == 1) {
|
|
cdkeyMenuInfo.keyResult = 0; //already got a good one once
|
|
} else {
|
|
cdkeyMenuInfo.keyResult = 1;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
=================
|
|
UI_CDKeyMenu_Cache
|
|
=================
|
|
*/
|
|
void UI_CDKeyMenu_Cache( void )
|
|
{
|
|
cdkeyMenuInfo.halfround = trap_R_RegisterShaderNoMip( "menu/common/halfround_r_24.tga" );
|
|
}
|
|
|
|
|
|
/*
|
|
===============
|
|
UI_CDKeyMenu
|
|
===============
|
|
*/
|
|
void UI_CDKeyMenu( void )
|
|
{
|
|
UI_CDKeyMenu_Init();
|
|
UI_PushMenu( &cdkeyMenuInfo.menu );
|
|
}
|
|
|
|
|
|
/*
|
|
=================
|
|
M_CDKey2Menu_Key
|
|
=================
|
|
*/
|
|
sfxHandle_t M_CDKey2Menu_Key (int key)
|
|
{
|
|
if (key == K_ESCAPE)
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
return ( Menu_DefaultKey( &cdkeyMenuInfo.menu, key ) );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
CDKeyMenu2_Graphics
|
|
=================
|
|
*/
|
|
void CDKeyMenu2_Graphics (void)
|
|
{
|
|
int x,y;
|
|
|
|
// Draw the basic screen layout
|
|
UI_MenuFrame2(&cdkeyMenuInfo.menu);
|
|
|
|
trap_R_SetColor( colorTable[CT_LTBROWN1]);
|
|
UI_DrawHandlePic(30,203, 47, 186, uis.whiteShader); // Middle left line of frame
|
|
|
|
// Background for CD Key data
|
|
trap_R_SetColor( colorTable[CT_DKPURPLE1]);
|
|
UI_DrawHandlePic( 246, 168, 197, 24, uis.whiteShader);
|
|
UI_DrawHandlePic( 227, 168, -16, 32, cdkeyMenuInfo.halfround); // Left round
|
|
UI_DrawHandlePic( 446, 168, 16, 32, cdkeyMenuInfo.halfround); // Right round
|
|
|
|
|
|
UI_DrawProportionalString( 74, 36, "755",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
|
|
UI_DrawProportionalString( 74, 132, "4423",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
|
|
UI_DrawProportionalString( 74, 188, "35-89",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
|
|
UI_DrawProportionalString( 74, 206, "60932",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
|
|
UI_DrawProportionalString( 74, 395, "1789-30",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
|
|
|
|
x = 344;
|
|
y = 228;
|
|
if ( cdkeyMenuInfo.keyResult == 0 )
|
|
{
|
|
UI_DrawProportionalString( x, y, menu_normal_text[MNT_VALID_CDKEY], UI_CENTER|UI_SMALLFONT, colorTable[CT_WHITE] );
|
|
}
|
|
else if( cdkeyMenuInfo.keyResult == 1 )
|
|
{
|
|
UI_DrawProportionalString( x, y, menu_normal_text[MNT_ENTER_CDKEY], UI_CENTER|UI_SMALLFONT, colorTable[CT_LTGOLD1] );
|
|
}
|
|
else
|
|
{
|
|
UI_DrawProportionalString( x, y, menu_normal_text[MNT_CDKEY_INVALID], UI_CENTER|UI_SMALLFONT, colorTable[CT_RED] );
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
CDKey2_MenuDraw
|
|
=================
|
|
*/
|
|
static void CDKey2_MenuDraw (void)
|
|
{
|
|
CDKeyMenu2_Graphics();
|
|
Menu_Draw( &cdkeyMenuInfo.menu );
|
|
}
|
|
|
|
|
|
/*
|
|
===============
|
|
UI_CDKeyMenu2_Init
|
|
===============
|
|
*/
|
|
static void UI_CDKeyMenu2_Init( void )
|
|
{//initial first time menu
|
|
memset( &cdkeyMenuInfo, 0, sizeof(cdkeyMenuInfo) );
|
|
|
|
cdkeyMenuInfo.fromMenu = 1;
|
|
|
|
UI_CDKeyMenu_Cache();
|
|
|
|
cdkeyMenuInfo.menu.wrapAround = qtrue;
|
|
cdkeyMenuInfo.menu.fullscreen = qtrue;
|
|
cdkeyMenuInfo.menu.draw = CDKey2_MenuDraw;
|
|
cdkeyMenuInfo.menu.key = M_CDKey2Menu_Key;
|
|
cdkeyMenuInfo.menu.descX = MENU_DESC_X;
|
|
cdkeyMenuInfo.menu.descY = MENU_DESC_Y;
|
|
cdkeyMenuInfo.menu.titleX = MENU_TITLE_X;
|
|
cdkeyMenuInfo.menu.titleY = MENU_TITLE_Y;
|
|
cdkeyMenuInfo.menu.titleI = MNT_CDKEYMENU_TITLE;
|
|
cdkeyMenuInfo.menu.footNoteEnum = MNT_CDKEY;
|
|
|
|
cdkeyMenuInfo.cdkey.generic.type = MTYPE_FIELD;
|
|
cdkeyMenuInfo.cdkey.generic.flags = QMF_UPPERCASE;
|
|
cdkeyMenuInfo.cdkey.generic.x = 260;
|
|
cdkeyMenuInfo.cdkey.generic.y = 172;
|
|
cdkeyMenuInfo.cdkey.field.style = UI_SMALLFONT;
|
|
cdkeyMenuInfo.cdkey.field.widthInChars = 22;
|
|
cdkeyMenuInfo.cdkey.field.maxchars = 22;
|
|
cdkeyMenuInfo.cdkey.generic.ownerdraw = UI_CDKeyMenu_DrawKey;
|
|
cdkeyMenuInfo.cdkey.field.titleEnum = MNT_CDKEY;
|
|
cdkeyMenuInfo.cdkey.field.titlecolor = CT_LTGOLD1;
|
|
cdkeyMenuInfo.cdkey.field.textcolor = CT_DKGOLD1;
|
|
cdkeyMenuInfo.cdkey.field.textcolor2 = CT_LTGOLD1;
|
|
|
|
cdkeyMenuInfo.accept.generic.type = MTYPE_BITMAP;
|
|
cdkeyMenuInfo.accept.generic.name = GRAPHIC_SQUARE;
|
|
cdkeyMenuInfo.accept.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
cdkeyMenuInfo.accept.generic.id = ID_ACCEPT;
|
|
cdkeyMenuInfo.accept.generic.callback = UI_CDKeyMenu_Event;
|
|
cdkeyMenuInfo.accept.generic.x = 96;
|
|
cdkeyMenuInfo.accept.generic.y = 347;
|
|
cdkeyMenuInfo.accept.width = MENU_BUTTON_MED_WIDTH;
|
|
cdkeyMenuInfo.accept.height = 42;
|
|
cdkeyMenuInfo.accept.color = CT_DKPURPLE1;
|
|
cdkeyMenuInfo.accept.color2 = CT_LTPURPLE1;
|
|
cdkeyMenuInfo.accept.textX = MENU_BUTTON_TEXT_X;
|
|
cdkeyMenuInfo.accept.textY = MENU_BUTTON_TEXT_Y;
|
|
cdkeyMenuInfo.accept.textEnum = MBT_ACCEPT;
|
|
cdkeyMenuInfo.accept.textcolor = CT_BLACK;
|
|
cdkeyMenuInfo.accept.textcolor2 = CT_WHITE;
|
|
|
|
cdkeyMenuInfo.acceptlater.generic.type = MTYPE_BITMAP;
|
|
cdkeyMenuInfo.acceptlater.generic.name = GRAPHIC_SQUARE;
|
|
cdkeyMenuInfo.acceptlater.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
cdkeyMenuInfo.acceptlater.generic.id = ID_ACCEPTLATER;
|
|
cdkeyMenuInfo.acceptlater.generic.callback = UI_CDKeyMenu_Event;
|
|
cdkeyMenuInfo.acceptlater.generic.x = 482;
|
|
cdkeyMenuInfo.acceptlater.generic.y = 347;
|
|
cdkeyMenuInfo.acceptlater.width = MENU_BUTTON_MED_WIDTH + 20;
|
|
cdkeyMenuInfo.acceptlater.height = 42;
|
|
cdkeyMenuInfo.acceptlater.color = CT_DKPURPLE1;
|
|
cdkeyMenuInfo.acceptlater.color2 = CT_LTPURPLE1;
|
|
cdkeyMenuInfo.acceptlater.textX = MENU_BUTTON_TEXT_X;
|
|
cdkeyMenuInfo.acceptlater.textY = MENU_BUTTON_TEXT_Y;
|
|
cdkeyMenuInfo.acceptlater.textEnum = MBT_CHECKKEYLATER;
|
|
cdkeyMenuInfo.acceptlater.textcolor = CT_BLACK;
|
|
cdkeyMenuInfo.acceptlater.textcolor2 = CT_WHITE;
|
|
|
|
Menu_AddItem( &cdkeyMenuInfo.menu, &cdkeyMenuInfo.cdkey );
|
|
Menu_AddItem( &cdkeyMenuInfo.menu, &cdkeyMenuInfo.accept );
|
|
Menu_AddItem( &cdkeyMenuInfo.menu, &cdkeyMenuInfo.acceptlater );
|
|
|
|
if (ui_cdkeychecked.integer == 1) {
|
|
cdkeyMenuInfo.keyResult = 0; //already got a good one once
|
|
} else {
|
|
cdkeyMenuInfo.keyResult = 1;
|
|
}
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_CDKeyMenu
|
|
===============
|
|
*/
|
|
void UI_CDKeyMenu2( void )
|
|
{
|
|
UI_CDKeyMenu2_Init();
|
|
UI_PushMenu( &cdkeyMenuInfo.menu );
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_CDKeyMenu_f
|
|
===============
|
|
*/
|
|
void UI_CDKeyMenu_f( void )
|
|
{
|
|
UI_CDKeyMenu2();
|
|
}
|