7420 lines
220 KiB
C++
7420 lines
220 KiB
C++
/**********************************************************************
|
|
UI_TURBOLIFT.C
|
|
|
|
User interface trigger from within game
|
|
**********************************************************************/
|
|
#include "ui_local.h"
|
|
|
|
#define MENUTYPE_LIBRARY 0
|
|
#define MENUTYPE_ASTROMETRICS 1
|
|
#define MENUTYPE_PERSONALLOG 2
|
|
#define MENUTYPE_MEDICALLOG 3
|
|
#define MENUTYPE_RECIPES 4
|
|
#define MENUTYPE_SOCIALCALENDAR 5
|
|
#define MENUTYPE_DISEASELIBRARY 6
|
|
#define MENUTYPE_SHOOTINGRANGE 7
|
|
#define MENUTYPE_WEAPONLIBRARY 8
|
|
#define MENUTYPE_CARGO 9
|
|
#define MENUTYPE_ENGINEERINGLIBRARY 10
|
|
|
|
qboolean inHolodeck;
|
|
|
|
static void UI_LibraryDrawMD3Model(qhandle_t modelHandle,int x, int y,int modelDistance,int modelYaw,int modelPitch,int modelRoll,int modelOriginY);
|
|
|
|
// Data for Closing Credits Menu
|
|
static struct
|
|
{
|
|
menuframework_s menu;
|
|
int maxDecks;
|
|
int chosenDeck;
|
|
sfxHandle_t openingVoice;
|
|
menubitmap_s quitmenu;
|
|
menubitmap_s engage;
|
|
menubitmap_s deck1;
|
|
menubitmap_s deck2;
|
|
menubitmap_s deck3;
|
|
menubitmap_s deck4;
|
|
menubitmap_s deck5;
|
|
menubitmap_s deck6;
|
|
menubitmap_s deck7;
|
|
menubitmap_s deck8;
|
|
menubitmap_s deck9;
|
|
menubitmap_s deck10;
|
|
menubitmap_s deck11;
|
|
menubitmap_s deck12;
|
|
menubitmap_s deck13;
|
|
menubitmap_s deck14;
|
|
menubitmap_s deck15;
|
|
menubitmap_s deck16;
|
|
} s_turbolift;
|
|
|
|
#define ID_ARROW1UP 2
|
|
#define ID_ARROW1DOWN 3
|
|
#define ID_ARROW2UP 4
|
|
#define ID_ARROW2DOWN 5
|
|
#define ID_COMPUTERVOICE 6
|
|
|
|
#define ID_QUIT 10
|
|
#define ID_DECK1 11
|
|
#define ID_DECK2 12
|
|
#define ID_DECK3 13
|
|
#define ID_DECK4 14
|
|
#define ID_DECK5 15
|
|
#define ID_DECK6 16
|
|
#define ID_DECK7 17
|
|
#define ID_DECK8 18
|
|
#define ID_DECK9 19
|
|
#define ID_DECK10 20
|
|
#define ID_DECK11 21
|
|
#define ID_DECK12 22
|
|
#define ID_DECK13 23
|
|
#define ID_DECK14 24
|
|
#define ID_DECK15 25
|
|
#define ID_DECK16 26
|
|
#define ID_ENGAGE 100
|
|
|
|
#define MAX_TOKEN 1024
|
|
#define MAX_DECKS 16
|
|
|
|
static char deckDesc[MAX_DECKS][MAX_TOKEN];
|
|
static char deckDesc2[MAX_DECKS][MAX_TOKEN];
|
|
static char deckCommand[MAX_DECKS][MAX_TOKEN];
|
|
static sfxHandle_t deckSoundHandle[MAX_DECKS];
|
|
|
|
void UI_TurboliftMenu_Cache (void);
|
|
void UI_HolodeckMenu_Cache (void);
|
|
|
|
/*
|
|
=================
|
|
Turbolift_StatusBar
|
|
=================
|
|
*/
|
|
static void Turbolift_StatusBar(void *itemptr)
|
|
{
|
|
int id;
|
|
|
|
id = ((menucommon_s*)itemptr)->id;
|
|
|
|
switch (id)
|
|
{
|
|
case ID_DECK1:
|
|
case ID_DECK2:
|
|
case ID_DECK3:
|
|
case ID_DECK4:
|
|
case ID_DECK5:
|
|
case ID_DECK6:
|
|
case ID_DECK7:
|
|
case ID_DECK8:
|
|
case ID_DECK9:
|
|
case ID_DECK10:
|
|
case ID_DECK11:
|
|
case ID_DECK12:
|
|
case ID_DECK13:
|
|
case ID_DECK14:
|
|
case ID_DECK15:
|
|
case ID_DECK16:
|
|
|
|
if (deckDesc2[id-ID_DECK1][0])
|
|
{
|
|
UI_DrawProportionalString( 320, 396, deckDesc[id-ID_DECK1], UI_CENTER|UI_SMALLFONT, colorTable[CT_WHITE]);
|
|
UI_DrawProportionalString( 320, 416, deckDesc2[id-ID_DECK1], UI_CENTER|UI_SMALLFONT, colorTable[CT_WHITE]);
|
|
}
|
|
else
|
|
{
|
|
UI_DrawProportionalString( 320, 406, deckDesc[id-ID_DECK1], UI_CENTER|UI_SMALLFONT, colorTable[CT_WHITE]);
|
|
}
|
|
break;
|
|
|
|
case ID_QUIT:
|
|
case ID_ENGAGE:
|
|
UI_DrawProportionalString( 320, 406, menu_normal_text[MNT_SPECFICYDECK], UI_CENTER|UI_SMALLFONT, colorTable[CT_WHITE]);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
=================
|
|
M_Turbolift_Event
|
|
=================
|
|
*/
|
|
void M_Turbolift_Event (void* ptr, int notification)
|
|
{
|
|
int id;
|
|
menubitmap_s *holdDeck;
|
|
|
|
if (notification != QM_ACTIVATED)
|
|
{
|
|
return;
|
|
}
|
|
|
|
id = ((menucommon_s*)ptr)->id;
|
|
|
|
switch (id)
|
|
{
|
|
case ID_QUIT:
|
|
UI_PopMenu();
|
|
break;
|
|
case ID_DECK1:
|
|
case ID_DECK2:
|
|
case ID_DECK3:
|
|
case ID_DECK4:
|
|
case ID_DECK5:
|
|
case ID_DECK6:
|
|
case ID_DECK7:
|
|
case ID_DECK8:
|
|
case ID_DECK9:
|
|
case ID_DECK10:
|
|
case ID_DECK11:
|
|
case ID_DECK12:
|
|
case ID_DECK13:
|
|
case ID_DECK14:
|
|
case ID_DECK15:
|
|
case ID_DECK16:
|
|
|
|
if (s_turbolift.chosenDeck >= 0)
|
|
{
|
|
holdDeck = &s_turbolift.deck1;
|
|
holdDeck += s_turbolift.chosenDeck;
|
|
holdDeck->textcolor = CT_BLACK;
|
|
}
|
|
|
|
s_turbolift.chosenDeck = id - ID_DECK1;
|
|
s_turbolift.engage.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
|
|
holdDeck = &s_turbolift.deck1;
|
|
holdDeck += s_turbolift.chosenDeck;
|
|
holdDeck->textcolor = CT_LTGOLD1;
|
|
|
|
ui.S_StartLocalSound( deckSoundHandle[s_turbolift.chosenDeck], CHAN_MENU1 );
|
|
|
|
break;
|
|
case ID_ENGAGE: // Active only if a deck has been chosen
|
|
if (deckCommand[s_turbolift.chosenDeck])
|
|
{
|
|
UI_ForceMenuOff ();
|
|
ui.Cmd_ExecuteText( EXEC_APPEND, deckCommand[s_turbolift.chosenDeck]);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
#define MAXTURBOLIFTTEXT 10000
|
|
static char TurboliftText[MAXTURBOLIFTTEXT];
|
|
|
|
/*
|
|
=================
|
|
UI_ParseButtonText
|
|
=================
|
|
*/
|
|
static void UI_ParseTurboliftText()
|
|
{
|
|
char *token;
|
|
char *buffer;
|
|
int i,deckNum;
|
|
char soundFile[1024];
|
|
|
|
memset(deckDesc,0,sizeof(deckDesc));
|
|
memset(deckDesc2,0,sizeof(deckDesc2));
|
|
memset(deckCommand,0,sizeof(deckCommand));
|
|
memset(deckSoundHandle,0,sizeof(deckSoundHandle));
|
|
|
|
COM_BeginParseSession();
|
|
|
|
buffer = TurboliftText;
|
|
i = 1; // Zero is null string
|
|
while ( buffer )
|
|
{
|
|
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
|
|
if (!Q_strncmp(token,"DECK",4))
|
|
{
|
|
deckNum = atoi(&token[4]);
|
|
|
|
// Get description
|
|
token = COM_ParseExt( &buffer, qfalse );
|
|
Q_strncpyz( deckDesc[deckNum-1], token, sizeof(deckDesc[0]) );
|
|
|
|
// Get description
|
|
token = COM_ParseExt( &buffer, qfalse );
|
|
Q_strncpyz( deckDesc2[deckNum-1], token, sizeof(deckDesc2[0]) );
|
|
|
|
// Get command
|
|
token = COM_ParseExt( &buffer, qfalse );
|
|
Q_strncpyz( deckCommand[deckNum-1], token, sizeof(deckCommand[0]) );
|
|
|
|
// Get sound
|
|
token = COM_ParseExt( &buffer, qfalse );
|
|
Q_strncpyz( soundFile, token, sizeof(soundFile) );
|
|
deckSoundHandle[deckNum-1] = ui.S_RegisterSound( soundFile );
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
TurboliftMenu_LoadText
|
|
=================
|
|
*/
|
|
void TurboliftMenu_LoadText (void)
|
|
{
|
|
UI_TurboliftMenu_Cache();
|
|
|
|
}
|
|
|
|
/*
|
|
=================
|
|
TurboliftMenu_Key
|
|
=================
|
|
*/
|
|
sfxHandle_t TurboliftMenu_Key (int key)
|
|
{
|
|
return ( Menu_DefaultKey( &s_turbolift.menu, key ) );
|
|
}
|
|
|
|
qhandle_t leftRound;
|
|
qhandle_t corner_ul_24_60;
|
|
qhandle_t corner_ll_12_60;
|
|
qhandle_t turbolift;
|
|
|
|
/*
|
|
=================
|
|
M_TurboliftMenu_Graphics
|
|
=================
|
|
*/
|
|
void M_TurboliftMenu_Graphics (void)
|
|
{
|
|
menubitmap_s *holdDeck;
|
|
int i,length,xTurboStart;
|
|
int numColor,roundColor;
|
|
|
|
// Draw the basic screen frame
|
|
|
|
// Upper corners
|
|
ui.R_SetColor( colorTable[CT_LTPINK]);
|
|
UI_DrawHandlePic( 20, 24, 64, 32, corner_ul_24_60); // Upper corner
|
|
UI_DrawHandlePic( 20, 353, 64, 16, corner_ll_12_60); // Lower Corner
|
|
ui.R_SetColor( colorTable[CT_LTBLUE1]);
|
|
UI_DrawHandlePic( 100, 86, 128, 128, turbolift); // Turbolift graphic
|
|
|
|
// Lower corners
|
|
ui.R_SetColor( colorTable[CT_VDKPURPLE2]);
|
|
UI_DrawHandlePic( 20, 375, 64, -16, corner_ll_12_60); //
|
|
UI_DrawHandlePic( 20, 440, 64, 16, corner_ll_12_60); //
|
|
|
|
xTurboStart = 604;
|
|
length = UI_ProportionalStringWidth( menu_normal_text[MNT_TURBOLIFT],UI_BIGFONT);
|
|
length += 4;
|
|
|
|
// Upper half
|
|
ui.R_SetColor( colorTable[CT_LTPINK]);
|
|
UI_DrawHandlePic( 79, 24, xTurboStart - (79 + length), PROP_BIG_HEIGHT, uis.whiteShader); // Top left line
|
|
UI_DrawHandlePic( 20, 60, 60, 40, uis.whiteShader); //
|
|
ui.R_SetColor( colorTable[CT_LTPURPLE1]);
|
|
UI_DrawHandlePic( 20, 106, 60, 11, uis.whiteShader); //
|
|
ui.R_SetColor( colorTable[CT_LTPINK]);
|
|
UI_DrawHandlePic( 20, 123, 60, 240, uis.whiteShader); // Left hand column
|
|
UI_DrawHandlePic( 69, 356, 245, 12, uis.whiteShader); //
|
|
|
|
ui.R_SetColor( colorTable[CT_DKPURPLE1]);
|
|
UI_DrawHandlePic(319, 356, 93, 5, uis.whiteShader); //
|
|
UI_DrawHandlePic(319, 360, 31, 8, uis.whiteShader); //
|
|
UI_DrawHandlePic(381, 360, 31, 8, uis.whiteShader); //
|
|
|
|
UI_DrawHandlePic(417, 356, 93, 12, uis.whiteShader); //
|
|
|
|
UI_DrawHandlePic(510, 356,114, 12, uis.whiteShader); //
|
|
|
|
// Lower half
|
|
ui.R_SetColor( colorTable[CT_VDKPURPLE2]);
|
|
UI_DrawHandlePic( 20, 380, 60, 70, uis.whiteShader); // Left Column
|
|
|
|
ui.R_SetColor( colorTable[CT_VDKPURPLE2]);
|
|
UI_DrawHandlePic( 69, 376, 158, 12, uis.whiteShader); // Top line
|
|
UI_DrawHandlePic(232, 376, 82, 12, uis.whiteShader); // Top line
|
|
UI_DrawHandlePic(417, 376, 12, 12, uis.whiteShader); //
|
|
UI_DrawHandlePic(434, 376, 190, 12, uis.whiteShader); //
|
|
|
|
// Funky indent
|
|
ui.R_SetColor( colorTable[CT_LTPINK]);
|
|
UI_DrawHandlePic(319, 383, 93, 5, uis.whiteShader); //
|
|
UI_DrawHandlePic(319, 376, 31, 8, uis.whiteShader); //
|
|
UI_DrawHandlePic(381, 376, 31, 8, uis.whiteShader); //
|
|
|
|
// Bottom line
|
|
ui.R_SetColor( colorTable[CT_VDKPURPLE2]);
|
|
UI_DrawHandlePic( 69, 443, 287, 12, uis.whiteShader); //
|
|
ui.R_SetColor( colorTable[CT_LTPINK]);
|
|
UI_DrawHandlePic(364, 443, 260, 12, uis.whiteShader); // Bottom line
|
|
|
|
|
|
UI_DrawProportionalString( xTurboStart, 24,
|
|
menu_normal_text[MNT_TURBOLIFT], UI_BIGFONT | UI_RIGHT, colorTable[CT_WHITE]);
|
|
|
|
ui.R_SetColor( colorTable[CT_LTPINK]);
|
|
UI_DrawHandlePic( 607, 24,-16, 32, leftRound);
|
|
|
|
holdDeck = &s_turbolift.deck1;
|
|
|
|
// Print deck buttons
|
|
for (i=0;i<s_turbolift.maxDecks;i++)
|
|
{
|
|
if (deckDesc[i][0])
|
|
{
|
|
if (s_turbolift.chosenDeck == i) // This deck was chosen
|
|
{
|
|
numColor = CT_LTGOLD1;
|
|
roundColor = CT_LTGOLD1;
|
|
}
|
|
else // This deck was not chosen
|
|
{
|
|
numColor = CT_WHITE;
|
|
roundColor = CT_DKAQUA;
|
|
}
|
|
|
|
UI_DrawProportionalString( holdDeck->generic.x - 6,
|
|
holdDeck->generic.y,
|
|
va("%d",i+1), UI_BIGFONT|UI_RIGHT, colorTable[numColor]);
|
|
|
|
ui.R_SetColor( colorTable[roundColor]);
|
|
UI_DrawHandlePic( holdDeck->generic.x - 45,
|
|
holdDeck->generic.y,
|
|
16, 32, leftRound);
|
|
}
|
|
|
|
holdDeck++;
|
|
}
|
|
|
|
// Round graphic on left of engage & quit button
|
|
ui.R_SetColor( colorTable[s_turbolift.quitmenu.color]);
|
|
UI_DrawHandlePic(s_turbolift.engage.generic.x - 14,
|
|
s_turbolift.engage.generic.y,
|
|
MENU_BUTTON_MED_HEIGHT, s_turbolift.engage.height, uis.graphicButtonLeftEnd);
|
|
|
|
UI_DrawHandlePic(s_turbolift.quitmenu.generic.x - 14,
|
|
s_turbolift.quitmenu.generic.y,
|
|
MENU_BUTTON_MED_HEIGHT, s_turbolift.quitmenu.height, uis.graphicButtonLeftEnd);
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
TurboliftMenu_Draw
|
|
===============
|
|
*/
|
|
void TurboliftMenu_Draw(void)
|
|
{
|
|
// Draw graphics particular to Main Menu
|
|
M_TurboliftMenu_Graphics();
|
|
|
|
Menu_Draw( &s_turbolift.menu );
|
|
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_TurboliftMenu_Cache
|
|
===============
|
|
*/
|
|
void UI_TurboliftMenu_Cache (void)
|
|
{
|
|
char *buffer;
|
|
char filename[MAX_QPATH];
|
|
int len;
|
|
|
|
s_turbolift.openingVoice = ui.S_RegisterSound( "sound/voice/computer/tour/trblftmenu.mp3" );
|
|
|
|
leftRound = ui.R_RegisterShaderNoMip("menu/common/halfroundl_24.tga");
|
|
corner_ul_24_60 = ui.R_RegisterShaderNoMip("menu/common/corner_ul_24_60.tga");
|
|
corner_ll_12_60 = ui.R_RegisterShaderNoMip("menu/common/corner_ll_12_60.tga");
|
|
turbolift = ui.R_RegisterShaderNoMip("menu/common/lift_button.tga");
|
|
|
|
UI_LanguageFilename("ext_data/sp_turbolift","dat",filename);
|
|
|
|
len = ui.FS_ReadFile( filename,(void **) &buffer );
|
|
|
|
if ( len == -1 )
|
|
{
|
|
ui.Error(ERR_FATAL, "UI_LoadButtonText : SP_TURBOLIFT.DAT file not found!\n");
|
|
return;
|
|
}
|
|
|
|
if ( len > MAXTURBOLIFTTEXT )
|
|
{
|
|
ui.Error(ERR_FATAL, "UI_LoadButtonText : SP_TURBOLIFT.DAT too big!\n");
|
|
return;
|
|
}
|
|
|
|
strncpy( TurboliftText, buffer, sizeof( TurboliftText ) - 1 );
|
|
ui.FS_FreeFile( buffer );
|
|
|
|
UI_ParseTurboliftText();
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
TurboliftMenu_Init
|
|
===============
|
|
*/
|
|
void TurboliftMenu_Init(void)
|
|
{
|
|
int y,pad,x;
|
|
menubitmap_s *holdDeck;
|
|
int i,width;
|
|
|
|
s_turbolift.menu.nitems = 0;
|
|
s_turbolift.menu.draw = TurboliftMenu_Draw;
|
|
s_turbolift.menu.key = TurboliftMenu_Key;
|
|
s_turbolift.menu.fullscreen = qtrue;
|
|
s_turbolift.menu.wrapAround = qtrue;
|
|
s_turbolift.menu.descX = MENU_DESC_X;
|
|
s_turbolift.menu.descY = MENU_DESC_Y;
|
|
s_turbolift.menu.titleX = MENU_TITLE_X;
|
|
s_turbolift.menu.titleY = MENU_TITLE_Y;
|
|
s_turbolift.menu.titleI = MNT_CREDITSMENU_TITLE;
|
|
s_turbolift.menu.footNoteEnum = MNT_CREDITS;
|
|
|
|
s_turbolift.chosenDeck = -1;
|
|
|
|
pad = PROP_BIG_HEIGHT + 10;
|
|
y = 72;
|
|
x = 319;
|
|
width = MENU_BUTTON_MED_WIDTH-20;
|
|
|
|
s_turbolift.maxDecks = MAX_DECKS;
|
|
holdDeck = &s_turbolift.deck1;
|
|
|
|
for (i=0;i<s_turbolift.maxDecks;i++)
|
|
{
|
|
holdDeck->generic.type = MTYPE_BITMAP;
|
|
holdDeck->generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
holdDeck->generic.x = x;
|
|
holdDeck->generic.y = y;
|
|
holdDeck->generic.name = GRAPHIC_BUTTONRIGHT;
|
|
holdDeck->generic.id = ID_DECK1 + i;
|
|
holdDeck->generic.callback = M_Turbolift_Event;
|
|
holdDeck->generic.statusbarfunc = Turbolift_StatusBar;
|
|
holdDeck->width = width;
|
|
holdDeck->height = PROP_BIG_HEIGHT;
|
|
holdDeck->color = CT_DKAQUA;
|
|
holdDeck->color2 = CT_LTAQUA;
|
|
holdDeck->textX = MENU_BUTTON_TEXT_X;
|
|
holdDeck->textY = 12;
|
|
holdDeck->textEnum = MBT_DECK;
|
|
holdDeck->textcolor = CT_BLACK;
|
|
holdDeck->textcolor2 = CT_WHITE;
|
|
holdDeck->textStyle = UI_TINYFONT;
|
|
|
|
holdDeck++;
|
|
y += pad;
|
|
|
|
// Start the next column
|
|
if (i == ((s_turbolift.maxDecks-1)/2))
|
|
{
|
|
x += width + 90;
|
|
y = 80;
|
|
}
|
|
}
|
|
|
|
s_turbolift.engage.generic.type = MTYPE_BITMAP;
|
|
s_turbolift.engage.generic.flags = QMF_GRAYED;
|
|
s_turbolift.engage.generic.x = 110;
|
|
s_turbolift.engage.generic.y = 72 + (pad * 5);
|
|
s_turbolift.engage.generic.name = GRAPHIC_BUTTONRIGHT;
|
|
s_turbolift.engage.generic.id = ID_ENGAGE;
|
|
s_turbolift.engage.generic.callback = M_Turbolift_Event;
|
|
s_turbolift.engage.width = width;
|
|
s_turbolift.engage.height = PROP_BIG_HEIGHT;
|
|
s_turbolift.engage.color = CT_DKORANGE;
|
|
s_turbolift.engage.color2 = CT_LTORANGE;
|
|
s_turbolift.engage.textX = MENU_BUTTON_TEXT_X;
|
|
s_turbolift.engage.textY = 6;
|
|
s_turbolift.engage.textEnum = MBT_ENGAGE;
|
|
s_turbolift.engage.textcolor = CT_BLACK;
|
|
s_turbolift.engage.textcolor2 = CT_WHITE;
|
|
s_turbolift.engage.generic.statusbarfunc = Turbolift_StatusBar;
|
|
|
|
s_turbolift.quitmenu.generic.type = MTYPE_BITMAP;
|
|
s_turbolift.quitmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_turbolift.quitmenu.generic.x = 110;
|
|
s_turbolift.quitmenu.generic.y = 72 + (pad * 7);
|
|
s_turbolift.quitmenu.generic.name = GRAPHIC_BUTTONRIGHT;
|
|
s_turbolift.quitmenu.generic.id = ID_QUIT;
|
|
s_turbolift.quitmenu.generic.callback = M_Turbolift_Event;
|
|
s_turbolift.quitmenu.width = width;
|
|
s_turbolift.quitmenu.height = PROP_BIG_HEIGHT;
|
|
s_turbolift.quitmenu.color = CT_DKORANGE;
|
|
s_turbolift.quitmenu.color2 = CT_LTORANGE;
|
|
s_turbolift.quitmenu.textX = MENU_BUTTON_TEXT_X;
|
|
s_turbolift.quitmenu.textY = 6;
|
|
s_turbolift.quitmenu.textEnum = MBT_RETURN;
|
|
s_turbolift.quitmenu.textcolor = CT_BLACK;
|
|
s_turbolift.quitmenu.textcolor2 = CT_WHITE;
|
|
s_turbolift.quitmenu.generic.statusbarfunc = Turbolift_StatusBar;
|
|
|
|
Menu_AddItem( &s_turbolift.menu, &s_turbolift.engage );
|
|
Menu_AddItem( &s_turbolift.menu, &s_turbolift.quitmenu );
|
|
|
|
holdDeck = &s_turbolift.deck1;
|
|
for (i=0;i<s_turbolift.maxDecks;i++)
|
|
{
|
|
if (deckDesc[i][0])
|
|
{
|
|
Menu_AddItem( &s_turbolift.menu, holdDeck );
|
|
}
|
|
holdDeck++;
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_TurboliftMenu
|
|
===============
|
|
*/
|
|
void UI_TurboliftMenu(void)
|
|
{
|
|
uis.menusp = 0;
|
|
|
|
ingameFlag = qtrue; // true when in game menu is in use
|
|
|
|
Mouse_Show();
|
|
|
|
TurboliftMenu_LoadText();
|
|
|
|
TurboliftMenu_Init();
|
|
|
|
ui.S_StartLocalSound( s_turbolift.openingVoice, CHAN_MENU1 );
|
|
|
|
UI_PushMenu( &s_turbolift.menu );
|
|
|
|
Menu_AdjustCursor( &s_turbolift.menu, 1 );
|
|
}
|
|
|
|
|
|
// Data for Closing Credits Menu
|
|
|
|
static struct
|
|
{
|
|
menuframework_s menu;
|
|
int menuType;
|
|
qhandle_t leftRound;
|
|
qhandle_t corner_ll_12_60;
|
|
qhandle_t corner_ll_12_30;
|
|
qhandle_t corner_ur_24_30;
|
|
int maxMaps;
|
|
int chosenMap;
|
|
menubitmap_s endholodeckprogram;
|
|
menubitmap_s quitmenu;
|
|
menubitmap_s engage;
|
|
menubitmap_s resume;
|
|
menubitmap_s supereasy;
|
|
menubitmap_s easy;
|
|
menubitmap_s medium;
|
|
menubitmap_s hard;
|
|
menubitmap_s map1;
|
|
menubitmap_s map2;
|
|
menubitmap_s map3;
|
|
menubitmap_s map4;
|
|
menubitmap_s map5;
|
|
menubitmap_s map6;
|
|
menubitmap_s map7;
|
|
menubitmap_s map8;
|
|
menubitmap_s map9;
|
|
menubitmap_s map10;
|
|
menubitmap_s map11;
|
|
menubitmap_s map12;
|
|
menubitmap_s map13;
|
|
menubitmap_s map14;
|
|
menubitmap_s map15;
|
|
menubitmap_s map16;
|
|
} s_holodeck;
|
|
|
|
#define ID_QUIT 10
|
|
#define ID_MAP1 11
|
|
#define ID_MAP2 12
|
|
#define ID_MAP3 13
|
|
#define ID_MAP4 14
|
|
#define ID_MAP5 15
|
|
#define ID_MAP6 16
|
|
#define ID_MAP7 17
|
|
#define ID_MAP8 18
|
|
#define ID_MAP9 19
|
|
#define ID_MAP10 20
|
|
#define ID_MAP11 21
|
|
#define ID_MAP12 22
|
|
#define ID_MAP13 23
|
|
#define ID_MAP14 24
|
|
#define ID_MAP15 25
|
|
#define ID_MAP16 26
|
|
#define ID_RESUME 27
|
|
|
|
#define ID_SUPEREASY 40
|
|
#define ID_EASY 41
|
|
#define ID_MEDIUM 42
|
|
#define ID_HARD 43
|
|
#define ID_LEAVEHOLODECK 44
|
|
|
|
#define MAX_MAPS 16
|
|
|
|
static char mapDesc[MAX_MAPS][MAX_TOKEN];
|
|
static char mapDesc2[MAX_MAPS][MAX_TOKEN];
|
|
static char mapCommand[MAX_MAPS][MAX_TOKEN];
|
|
static char mapInHoloCommand[MAX_MAPS][MAX_TOKEN];
|
|
|
|
static char returnDesc[MAX_TOKEN];
|
|
static char returnDesc2[MAX_TOKEN];
|
|
static char returnCommand[MAX_TOKEN];
|
|
|
|
#define MAXHOLODECKTEXT 5000
|
|
static char HolodeckText[MAXHOLODECKTEXT];
|
|
|
|
/*
|
|
=================
|
|
Holodeck_StatusBar
|
|
=================
|
|
*/
|
|
static void Holodeck_StatusBar(void *itemptr)
|
|
{
|
|
int id;
|
|
|
|
id = ((menucommon_s*)itemptr)->id;
|
|
|
|
switch (id)
|
|
{
|
|
case ID_MAP1:
|
|
case ID_MAP2:
|
|
case ID_MAP3:
|
|
case ID_MAP4:
|
|
case ID_MAP5:
|
|
case ID_MAP6:
|
|
case ID_MAP7:
|
|
case ID_MAP8:
|
|
case ID_MAP9:
|
|
case ID_MAP10:
|
|
case ID_MAP11:
|
|
case ID_MAP12:
|
|
case ID_MAP13:
|
|
case ID_MAP14:
|
|
case ID_MAP15:
|
|
case ID_MAP16:
|
|
|
|
if (mapDesc2[id-ID_MAP1][0])
|
|
{
|
|
UI_DrawProportionalString( 320, 396, mapDesc[id-ID_MAP1], UI_CENTER|UI_SMALLFONT, colorTable[CT_WHITE]);
|
|
UI_DrawProportionalString( 320, 416, mapDesc2[id-ID_MAP1], UI_CENTER|UI_SMALLFONT, colorTable[CT_WHITE]);
|
|
}
|
|
else
|
|
{
|
|
UI_DrawProportionalString( 320, 406, mapDesc[id-ID_MAP1], UI_CENTER|UI_SMALLFONT, colorTable[CT_WHITE]);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
M_Holodeck_Event
|
|
=================
|
|
*/
|
|
void M_Holodeck_Event (void* ptr, int notification)
|
|
{
|
|
int id;
|
|
menubitmap_s *holdDeck;
|
|
char *command;
|
|
|
|
if (notification != QM_ACTIVATED)
|
|
{
|
|
return;
|
|
}
|
|
|
|
id = ((menucommon_s*)ptr)->id;
|
|
|
|
switch (id)
|
|
{
|
|
// Controls
|
|
case ID_RESUME: // Resume holodeckprogram while in menu
|
|
case ID_QUIT: // Return to holodeck while in menu while on holodeck (confusing, eh?)
|
|
UI_PopMenu();
|
|
break;
|
|
case ID_MAP1:
|
|
case ID_MAP2:
|
|
case ID_MAP3:
|
|
case ID_MAP4:
|
|
case ID_MAP5:
|
|
case ID_MAP6:
|
|
case ID_MAP7:
|
|
case ID_MAP8:
|
|
case ID_MAP9:
|
|
case ID_MAP10:
|
|
case ID_MAP11:
|
|
case ID_MAP12:
|
|
case ID_MAP13:
|
|
case ID_MAP14:
|
|
case ID_MAP15:
|
|
case ID_MAP16:
|
|
if (s_holodeck.chosenMap >= 0)
|
|
{
|
|
holdDeck = &s_holodeck.map1;
|
|
holdDeck += s_holodeck.chosenMap;
|
|
holdDeck->textcolor = CT_BLACK;
|
|
}
|
|
|
|
s_holodeck.chosenMap = id - ID_MAP1;
|
|
s_holodeck.engage.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
|
|
holdDeck = &s_holodeck.map1;
|
|
holdDeck += s_holodeck.chosenMap;
|
|
holdDeck->textcolor = CT_LTGOLD1;
|
|
|
|
break;
|
|
|
|
case ID_ENGAGE:
|
|
|
|
if (inHolodeck == qtrue)
|
|
{
|
|
command = mapInHoloCommand[s_holodeck.chosenMap];
|
|
}
|
|
else
|
|
{
|
|
command = mapCommand[s_holodeck.chosenMap];
|
|
}
|
|
|
|
if (*command)
|
|
{
|
|
UI_ForceMenuOff ();
|
|
ui.Cmd_ExecuteText( EXEC_APPEND, va("%s\n",command));
|
|
}
|
|
break;
|
|
|
|
case ID_SUPEREASY:
|
|
s_holodeck.supereasy.textcolor = CT_WHITE;
|
|
s_holodeck.easy.textcolor = CT_BLACK;
|
|
s_holodeck.medium.textcolor = CT_BLACK;
|
|
s_holodeck.hard.textcolor = CT_BLACK;
|
|
|
|
ui.Cvar_SetValue( "g_spskill", 0 );
|
|
ui.Cvar_Set( "handicap", "200" );
|
|
|
|
s_holodeck.supereasy.generic.flags |= QMF_BLINK;
|
|
s_holodeck.easy.generic.flags &= ~ QMF_BLINK;
|
|
s_holodeck.medium.generic.flags &= ~ QMF_BLINK;
|
|
s_holodeck.hard.generic.flags &= ~ QMF_BLINK;
|
|
|
|
break;
|
|
case ID_EASY:
|
|
s_holodeck.supereasy.textcolor = CT_BLACK;
|
|
s_holodeck.easy.textcolor = CT_WHITE;
|
|
s_holodeck.medium.textcolor = CT_BLACK;
|
|
s_holodeck.hard.textcolor = CT_BLACK;
|
|
|
|
ui.Cvar_SetValue( "g_spskill", 0 );
|
|
ui.Cvar_Set( "handicap", "100" );
|
|
|
|
s_holodeck.supereasy.generic.flags &= ~ QMF_BLINK;
|
|
s_holodeck.easy.generic.flags |= QMF_BLINK;
|
|
s_holodeck.medium.generic.flags &= ~ QMF_BLINK;
|
|
s_holodeck.hard.generic.flags &= ~ QMF_BLINK;
|
|
|
|
break;
|
|
case ID_MEDIUM:
|
|
s_holodeck.supereasy.textcolor = CT_BLACK;
|
|
s_holodeck.easy.textcolor = CT_BLACK;
|
|
s_holodeck.medium.textcolor = CT_WHITE;
|
|
s_holodeck.hard.textcolor = CT_BLACK;
|
|
ui.Cvar_SetValue( "g_spskill", 1 );
|
|
ui.Cvar_Set( "handicap", "100" );
|
|
|
|
s_holodeck.supereasy.generic.flags &= ~ QMF_BLINK;
|
|
s_holodeck.easy.generic.flags &= ~ QMF_BLINK;
|
|
s_holodeck.medium.generic.flags |= QMF_BLINK;
|
|
s_holodeck.hard.generic.flags &= ~ QMF_BLINK;
|
|
break;
|
|
case ID_HARD:
|
|
s_holodeck.supereasy.textcolor = CT_BLACK;
|
|
s_holodeck.easy.textcolor = CT_BLACK;
|
|
s_holodeck.medium.textcolor = CT_BLACK;
|
|
s_holodeck.hard.textcolor = CT_WHITE;
|
|
|
|
ui.Cvar_SetValue( "g_spskill", 2 );
|
|
ui.Cvar_Set( "handicap", "100" );
|
|
|
|
s_holodeck.supereasy.generic.flags &= ~ QMF_BLINK;
|
|
s_holodeck.easy.generic.flags &= ~ QMF_BLINK;
|
|
s_holodeck.medium.generic.flags &= ~ QMF_BLINK;
|
|
s_holodeck.hard.generic.flags |= QMF_BLINK;
|
|
break;
|
|
|
|
case ID_LEAVEHOLODECK:
|
|
if (returnCommand)
|
|
{
|
|
UI_ForceMenuOff ();
|
|
ui.Cmd_ExecuteText( EXEC_APPEND, returnCommand);
|
|
}
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
HolodeckMenu_Key
|
|
=================
|
|
*/
|
|
sfxHandle_t HolodeckMenu_Key (int key)
|
|
{
|
|
if ( key == K_ESCAPE )
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
return ( Menu_DefaultKey( &s_holodeck.menu, key ) );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
M_HolodeckMenu_Graphics
|
|
=================
|
|
*/
|
|
void M_HolodeckMenu_Graphics (void)
|
|
{
|
|
menubitmap_s *holdDeck;
|
|
int i,length,xHolodeckStart;
|
|
int numColor,roundColor;
|
|
|
|
// Draw the basic screen frame
|
|
|
|
|
|
xHolodeckStart = 40;
|
|
length = UI_ProportionalStringWidth( menu_normal_text[MNT_HOLODECK],UI_BIGFONT);
|
|
length += 4;
|
|
|
|
ui.R_SetColor( colorTable[CT_LTBLUE1]);
|
|
|
|
UI_DrawHandlePic( 20, 24, 16, 32, s_holodeck.leftRound);
|
|
// Top corners
|
|
UI_DrawHandlePic( 388, 24, 32, 32, s_holodeck.corner_ur_24_30);
|
|
UI_DrawHandlePic( 390, 354, 32, 32, s_holodeck.corner_ll_12_30);
|
|
|
|
// Bottom corners
|
|
ui.R_SetColor( colorTable[CT_LTBLUE1]);
|
|
UI_DrawHandlePic( 560, 375, -64, -16, s_holodeck.corner_ll_12_60);
|
|
UI_DrawHandlePic( 560, 440, -64, 16, s_holodeck.corner_ll_12_60);
|
|
|
|
|
|
ui.R_SetColor( colorTable[CT_LTBLUE1]);
|
|
UI_DrawHandlePic( xHolodeckStart + length, 24,
|
|
412 - (xHolodeckStart + length), 24, uis.whiteShader); //
|
|
|
|
ui.R_SetColor( colorTable[CT_LTBROWN1]);
|
|
UI_DrawHandlePic( 390, 72, 30, 262, uis.whiteShader); // Center column
|
|
ui.R_SetColor( colorTable[CT_LTBLUE1]);
|
|
UI_DrawHandlePic( 390, 36, 30, 33, uis.whiteShader); //
|
|
UI_DrawHandlePic( 390, 338, 30, 26, uis.whiteShader); //
|
|
|
|
UI_DrawHandlePic( 403, 356, 221, 12, uis.whiteShader); //
|
|
UI_DrawHandlePic( 21, 376, 204, 12, uis.whiteShader); //
|
|
UI_DrawHandlePic( 230, 376, 384, 12, uis.whiteShader); //
|
|
|
|
ui.R_SetColor( colorTable[CT_LTBROWN1]);
|
|
UI_DrawHandlePic( 21, 443, 338, 12, uis.whiteShader); //
|
|
|
|
ui.R_SetColor( colorTable[CT_LTBLUE1]);
|
|
UI_DrawHandlePic( 564, 380, 60, 64, uis.whiteShader); //
|
|
UI_DrawHandlePic( 364, 443, 254, 12, uis.whiteShader); //
|
|
|
|
UI_DrawProportionalString( xHolodeckStart, 24,
|
|
menu_normal_text[MNT_HOLODECK], UI_BIGFONT, colorTable[CT_WHITE]);
|
|
|
|
UI_DrawProportionalString( 393, 75, "721",UI_TINYFONT, colorTable[CT_BLACK]);
|
|
UI_DrawProportionalString( 393, 342, "929",UI_TINYFONT, colorTable[CT_BLACK]);
|
|
UI_DrawProportionalString( 234, 378, "1021",UI_TINYFONT, colorTable[CT_BLACK]);
|
|
|
|
holdDeck = &s_holodeck.map1;
|
|
|
|
for (i=0;i<s_holodeck.maxMaps;i++)
|
|
{
|
|
if (mapDesc[i][0])
|
|
{
|
|
if (s_holodeck.chosenMap == i) // This deck was chosen
|
|
{
|
|
numColor = CT_LTGOLD1;
|
|
roundColor = CT_LTGOLD1;
|
|
}
|
|
else // This deck was not chosen
|
|
{
|
|
numColor = CT_WHITE;
|
|
roundColor = CT_DKAQUA;
|
|
}
|
|
|
|
UI_DrawProportionalString( holdDeck->generic.x - 6,
|
|
holdDeck->generic.y,
|
|
va("%d",i+1), UI_BIGFONT|UI_RIGHT, colorTable[numColor]);
|
|
|
|
ui.R_SetColor( colorTable[roundColor]);
|
|
UI_DrawHandlePic( holdDeck->generic.x - 45,
|
|
holdDeck->generic.y,
|
|
16, 32, s_holodeck.leftRound);
|
|
}
|
|
holdDeck++;
|
|
}
|
|
|
|
// Round graphic on left of quit button
|
|
ui.R_SetColor( colorTable[s_holodeck.quitmenu.color]);
|
|
|
|
UI_DrawHandlePic(s_holodeck.engage.generic.x - 14,
|
|
s_holodeck.engage.generic.y,
|
|
MENU_BUTTON_MED_HEIGHT, s_holodeck.engage.height, uis.graphicButtonLeftEnd);
|
|
|
|
UI_DrawHandlePic(s_holodeck.quitmenu.generic.x - 14,
|
|
s_holodeck.quitmenu.generic.y,
|
|
MENU_BUTTON_MED_HEIGHT, s_holodeck.quitmenu.height, uis.graphicButtonLeftEnd);
|
|
|
|
|
|
if (!(s_holodeck.resume.generic.flags & QMF_HIDDEN) && (s_holodeck.menuType!=2))
|
|
{
|
|
UI_DrawHandlePic(s_holodeck.resume.generic.x - 14,
|
|
s_holodeck.resume.generic.y,
|
|
MENU_BUTTON_MED_HEIGHT, s_holodeck.resume.height,
|
|
uis.graphicButtonLeftEnd);
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
HolodeckMenu_Draw
|
|
===============
|
|
*/
|
|
void HolodeckMenu_Draw(void)
|
|
{
|
|
M_HolodeckMenu_Graphics();
|
|
|
|
Menu_Draw( &s_holodeck.menu );
|
|
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
HolodeckMenu_Init
|
|
===============
|
|
*/
|
|
void HolodeckMenu_Init(void)
|
|
{
|
|
int y,pad,x;
|
|
menubitmap_s *holdDeck;
|
|
int i,width;
|
|
|
|
s_holodeck.menu.nitems = 0;
|
|
s_holodeck.menu.draw = HolodeckMenu_Draw;
|
|
s_holodeck.menu.key = HolodeckMenu_Key;
|
|
s_holodeck.menu.fullscreen = qtrue;
|
|
s_holodeck.menu.wrapAround = qtrue;
|
|
s_holodeck.menu.descX = MENU_DESC_X;
|
|
s_holodeck.menu.descY = MENU_DESC_Y;
|
|
s_holodeck.menu.titleX = MENU_TITLE_X;
|
|
s_holodeck.menu.titleY = MENU_TITLE_Y;
|
|
s_holodeck.menu.titleI = MNT_CREDITSMENU_TITLE;
|
|
s_holodeck.menu.footNoteEnum = MNT_CREDITS;
|
|
|
|
pad = PROP_BIG_HEIGHT + 10;
|
|
y = 72;
|
|
x = 65;
|
|
width = MENU_BUTTON_MED_WIDTH-20;
|
|
|
|
s_holodeck.chosenMap = -1;
|
|
s_holodeck.maxMaps = MAX_MAPS;
|
|
holdDeck = &s_holodeck.map1;
|
|
|
|
for (i=0;i<s_holodeck.maxMaps;i++)
|
|
{
|
|
holdDeck->generic.type = MTYPE_BITMAP;
|
|
holdDeck->generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
holdDeck->generic.x = x;
|
|
holdDeck->generic.y = y;
|
|
holdDeck->generic.name = GRAPHIC_BUTTONRIGHT;
|
|
holdDeck->generic.id = ID_DECK1 + i;
|
|
holdDeck->generic.callback = M_Holodeck_Event;
|
|
holdDeck->generic.statusbarfunc = Holodeck_StatusBar;
|
|
holdDeck->width = width;
|
|
holdDeck->height = PROP_BIG_HEIGHT;
|
|
holdDeck->color = CT_DKAQUA;
|
|
holdDeck->color2 = CT_LTAQUA;
|
|
holdDeck->textX = MENU_BUTTON_TEXT_X;
|
|
holdDeck->textY = 12;
|
|
holdDeck->textEnum = MBT_PROGRAM;
|
|
holdDeck->textcolor = CT_BLACK;
|
|
holdDeck->textcolor2 = CT_WHITE;
|
|
holdDeck->textStyle = UI_TINYFONT;
|
|
|
|
holdDeck++;
|
|
y += pad;
|
|
|
|
// Start the next column
|
|
if (i == ((s_holodeck.maxMaps-1)/2))
|
|
{
|
|
x += width + 80;
|
|
y = 80;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
s_holodeck.engage.generic.type = MTYPE_BITMAP;
|
|
s_holodeck.engage.generic.flags = QMF_GRAYED;
|
|
s_holodeck.engage.generic.x = 480;
|
|
s_holodeck.engage.generic.y = 72 + (pad * 6);
|
|
s_holodeck.engage.generic.name = GRAPHIC_BUTTONRIGHT;
|
|
s_holodeck.engage.generic.id = ID_ENGAGE;
|
|
s_holodeck.engage.generic.callback = M_Holodeck_Event;
|
|
s_holodeck.engage.width = width;
|
|
s_holodeck.engage.height = PROP_BIG_HEIGHT;
|
|
s_holodeck.engage.color = CT_DKORANGE;
|
|
s_holodeck.engage.color2 = CT_LTORANGE;
|
|
s_holodeck.engage.textX = MENU_BUTTON_TEXT_X;
|
|
s_holodeck.engage.textY = 6;
|
|
s_holodeck.engage.textEnum = MBT_PROGRAMENGAGE;
|
|
s_holodeck.engage.textcolor = CT_BLACK;
|
|
s_holodeck.engage.textcolor2 = CT_WHITE;
|
|
|
|
s_holodeck.quitmenu.generic.type = MTYPE_BITMAP;
|
|
s_holodeck.quitmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_holodeck.quitmenu.generic.x = 480;
|
|
s_holodeck.quitmenu.generic.y = 72 + (pad * 7);
|
|
s_holodeck.quitmenu.generic.name = GRAPHIC_BUTTONRIGHT;
|
|
s_holodeck.quitmenu.generic.id = ID_QUIT;
|
|
s_holodeck.quitmenu.generic.callback = M_Holodeck_Event;
|
|
s_holodeck.quitmenu.width = width;
|
|
s_holodeck.quitmenu.height = PROP_BIG_HEIGHT;
|
|
s_holodeck.quitmenu.color = CT_DKORANGE;
|
|
s_holodeck.quitmenu.color2 = CT_LTORANGE;
|
|
s_holodeck.quitmenu.textX = MENU_BUTTON_TEXT_X;
|
|
s_holodeck.quitmenu.textY = 6;
|
|
s_holodeck.quitmenu.textEnum = MBT_HOLODECKRETURN;
|
|
s_holodeck.quitmenu.textcolor = CT_BLACK;
|
|
s_holodeck.quitmenu.textcolor2 = CT_WHITE;
|
|
|
|
if (s_holodeck.menuType!=2)
|
|
{
|
|
s_holodeck.resume.generic.type = MTYPE_BITMAP;
|
|
s_holodeck.resume.generic.flags = QMF_HIGHLIGHT_IF_FOCUS | QMF_HIDDEN;
|
|
s_holodeck.resume.generic.x = 180;
|
|
s_holodeck.resume.generic.y = 72 + (pad * 8);
|
|
s_holodeck.resume.generic.name = GRAPHIC_BUTTONRIGHT;
|
|
s_holodeck.resume.generic.id = ID_RESUME;
|
|
s_holodeck.resume.generic.callback = M_Holodeck_Event;
|
|
s_holodeck.resume.width = width;
|
|
s_holodeck.resume.height = PROP_BIG_HEIGHT;
|
|
s_holodeck.resume.color = CT_DKORANGE;
|
|
s_holodeck.resume.color2 = CT_LTORANGE;
|
|
s_holodeck.resume.textX = MENU_BUTTON_TEXT_X;
|
|
s_holodeck.resume.textY = 6;
|
|
s_holodeck.resume.textEnum = MBT_RESUMEPROGRAM;
|
|
s_holodeck.resume.textcolor = CT_BLACK;
|
|
s_holodeck.resume.textcolor2 = CT_WHITE;
|
|
}
|
|
|
|
x = 450;
|
|
y = 52;
|
|
pad = 10;
|
|
s_holodeck.supereasy.generic.type = MTYPE_BITMAP;
|
|
s_holodeck.supereasy.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_holodeck.supereasy.generic.x = x;
|
|
s_holodeck.supereasy.generic.y = y;
|
|
s_holodeck.supereasy.generic.name = GRAPHIC_BUTTONRIGHT;
|
|
s_holodeck.supereasy.generic.id = ID_SUPEREASY;
|
|
s_holodeck.supereasy.generic.callback = M_Holodeck_Event;
|
|
s_holodeck.supereasy.width = MENU_BUTTON_MED_WIDTH;
|
|
s_holodeck.supereasy.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_holodeck.supereasy.color = CT_DKPURPLE1;
|
|
s_holodeck.supereasy.color2 = CT_LTPURPLE1;
|
|
s_holodeck.supereasy.textX = MENU_BUTTON_TEXT_X;
|
|
s_holodeck.supereasy.textY = MENU_BUTTON_TEXT_Y;
|
|
s_holodeck.supereasy.textEnum = MBT_SUPEREASY;
|
|
s_holodeck.supereasy.textcolor = CT_BLACK;
|
|
s_holodeck.supereasy.textcolor2 = CT_WHITE;
|
|
|
|
y += MENU_BUTTON_MED_HEIGHT + pad;
|
|
s_holodeck.easy.generic.type = MTYPE_BITMAP;
|
|
s_holodeck.easy.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_holodeck.easy.generic.x = x;
|
|
s_holodeck.easy.generic.y = y;
|
|
s_holodeck.easy.generic.name = GRAPHIC_BUTTONRIGHT;
|
|
s_holodeck.easy.generic.id = ID_EASY;
|
|
s_holodeck.easy.generic.callback = M_Holodeck_Event;
|
|
s_holodeck.easy.width = MENU_BUTTON_MED_WIDTH;
|
|
s_holodeck.easy.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_holodeck.easy.color = CT_DKPURPLE1;
|
|
s_holodeck.easy.color2 = CT_LTPURPLE1;
|
|
s_holodeck.easy.textX = MENU_BUTTON_TEXT_X;
|
|
s_holodeck.easy.textY = MENU_BUTTON_TEXT_Y;
|
|
s_holodeck.easy.textEnum = MBT_EASY;
|
|
s_holodeck.easy.textcolor = CT_BLACK;
|
|
s_holodeck.easy.textcolor2 = CT_WHITE;
|
|
|
|
y += MENU_BUTTON_MED_HEIGHT + pad;
|
|
s_holodeck.medium.generic.type = MTYPE_BITMAP;
|
|
s_holodeck.medium.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_holodeck.medium.generic.x = x;
|
|
s_holodeck.medium.generic.y = y;
|
|
s_holodeck.medium.generic.name = GRAPHIC_BUTTONRIGHT;
|
|
s_holodeck.medium.generic.id = ID_MEDIUM;
|
|
s_holodeck.medium.generic.callback = M_Holodeck_Event;
|
|
s_holodeck.medium.width = MENU_BUTTON_MED_WIDTH;
|
|
s_holodeck.medium.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_holodeck.medium.color = CT_DKPURPLE1;
|
|
s_holodeck.medium.color2 = CT_LTPURPLE1;
|
|
s_holodeck.medium.textX = MENU_BUTTON_TEXT_X;
|
|
s_holodeck.medium.textY = MENU_BUTTON_TEXT_Y;
|
|
s_holodeck.medium.textEnum = MBT_MEDIUM;
|
|
s_holodeck.medium.textcolor = CT_BLACK;
|
|
s_holodeck.medium.textcolor2 = CT_WHITE;
|
|
|
|
y += MENU_BUTTON_MED_HEIGHT + pad;
|
|
s_holodeck.hard.generic.type = MTYPE_BITMAP;
|
|
s_holodeck.hard.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_holodeck.hard.generic.x = x;
|
|
s_holodeck.hard.generic.y = y;
|
|
s_holodeck.hard.generic.name = GRAPHIC_BUTTONRIGHT;
|
|
s_holodeck.hard.generic.id = ID_HARD;
|
|
s_holodeck.hard.generic.callback = M_Holodeck_Event;
|
|
s_holodeck.hard.width = MENU_BUTTON_MED_WIDTH;
|
|
s_holodeck.hard.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_holodeck.hard.color = CT_DKPURPLE1;
|
|
s_holodeck.hard.color2 = CT_LTPURPLE1;
|
|
s_holodeck.hard.textX = MENU_BUTTON_TEXT_X;
|
|
s_holodeck.hard.textY = MENU_BUTTON_TEXT_Y;
|
|
s_holodeck.hard.textEnum = MBT_HARD;
|
|
s_holodeck.hard.textcolor = CT_BLACK;
|
|
s_holodeck.hard.textcolor2 = CT_WHITE;
|
|
|
|
y += MENU_BUTTON_MED_HEIGHT + pad;
|
|
s_holodeck.endholodeckprogram.generic.type = s_holodeck.quitmenu.generic.type;
|
|
s_holodeck.endholodeckprogram.generic.flags = s_holodeck.quitmenu.generic.flags;
|
|
s_holodeck.endholodeckprogram.generic.flags |= QMF_HIDDEN;
|
|
s_holodeck.endholodeckprogram.generic.x = s_holodeck.quitmenu.generic.x;
|
|
s_holodeck.endholodeckprogram.generic.y = s_holodeck.quitmenu.generic.y;
|
|
s_holodeck.endholodeckprogram.generic.name = s_holodeck.quitmenu.generic.name;
|
|
s_holodeck.endholodeckprogram.generic.id = ID_LEAVEHOLODECK;
|
|
s_holodeck.endholodeckprogram.generic.callback = M_Holodeck_Event;
|
|
s_holodeck.endholodeckprogram.width = s_holodeck.quitmenu.width;
|
|
s_holodeck.endholodeckprogram.height = s_holodeck.quitmenu.height;
|
|
s_holodeck.endholodeckprogram.color = s_holodeck.quitmenu.color;
|
|
s_holodeck.endholodeckprogram.color2 = s_holodeck.quitmenu.color2;
|
|
s_holodeck.endholodeckprogram.textX = s_holodeck.quitmenu.textX;
|
|
s_holodeck.endholodeckprogram.textY = s_holodeck.quitmenu.textY;
|
|
s_holodeck.endholodeckprogram.textEnum = MBT_QUITHOLODECK;
|
|
s_holodeck.endholodeckprogram.textcolor = s_holodeck.quitmenu.textcolor;
|
|
s_holodeck.endholodeckprogram.textcolor2 = s_holodeck.quitmenu.textcolor2;
|
|
|
|
|
|
Menu_AddItem( &s_holodeck.menu, &s_holodeck.supereasy );
|
|
Menu_AddItem( &s_holodeck.menu, &s_holodeck.easy );
|
|
Menu_AddItem( &s_holodeck.menu, &s_holodeck.medium );
|
|
Menu_AddItem( &s_holodeck.menu, &s_holodeck.hard );
|
|
Menu_AddItem( &s_holodeck.menu, &s_holodeck.endholodeckprogram );
|
|
if (s_holodeck.menuType!=2)
|
|
{
|
|
Menu_AddItem( &s_holodeck.menu, &s_holodeck.resume );
|
|
}
|
|
|
|
if (inHolodeck==qtrue)
|
|
{
|
|
s_holodeck.endholodeckprogram.generic.flags &= ~QMF_HIDDEN;
|
|
s_holodeck.resume.generic.flags &= ~QMF_HIDDEN;
|
|
}
|
|
else
|
|
{
|
|
Menu_AddItem( &s_holodeck.menu, &s_holodeck.quitmenu );
|
|
}
|
|
Menu_AddItem( &s_holodeck.menu, &s_holodeck.engage );
|
|
|
|
|
|
holdDeck = &s_holodeck.map1;
|
|
for (i=0;i<s_holodeck.maxMaps;i++)
|
|
{
|
|
if (mapDesc[i][0])
|
|
{
|
|
Menu_AddItem( &s_holodeck.menu, holdDeck );
|
|
}
|
|
holdDeck++;
|
|
}
|
|
|
|
switch ((int)ui.Cvar_VariableValue("g_spskill")) {
|
|
case 0: //easy
|
|
s_holodeck.supereasy.textcolor = CT_BLACK;
|
|
s_holodeck.easy.textcolor = CT_WHITE;
|
|
s_holodeck.medium.textcolor = CT_BLACK;
|
|
s_holodeck.hard.textcolor = CT_BLACK;
|
|
|
|
s_holodeck.supereasy.generic.flags &= ~ QMF_BLINK;
|
|
s_holodeck.easy.generic.flags |= QMF_BLINK;
|
|
s_holodeck.medium.generic.flags &= ~ QMF_BLINK;
|
|
s_holodeck.hard.generic.flags &= ~ QMF_BLINK;
|
|
break;
|
|
case 1: //med
|
|
s_holodeck.supereasy.textcolor = CT_BLACK;
|
|
s_holodeck.easy.textcolor = CT_BLACK;
|
|
s_holodeck.medium.textcolor = CT_WHITE;
|
|
s_holodeck.hard.textcolor = CT_BLACK;
|
|
|
|
s_holodeck.supereasy.generic.flags &= ~ QMF_BLINK;
|
|
s_holodeck.easy.generic.flags &= ~ QMF_BLINK;
|
|
s_holodeck.medium.generic.flags |= QMF_BLINK;
|
|
s_holodeck.hard.generic.flags &= ~ QMF_BLINK;
|
|
|
|
break;
|
|
default:
|
|
case 2: //hard
|
|
s_holodeck.supereasy.textcolor = CT_BLACK;
|
|
s_holodeck.easy.textcolor = CT_BLACK;
|
|
s_holodeck.medium.textcolor = CT_BLACK;
|
|
s_holodeck.hard.textcolor = CT_WHITE;
|
|
|
|
s_holodeck.supereasy.generic.flags &= ~ QMF_BLINK;
|
|
s_holodeck.easy.generic.flags &= ~ QMF_BLINK;
|
|
s_holodeck.medium.generic.flags &= ~ QMF_BLINK;
|
|
s_holodeck.hard.generic.flags |= QMF_BLINK;
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
UI_ParseHolodeckText
|
|
=================
|
|
*/
|
|
static void UI_ParseHolodeckText()
|
|
{
|
|
char *token;
|
|
char *buffer;
|
|
int i,deckNum;
|
|
|
|
memset(mapDesc,0,sizeof(mapDesc));
|
|
memset(mapDesc2,0,sizeof(mapDesc2));
|
|
memset(mapCommand,0,sizeof(mapCommand));
|
|
memset(mapInHoloCommand,0,sizeof(mapInHoloCommand));
|
|
|
|
memset(returnDesc,0,sizeof(returnDesc));
|
|
memset(returnDesc2,0,sizeof(returnDesc2));
|
|
memset(returnCommand,0,sizeof(returnCommand));
|
|
|
|
COM_BeginParseSession();
|
|
|
|
buffer = HolodeckText;
|
|
i = 1; // Zero is null string
|
|
while ( buffer )
|
|
{
|
|
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
|
|
if (!Q_strncmp(token,"RETURNBUTTON",12))
|
|
{
|
|
// Get description
|
|
token = COM_ParseExt( &buffer, qfalse );
|
|
Q_strncpyz(returnDesc, token, sizeof(returnDesc) );
|
|
|
|
// Get description
|
|
token = COM_ParseExt( &buffer, qfalse );
|
|
Q_strncpyz( returnDesc2, token, sizeof(returnDesc2) );
|
|
|
|
// Get command - this is ignored
|
|
token = COM_ParseExt( &buffer, qfalse );
|
|
|
|
// Get command
|
|
token = COM_ParseExt( &buffer, qfalse );
|
|
Q_strncpyz( returnCommand, token, sizeof(returnCommand) );
|
|
}
|
|
|
|
else if (!Q_strncmp(token,"MAP",3))
|
|
{
|
|
deckNum = atoi(&token[3]);
|
|
|
|
// Get description
|
|
token = COM_ParseExt( &buffer, qfalse );
|
|
Q_strncpyz( mapDesc[deckNum-1], token, sizeof(mapDesc[0]) );
|
|
|
|
// Get description
|
|
token = COM_ParseExt( &buffer, qfalse );
|
|
Q_strncpyz( mapDesc2[deckNum-1], token, sizeof(mapDesc2[0]) );
|
|
|
|
// Get holodeck command
|
|
token = COM_ParseExt( &buffer, qfalse );
|
|
Q_strncpyz( mapCommand[deckNum-1], token, sizeof(mapCommand[0]) );
|
|
|
|
// Get holomap command
|
|
token = COM_ParseExt( &buffer, qfalse );
|
|
Q_strncpyz( mapInHoloCommand[deckNum-1], token, sizeof(mapInHoloCommand[0]) );
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_HolodeckMenu_Cache
|
|
===============
|
|
*/
|
|
void UI_HolodeckMenu_Cache (void)
|
|
{
|
|
char *buffer;
|
|
char filename[MAX_QPATH];
|
|
int len;
|
|
|
|
s_holodeck.leftRound = ui.R_RegisterShaderNoMip("menu/common/halfroundl_24.tga");
|
|
s_holodeck.corner_ll_12_60 = ui.R_RegisterShaderNoMip("menu/common/corner_ll_12_60.tga");
|
|
s_holodeck.corner_ur_24_30 = ui.R_RegisterShaderNoMip("menu/common/corner_ur_24_30.tga");
|
|
s_holodeck.corner_ll_12_30 = ui.R_RegisterShaderNoMip("menu/common/corner_ll_12_30.tga");
|
|
|
|
UI_LanguageFilename("ext_data/sp_holodeck","dat",filename);
|
|
|
|
len = ui.FS_ReadFile( filename,(void **) &buffer );
|
|
|
|
if ( len == -1 )
|
|
{
|
|
ui.Error(ERR_FATAL, "UI_HolodeckMenu_Cache : SP_HOLODECK.DAT file not found!\n");
|
|
return;
|
|
}
|
|
|
|
if ( len > MAXHOLODECKTEXT )
|
|
{
|
|
ui.Error(ERR_FATAL, "UI_HolodeckMenu_Cache : SP_HOLODECK.DAT too big!\n");
|
|
return;
|
|
}
|
|
|
|
strncpy( HolodeckText, buffer, sizeof( HolodeckText ) - 1 );
|
|
ui.FS_FreeFile( buffer );
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
HolodeckMenu_LoadText
|
|
===============
|
|
*/
|
|
void HolodeckMenu_LoadText (void)
|
|
{
|
|
|
|
UI_HolodeckMenu_Cache();
|
|
|
|
UI_ParseHolodeckText();
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_HolodeckMenu
|
|
===============
|
|
*/
|
|
void UI_HolodeckMenu(int menuType)
|
|
{
|
|
uis.menusp = 0;
|
|
|
|
ingameFlag = qtrue; // true when in game menu is in use
|
|
|
|
inHolodeck = qfalse;
|
|
if (menuType==1)
|
|
{
|
|
inHolodeck = qtrue;
|
|
}
|
|
else if (menuType==2)
|
|
{
|
|
inHolodeck = qtrue;
|
|
}
|
|
|
|
s_holodeck.menuType = menuType;
|
|
|
|
Mouse_Show();
|
|
|
|
HolodeckMenu_LoadText();
|
|
|
|
HolodeckMenu_Init();
|
|
|
|
UI_PushMenu( &s_holodeck.menu );
|
|
|
|
Menu_AdjustCursor( &s_holodeck.menu, 1 );
|
|
}
|
|
|
|
void ChangeLogDesc(int id);
|
|
|
|
#define ID_LOGBUTTON1 11
|
|
#define ID_LOGBUTTON2 12
|
|
#define ID_LOGBUTTON3 13
|
|
#define ID_LOGBUTTON4 14
|
|
#define ID_LOGBUTTON5 15
|
|
#define ID_LOGBUTTON6 16
|
|
#define ID_LOGBUTTON7 17
|
|
#define ID_LOGBUTTON8 18
|
|
#define ID_LOGBUTTON9 19
|
|
#define ID_LOGBUTTON10 20
|
|
#define ID_LOGBUTTON11 21
|
|
#define ID_LOGBUTTON12 22
|
|
|
|
|
|
static struct
|
|
{
|
|
menuframework_s menu;
|
|
qhandle_t leftRound;
|
|
qhandle_t corner_ur_20_24;
|
|
qhandle_t corner_lr_18_20;
|
|
qhandle_t corner_ll_8_47;
|
|
qhandle_t corner_ll_18_47;
|
|
|
|
int lineCnt; // # of lines in description
|
|
int currentLog; // Index to current log being read in
|
|
int maxButtons; // Count of stardate buttons
|
|
int currentButton; // Currently selected stardate button
|
|
int currentText;
|
|
int screenType; // 0=Normal Logs, 1=PADDs
|
|
menubitmap_s quitMenu;
|
|
menubitmap_s buttonArrowUp;
|
|
menubitmap_s buttonArrowDown;
|
|
menubitmap_s textArrowDown;
|
|
menubitmap_s textArrowUp;
|
|
int topButton; // Which line is at the top of the displayed buttons
|
|
int topText; // Which line is at the top of the text
|
|
int chosenButton; // Hi-lite subtopic button
|
|
menubitmap_s logButton1;
|
|
menubitmap_s logButton2;
|
|
menubitmap_s logButton3;
|
|
menubitmap_s logButton4;
|
|
menubitmap_s logButton5;
|
|
menubitmap_s logButton6;
|
|
menubitmap_s logButton7;
|
|
menubitmap_s logButton8;
|
|
menubitmap_s logButton9;
|
|
menubitmap_s logButton10;
|
|
menubitmap_s logButton11;
|
|
menubitmap_s logButton12;
|
|
} s_log;
|
|
|
|
#define LOGWAITTIME 25
|
|
#define MAXLOGS 60 // # of logs
|
|
#define MAXLOGBUTTONS 30 // # of buttons per log
|
|
#define MAXLOGSHOWBUTTONS 12 // # of displayable buttons
|
|
|
|
typedef struct
|
|
{
|
|
char *logName; // Name to index log
|
|
char *name; // Full name of crewmember
|
|
char *stardate; // Stardate of PADD
|
|
char *buttonText[MAXLOGBUTTONS]; // Text for each button on crewmember's log
|
|
char *headingText[MAXLOGBUTTONS]; // Heading of each button
|
|
char *logText[MAXLOGBUTTONS]; // Log text for current button
|
|
int textY[MAXLOGBUTTONS]; // Starting Y position for each text
|
|
int menuType; // Type of menu MENUTYPE_
|
|
int cntButton;
|
|
char *model[MAXLOGBUTTONS]; // Model
|
|
qhandle_t modelHandle[MAXLOGBUTTONS]; // Handle to model
|
|
int modelX[MAXLOGBUTTONS]; // Model x location
|
|
int modelY[MAXLOGBUTTONS]; // Model y location
|
|
int modelDistance[MAXLOGBUTTONS]; // Model's distance from camera
|
|
int modelOriginY[MAXLOGBUTTONS]; // Model change in Y origin
|
|
int modelYaw[MAXLOGBUTTONS]; // Model's YAW from camera (0 to rotate)
|
|
int modelPitch[MAXLOGBUTTONS]; // Model's PITCH
|
|
int modelRoll[MAXLOGBUTTONS]; // Model's ROLL
|
|
} logText_t;
|
|
|
|
logText_t logText[MAXLOGS];
|
|
|
|
#define MAXLOGSTEXT 110000
|
|
static char LogsText[MAXLOGSTEXT];
|
|
|
|
static struct
|
|
{
|
|
menuframework_s menu;
|
|
qhandle_t leftRound;
|
|
qhandle_t corner_ur_20_24;
|
|
qhandle_t corner_lr_18_20;
|
|
qhandle_t corner_ll_8_47;
|
|
qhandle_t corner_ll_18_47;
|
|
|
|
int lineCnt; // # of lines in description
|
|
int currentPadd; // Index to current log being read in
|
|
menubitmap_s quitMenu;
|
|
} s_padd;
|
|
|
|
#define MAXPADDS 30 // # of padds
|
|
#define MAXPADDHEADINGS 4
|
|
#define MAXPADDTEXTS 4
|
|
|
|
typedef struct
|
|
{
|
|
char *paddName; // Name to index log
|
|
char *headingText[MAXPADDHEADINGS]; // Heading of each button
|
|
char *paddText[MAXPADDTEXTS]; // Log text for current button
|
|
int menuType; // Type of menu MENUTYPE_
|
|
int cntButton;
|
|
} paddText_t;
|
|
|
|
paddText_t paddText[MAXPADDS];
|
|
|
|
#define MAXPADDSTEXT 25000
|
|
static char PaddsText[MAXPADDSTEXT];
|
|
|
|
// Log Menu Graphics
|
|
typedef enum
|
|
{
|
|
LMG_CURRENT_DESC,
|
|
LMG_BIO_DESC1,
|
|
LMG_BIO_DESC2,
|
|
LMG_BIO_DESC3,
|
|
LMG_BIO_DESC4,
|
|
LMG_BIO_DESC5,
|
|
LMG_BIO_DESC6,
|
|
LMG_BIO_DESC7,
|
|
LMG_BIO_DESC8,
|
|
LMG_BIO_DESC9,
|
|
LMG_BIO_DESC10,
|
|
LMG_BIO_DESC11,
|
|
LMG_BIO_DESC12,
|
|
LMG_BIO_DESC13,
|
|
LMG_BIO_DESC14,
|
|
LMG_BIO_DESC15,
|
|
LMG_BIO_DESC16,
|
|
LMG_BIO_DESC17,
|
|
LMG_BIO_DESC18,
|
|
LMG_BIO_DESC19,
|
|
LMG_BIO_DESC20,
|
|
LMG_BIO_DESC21,
|
|
LMG_BIO_DESC22,
|
|
LMG_BIO_DESC23,
|
|
LMG_BIO_DESC24,
|
|
LMG_BIO_DESC25,
|
|
LMG_MAX
|
|
} logmenu_graphics_t;
|
|
|
|
#define LOG_MAXDESC 25
|
|
char logDesc[LOG_MAXDESC][512];
|
|
|
|
menugraphics_s logmenu_graphics[LMG_MAX] =
|
|
{
|
|
MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0,0, NULL, 0, 0, 0, 0, 0, CT_NONE, NULL, // LMG_CURRENT_DESC
|
|
|
|
// type timer x y width height file/text graphic, min max target inc style color pointer
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[0],0,0, NULL, 0, 0, LMG_BIO_DESC2, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC1
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[1],0,0, NULL, 0, 0, LMG_BIO_DESC3, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC2
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[2],0,0, NULL, 0, 0, LMG_BIO_DESC4, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC3
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[3],0,0, NULL, 0, 0, LMG_BIO_DESC5, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC4
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[4],0,0, NULL, 0, 0, LMG_BIO_DESC6, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC5
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[5],0,0, NULL, 0, 0, LMG_BIO_DESC7, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC6
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[6],0,0, NULL, 0, 0, LMG_BIO_DESC8, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC7
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[7],0,0, NULL, 0, 0, LMG_BIO_DESC9, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC8
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[8],0,0, NULL, 0, 0, LMG_BIO_DESC10, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC9
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[9],0,0, NULL, 0, 0, LMG_BIO_DESC11, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC10
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[10],0,0, NULL, 0, 0, LMG_BIO_DESC12, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC11
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[11],0,0, NULL, 0, 0, LMG_BIO_DESC13, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC12
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[12],0,0, NULL, 0, 0, LMG_BIO_DESC14, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC13
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[13],0,0, NULL, 0, 0, LMG_BIO_DESC15, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC14
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[14],0,0, NULL, 0, 0, LMG_BIO_DESC16, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC15
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[15],0,0, NULL, 0, 0, LMG_BIO_DESC17, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC16
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[16],0,0, NULL, 0, 0, LMG_BIO_DESC18, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC17
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[17],0,0, NULL, 0, 0, LMG_BIO_DESC19, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC18
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[18],0,0, NULL, 0, 0, LMG_BIO_DESC20, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC19
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[19],0,0, NULL, 0, 0, LMG_BIO_DESC21, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC20
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[20],0,0, NULL, 0, 0, LMG_BIO_DESC22, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC21
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[21],0,0, NULL, 0, 0, LMG_BIO_DESC23, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC22
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[22],0,0, NULL, 0, 0, LMG_BIO_DESC24, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC23
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[23],0,0, NULL, 0, 0, LMG_BIO_DESC25, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC24
|
|
MG_STRING, 0.0, 242, 0, 0, 0, logDesc[24],0,0, NULL, 0, 0, NULL, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC25
|
|
};
|
|
|
|
|
|
|
|
|
|
// Padd Menu Graphics
|
|
typedef enum
|
|
{
|
|
PMG_CURRENT_DESC,
|
|
PMG_BIO_DESC1,
|
|
PMG_BIO_DESC2,
|
|
PMG_BIO_DESC3,
|
|
PMG_BIO_DESC4,
|
|
PMG_BIO_DESC5,
|
|
PMG_BIO_DESC6,
|
|
PMG_BIO_DESC7,
|
|
PMG_BIO_DESC8,
|
|
PMG_BIO_DESC9,
|
|
PMG_BIO_DESC10,
|
|
PMG_BIO_DESC11,
|
|
PMG_BIO_DESC12,
|
|
PMG_BIO_DESC13,
|
|
PMG_BIO_DESC14,
|
|
PMG_BIO_DESC15,
|
|
PMG_BIO_DESC16,
|
|
PMG_BIO_DESC17,
|
|
PMG_BIO_DESC18,
|
|
PMG_BIO_DESC19,
|
|
PMG_BIO_DESC20,
|
|
PMG_BIO_DESC21,
|
|
PMG_BIO_DESC22,
|
|
PMG_BIO_DESC23,
|
|
PMG_BIO_DESC24,
|
|
PMG_BIO_DESC25,
|
|
PMG_MAX
|
|
} paddmenu_graphics_t;
|
|
|
|
#define PADD_MAXDESC 25
|
|
char paddDesc[PADD_MAXDESC][512];
|
|
|
|
menugraphics_s paddmenu_graphics[PMG_MAX] =
|
|
{
|
|
MG_VAR, 0.0, 0, 0, 0, 0, NULL, 0,0, NULL, 0, 0, 0, 0, 0, CT_NONE, NULL, // LMG_CURRENT_DESC
|
|
|
|
// type timer x y width height file/text graphic, min max target inc style color pointer
|
|
MG_STRING, 0.0, 100, 0, 0, 0, paddDesc[0],0,0, NULL, 0, 0, LMG_BIO_DESC2, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC1
|
|
MG_STRING, 0.0, 100, 0, 0, 0, paddDesc[1],0,0, NULL, 0, 0, LMG_BIO_DESC3, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC2
|
|
MG_STRING, 0.0, 100, 0, 0, 0, paddDesc[2],0,0, NULL, 0, 0, LMG_BIO_DESC4, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC3
|
|
MG_STRING, 0.0, 100, 0, 0, 0, paddDesc[3],0,0, NULL, 0, 0, LMG_BIO_DESC5, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC4
|
|
MG_STRING, 0.0, 100, 0, 0, 0, paddDesc[4],0,0, NULL, 0, 0, LMG_BIO_DESC6, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC5
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[5],0,0, NULL, 0, 0, LMG_BIO_DESC7, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC6
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[6],0,0, NULL, 0, 0, LMG_BIO_DESC8, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC7
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[7],0,0, NULL, 0, 0, LMG_BIO_DESC9, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC8
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[8],0,0, NULL, 0, 0, LMG_BIO_DESC10, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC9
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[9],0,0, NULL, 0, 0, LMG_BIO_DESC11, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC10
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[10],0,0, NULL, 0, 0, LMG_BIO_DESC12, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC11
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[11],0,0, NULL, 0, 0, LMG_BIO_DESC13, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC12
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[12],0,0, NULL, 0, 0, LMG_BIO_DESC14, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC13
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[13],0,0, NULL, 0, 0, LMG_BIO_DESC15, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC14
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[14],0,0, NULL, 0, 0, LMG_BIO_DESC16, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC15
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[15],0,0, NULL, 0, 0, LMG_BIO_DESC17, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC16
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[16],0,0, NULL, 0, 0, LMG_BIO_DESC18, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC17
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[17],0,0, NULL, 0, 0, LMG_BIO_DESC19, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC18
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[18],0,0, NULL, 0, 0, LMG_BIO_DESC20, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC19
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[19],0,0, NULL, 0, 0, LMG_BIO_DESC21, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC20
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[20],0,0, NULL, 0, 0, LMG_BIO_DESC22, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC21
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[21],0,0, NULL, 0, 0, LMG_BIO_DESC23, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC22
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[22],0,0, NULL, 0, 0, LMG_BIO_DESC24, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC23
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[23],0,0, NULL, 0, 0, LMG_BIO_DESC25, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC24
|
|
MG_STRING, 0.0, 242, 0, 0, 0, paddDesc[24],0,0, NULL, 0, 0, NULL, 0, UI_TINYFONT, CT_VLTGOLD1, NULL, // LMG_BIO_DESC25
|
|
};
|
|
|
|
/*
|
|
=================
|
|
M_Log_Event
|
|
=================
|
|
*/
|
|
void M_Log_Event (void* ptr, int notification)
|
|
{
|
|
int id,i;
|
|
menubitmap_s *holdButton;
|
|
|
|
if (notification != QM_ACTIVATED)
|
|
{
|
|
return;
|
|
}
|
|
|
|
id = ((menucommon_s*)ptr)->id;
|
|
|
|
switch (id)
|
|
{
|
|
case ID_QUIT:
|
|
UI_PopMenu();
|
|
break;
|
|
case ID_LOGBUTTON1:
|
|
case ID_LOGBUTTON2:
|
|
case ID_LOGBUTTON3:
|
|
case ID_LOGBUTTON4:
|
|
case ID_LOGBUTTON5:
|
|
case ID_LOGBUTTON6:
|
|
case ID_LOGBUTTON7:
|
|
case ID_LOGBUTTON8:
|
|
case ID_LOGBUTTON9:
|
|
case ID_LOGBUTTON10:
|
|
case ID_LOGBUTTON11:
|
|
case ID_LOGBUTTON12:
|
|
ChangeLogDesc(s_log.topButton + (id-ID_LOGBUTTON1));
|
|
|
|
holdButton = &s_log.logButton1;
|
|
holdButton += s_log.chosenButton;
|
|
holdButton->textcolor = CT_BLACK;
|
|
|
|
holdButton = &s_log.logButton1;
|
|
holdButton += (id-ID_LOGBUTTON1);
|
|
holdButton->textcolor = CT_VLTGOLD1;
|
|
|
|
s_log.chosenButton = (id-ID_LOGBUTTON1);
|
|
|
|
break;
|
|
|
|
case ID_ARROW1UP:
|
|
if ((s_log.topButton - 1) >= 0)
|
|
{
|
|
s_log.topButton--;
|
|
|
|
holdButton = &s_log.logButton1;
|
|
|
|
for (i=s_log.topButton;i<(s_log.topButton + MAXLOGSHOWBUTTONS);i++)
|
|
{
|
|
holdButton->textPtr = logText[s_log.currentLog].buttonText[i];
|
|
holdButton++;
|
|
}
|
|
|
|
// Dark old hi-lite
|
|
if ((s_log.chosenButton >=0) && (s_log.chosenButton < MAXLOGSHOWBUTTONS))
|
|
{
|
|
holdButton = &s_log.logButton1;
|
|
holdButton += s_log.chosenButton;
|
|
holdButton->textcolor = CT_BLACK;
|
|
}
|
|
|
|
s_log.chosenButton++;
|
|
|
|
// Hi-lite new button
|
|
if ((s_log.chosenButton >=0) && (s_log.chosenButton < MAXLOGSHOWBUTTONS))
|
|
{
|
|
holdButton = &s_log.logButton1;
|
|
holdButton += s_log.chosenButton;
|
|
holdButton->textcolor = CT_VLTGOLD1;
|
|
}
|
|
}
|
|
|
|
// Show down arrow indicator
|
|
s_log.buttonArrowDown.generic.flags &= ~QMF_HIDDEN;
|
|
|
|
// Show up arrow indicator???
|
|
if (s_log.topButton == 0)
|
|
{
|
|
s_log.buttonArrowUp.generic.flags |= QMF_HIDDEN;
|
|
}
|
|
else
|
|
{
|
|
s_log.buttonArrowUp.generic.flags &= ~QMF_HIDDEN;
|
|
}
|
|
|
|
break;
|
|
|
|
case ID_ARROW1DOWN:
|
|
if (((s_log.topButton + 1) + MAXLOGSHOWBUTTONS) <= logText[s_log.currentLog].cntButton)
|
|
{
|
|
s_log.topButton++;
|
|
|
|
holdButton = &s_log.logButton1;
|
|
|
|
for (i=s_log.topButton;i<(s_log.topButton + MAXLOGSHOWBUTTONS);i++)
|
|
{
|
|
holdButton->textPtr = logText[s_log.currentLog].buttonText[i];
|
|
holdButton++;
|
|
}
|
|
|
|
// Dark old hi-lite
|
|
if ((s_log.chosenButton >=0) && (s_log.chosenButton < MAXLOGSHOWBUTTONS))
|
|
{
|
|
holdButton = &s_log.logButton1;
|
|
holdButton += s_log.chosenButton;
|
|
holdButton->textcolor = CT_BLACK;
|
|
}
|
|
|
|
s_log.chosenButton--;
|
|
|
|
// Hi-lite new button
|
|
if ((s_log.chosenButton >=0) && (s_log.chosenButton < MAXLOGSHOWBUTTONS))
|
|
{
|
|
holdButton = &s_log.logButton1;
|
|
holdButton += s_log.chosenButton;
|
|
holdButton->textcolor = CT_VLTGOLD1;
|
|
}
|
|
}
|
|
|
|
// Show up arrow indicator
|
|
s_log.buttonArrowUp.generic.flags &= ~QMF_HIDDEN;
|
|
|
|
// Show down arrow indicator???
|
|
if ((s_log.topButton + MAXLOGSHOWBUTTONS) >= logText[s_log.currentLog].cntButton)
|
|
{
|
|
s_log.buttonArrowDown.generic.flags |= QMF_HIDDEN;
|
|
}
|
|
else
|
|
{
|
|
s_log.buttonArrowDown.generic.flags &= ~QMF_HIDDEN;
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
Log_StatusBar
|
|
=================
|
|
*/
|
|
static void Log_StatusBar(void *itemptr)
|
|
{
|
|
int id;
|
|
|
|
id = ((menucommon_s*)itemptr)->id;
|
|
|
|
switch (id)
|
|
{
|
|
case ID_LOGBUTTON1:
|
|
case ID_LOGBUTTON2:
|
|
case ID_LOGBUTTON3:
|
|
case ID_LOGBUTTON4:
|
|
case ID_LOGBUTTON5:
|
|
case ID_LOGBUTTON6:
|
|
case ID_LOGBUTTON7:
|
|
case ID_LOGBUTTON8:
|
|
case ID_LOGBUTTON9:
|
|
case ID_LOGBUTTON10:
|
|
case ID_LOGBUTTON11:
|
|
case ID_LOGBUTTON12:
|
|
if (logText[s_log.currentLog].headingText[s_log.topButton + (id-ID_LOGBUTTON1)])
|
|
{
|
|
UI_DrawProportionalString( 320, 410, logText[s_log.currentLog].headingText[s_log.topButton + (id-ID_LOGBUTTON1)], UI_CENTER|UI_SMALLFONT, colorTable[CT_VLTGOLD1]);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
/*
|
|
=================
|
|
LogMenu_Key
|
|
=================
|
|
*/
|
|
sfxHandle_t LogMenu_Key (int key)
|
|
{
|
|
return ( Menu_DefaultKey( &s_log.menu, key ) );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
CrewMenu_Blinkies
|
|
=================
|
|
*/
|
|
void LogMenu_Blinkies (void)
|
|
{
|
|
int descI;
|
|
|
|
// Turning on description a line at a time
|
|
if ((logmenu_graphics[LMG_CURRENT_DESC].timer < uis.realtime) && (logmenu_graphics[LMG_CURRENT_DESC].type == MG_VAR))
|
|
{
|
|
descI = logmenu_graphics[LMG_CURRENT_DESC].target;
|
|
if (!descI)
|
|
{
|
|
logmenu_graphics[LMG_CURRENT_DESC].type = MG_OFF;
|
|
}
|
|
else
|
|
{
|
|
if (s_log.lineCnt >= (descI - LMG_BIO_DESC1))
|
|
{
|
|
logmenu_graphics[descI].type = MG_STRING; // Turnon string
|
|
ui.S_StartLocalSound( uis.menu_datadisp2_snd, CHAN_MENU1 );
|
|
logmenu_graphics[LMG_CURRENT_DESC].target = logmenu_graphics[descI].target; // Set up next line
|
|
logmenu_graphics[LMG_CURRENT_DESC].timer = uis.realtime + LOGWAITTIME;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
SplitLogDesc
|
|
=================
|
|
*/
|
|
static void SplitLogDesc(char *s,int width)
|
|
{
|
|
int lineWidth,currentWidth,charCnt,currentLineI;
|
|
char *holds;
|
|
char holdChar[2];
|
|
int nextLine;
|
|
|
|
// Clean out any old data
|
|
memset(logDesc,0,sizeof(logDesc));
|
|
|
|
// Break into individual lines
|
|
holds = s;
|
|
|
|
lineWidth = width; // How long (in pixels) a line can be
|
|
currentWidth = 0;
|
|
holdChar[1] = '\0';
|
|
charCnt= 0;
|
|
currentLineI = 0;
|
|
s_log.lineCnt = 0;
|
|
|
|
while( *s )
|
|
{
|
|
++charCnt;
|
|
holdChar[0] = *s;
|
|
|
|
// Advance to next line.
|
|
if ((*s == '/') && (*(s + 1) == 'n'))
|
|
{
|
|
s++; // Advance to next character
|
|
currentWidth = 0;
|
|
nextLine = qtrue;
|
|
}
|
|
else
|
|
{
|
|
nextLine = qfalse;
|
|
currentWidth += UI_ProportionalStringWidth(holdChar,UI_TINYFONT);
|
|
currentWidth +=1; // The space between characters
|
|
}
|
|
|
|
if ((currentWidth >= lineWidth ) || (nextLine))
|
|
{//Reached max length of this line
|
|
//step back until we find a space
|
|
|
|
while((currentWidth) && (*s != ' '))
|
|
{
|
|
holdChar[0] = *s;
|
|
currentWidth -= UI_ProportionalStringWidth(holdChar,UI_TINYFONT);
|
|
--s;
|
|
--charCnt;
|
|
}
|
|
|
|
Q_strncpyz( logDesc[currentLineI], holds, charCnt);
|
|
logDesc[currentLineI][charCnt] = NULL;
|
|
|
|
++currentLineI;
|
|
currentWidth = 0;
|
|
charCnt = 0;
|
|
|
|
holds = s;
|
|
++holds;
|
|
|
|
s_log.lineCnt++;
|
|
|
|
if (currentLineI > LOG_MAXDESC)
|
|
{
|
|
break;
|
|
}
|
|
|
|
}
|
|
++s;
|
|
}
|
|
|
|
++charCnt; // So the NULL will be properly placed at the end of the string of Q_strncpyz
|
|
Q_strncpyz( logDesc[currentLineI], holds, charCnt);
|
|
logDesc[currentLineI][charCnt] = NULL;
|
|
|
|
}
|
|
|
|
/*
|
|
=================
|
|
TurnOnLogDesc
|
|
=================
|
|
*/
|
|
static void TurnOnLogDesc(char *s,int lineWidth,int startY)
|
|
{
|
|
int y,i;
|
|
|
|
logmenu_graphics[LMG_BIO_DESC1].type = MG_STRING;
|
|
logmenu_graphics[LMG_CURRENT_DESC].target = logmenu_graphics[LMG_BIO_DESC1].target; // Set up next line
|
|
|
|
logmenu_graphics[LMG_CURRENT_DESC].type = MG_VAR;
|
|
logmenu_graphics[LMG_CURRENT_DESC].timer = uis.realtime + LOGWAITTIME;
|
|
|
|
// Split up big description line
|
|
SplitLogDesc(s,lineWidth);
|
|
|
|
y = startY;
|
|
|
|
for (i=LMG_BIO_DESC1; i<(LMG_BIO_DESC1 +LOG_MAXDESC );i++)
|
|
{
|
|
logmenu_graphics[i].x = 242;
|
|
logmenu_graphics[i].y = y;
|
|
y += 12;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
/*
|
|
=================
|
|
ChangeLogDesc
|
|
=================
|
|
*/
|
|
void ChangeLogDesc(int id)
|
|
{
|
|
int i;
|
|
|
|
if (s_log.currentButton == id)
|
|
{
|
|
return; // Just hitting the same key again
|
|
}
|
|
else // Turn off old description
|
|
{
|
|
|
|
s_log.currentButton = id;
|
|
|
|
for (i=0;i<(LMG_MAX - LMG_BIO_DESC1);++i)
|
|
{
|
|
logmenu_graphics[LMG_BIO_DESC1 + i].type = MG_OFF; // Turn off text
|
|
}
|
|
}
|
|
|
|
// Turn on description for new ID
|
|
TurnOnLogDesc(logText[s_log.currentLog].logText[s_log.currentButton],360,logText[s_log.currentLog].textY[s_log.currentButton]);
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
=================
|
|
M_Padd2Menu_Graphics
|
|
=================
|
|
*/
|
|
void M_Padd2Menu_Graphics (void)
|
|
{
|
|
int nameX,length,stardateX;
|
|
char *title1Ptr,*title2Ptr;
|
|
int color1,color2,color3,color4;
|
|
|
|
|
|
|
|
if (logText[s_log.currentLog].menuType == MENUTYPE_ENGINEERINGLIBRARY)
|
|
{
|
|
title1Ptr = menu_normal_text[MNT_DATA];
|
|
title2Ptr = logText[s_log.currentLog].name;
|
|
color1 = CT_VDKPURPLE2;
|
|
color2 = CT_VDKORANGE;
|
|
color3 = CT_DKPURPLE2;
|
|
color4 = CT_LTPURPLE2;
|
|
}
|
|
else if (logText[s_log.currentLog].menuType == MENUTYPE_CARGO)
|
|
{
|
|
title1Ptr = menu_normal_text[MNT_DATA];
|
|
title2Ptr = logText[s_log.currentLog].name;
|
|
color1 = CT_VDKPURPLE1;
|
|
color2 = CT_VDKORANGE;
|
|
color3 = CT_DKPURPLE1;
|
|
color4 = CT_LTPURPLE1;
|
|
}
|
|
else if (logText[s_log.currentLog].menuType == MENUTYPE_WEAPONLIBRARY)
|
|
{
|
|
title1Ptr = menu_normal_text[MNT_DATA];
|
|
title2Ptr = logText[s_log.currentLog].name;
|
|
color1 = CT_VDKPURPLE3;
|
|
color2 = CT_VDKORANGE;
|
|
color3 = CT_DKPURPLE3;
|
|
color4 = CT_LTPURPLE3;
|
|
}
|
|
else if (logText[s_log.currentLog].menuType == MENUTYPE_SHOOTINGRANGE)
|
|
{
|
|
title1Ptr = menu_normal_text[MNT_DATA];
|
|
title2Ptr = logText[s_log.currentLog].name;
|
|
color1 = CT_VDKRED1;
|
|
color2 = CT_VDKORANGE;
|
|
color3 = CT_DKRED1;
|
|
color4 = CT_LTRED1;
|
|
}
|
|
else if (logText[s_log.currentLog].menuType == MENUTYPE_DISEASELIBRARY)
|
|
{
|
|
title1Ptr = menu_normal_text[MNT_MEDICAL];
|
|
title2Ptr = logText[s_log.currentLog].name;
|
|
color1 = CT_VDKBLUE1;
|
|
color2 = CT_VDKORANGE;
|
|
color3 = CT_DKBLUE1;
|
|
color4 = CT_LTBLUE1;
|
|
}
|
|
else
|
|
{
|
|
title1Ptr = "PADD";
|
|
title2Ptr = logText[s_log.currentLog].name;
|
|
color1 = CT_VDKBROWN1;
|
|
color2 = CT_VDKORANGE;
|
|
color3 = CT_DKBROWN1;
|
|
color4 = CT_LTBROWN1;
|
|
}
|
|
|
|
|
|
// Draw the basic screen frame
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 30, 24,16, 32, s_log.leftRound);
|
|
|
|
// Left corners
|
|
UI_DrawHandlePic( 181, 24, 32, 32, s_log.corner_ur_20_24);
|
|
UI_DrawHandlePic( 179, 354, 32, 32, s_log.corner_lr_18_20);
|
|
|
|
// Right corners
|
|
UI_DrawHandlePic( 202, 24, -32, 32, s_log.corner_ur_20_24);
|
|
UI_DrawHandlePic( 204, 354, -32, 32, s_log.corner_lr_18_20);
|
|
|
|
// Lower corners
|
|
ui.R_SetColor( colorTable[color3]);
|
|
UI_DrawHandlePic( 30, 386, 64, -16, s_log.corner_ll_8_47);
|
|
UI_DrawHandlePic( 30, 425, 128, 64, s_log.corner_ll_18_47);
|
|
|
|
stardateX = 50;
|
|
UI_DrawProportionalString( stardateX , 24,
|
|
title1Ptr, UI_BIGFONT , colorTable[color4]);
|
|
|
|
length = UI_ProportionalStringWidth( title1Ptr,UI_BIGFONT);
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( stardateX + 4 + length, 24, (196 - (stardateX + 4 + length)), 24, uis.whiteShader);
|
|
|
|
// Left side
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 184, 36, 20, 27, uis.whiteShader); // Side line1
|
|
|
|
ui.R_SetColor( colorTable[color2]);
|
|
UI_DrawHandlePic( 184, 66, 20, 18, uis.whiteShader); // Upper Arrow button background
|
|
|
|
ui.R_SetColor( colorTable[color2]);
|
|
UI_DrawHandlePic( 184, 87, 20, 240, uis.whiteShader); // Side line2
|
|
|
|
ui.R_SetColor( colorTable[color2]);
|
|
UI_DrawHandlePic( 184, 330, 20, 18, uis.whiteShader); // Lower Arrow button background
|
|
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 184, 351, 20, 19, uis.whiteShader); // Side line3
|
|
UI_DrawHandlePic( 164, 368, 35, 18, uis.whiteShader); // Bottom line
|
|
|
|
|
|
// Right side
|
|
nameX = 592;
|
|
|
|
UI_DrawProportionalString( nameX, 24,
|
|
title2Ptr, UI_BIGFONT | UI_RIGHT, colorTable[color4]);
|
|
length = UI_ProportionalStringWidth( title2Ptr,UI_BIGFONT);
|
|
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( nameX + 4, 24,-16, 32, s_log.leftRound);
|
|
UI_DrawHandlePic( 218, 24, (nameX - (length +4)) - 218, 24, uis.whiteShader);
|
|
|
|
// For personal logs
|
|
if (logText[s_log.currentLog].menuType == MENUTYPE_PERSONALLOG)
|
|
{
|
|
UI_DrawProportionalString( 240, 58,
|
|
logText[s_log.currentLog].buttonText[s_log.currentButton], UI_SMALLFONT , colorTable[CT_VLTGOLD1]);
|
|
|
|
UI_DrawProportionalString( 240, 84,logText[s_log.currentLog].logName,
|
|
UI_TINYFONT , colorTable[CT_DKGOLD1]);
|
|
|
|
if (logText[s_log.currentLog].stardate)
|
|
{
|
|
UI_DrawProportionalString( 240, 96,va("%s : %s",menu_normal_text[MNT_STARDATE],logText[s_log.currentLog].stardate),
|
|
UI_TINYFONT , colorTable[CT_DKGOLD1]);
|
|
}
|
|
}
|
|
else if ((logText[s_log.currentLog].menuType == MENUTYPE_DISEASELIBRARY) ||
|
|
(logText[s_log.currentLog].menuType == MENUTYPE_SHOOTINGRANGE) ||
|
|
(logText[s_log.currentLog].menuType == MENUTYPE_WEAPONLIBRARY) ||
|
|
(logText[s_log.currentLog].menuType == MENUTYPE_CARGO) ||
|
|
(logText[s_log.currentLog].menuType == MENUTYPE_ENGINEERINGLIBRARY))
|
|
{
|
|
UI_DrawProportionalString( 240, 58,
|
|
logText[s_log.currentLog].buttonText[s_log.currentButton], UI_SMALLFONT , colorTable[CT_VLTGOLD1]);
|
|
}
|
|
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 211, 32, 20, 22, uis.whiteShader); // Side line
|
|
ui.R_SetColor( colorTable[color3]);
|
|
UI_DrawHandlePic( 211, 57, 20, 53, uis.whiteShader); // Side line2
|
|
UI_DrawHandlePic( 211, 113, 20, 248, uis.whiteShader); // Side line3
|
|
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 218, 368, 394, 18, uis.whiteShader); // Bottom line
|
|
|
|
// Bottom
|
|
ui.R_SetColor( colorTable[color3]);
|
|
UI_DrawHandlePic( 33, 391, 578, 8, uis.whiteShader); // Top line
|
|
UI_DrawHandlePic( 30, 396, 47, 39, uis.whiteShader); // Side line
|
|
UI_DrawHandlePic( 54, 438, 39, 18, uis.whiteShader); // Bottom line 1
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 96, 438, 268, 18, uis.whiteShader); // Bottom line 2
|
|
UI_DrawHandlePic( 367, 438, 245, 18, uis.whiteShader); // Bottom line 3
|
|
|
|
|
|
if (logText[s_log.currentLog].model[s_log.currentButton])
|
|
{
|
|
UI_LibraryDrawMD3Model(logText[s_log.currentLog].modelHandle[s_log.currentButton],
|
|
logText[s_log.currentLog].modelX[s_log.currentButton],
|
|
logText[s_log.currentLog].modelY[s_log.currentButton],
|
|
logText[s_log.currentLog].modelDistance[s_log.currentButton],
|
|
logText[s_log.currentLog].modelYaw[s_log.currentButton],
|
|
logText[s_log.currentLog].modelPitch[s_log.currentButton],
|
|
logText[s_log.currentLog].modelRoll[s_log.currentButton],
|
|
logText[s_log.currentLog].modelOriginY[s_log.currentButton]);
|
|
}
|
|
|
|
|
|
LogMenu_Blinkies();
|
|
|
|
UI_PrintMenuGraphics(logmenu_graphics,LMG_MAX);
|
|
}
|
|
|
|
/*
|
|
=================
|
|
M_LogMenu_Graphics
|
|
=================
|
|
*/
|
|
void M_LogMenu_Graphics (void)
|
|
{
|
|
int nameX,length,stardateX;
|
|
char *title1Ptr,*title2Ptr;
|
|
int color1,color2,color3,color4;
|
|
|
|
if (logText[s_log.currentLog].menuType == MENUTYPE_PERSONALLOG)
|
|
{
|
|
title1Ptr = menu_normal_text[MNT_STARDATE];
|
|
title2Ptr = menu_normal_text[MNT_PERSONALLOG];
|
|
color1 = CT_VDKPURPLE2;
|
|
color2 = CT_VDKPURPLE3;
|
|
color3 = CT_DKBROWN1;
|
|
color4 = CT_LTPURPLE2;
|
|
}
|
|
else if (logText[s_log.currentLog].menuType == MENUTYPE_MEDICALLOG)
|
|
{
|
|
title1Ptr = menu_normal_text[MNT_TEAMMEMBERS];
|
|
title2Ptr = menu_normal_text[MNT_MEDICALLOG];
|
|
color1 = CT_VDKBROWN1;
|
|
color2 = CT_VDKORANGE;
|
|
color3 = CT_DKBROWN1;
|
|
color4 = CT_LTBROWN1;
|
|
}
|
|
|
|
|
|
// Draw the basic screen frame
|
|
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 30, 24,16, 32, s_log.leftRound);
|
|
|
|
// Left corners
|
|
UI_DrawHandlePic( 181, 24, 32, 32, s_log.corner_ur_20_24);
|
|
UI_DrawHandlePic( 179, 354, 32, 32, s_log.corner_lr_18_20);
|
|
|
|
// Right corners
|
|
UI_DrawHandlePic( 202, 24, -32, 32, s_log.corner_ur_20_24);
|
|
UI_DrawHandlePic( 204, 354, -32, 32, s_log.corner_lr_18_20);
|
|
|
|
// Lower corners
|
|
ui.R_SetColor( colorTable[color3]);
|
|
UI_DrawHandlePic( 30, 386, 64, -16, s_log.corner_ll_8_47);
|
|
UI_DrawHandlePic( 30, 425, 128, 64, s_log.corner_ll_18_47);
|
|
|
|
stardateX = 50;
|
|
UI_DrawProportionalString( stardateX , 24,
|
|
title1Ptr, UI_BIGFONT , colorTable[color4]);
|
|
|
|
length = UI_ProportionalStringWidth( title1Ptr,UI_BIGFONT);
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( stardateX + 4 + length, 24, (196 - (stardateX + 4 + length)), 24, uis.whiteShader);
|
|
|
|
// Left side
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 184, 36, 20, 27, uis.whiteShader); // Side line1
|
|
|
|
ui.R_SetColor( colorTable[color2]);
|
|
UI_DrawHandlePic( 184, 66, 20, 18, uis.whiteShader); // Upper Arrow button background
|
|
|
|
ui.R_SetColor( colorTable[color2]);
|
|
UI_DrawHandlePic( 184, 87, 20, 240, uis.whiteShader); // Side line2
|
|
|
|
ui.R_SetColor( colorTable[color2]);
|
|
UI_DrawHandlePic( 184, 330, 20, 18, uis.whiteShader); // Lower Arrow button background
|
|
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 184, 351, 20, 19, uis.whiteShader); // Side line3
|
|
UI_DrawHandlePic( 164, 368, 35, 18, uis.whiteShader); // Bottom line
|
|
|
|
|
|
// Right side
|
|
nameX = 592;
|
|
|
|
|
|
UI_DrawProportionalString( nameX, 24,
|
|
title2Ptr, UI_BIGFONT | UI_RIGHT, colorTable[color4]);
|
|
length = UI_ProportionalStringWidth( title2Ptr,UI_BIGFONT);
|
|
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( nameX + 4, 24,-16, 32, s_log.leftRound);
|
|
UI_DrawHandlePic( 218, 24, (nameX - (length +4)) - 218, 24, uis.whiteShader);
|
|
|
|
// For personal logs
|
|
if (logText[s_log.currentLog].menuType == MENUTYPE_PERSONALLOG)
|
|
{
|
|
UI_DrawProportionalString( 240, 58,
|
|
logText[s_log.currentLog].name, UI_SMALLFONT , colorTable[CT_VLTGOLD1]);
|
|
|
|
if (logText[s_log.currentLog].headingText[s_log.currentButton])
|
|
{
|
|
UI_DrawProportionalString( 240, 84,va("%s : %s",menu_normal_text[MNT_TITLE],logText[s_log.currentLog].headingText[s_log.currentButton]),
|
|
UI_TINYFONT , colorTable[CT_DKGOLD1]);
|
|
}
|
|
|
|
UI_DrawProportionalString( 240, 96,va("%s : %s",menu_normal_text[MNT_STARDATE],logText[s_log.currentLog].buttonText[s_log.currentButton]),
|
|
UI_TINYFONT , colorTable[CT_DKGOLD1]);
|
|
}
|
|
else if (logText[s_log.currentLog].menuType == MENUTYPE_MEDICALLOG)
|
|
{
|
|
UI_DrawProportionalString( 240, 84,va("%s",logText[s_log.currentLog].headingText[s_log.currentButton]),
|
|
UI_TINYFONT , colorTable[CT_DKGOLD1]);
|
|
|
|
}
|
|
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 211, 32, 20, 22, uis.whiteShader); // Side line
|
|
ui.R_SetColor( colorTable[color3]);
|
|
UI_DrawHandlePic( 211, 57, 20, 53, uis.whiteShader); // Side line2
|
|
UI_DrawHandlePic( 211, 113, 20, 248, uis.whiteShader); // Side line3
|
|
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 218, 368, 394, 18, uis.whiteShader); // Bottom line
|
|
|
|
// Bottom
|
|
ui.R_SetColor( colorTable[color3]);
|
|
UI_DrawHandlePic( 33, 391, 578, 8, uis.whiteShader); // Top line
|
|
UI_DrawHandlePic( 30, 396, 47, 39, uis.whiteShader); // Side line
|
|
UI_DrawHandlePic( 54, 438, 39, 18, uis.whiteShader); // Bottom line 1
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 96, 438, 268, 18, uis.whiteShader); // Bottom line 2
|
|
UI_DrawHandlePic( 367, 438, 245, 18, uis.whiteShader); // Bottom line 3
|
|
|
|
LogMenu_Blinkies();
|
|
|
|
UI_PrintMenuGraphics(logmenu_graphics,LMG_MAX);
|
|
}
|
|
|
|
/*
|
|
===============
|
|
LogMenu_Draw
|
|
===============
|
|
*/
|
|
void LogMenu_Draw(void)
|
|
{
|
|
if (s_log.screenType==1) // PADD Screen layout
|
|
{
|
|
M_Padd2Menu_Graphics();
|
|
}
|
|
else // LOG Screen layout
|
|
{
|
|
M_LogMenu_Graphics();
|
|
}
|
|
|
|
Menu_Draw( &s_log.menu );
|
|
}
|
|
|
|
/*
|
|
===============
|
|
LogMenu_Init
|
|
===============
|
|
*/
|
|
void LogMenu_Init(void)
|
|
{
|
|
int y,pad,x;
|
|
menubitmap_s *holdLogButton;
|
|
int i;
|
|
|
|
s_log.menu.nitems = 0;
|
|
s_log.menu.draw = LogMenu_Draw;
|
|
s_log.menu.key = LogMenu_Key;
|
|
s_log.menu.fullscreen = qtrue;
|
|
s_log.menu.wrapAround = qtrue;
|
|
s_log.menu.descX = MENU_DESC_X;
|
|
s_log.menu.descY = MENU_DESC_Y;
|
|
s_log.menu.titleX = MENU_TITLE_X;
|
|
s_log.menu.titleY = MENU_TITLE_Y;
|
|
s_log.menu.titleI = MNT_CREDITSMENU_TITLE;
|
|
s_log.menu.footNoteEnum = MNT_CREDITS;
|
|
|
|
s_log.currentButton = 0; // Use first button
|
|
|
|
s_log.topButton = 0;
|
|
|
|
holdLogButton = &s_log.logButton1;
|
|
pad = 24;
|
|
y = 66;
|
|
x = 30;
|
|
|
|
for (i=0;i<MAXLOGSHOWBUTTONS;i++)
|
|
{
|
|
holdLogButton->generic.type = MTYPE_BITMAP;
|
|
holdLogButton->generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
holdLogButton->generic.x = x;
|
|
holdLogButton->generic.y = y;
|
|
holdLogButton->generic.name = GRAPHIC_BUTTONRIGHT;
|
|
holdLogButton->generic.id = ID_DECK1 + i;
|
|
holdLogButton->generic.callback = M_Log_Event;
|
|
holdLogButton->generic.statusbarfunc = Log_StatusBar;
|
|
holdLogButton->width = MENU_BUTTON_MED_WIDTH + 20;
|
|
holdLogButton->height = MENU_BUTTON_MED_HEIGHT;
|
|
holdLogButton->color = CT_DKAQUA;
|
|
holdLogButton->color2 = CT_LTAQUA;
|
|
holdLogButton->textX = MENU_BUTTON_TEXT_X;
|
|
holdLogButton->textY = MENU_BUTTON_TEXT_Y;
|
|
holdLogButton->textPtr = logText[s_log.currentLog].buttonText[i];
|
|
holdLogButton->textcolor = CT_BLACK;
|
|
holdLogButton->textcolor2 = CT_WHITE;
|
|
holdLogButton->textStyle = UI_SMALLFONT;
|
|
|
|
holdLogButton++;
|
|
y += pad;
|
|
}
|
|
|
|
holdLogButton = &s_log.logButton1;
|
|
for (i=0;i<MAXLOGSHOWBUTTONS;i++)
|
|
{
|
|
if (logText[s_log.currentLog].buttonText[i])
|
|
{
|
|
Menu_AddItem( &s_log.menu, holdLogButton );
|
|
}
|
|
holdLogButton++;
|
|
}
|
|
|
|
s_log.buttonArrowUp.generic.type = MTYPE_BITMAP;
|
|
s_log.buttonArrowUp.generic.flags = QMF_HIGHLIGHT_IF_FOCUS | QMF_HIDDEN;
|
|
s_log.buttonArrowUp.generic.x = 185;
|
|
s_log.buttonArrowUp.generic.y = 68;
|
|
s_log.buttonArrowUp.generic.name = "menu/common/arrow_up_16.tga";
|
|
s_log.buttonArrowUp.generic.id = ID_ARROW1UP;
|
|
s_log.buttonArrowUp.generic.callback = M_Log_Event;
|
|
s_log.buttonArrowUp.width = 18;
|
|
s_log.buttonArrowUp.height = 18;
|
|
s_log.buttonArrowUp.color = CT_DKORANGE;
|
|
s_log.buttonArrowUp.color2 = CT_LTORANGE;
|
|
|
|
s_log.buttonArrowDown.generic.type = MTYPE_BITMAP;
|
|
s_log.buttonArrowDown.generic.flags = QMF_HIGHLIGHT_IF_FOCUS | QMF_HIDDEN;
|
|
s_log.buttonArrowDown.generic.x = 185;
|
|
s_log.buttonArrowDown.generic.y = 332;
|
|
s_log.buttonArrowDown.generic.name = "menu/common/arrow_dn_16.tga";
|
|
s_log.buttonArrowDown.generic.id = ID_ARROW1DOWN;
|
|
s_log.buttonArrowDown.generic.callback = M_Log_Event;
|
|
s_log.buttonArrowDown.width = 18;
|
|
s_log.buttonArrowDown.height = 18;
|
|
s_log.buttonArrowDown.color = CT_DKORANGE;
|
|
s_log.buttonArrowDown.color2 = CT_LTORANGE;
|
|
|
|
s_log.textArrowDown.generic.type = MTYPE_BITMAP;
|
|
s_log.textArrowDown.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_log.textArrowDown.generic.x = 285;
|
|
s_log.textArrowDown.generic.y = 130;
|
|
s_log.textArrowDown.generic.name = "menu/common/arrow_dn_16.tga";
|
|
s_log.textArrowDown.generic.id = ID_ARROW2DOWN;
|
|
s_log.textArrowDown.generic.callback = M_Log_Event;
|
|
s_log.textArrowDown.width = 18;
|
|
s_log.textArrowDown.height = 18;
|
|
s_log.textArrowDown.color = CT_DKORANGE;
|
|
s_log.textArrowDown.color2 = CT_LTORANGE;
|
|
|
|
s_log.quitMenu.generic.type = MTYPE_BITMAP;
|
|
s_log.quitMenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_log.quitMenu.generic.x = 30;
|
|
s_log.quitMenu.generic.y = 368;
|
|
s_log.quitMenu.generic.name = GRAPHIC_SQUARE;
|
|
s_log.quitMenu.generic.id = ID_QUIT;
|
|
s_log.quitMenu.generic.callback = M_Log_Event;
|
|
s_log.quitMenu.width = MENU_BUTTON_MED_WIDTH;
|
|
s_log.quitMenu.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_log.quitMenu.color = CT_DKORANGE;
|
|
s_log.quitMenu.color2 = CT_LTORANGE;
|
|
s_log.quitMenu.textX = MENU_BUTTON_TEXT_X;
|
|
s_log.quitMenu.textY = MENU_BUTTON_TEXT_Y;
|
|
|
|
if (s_log.screenType==1) // PADD Screen layout
|
|
{
|
|
s_log.quitMenu.textEnum = MBT_PADDRETURN;
|
|
}
|
|
else
|
|
{
|
|
s_log.quitMenu.textEnum = MBT_PERSONALLOGRETURN;
|
|
}
|
|
|
|
s_log.quitMenu.textcolor = CT_BLACK;
|
|
s_log.quitMenu.textcolor2 = CT_WHITE;
|
|
|
|
Menu_AddItem( &s_log.menu, &s_log.buttonArrowUp );
|
|
Menu_AddItem( &s_log.menu, &s_log.buttonArrowDown );
|
|
Menu_AddItem( &s_log.menu, &s_log.quitMenu );
|
|
// Menu_AddItem( &s_log.menu, &s_log.textArrowDown );
|
|
|
|
|
|
y = logText[s_log.currentLog].textY[s_log.currentButton];
|
|
for (i=LMG_BIO_DESC1; i<(LMG_BIO_DESC1 +LOG_MAXDESC );i++)
|
|
{
|
|
logmenu_graphics[i].x = 242;
|
|
logmenu_graphics[i].y = y;
|
|
y += 12;
|
|
}
|
|
|
|
if (s_log.currentLog < 0)
|
|
{
|
|
s_log.currentLog = 0;
|
|
}
|
|
|
|
|
|
if (!logText[s_log.currentLog].logText[0])
|
|
{
|
|
UI_PopMenu();
|
|
}
|
|
else
|
|
{
|
|
SplitLogDesc(logText[s_log.currentLog].logText[s_log.currentButton],360);
|
|
}
|
|
|
|
if (logText[s_log.currentLog].cntButton>=MAXLOGSHOWBUTTONS)
|
|
{
|
|
s_log.buttonArrowDown.generic.flags &= ~QMF_HIDDEN;
|
|
}
|
|
}
|
|
|
|
static void UI_ParseLogLog(char **buffer)
|
|
{
|
|
char *token,*holdPtr;
|
|
int len;
|
|
|
|
|
|
token = COM_ParseExt( buffer, qtrue );
|
|
len = strlen(token);
|
|
|
|
logText[s_log.currentLog].logName = *buffer - (len+1);
|
|
|
|
holdPtr = logText[s_log.currentLog].logName + len;
|
|
*holdPtr = NULL;
|
|
}
|
|
|
|
static void UI_ParseLogName(char **buffer)
|
|
{
|
|
char *token,*holdPtr;
|
|
int len;
|
|
|
|
token = COM_ParseExt( buffer, qtrue );
|
|
len = strlen(token);
|
|
|
|
logText[s_log.currentLog].name = *buffer - (len+1);
|
|
|
|
holdPtr = logText[s_log.currentLog].name + len;
|
|
*holdPtr = NULL;
|
|
}
|
|
|
|
static void UI_ParseLogButton(char **buffer,int index)
|
|
{
|
|
char *token,*holdPtr;
|
|
int len;
|
|
|
|
token = COM_ParseExt( buffer, qtrue );
|
|
len = strlen(token);
|
|
|
|
logText[s_log.currentLog].buttonText[index] = *buffer - (len+1);
|
|
|
|
holdPtr = logText[s_log.currentLog].buttonText[index] + len;
|
|
*holdPtr = NULL;
|
|
}
|
|
|
|
static void UI_ParseLogHeading(char **buffer,int index)
|
|
{
|
|
char *token,*holdPtr;
|
|
int len;
|
|
|
|
token = COM_ParseExt( buffer, qtrue );
|
|
len = strlen(token);
|
|
|
|
logText[s_log.currentLog].headingText[index] = *buffer - (len+1);
|
|
|
|
holdPtr = logText[s_log.currentLog].headingText[index] + len;
|
|
*holdPtr = NULL;
|
|
}
|
|
|
|
static void UI_ParseLogStardate(char **buffer,int index)
|
|
{
|
|
char *token,*holdPtr;
|
|
int len;
|
|
|
|
token = COM_ParseExt( buffer, qtrue );
|
|
len = strlen(token);
|
|
|
|
logText[s_log.currentLog].stardate = *buffer - (len+1);
|
|
|
|
holdPtr = logText[s_log.currentLog].stardate + len;
|
|
*holdPtr = NULL;
|
|
}
|
|
static void UI_ParseLogLongText(char **buffer,int index)
|
|
{
|
|
char *token,*holdPtr;
|
|
int len;
|
|
|
|
token = COM_ParseExt( buffer, qtrue );
|
|
len = strlen(token);
|
|
|
|
logText[s_log.currentLog].logText[index] = *buffer - (len+1);
|
|
|
|
holdPtr = logText[s_log.currentLog].logText[index] + len;
|
|
*holdPtr = NULL;
|
|
}
|
|
|
|
static void UI_ParseMenuTypeName(char **buffer)
|
|
{
|
|
char *token;
|
|
|
|
token = COM_ParseExt( buffer, qtrue );
|
|
|
|
if (!Q_strncmp(token,"MEDICALLOG",10))
|
|
{
|
|
logText[s_log.currentLog].menuType = MENUTYPE_MEDICALLOG;
|
|
}
|
|
else if (!Q_strncmp(token,"PERSONALLOG",11))
|
|
{
|
|
logText[s_log.currentLog].menuType = MENUTYPE_PERSONALLOG;
|
|
}
|
|
else if (!Q_strncmp(token,"DISEASELIBRARY",14))
|
|
{
|
|
logText[s_log.currentLog].menuType = MENUTYPE_DISEASELIBRARY;
|
|
}
|
|
else if (!Q_strncmp(token,"SHOOTINGRANGE",13))
|
|
{
|
|
logText[s_log.currentLog].menuType = MENUTYPE_SHOOTINGRANGE;
|
|
}
|
|
else if (!Q_strncmp(token,"WEAPONLIBRARY",13))
|
|
{
|
|
logText[s_log.currentLog].menuType = MENUTYPE_WEAPONLIBRARY;
|
|
}
|
|
else if (!Q_strncmp(token,"CARGO",5))
|
|
{
|
|
logText[s_log.currentLog].menuType = MENUTYPE_CARGO;
|
|
}
|
|
else if (!Q_strncmp(token,"ENGINEERINGLIBRARY",18))
|
|
{
|
|
logText[s_log.currentLog].menuType = MENUTYPE_ENGINEERINGLIBRARY;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
/*
|
|
=================
|
|
UI_ParseLogText
|
|
=================
|
|
*/
|
|
static void UI_ParseLogText()
|
|
{
|
|
char *token;
|
|
char *buffer,*holdPtr;
|
|
int i,holdNum,len;
|
|
|
|
memset(logText,0,sizeof(logText));
|
|
|
|
COM_BeginParseSession();
|
|
|
|
buffer = LogsText;
|
|
i = 1; // Zero is null string
|
|
while ( buffer )
|
|
{
|
|
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
|
|
if (!Q_strncmp(token,"LOG",3))
|
|
{
|
|
s_log.currentLog = atoi(&token[3]);
|
|
s_log.currentLog--;
|
|
|
|
UI_ParseLogLog(&buffer);
|
|
|
|
logText[s_log.currentLog].cntButton=0;
|
|
}
|
|
else if (!Q_strncmp(token,"PADD",4))
|
|
{
|
|
s_log.currentLog = atoi(&token[4]);
|
|
s_log.currentLog--;
|
|
|
|
UI_ParseLogLog(&buffer);
|
|
|
|
logText[s_log.currentLog].cntButton=0;
|
|
}
|
|
else if (!Q_strncmp(token,"MENUTYPE",8))
|
|
{
|
|
UI_ParseMenuTypeName(&buffer);
|
|
}
|
|
else if (!Q_strncmp(token,"NAME",4))
|
|
{
|
|
UI_ParseLogName(&buffer);
|
|
}
|
|
else if (!Q_strncmp(token,"BUTTON",6))
|
|
{
|
|
holdNum = atoi(&token[6]);
|
|
holdNum--;
|
|
s_log.currentText = holdNum;
|
|
UI_ParseLogButton(&buffer,holdNum);
|
|
|
|
logText[s_log.currentLog].cntButton++;
|
|
|
|
}
|
|
else if (!Q_strncmp(token,"HEADING",7))
|
|
{
|
|
holdNum = atoi(&token[7]);
|
|
holdNum--;
|
|
UI_ParseLogHeading(&buffer,holdNum);
|
|
}
|
|
else if (!Q_strncmp(token,"TEXT",4))
|
|
{
|
|
holdNum = atoi(&token[4]);
|
|
holdNum--;
|
|
UI_ParseLogLongText(&buffer,holdNum);
|
|
}
|
|
else if (!Q_strncmp(token,"STARDATE",8))
|
|
{
|
|
holdNum = atoi(&token[8]);
|
|
holdNum--;
|
|
UI_ParseLogStardate(&buffer,holdNum);
|
|
}
|
|
else if (!Q_strncmp(token,"STARTTEXTY",10))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
logText[s_log.currentLog].textY[s_log.currentText] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"MODELX",6))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
logText[s_log.currentLog].modelX[s_log.currentText] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"MODELYAW",8))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
logText[s_log.currentLog].modelYaw[s_log.currentText] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"MODELPITCH",10))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
logText[s_log.currentLog].modelPitch[s_log.currentText] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"MODELROLL",9))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
logText[s_log.currentLog].modelRoll[s_log.currentText] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"MODELY",6))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
logText[s_log.currentLog].modelY[s_log.currentText] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"MODELDISTANCE",13)) // Model's distance from camera
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
logText[s_log.currentLog].modelDistance[s_log.currentText] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"MODELORIGINY",12)) // Model's change in Y origin
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
logText[s_log.currentLog].modelOriginY[s_log.currentText] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"MODEL",5))
|
|
{
|
|
// Get main topic desc
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
len = strlen(token);
|
|
logText[s_log.currentLog].model[s_log.currentText] = buffer - (len+1);
|
|
holdPtr = logText[s_log.currentLog].model[s_log.currentText] + len;
|
|
*holdPtr = NULL;
|
|
|
|
logText[s_log.currentLog].modelHandle[s_log.currentText] =
|
|
ui.R_RegisterModel(logText[s_log.currentLog].model[s_log.currentText]);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_LogMenu_Cache
|
|
===============
|
|
*/
|
|
void UI_LogMenu_Cache (void)
|
|
{
|
|
char *buffer;
|
|
char filename[MAX_QPATH];
|
|
int len;
|
|
|
|
s_log.leftRound = ui.R_RegisterShaderNoMip("menu/common/halfroundl_24.tga");
|
|
s_log.corner_ur_20_24 = ui.R_RegisterShaderNoMip("menu/common/corner_ur_20_24.tga");
|
|
s_log.corner_lr_18_20 = ui.R_RegisterShaderNoMip("menu/common/corner_lr_18_20.tga");
|
|
s_log.corner_ll_18_47 = ui.R_RegisterShaderNoMip("menu/common/corner_ll_47_18.tga");
|
|
s_log.corner_ll_8_47 = ui.R_RegisterShaderNoMip("menu/common/corner_ll_8_47.tga");
|
|
|
|
if (s_log.screenType==1)
|
|
{
|
|
UI_LanguageFilename("ext_data/sp_padd2s","dat",filename);
|
|
}
|
|
else
|
|
{
|
|
UI_LanguageFilename("ext_data/sp_logs","dat",filename);
|
|
}
|
|
|
|
len = ui.FS_ReadFile( filename,(void **) &buffer );
|
|
|
|
if ( len == -1 )
|
|
{
|
|
ui.Error(ERR_FATAL, "UI_LogMenu_Cache : SP_LOGS.DAT file not found!\n");
|
|
return;
|
|
}
|
|
|
|
if ( len > MAXLOGSTEXT )
|
|
{
|
|
ui.Error(ERR_FATAL, "UI_LogMenu_Cache : SP_LOGS.DAT is too big! MAX: %d, current length:%d\n",MAXLOGSTEXT,len);
|
|
return;
|
|
}
|
|
|
|
strncpy( LogsText, buffer, sizeof( LogsText ) - 1 );
|
|
ui.FS_FreeFile( buffer );
|
|
|
|
}
|
|
|
|
// Special Cache function for logs
|
|
void UI_LogMenu_SpecialCache(void)
|
|
{
|
|
s_log.screenType=0;
|
|
UI_LogMenu_Cache ();
|
|
UI_ParseLogText();
|
|
}
|
|
|
|
// Special Cache function for padds
|
|
void UI_PaddMenu_SpecialCache(void)
|
|
{
|
|
s_log.screenType=1;
|
|
UI_LogMenu_Cache ();
|
|
UI_ParseLogText();
|
|
}
|
|
|
|
|
|
/*
|
|
===============
|
|
LogMenu_LoadText
|
|
===============
|
|
*/
|
|
void LogMenu_LoadText (void)
|
|
{
|
|
|
|
UI_LogMenu_Cache();
|
|
|
|
UI_ParseLogText();
|
|
}
|
|
|
|
|
|
/*
|
|
===============
|
|
UI_LogMenu
|
|
===============
|
|
*/
|
|
void UI_LogMenu(char *menuId,int screenType)
|
|
{
|
|
uis.menusp = 0;
|
|
s_log.screenType=screenType;
|
|
ingameFlag = qtrue; // true when in game menu is in use
|
|
|
|
Mouse_Show();
|
|
|
|
LogMenu_LoadText();
|
|
|
|
if (s_log.screenType==1) // PADD
|
|
{
|
|
s_log.currentLog = atoi((char *) (menuId+4));
|
|
}
|
|
else // LOG
|
|
{
|
|
s_log.currentLog = atoi((char *) (menuId+3));
|
|
}
|
|
|
|
s_log.currentLog--;
|
|
|
|
UI_PushMenu( &s_log.menu );
|
|
|
|
LogMenu_Init();
|
|
|
|
Menu_AdjustCursor( &s_log.menu, 1 );
|
|
}
|
|
|
|
|
|
/*
|
|
=================
|
|
SplitPaddDesc
|
|
=================
|
|
*/
|
|
static void SplitPaddDesc(char *s,int width)
|
|
{
|
|
int lineWidth,currentWidth,charCnt,currentLineI;
|
|
char *holds;
|
|
char holdChar[2];
|
|
int nextLine;
|
|
|
|
// Clean out any old data
|
|
memset(paddDesc,0,sizeof(paddDesc));
|
|
|
|
// Break into individual lines
|
|
holds = s;
|
|
|
|
lineWidth = width; // How long (in pixels) a line can be
|
|
currentWidth = 0;
|
|
holdChar[1] = '\0';
|
|
charCnt= 0;
|
|
currentLineI = 0;
|
|
s_padd.lineCnt = 0;
|
|
|
|
while( *s )
|
|
{
|
|
++charCnt;
|
|
holdChar[0] = *s;
|
|
|
|
// Advance to next line.
|
|
if ((*s == '/') && (*(s + 1) == 'n'))
|
|
{
|
|
s++; // Advance to next character
|
|
currentWidth = 0;
|
|
nextLine = qtrue;
|
|
}
|
|
else
|
|
{
|
|
nextLine = qfalse;
|
|
currentWidth += UI_ProportionalStringWidth(holdChar,UI_TINYFONT);
|
|
currentWidth +=1; // The space between characters
|
|
}
|
|
|
|
if ((currentWidth >= lineWidth ) || (nextLine))
|
|
{//Reached max length of this line
|
|
//step back until we find a space
|
|
|
|
while((currentWidth) && (*s != ' '))
|
|
{
|
|
holdChar[0] = *s;
|
|
currentWidth -= UI_ProportionalStringWidth(holdChar,UI_TINYFONT);
|
|
--s;
|
|
--charCnt;
|
|
}
|
|
|
|
Q_strncpyz( paddDesc[currentLineI], holds, charCnt);
|
|
paddDesc[currentLineI][charCnt] = NULL;
|
|
|
|
++currentLineI;
|
|
currentWidth = 0;
|
|
charCnt = 0;
|
|
|
|
holds = s;
|
|
++holds;
|
|
|
|
s_padd.lineCnt++;
|
|
|
|
if (currentLineI > PADD_MAXDESC)
|
|
{
|
|
break;
|
|
}
|
|
|
|
}
|
|
++s;
|
|
}
|
|
|
|
++charCnt; // So the NULL will be properly placed at the end of the string of Q_strncpyz
|
|
Q_strncpyz( paddDesc[currentLineI], holds, charCnt);
|
|
paddDesc[currentLineI][charCnt] = NULL;
|
|
|
|
}
|
|
|
|
/*
|
|
=================
|
|
PaddMenu_Blinkies
|
|
=================
|
|
*/
|
|
void PaddMenu_Blinkies (void)
|
|
{
|
|
int descI;
|
|
|
|
// Turning on description a line at a time
|
|
if ((paddmenu_graphics[PMG_CURRENT_DESC].timer < uis.realtime) && (paddmenu_graphics[PMG_CURRENT_DESC].type == MG_VAR)) {
|
|
descI = paddmenu_graphics[PMG_CURRENT_DESC].target;
|
|
if (!descI)
|
|
{
|
|
paddmenu_graphics[PMG_CURRENT_DESC].type = MG_OFF;
|
|
}
|
|
else
|
|
{
|
|
if (s_padd.lineCnt >= (descI - PMG_BIO_DESC1))
|
|
{
|
|
paddmenu_graphics[descI].type = MG_STRING; // Turnon string
|
|
ui.S_StartLocalSound( uis.menu_datadisp2_snd, CHAN_MENU1 );
|
|
paddmenu_graphics[PMG_CURRENT_DESC].target = paddmenu_graphics[descI].target; // Set up next line
|
|
paddmenu_graphics[PMG_CURRENT_DESC].timer = uis.realtime + LOGWAITTIME;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
M_Padd_Event
|
|
=================
|
|
*/
|
|
void M_Padd_Event (void* ptr, int notification)
|
|
{
|
|
int id;
|
|
|
|
if (notification != QM_ACTIVATED)
|
|
{
|
|
return;
|
|
}
|
|
|
|
id = ((menucommon_s*)ptr)->id;
|
|
|
|
switch (id)
|
|
{
|
|
case ID_QUIT:
|
|
UI_PopMenu();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
PaddMenu_Key
|
|
=================
|
|
*/
|
|
sfxHandle_t PaddMenu_Key (int key)
|
|
{
|
|
return ( Menu_DefaultKey( &s_padd.menu, key ) );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
M_PaddMenu_Graphics
|
|
=================
|
|
*/
|
|
void M_PaddMenu_Graphics (void)
|
|
{
|
|
int nameX,length;
|
|
char *title1Ptr;
|
|
int color1,color2,color3,color4;
|
|
|
|
title1Ptr = "DATA PADD";
|
|
color1 = CT_VDKPURPLE2;
|
|
color2 = CT_VDKPURPLE3;
|
|
color3 = CT_DKBROWN1;
|
|
color4 = CT_LTPURPLE2;
|
|
|
|
// Draw the basic screen frame
|
|
|
|
// Right corners
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 20, 24, -32, 32, s_padd.corner_ur_20_24);
|
|
UI_DrawHandlePic( 22, 354, -32, 32, s_padd.corner_lr_18_20);
|
|
|
|
// Lower corners
|
|
ui.R_SetColor( colorTable[color3]);
|
|
UI_DrawHandlePic( 30, 386, 64, -16, s_padd.corner_ll_8_47);
|
|
UI_DrawHandlePic( 30, 425, 128, 64, s_padd.corner_ll_18_47);
|
|
|
|
|
|
// Right side
|
|
nameX = 592;
|
|
|
|
|
|
UI_DrawProportionalString( nameX, 24,
|
|
title1Ptr, UI_BIGFONT | UI_RIGHT, colorTable[color4]);
|
|
length = UI_ProportionalStringWidth( title1Ptr,UI_BIGFONT);
|
|
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( nameX + 4, 24,-16, 32, s_padd.leftRound);
|
|
UI_DrawHandlePic( 36, 24, (nameX - (length +4)) - 36, 24, uis.whiteShader);
|
|
|
|
UI_DrawProportionalString( 320, 58,
|
|
paddText[s_padd.currentPadd].headingText[0], UI_BIGFONT | UI_CENTER , colorTable[CT_VLTGOLD1]);
|
|
|
|
UI_DrawProportionalString( 320, 90,
|
|
paddText[s_padd.currentPadd].headingText[1], UI_SMALLFONT | UI_CENTER , colorTable[CT_VLTGOLD1]);
|
|
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 30, 32, 20, 22, uis.whiteShader); // Side line
|
|
ui.R_SetColor( colorTable[color3]);
|
|
UI_DrawHandlePic( 30, 57, 20, 53, uis.whiteShader); // Side line2
|
|
UI_DrawHandlePic( 30, 113, 20, 248, uis.whiteShader); // Side line3
|
|
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 218, 368, 394, 18, uis.whiteShader); // Bottom line
|
|
|
|
// Bottom
|
|
ui.R_SetColor( colorTable[color3]);
|
|
UI_DrawHandlePic( 33, 391, 578, 8, uis.whiteShader); // Top line
|
|
UI_DrawHandlePic( 30, 396, 47, 39, uis.whiteShader); // Side line
|
|
UI_DrawHandlePic( 54, 438, 39, 18, uis.whiteShader); // Bottom line 1
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 96, 438, 268, 18, uis.whiteShader); // Bottom line 2
|
|
UI_DrawHandlePic( 367, 438, 245, 18, uis.whiteShader); // Bottom line 3
|
|
|
|
PaddMenu_Blinkies();
|
|
|
|
UI_PrintMenuGraphics(paddmenu_graphics,PMG_MAX);
|
|
}
|
|
|
|
/*
|
|
===============
|
|
PaddMenu_Draw
|
|
===============
|
|
*/
|
|
void PaddMenu_Draw(void)
|
|
{
|
|
M_PaddMenu_Graphics();
|
|
|
|
Menu_Draw( &s_padd.menu );
|
|
}
|
|
|
|
/*
|
|
===============
|
|
PaddMenu_Init
|
|
===============
|
|
*/
|
|
void PaddMenu_Init(void)
|
|
{
|
|
int y;
|
|
int i;
|
|
|
|
s_padd.menu.nitems = 0;
|
|
s_padd.menu.draw = PaddMenu_Draw;
|
|
s_padd.menu.key = PaddMenu_Key;
|
|
s_padd.menu.fullscreen = qtrue;
|
|
s_padd.menu.wrapAround = qtrue;
|
|
s_padd.menu.descX = MENU_DESC_X;
|
|
s_padd.menu.descY = MENU_DESC_Y;
|
|
s_padd.menu.titleX = MENU_TITLE_X;
|
|
s_padd.menu.titleY = MENU_TITLE_Y;
|
|
s_padd.menu.titleI = MNT_CREDITSMENU_TITLE;
|
|
s_padd.menu.footNoteEnum = MNT_CREDITS;
|
|
|
|
s_padd.quitMenu.generic.type = MTYPE_BITMAP;
|
|
s_padd.quitMenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_padd.quitMenu.generic.x = 30;
|
|
s_padd.quitMenu.generic.y = 368;
|
|
s_padd.quitMenu.generic.name = GRAPHIC_SQUARE;
|
|
s_padd.quitMenu.generic.id = ID_QUIT;
|
|
s_padd.quitMenu.generic.callback = M_Padd_Event;
|
|
s_padd.quitMenu.width = MENU_BUTTON_MED_WIDTH;
|
|
s_padd.quitMenu.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_padd.quitMenu.color = CT_DKORANGE;
|
|
s_padd.quitMenu.color2 = CT_LTORANGE;
|
|
s_padd.quitMenu.textX = MENU_BUTTON_TEXT_X;
|
|
s_padd.quitMenu.textY = MENU_BUTTON_TEXT_Y;
|
|
s_padd.quitMenu.textEnum = MBT_PADDRETURN;
|
|
s_padd.quitMenu.textcolor = CT_BLACK;
|
|
s_padd.quitMenu.textcolor2 = CT_WHITE;
|
|
|
|
Menu_AddItem( &s_padd.menu, &s_padd.quitMenu );
|
|
|
|
y = 116;
|
|
for (i=PMG_BIO_DESC1; i<(PMG_BIO_DESC1 +PADD_MAXDESC );i++)
|
|
{
|
|
paddmenu_graphics[i].x = 80;
|
|
paddmenu_graphics[i].y = y;
|
|
y += 12;
|
|
}
|
|
|
|
if (s_padd.currentPadd < 0)
|
|
{
|
|
s_padd.currentPadd = 0;
|
|
}
|
|
|
|
// No text???
|
|
if (!paddText[s_padd.currentPadd].paddText[0])
|
|
{
|
|
UI_PopMenu();
|
|
}
|
|
else
|
|
{
|
|
SplitPaddDesc(paddText[s_padd.currentPadd].paddText[0],560);
|
|
}
|
|
}
|
|
|
|
static void UI_ParsePaddLongText(char **buffer,int index)
|
|
{
|
|
char *token,*holdPtr;
|
|
int len;
|
|
|
|
token = COM_ParseExt( buffer, qtrue );
|
|
len = strlen(token);
|
|
|
|
paddText[s_padd.currentPadd].paddText[index] = *buffer - (len+1);
|
|
|
|
holdPtr = paddText[s_padd.currentPadd].paddText[index] + len;
|
|
*holdPtr = NULL;
|
|
}
|
|
|
|
static void UI_ParsePaddPadd(char **buffer)
|
|
{
|
|
char *token,*holdPtr;
|
|
int len;
|
|
|
|
token = COM_ParseExt( buffer, qtrue );
|
|
len = strlen(token);
|
|
|
|
paddText[s_padd.currentPadd].paddName = *buffer - (len+1);
|
|
|
|
holdPtr = paddText[s_padd.currentPadd].paddName + len;
|
|
*holdPtr = NULL;
|
|
}
|
|
|
|
static void UI_ParsePaddHeading(char **buffer,int index)
|
|
{
|
|
char *token,*holdPtr;
|
|
int len;
|
|
|
|
token = COM_ParseExt( buffer, qtrue );
|
|
len = strlen(token);
|
|
|
|
paddText[s_padd.currentPadd].headingText[index] = *buffer - (len+1);
|
|
|
|
holdPtr = paddText[s_padd.currentPadd].headingText[index] + len;
|
|
*holdPtr = NULL;
|
|
}
|
|
|
|
/*
|
|
=================
|
|
UI_ParsePaddText
|
|
=================
|
|
*/
|
|
static void UI_ParsePaddText()
|
|
{
|
|
char *token;
|
|
char *buffer;
|
|
int i,holdNum;
|
|
|
|
memset(paddText,0,sizeof(paddText));
|
|
|
|
COM_BeginParseSession();
|
|
|
|
buffer = PaddsText;
|
|
i = 1; // Zero is null string
|
|
while ( buffer )
|
|
{
|
|
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
|
|
if (!Q_strncmp(token,"PADD",4))
|
|
{
|
|
s_padd.currentPadd = atoi(&token[4]);
|
|
s_padd.currentPadd--;
|
|
|
|
UI_ParsePaddPadd(&buffer);
|
|
}
|
|
else if (!Q_strncmp(token,"HEADING",7))
|
|
{
|
|
holdNum = atoi(&token[7]);
|
|
holdNum--;
|
|
UI_ParsePaddHeading(&buffer,holdNum);
|
|
}
|
|
else if (!Q_strncmp(token,"TEXT",4))
|
|
{
|
|
holdNum = atoi(&token[4]);
|
|
holdNum--;
|
|
UI_ParsePaddLongText(&buffer,holdNum);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_PaddMenu_Cache
|
|
===============
|
|
*/
|
|
void UI_PaddMenu_Cache (void)
|
|
{
|
|
char *buffer;
|
|
char filename[MAX_QPATH];
|
|
int len;
|
|
|
|
s_padd.leftRound = ui.R_RegisterShaderNoMip("menu/common/halfroundl_24.tga");
|
|
s_padd.corner_ur_20_24 = ui.R_RegisterShaderNoMip("menu/common/corner_ur_20_24.tga");
|
|
s_padd.corner_lr_18_20 = ui.R_RegisterShaderNoMip("menu/common/corner_lr_18_20.tga");
|
|
s_padd.corner_ll_18_47 = ui.R_RegisterShaderNoMip("menu/common/corner_ll_47_18.tga");
|
|
s_padd.corner_ll_8_47 = ui.R_RegisterShaderNoMip("menu/common/corner_ll_8_47.tga");
|
|
|
|
UI_LanguageFilename("ext_data/sp_padds","dat",filename);
|
|
|
|
len = ui.FS_ReadFile( filename,(void **) &buffer );
|
|
|
|
if ( len == -1 )
|
|
{
|
|
ui.Error(ERR_FATAL, "UI_PaddMenu_Cache : SP_PADDS.DAT file not found!\n");
|
|
return;
|
|
}
|
|
|
|
if ( len > MAXPADDSTEXT )
|
|
{
|
|
ui.Error(ERR_FATAL, "UI_PaddMenu_Cache : SP_PADDS.DAT too big!\n");
|
|
return;
|
|
}
|
|
|
|
strncpy( PaddsText, buffer, sizeof( PaddsText ) - 1 );
|
|
ui.FS_FreeFile( buffer );
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
PaddMenu_LoadText
|
|
===============
|
|
*/
|
|
void PaddMenu_LoadText (void)
|
|
{
|
|
|
|
UI_PaddMenu_Cache();
|
|
|
|
UI_ParsePaddText();
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_PaddMenu
|
|
===============
|
|
*/
|
|
void UI_PaddMenu(char *menuId)
|
|
{
|
|
uis.menusp = 0;
|
|
|
|
ingameFlag = qtrue; // true when in game menu is in use
|
|
|
|
Mouse_Show();
|
|
|
|
PaddMenu_LoadText();
|
|
|
|
s_padd.currentPadd = atoi((char *) (menuId+4));
|
|
s_padd.currentPadd--;
|
|
|
|
UI_PushMenu( &s_padd.menu );
|
|
|
|
Menu_AdjustCursor( &s_padd.menu, 1 );
|
|
|
|
PaddMenu_Init();
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
===============
|
|
UI_Padd2Menu
|
|
===============
|
|
*/
|
|
void UI_Padd2Menu(char *menuId)
|
|
{
|
|
UI_LogMenu(menuId,1);
|
|
}
|
|
|
|
static struct
|
|
{
|
|
menuframework_s menu;
|
|
int maxSites;
|
|
int chosenSite;
|
|
menubitmap_s quitMenu;
|
|
menubitmap_s engage;
|
|
qhandle_t figure;
|
|
qhandle_t leftRound;
|
|
qhandle_t slider;
|
|
qhandle_t corner_ur_20_24;
|
|
qhandle_t corner_lr_18_20;
|
|
qhandle_t corner_ll_18_130;
|
|
qhandle_t corner_lu_24_130;
|
|
qhandle_t corner_ll_8_47;
|
|
qhandle_t corner_ll_18_47;
|
|
qhandle_t arrow;
|
|
menubitmap_s siteButton1;
|
|
menubitmap_s siteButton2;
|
|
menubitmap_s siteButton3;
|
|
menubitmap_s siteButton4;
|
|
menubitmap_s siteButton5;
|
|
menubitmap_s siteButton6;
|
|
menubitmap_s siteButton7;
|
|
menubitmap_s siteButton8;
|
|
menubitmap_s siteButton9;
|
|
menubitmap_s siteButton10;
|
|
} s_transporter;
|
|
|
|
#define MAXSITEBUTTON 10
|
|
|
|
#define MAXTRANSPORTERTEXT 5000
|
|
static char TransporterText[MAXTRANSPORTERTEXT];
|
|
|
|
typedef struct
|
|
{
|
|
char *descriptionText; // Description of each button
|
|
char *command; // Coomand of button
|
|
} transporterText_t;
|
|
|
|
#define MAXTRANSPORTER 20
|
|
|
|
transporterText_t transporterText[MAXTRANSPORTER];
|
|
|
|
#define ID_SITEBUTTON1 11
|
|
#define ID_SITEBUTTON2 12
|
|
#define ID_SITEBUTTON3 13
|
|
#define ID_SITEBUTTON4 14
|
|
#define ID_SITEBUTTON5 15
|
|
#define ID_SITEBUTTON6 16
|
|
#define ID_SITEBUTTON7 17
|
|
#define ID_SITEBUTTON8 18
|
|
#define ID_SITEBUTTON9 19
|
|
#define ID_SITEBUTTON10 20
|
|
|
|
/*
|
|
=================
|
|
M_Transporter_Event
|
|
=================
|
|
*/
|
|
void M_Transporter_Event (void* ptr, int notification)
|
|
{
|
|
int id;
|
|
menubitmap_s *holdSite;
|
|
|
|
if (notification != QM_ACTIVATED)
|
|
{
|
|
return;
|
|
}
|
|
|
|
id = ((menucommon_s*)ptr)->id;
|
|
|
|
switch (id)
|
|
{
|
|
case ID_QUIT:
|
|
UI_PopMenu();
|
|
break;
|
|
case ID_SITEBUTTON1:
|
|
case ID_SITEBUTTON2:
|
|
case ID_SITEBUTTON3:
|
|
case ID_SITEBUTTON4:
|
|
case ID_SITEBUTTON5:
|
|
case ID_SITEBUTTON6:
|
|
case ID_SITEBUTTON7:
|
|
case ID_SITEBUTTON8:
|
|
case ID_SITEBUTTON9:
|
|
case ID_SITEBUTTON10:
|
|
if (s_transporter.chosenSite >= 0)
|
|
{
|
|
holdSite = &s_transporter.siteButton1;
|
|
holdSite += s_transporter.chosenSite;
|
|
holdSite->textcolor = CT_BLACK;
|
|
}
|
|
|
|
s_transporter.chosenSite = id - ID_SITEBUTTON1;
|
|
s_transporter.engage.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
|
|
holdSite = &s_transporter.siteButton1;
|
|
holdSite += s_transporter.chosenSite;
|
|
holdSite->textcolor = CT_LTGOLD1;
|
|
break;
|
|
|
|
case ID_ENGAGE:
|
|
if (transporterText[s_transporter.chosenSite].command)
|
|
{
|
|
// ui.S_StartLocalSound( , CHAN_MENU2 );
|
|
|
|
UI_ForceMenuOff ();
|
|
ui.Cmd_ExecuteText( EXEC_APPEND, transporterText[s_transporter.chosenSite].command);
|
|
}
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
=================
|
|
Transporter_StatusBar
|
|
=================
|
|
*/
|
|
static void Transporter_StatusBar(void *itemptr)
|
|
{
|
|
int id;
|
|
|
|
id = ((menucommon_s*)itemptr)->id;
|
|
|
|
switch (id)
|
|
{
|
|
case ID_SITEBUTTON1:
|
|
case ID_SITEBUTTON2:
|
|
case ID_SITEBUTTON3:
|
|
case ID_SITEBUTTON4:
|
|
case ID_SITEBUTTON5:
|
|
case ID_SITEBUTTON6:
|
|
case ID_SITEBUTTON7:
|
|
case ID_SITEBUTTON8:
|
|
case ID_SITEBUTTON9:
|
|
case ID_SITEBUTTON10:
|
|
UI_DrawProportionalString( 320, 410, transporterText[id-ID_SITEBUTTON1].descriptionText, UI_CENTER|UI_SMALLFONT, colorTable[CT_VLTGOLD1]);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
TransporterMenu_Key
|
|
=================
|
|
*/
|
|
sfxHandle_t TransporterMenu_Key (int key)
|
|
{
|
|
return ( Menu_DefaultKey( &s_transporter.menu, key ) );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
M_TransporterMenu_Graphics
|
|
=================
|
|
*/
|
|
void M_TransporterMenu_Graphics (void)
|
|
{
|
|
int stardateX,length,numColor,roundColor,i;
|
|
menubitmap_s *holdSite;
|
|
|
|
ui.R_SetColor( colorTable[CT_VDKPURPLE2]);
|
|
UI_DrawHandlePic( 30, 24,16, 32, s_transporter.leftRound);
|
|
|
|
stardateX = 50;
|
|
UI_DrawProportionalString( stardateX , 24,
|
|
menu_normal_text[MNT_TRANSPORTER1], UI_BIGFONT , colorTable[CT_LTPURPLE2]);
|
|
|
|
length = UI_ProportionalStringWidth( menu_normal_text[MNT_TRANSPORTER1],UI_BIGFONT);
|
|
ui.R_SetColor( colorTable[CT_VDKPURPLE2]);
|
|
UI_DrawHandlePic( stardateX + 4 + length, 24, (240 - (stardateX + 4 + length)), 24, uis.whiteShader);
|
|
|
|
// Draw the basic screen frame
|
|
ui.R_SetColor( colorTable[CT_VLTBLUE2]);
|
|
UI_DrawHandlePic( 475, 80, 256, 256, s_transporter.figure);
|
|
|
|
ui.R_SetColor( colorTable[CT_LTGOLD1]);
|
|
UI_DrawHandlePic( 326, 117, 52, 64, s_transporter.slider);
|
|
UI_DrawHandlePic( 326, 180, 52, 64, s_transporter.slider);
|
|
UI_DrawHandlePic( 374, 117, 52, 64, s_transporter.slider);
|
|
UI_DrawHandlePic( 374, 180, 52, 64, s_transporter.slider);
|
|
UI_DrawHandlePic( 422, 117, 52, 64, s_transporter.slider);
|
|
UI_DrawHandlePic( 422, 180, 52, 64, s_transporter.slider);
|
|
ui.R_SetColor( colorTable[CT_DKGOLD1]);
|
|
UI_DrawHandlePic( 318, 238, 8, 8, s_transporter.arrow);
|
|
UI_DrawHandlePic( 340, 238, -8, 8, s_transporter.arrow);
|
|
UI_DrawHandlePic( 366, 238, 8, 8, s_transporter.arrow);
|
|
UI_DrawHandlePic( 388, 238, -8, 8, s_transporter.arrow);
|
|
UI_DrawHandlePic( 414, 238, 8, 8, s_transporter.arrow);
|
|
UI_DrawHandlePic( 436, 238, -8, 8, s_transporter.arrow);
|
|
|
|
|
|
ui.R_SetColor( colorTable[CT_VDKPURPLE2]);
|
|
// Left side
|
|
UI_DrawHandlePic( 237, 24, 32, 32, s_transporter.corner_ur_20_24);
|
|
UI_DrawHandlePic( 235, 354, 32, 32, s_transporter.corner_lr_18_20);
|
|
|
|
// Right side
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 261, 24, -32, 32, s_transporter.corner_ur_20_24);
|
|
UI_DrawHandlePic( 350, 24, -256, 32, s_transporter.corner_lu_24_130);
|
|
UI_DrawHandlePic( 350, 360, -256, 32, s_transporter.corner_ll_18_130);
|
|
UI_DrawHandlePic( 328, 24, 216, 24, uis.whiteShader); // Top line
|
|
UI_DrawHandlePic( 326, 368, 216, 18, uis.whiteShader); // Bottom line
|
|
UI_DrawHandlePic( 270, 46, 20, 67, uis.whiteShader); // Column Side
|
|
|
|
ui.R_SetColor( colorTable[CT_LTBLUE1]);
|
|
UI_DrawHandlePic( 270, 115, 10, 127, uis.whiteShader); // Column Side
|
|
UI_DrawHandlePic( 298, 368, 25, 18, uis.whiteShader); // Bottom line
|
|
|
|
ui.R_SetColor( colorTable[CT_LTBROWN1]);
|
|
UI_DrawHandlePic( 296, 24, 29, 24, uis.whiteShader); // Top line
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 263, 354, -32, 32, s_transporter.corner_lr_18_20);
|
|
UI_DrawHandlePic( 270, 244, 20, 134, uis.whiteShader); // Column Side
|
|
UI_DrawHandlePic( 250, 115, 10, 127, uis.whiteShader); // Column Side
|
|
|
|
// Top Left side
|
|
ui.R_SetColor( colorTable[CT_VDKPURPLE2]);
|
|
UI_DrawHandlePic( 240, 46, 20, 67, uis.whiteShader); // Column Side
|
|
UI_DrawHandlePic( 240, 244, 20, 134, uis.whiteShader); // Column Side
|
|
|
|
UI_DrawHandlePic( 30, 368, 37, 18, uis.whiteShader); // Bottom line
|
|
UI_DrawHandlePic( 203, 368, 48, 18, uis.whiteShader); // Bottom line
|
|
|
|
// Bottom
|
|
ui.R_SetColor( colorTable[CT_VDKGOLD1]);
|
|
UI_DrawHandlePic( 30, 386, 64, -16, s_transporter.corner_ll_8_47);
|
|
UI_DrawHandlePic( 30, 425, 128, 64, s_transporter.corner_ll_18_47);
|
|
|
|
ui.R_SetColor( colorTable[CT_VDKGOLD1]);
|
|
UI_DrawHandlePic( 33, 391, 578, 8, uis.whiteShader); // Top line
|
|
UI_DrawHandlePic( 30, 396, 47, 39, uis.whiteShader); // Side line
|
|
UI_DrawHandlePic( 54, 438, 39, 18, uis.whiteShader); // Bottom line 1
|
|
ui.R_SetColor( colorTable[CT_DKGOLD1]);
|
|
UI_DrawHandlePic( 96, 438, 268, 18, uis.whiteShader); // Bottom line 2
|
|
UI_DrawHandlePic( 367, 438, 245, 18, uis.whiteShader); // Bottom line 3
|
|
|
|
|
|
holdSite = &s_transporter.siteButton1;
|
|
|
|
for (i=0;i<s_transporter.maxSites;i++)
|
|
{
|
|
if (transporterText[i].descriptionText )
|
|
{
|
|
if (s_transporter.chosenSite == i) // This site was chosen
|
|
{
|
|
numColor = CT_LTGOLD1;
|
|
roundColor = CT_LTGOLD1;
|
|
}
|
|
else // This site was not chosen
|
|
{
|
|
numColor = CT_WHITE;
|
|
roundColor = CT_DKAQUA;
|
|
}
|
|
|
|
UI_DrawProportionalString( holdSite->generic.x - 6,
|
|
holdSite->generic.y,
|
|
va("%d",i+1), UI_BIGFONT|UI_RIGHT, colorTable[numColor]);
|
|
|
|
ui.R_SetColor( colorTable[roundColor]);
|
|
UI_DrawHandlePic( holdSite->generic.x - 45,
|
|
holdSite->generic.y,
|
|
16, 32, s_transporter.leftRound);
|
|
}
|
|
holdSite++;
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
TransporterMenu_Draw
|
|
===============
|
|
*/
|
|
void TransporterMenu_Draw(void)
|
|
{
|
|
// Draw graphics particular to Main Menu
|
|
M_TransporterMenu_Graphics();
|
|
|
|
Menu_Draw( &s_transporter.menu );
|
|
}
|
|
|
|
/*
|
|
===============
|
|
TransporterMenu_Init
|
|
===============
|
|
*/
|
|
void TransporterMenu_Init(void)
|
|
{
|
|
menubitmap_s *holdSiteButton;
|
|
int x,y,pad,i;
|
|
|
|
s_transporter.menu.nitems = 0;
|
|
s_transporter.menu.draw = TransporterMenu_Draw;
|
|
s_transporter.menu.key = TransporterMenu_Key;
|
|
s_transporter.menu.fullscreen = qtrue;
|
|
s_transporter.menu.wrapAround = qtrue;
|
|
s_transporter.menu.descX = MENU_DESC_X;
|
|
s_transporter.menu.descY = MENU_DESC_Y;
|
|
s_transporter.menu.titleX = MENU_TITLE_X;
|
|
s_transporter.menu.titleY = MENU_TITLE_Y;
|
|
s_transporter.menu.titleI = MNT_CREDITSMENU_TITLE;
|
|
s_transporter.menu.footNoteEnum = MNT_CREDITS;
|
|
|
|
s_transporter.quitMenu.generic.type = MTYPE_BITMAP;
|
|
s_transporter.quitMenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_transporter.quitMenu.generic.x = 70;
|
|
s_transporter.quitMenu.generic.y = 368;
|
|
s_transporter.quitMenu.generic.name = GRAPHIC_SQUARE;
|
|
s_transporter.quitMenu.generic.id = ID_QUIT;
|
|
s_transporter.quitMenu.generic.callback = M_Transporter_Event;
|
|
s_transporter.quitMenu.width = MENU_BUTTON_MED_WIDTH;
|
|
s_transporter.quitMenu.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_transporter.quitMenu.color = CT_DKORANGE;
|
|
s_transporter.quitMenu.color2 = CT_LTORANGE;
|
|
s_transporter.quitMenu.textX = MENU_BUTTON_TEXT_X;
|
|
s_transporter.quitMenu.textY = MENU_BUTTON_TEXT_Y;
|
|
s_transporter.quitMenu.textEnum = MBT_PERSONALLOGRETURN;
|
|
s_transporter.quitMenu.textcolor = CT_BLACK;
|
|
s_transporter.quitMenu.textcolor2 = CT_WHITE;
|
|
|
|
s_transporter.engage.generic.type = MTYPE_BITMAP;
|
|
s_transporter.engage.generic.flags = QMF_GRAYED;
|
|
s_transporter.engage.generic.x = 316;
|
|
s_transporter.engage.generic.y = 295;
|
|
s_transporter.engage.generic.name = GRAPHIC_SQUARE;
|
|
s_transporter.engage.generic.id = ID_ENGAGE;
|
|
s_transporter.engage.generic.callback = M_Transporter_Event;
|
|
s_transporter.engage.width = MENU_BUTTON_MED_WIDTH;
|
|
s_transporter.engage.height = MENU_BUTTON_MED_HEIGHT + 40;
|
|
s_transporter.engage.color = CT_DKORANGE;
|
|
s_transporter.engage.color2 = CT_LTORANGE;
|
|
s_transporter.engage.textX = MENU_BUTTON_TEXT_X;
|
|
s_transporter.engage.textY = MENU_BUTTON_TEXT_Y;
|
|
s_transporter.engage.textEnum = MBT_ENGAGE;
|
|
s_transporter.engage.textcolor = CT_BLACK;
|
|
s_transporter.engage.textcolor2 = CT_WHITE;
|
|
|
|
Menu_AddItem( &s_transporter.menu, &s_transporter.quitMenu );
|
|
Menu_AddItem( &s_transporter.menu, &s_transporter.engage );
|
|
|
|
s_transporter.chosenSite = -1;
|
|
|
|
holdSiteButton = &s_transporter.siteButton1;
|
|
pad = 28;
|
|
y = 70;
|
|
x = 75;
|
|
s_transporter.maxSites = 0;
|
|
|
|
for (i=0;i<MAXSITEBUTTON;i++)
|
|
{
|
|
holdSiteButton->generic.type = MTYPE_BITMAP;
|
|
holdSiteButton->generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
holdSiteButton->generic.x = x;
|
|
holdSiteButton->generic.y = y;
|
|
holdSiteButton->generic.name = GRAPHIC_BUTTONRIGHT;
|
|
holdSiteButton->generic.id = ID_SITEBUTTON1 + i;
|
|
holdSiteButton->generic.callback = M_Transporter_Event;
|
|
holdSiteButton->generic.statusbarfunc = Transporter_StatusBar;
|
|
holdSiteButton->width = MENU_BUTTON_MED_WIDTH;
|
|
holdSiteButton->height = PROP_BIG_HEIGHT;
|
|
holdSiteButton->color = CT_DKAQUA;
|
|
holdSiteButton->color2 = CT_LTAQUA;
|
|
holdSiteButton->textX = MENU_BUTTON_TEXT_X;
|
|
holdSiteButton->textY = MENU_BUTTON_TEXT_Y + 6;
|
|
holdSiteButton->textPtr = menu_normal_text[MNT_SITE];
|
|
holdSiteButton->textcolor = CT_BLACK;
|
|
holdSiteButton->textcolor2 = CT_WHITE;
|
|
holdSiteButton->textStyle = UI_TINYFONT;
|
|
|
|
holdSiteButton++;
|
|
s_transporter.maxSites++;
|
|
|
|
y += pad;
|
|
}
|
|
|
|
holdSiteButton = &s_transporter.siteButton1;
|
|
for (i=0;i<MAXSITEBUTTON;i++)
|
|
{
|
|
if (transporterText[i].descriptionText)
|
|
{
|
|
Menu_AddItem( &s_transporter.menu, holdSiteButton );
|
|
}
|
|
holdSiteButton++;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
=================
|
|
UI_ParseTransporterText
|
|
=================
|
|
*/
|
|
static void UI_ParseTransporterText()
|
|
{
|
|
char *token;
|
|
char *buffer,*holdPtr;
|
|
int i,site,len;
|
|
|
|
memset(transporterText,0,sizeof(transporterText));
|
|
|
|
COM_BeginParseSession();
|
|
|
|
buffer = TransporterText;
|
|
i = 1; // Zero is null string
|
|
while ( buffer )
|
|
{
|
|
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
|
|
if (!Q_strncmp(token,"SITE",4))
|
|
{
|
|
site = atoi(&token[4]);
|
|
site--;
|
|
|
|
// Get desc
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
len = strlen(token);
|
|
transporterText[site].descriptionText = buffer - (len+1);
|
|
holdPtr = transporterText[site].descriptionText + len;
|
|
*holdPtr = NULL;
|
|
|
|
// Get command
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
len = strlen(token);
|
|
transporterText[site].command = buffer - (len+1);
|
|
holdPtr = transporterText[site].command + len;
|
|
*holdPtr = NULL;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_TransporterMenu_Cache
|
|
===============
|
|
*/
|
|
void UI_TransporterMenu_Cache (void)
|
|
{
|
|
char *buffer;
|
|
char filename[MAX_QPATH];
|
|
int len;
|
|
|
|
s_transporter.figure = ui.R_RegisterShaderNoMip("menu/suit/transporter.tga");
|
|
s_transporter.leftRound = ui.R_RegisterShaderNoMip("menu/common/halfroundl_24.tga");
|
|
|
|
s_transporter.corner_ur_20_24 = ui.R_RegisterShaderNoMip("menu/common/corner_ur_20_24.tga");
|
|
s_transporter.corner_lr_18_20 = ui.R_RegisterShaderNoMip("menu/common/corner_lr_18_20.tga");
|
|
s_transporter.corner_ll_18_130 = ui.R_RegisterShaderNoMip("menu/common/corner_ll_18_130.tga");
|
|
s_transporter.corner_lu_24_130 = ui.R_RegisterShaderNoMip("menu/common/corner_lu_24_130.tga");
|
|
s_transporter.arrow = ui.R_RegisterShaderNoMip("menu/common/right_arrow.tga");
|
|
s_transporter.slider = ui.R_RegisterShaderNoMip("menu/common/mon_bar.tga");
|
|
s_transporter.corner_ll_8_47 = ui.R_RegisterShaderNoMip("menu/common/corner_ll_8_47.tga");
|
|
s_transporter.corner_ll_18_47 = ui.R_RegisterShaderNoMip("menu/common/corner_ll_47_18.tga");
|
|
|
|
UI_LanguageFilename("ext_data/sp_transporter","dat",filename);
|
|
|
|
len = ui.FS_ReadFile( filename,(void **) &buffer );
|
|
|
|
if ( len == -1 )
|
|
{
|
|
ui.Error(ERR_FATAL, "UI_TransporterMenu_Cache : SP_TRANSPORTER.DAT file not found!\n");
|
|
return;
|
|
}
|
|
|
|
if ( len > MAXTRANSPORTERTEXT )
|
|
{
|
|
ui.Error(ERR_FATAL, "UI_TransporterMenu_Cache : SP_TRANSPORTER.DAT too big!\n");
|
|
return;
|
|
}
|
|
|
|
strncpy( TransporterText, buffer, sizeof( TransporterText ) - 1 );
|
|
ui.FS_FreeFile( buffer );
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
===============
|
|
TransporterMenu_LoadText
|
|
===============
|
|
*/
|
|
void TransporterMenu_LoadText (void)
|
|
{
|
|
|
|
UI_TransporterMenu_Cache();
|
|
|
|
UI_ParseTransporterText();
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_TransporterMenu
|
|
===============
|
|
*/
|
|
void UI_TransporterMenu(void)
|
|
{
|
|
uis.menusp = 0;
|
|
|
|
ingameFlag = qtrue; // true when in game menu is in use
|
|
|
|
Mouse_Show();
|
|
|
|
TransporterMenu_LoadText();
|
|
|
|
TransporterMenu_Init();
|
|
|
|
UI_PushMenu( &s_transporter.menu );
|
|
|
|
Menu_AdjustCursor( &s_transporter.menu, 1 );
|
|
}
|
|
|
|
|
|
|
|
|
|
#define ID_MAINTOPICBUTTON1 11
|
|
#define ID_MAINTOPICBUTTON2 12
|
|
#define ID_MAINTOPICBUTTON3 13
|
|
#define ID_MAINTOPICBUTTON4 14
|
|
|
|
#define ID_SUBTOPICBUTTON1 15
|
|
#define ID_SUBTOPICBUTTON2 16
|
|
#define ID_SUBTOPICBUTTON3 17
|
|
#define ID_SUBTOPICBUTTON4 18
|
|
#define ID_SUBTOPICBUTTON5 19
|
|
#define ID_SUBTOPICBUTTON6 20
|
|
#define ID_SUBTOPICBUTTON7 21
|
|
#define ID_SUBTOPICBUTTON8 22
|
|
#define ID_SUBTOPICBUTTON9 23
|
|
#define ID_SUBTOPICBUTTON10 24
|
|
|
|
#define MAXMAINTOPICDISPLAYED 4
|
|
#define MAXSUBTOPICDISPLAYED 8
|
|
|
|
#define MAXMAINTOPIC 25
|
|
#define MAXSUBTOPIC 25
|
|
|
|
static struct
|
|
{
|
|
menuframework_s menu;
|
|
int mainTopic;
|
|
int subTopic;
|
|
int maxMainTopics;
|
|
int topMainTopic; // Index to Maintopic at top of viewing screen
|
|
int cntMainTopic; // Count of topics loaded in
|
|
int topSubTopic; // Index to Subtopic at top of viewing screen
|
|
int cntSubTopic[MAXSUBTOPIC]; // Count of subtopics loaded in
|
|
int menuType; // 0 if library, 1 if astrometrics
|
|
int chosenButton; // Hi-lite subtopic button
|
|
qhandle_t corner_ur_20_24;
|
|
qhandle_t corner_lr_18_20;
|
|
qhandle_t corner_ll_8_47;
|
|
qhandle_t corner_ll_18_47;
|
|
qhandle_t corner_lr_8_20;
|
|
qhandle_t leftRound;
|
|
menubitmap_s playerModel;
|
|
menubitmap_s quitMenu;
|
|
menubitmap_s topicArrowDown;
|
|
menubitmap_s topicArrowUp;
|
|
menubitmap_s subTopicArrowDown;
|
|
menubitmap_s subTopicArrowUp;
|
|
menubitmap_s computerVoice;
|
|
menubitmap_s mainTopicButton1;
|
|
menubitmap_s mainTopicButton2;
|
|
menubitmap_s mainTopicButton3;
|
|
menubitmap_s mainTopicButton4;
|
|
menubitmap_s subTopicButton1;
|
|
menubitmap_s subTopicButton2;
|
|
menubitmap_s subTopicButton3;
|
|
menubitmap_s subTopicButton4;
|
|
menubitmap_s subTopicButton5;
|
|
menubitmap_s subTopicButton6;
|
|
menubitmap_s subTopicButton7;
|
|
menubitmap_s subTopicButton8;
|
|
menubitmap_s subTopicButton9;
|
|
menubitmap_s subTopicButton10;
|
|
} s_library;
|
|
|
|
static struct
|
|
{
|
|
menuframework_s menu;
|
|
float timer;
|
|
qhandle_t cornerPic;
|
|
int menuType; // 0 = library, 1 = astrometrics
|
|
} s_libraryaccessing;
|
|
|
|
#define MAXLIBRARYTEXT 50000
|
|
static char LibraryText[MAXLIBRARYTEXT];
|
|
|
|
typedef struct
|
|
{
|
|
char *mainTopic; // Description of main topic
|
|
char *mainTopicDesc; // Description of main topic desc
|
|
char *subTopic[MAXSUBTOPIC]; // Description of subtopics
|
|
char *subTopicDesc[MAXSUBTOPIC]; // Description of subtopic desc
|
|
int textY[MAXSUBTOPIC]; // Y starting point of text
|
|
int textWidth[MAXSUBTOPIC]; // X width of text
|
|
char *text[MAXSUBTOPIC]; // Text
|
|
char *model[MAXSUBTOPIC]; // Model
|
|
int modelX[MAXSUBTOPIC]; // Model x location
|
|
int modelY[MAXSUBTOPIC]; // Model y location
|
|
int modelDistance[MAXSUBTOPIC]; // Model's distance from camera
|
|
int modelOriginY[MAXSUBTOPIC]; // Model change in Y origin
|
|
int modelYaw[MAXSUBTOPIC]; // Model's YAW from camera (0 to rotate)
|
|
int modelPitch[MAXSUBTOPIC]; // Model's PITCH
|
|
int modelRoll[MAXSUBTOPIC]; // Model's ROLL
|
|
char *modelLegs[MAXSUBTOPIC];
|
|
char *modelHead[MAXSUBTOPIC];
|
|
char *modelTorso[MAXSUBTOPIC];
|
|
qhandle_t modelHandle[MAXSUBTOPIC]; // Handle to model
|
|
char *shader[MAXSUBTOPIC]; // Shader
|
|
qhandle_t shaderHandle[MAXSUBTOPIC]; // Handle to shader
|
|
int shaderXpos[MAXSUBTOPIC]; // Shader x location
|
|
int shaderYpos[MAXSUBTOPIC]; // Shader y location
|
|
int shaderXlength[MAXSUBTOPIC]; // Shader x length
|
|
int shaderYlength[MAXSUBTOPIC]; // Shader y length
|
|
char *command[MAXSUBTOPIC]; // Command given when exiting the Astrometrics menu
|
|
char *sound[MAXSUBTOPIC]; // Wav file to play along with the text
|
|
sfxHandle_t soundHandle[MAXSUBTOPIC]; // Handle of wav file to play
|
|
} libraryText_t;
|
|
|
|
|
|
sfxHandle_t nullSound;
|
|
|
|
libraryText_t libraryText[MAXMAINTOPIC];
|
|
|
|
|
|
static void UI_Draw3DModel( float x, float y, float w, float h, qhandle_t model, vec3_t origin, vec3_t angles)
|
|
{
|
|
refdef_t refdef;
|
|
refEntity_t ent;
|
|
|
|
UI_AdjustFrom640( &x, &y, &w, &h );
|
|
|
|
memset( &refdef, 0, sizeof( refdef ) );
|
|
|
|
memset( &ent, 0, sizeof( ent ) );
|
|
AnglesToAxis( angles, ent.axis );
|
|
|
|
VectorCopy( origin, ent.origin );
|
|
ent.hModel = model;
|
|
// if (Cvar_VariableValue("r_dynamiclight") ) {
|
|
// ent.renderfx = RF_LOWLIGHT|RF_NOSHADOW; // keep it dark, and no stencil shadows
|
|
// } else {
|
|
// ent.renderfx = RF_NOSHADOW; // no stencil shadows
|
|
// }
|
|
refdef.rdflags = RDF_NOWORLDMODEL;
|
|
|
|
AxisClear( refdef.viewaxis );
|
|
|
|
refdef.fov_x = 40;
|
|
refdef.fov_y = 30;
|
|
|
|
refdef.x = x;
|
|
refdef.y = y;
|
|
refdef.width = w;
|
|
refdef.height = h;
|
|
|
|
refdef.time = uis.realtime;
|
|
|
|
ui.R_ClearScene();
|
|
ui.R_AddRefEntityToScene( &ent );
|
|
|
|
origin[0] -= 50; // + = behind, - = in front
|
|
origin[1] += 50; // + = left, - = right
|
|
origin[2] += 50; // + = above, - = below
|
|
ui.R_AddLightToScene( origin, 500, 1.0, 1.0, 1.0 );
|
|
|
|
ui.R_RenderScene( &refdef );
|
|
}
|
|
|
|
void Controls_DrawPlayer( void *self );
|
|
void Controls_UpdateModel( int anim );
|
|
|
|
/*
|
|
================
|
|
UI_LibraryDrawMD3Model
|
|
================
|
|
*/
|
|
static void UI_LibraryDrawMD3Model(qhandle_t modelHandle,int x, int y,int modelDistance,int modelYaw,int modelPitch,int modelRoll,int modelOriginY)
|
|
{
|
|
vec3_t origin = {50,0,2};
|
|
vec3_t angles;
|
|
|
|
if (modelDistance)
|
|
{
|
|
origin[0] = modelDistance;
|
|
}
|
|
else
|
|
{
|
|
origin[0] = 50;
|
|
}
|
|
|
|
if (modelOriginY)
|
|
{
|
|
origin[2] = modelOriginY;
|
|
}
|
|
else
|
|
{
|
|
origin[2] = 2;
|
|
}
|
|
|
|
angles[PITCH] = modelPitch;
|
|
|
|
if (modelYaw)
|
|
{
|
|
angles[YAW] = modelYaw;
|
|
}
|
|
else
|
|
{
|
|
angles[YAW] = 20.0/300.0 * uis.realtime;
|
|
}
|
|
|
|
|
|
if (modelRoll)
|
|
{
|
|
angles[ROLL] = modelRoll;
|
|
}
|
|
else
|
|
{
|
|
angles[ROLL] = 0;
|
|
}
|
|
|
|
UI_Draw3DModel( x, y, 447, 305, modelHandle, origin, angles);
|
|
|
|
}
|
|
|
|
/*
|
|
================
|
|
UI_DrawLibraryMDRModel
|
|
|
|
================
|
|
*/
|
|
static void UI_DrawLibraryMDRModel(qhandle_t modelHandle,int x, int y)
|
|
{
|
|
void *voidPtr;
|
|
|
|
vec3_t origin = {50,0,2};
|
|
vec3_t angles;
|
|
|
|
angles[PITCH] = 0;
|
|
angles[YAW] = 20.0/300.0 * uis.realtime;
|
|
angles[ROLL] = 0;
|
|
|
|
voidPtr = (void *) &s_library.playerModel;
|
|
Controls_DrawPlayer(voidPtr);
|
|
Controls_UpdateModel( 0 );
|
|
|
|
}
|
|
|
|
/*
|
|
=================
|
|
ClearLibraryDesc
|
|
=================
|
|
*/
|
|
void ClearLibraryDesc(void)
|
|
{
|
|
int i;
|
|
|
|
for (i=0;i<(LMG_MAX - LMG_BIO_DESC1);++i)
|
|
{
|
|
logmenu_graphics[LMG_BIO_DESC1 + i].type = MG_OFF; // Turn off text
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
ChangeLibraryDesc
|
|
=================
|
|
*/
|
|
void ChangeLibraryDesc(int id)
|
|
{
|
|
int i,y,width;
|
|
|
|
if (s_library.subTopic == id)
|
|
{
|
|
return; // Just hitting the same key again
|
|
}
|
|
else // Turn off old description
|
|
{
|
|
|
|
s_library.subTopic = id;
|
|
|
|
for (i=0;i<(LMG_MAX - LMG_BIO_DESC1);++i)
|
|
{
|
|
logmenu_graphics[LMG_BIO_DESC1 + i].type = MG_OFF; // Turn off text
|
|
}
|
|
}
|
|
|
|
if (!libraryText[s_library.mainTopic].textY[s_library.subTopic])
|
|
{
|
|
y = 120;
|
|
}
|
|
else
|
|
{
|
|
y = libraryText[s_library.mainTopic].textY[s_library.subTopic];
|
|
}
|
|
|
|
for (i=LMG_BIO_DESC1; i<(LMG_BIO_DESC1 +LOG_MAXDESC );i++)
|
|
{
|
|
logmenu_graphics[i].x = 242;
|
|
logmenu_graphics[i].y = y;
|
|
y += 12;
|
|
}
|
|
|
|
if (!libraryText[s_library.mainTopic].textWidth[s_library.subTopic])
|
|
{
|
|
width = 360;
|
|
}
|
|
else
|
|
{
|
|
width = libraryText[s_library.mainTopic].textWidth[s_library.subTopic];
|
|
}
|
|
|
|
// Turn on description for new ID
|
|
TurnOnLogDesc(libraryText[s_library.mainTopic].text[s_library.subTopic],
|
|
width,libraryText[s_library.mainTopic].textY[s_library.subTopic]);
|
|
|
|
if ((libraryText[s_library.mainTopic].soundHandle[s_library.subTopic]) &&
|
|
(s_library.computerVoice.textEnum == MBT_COMPUTERVOICEON))
|
|
{
|
|
ui.S_StartLocalSound( libraryText[s_library.mainTopic].soundHandle[s_library.subTopic], CHAN_MENU2 );
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
=================
|
|
M_Transporter_Event
|
|
=================
|
|
*/
|
|
void M_Library_Event (void* ptr, int notification)
|
|
{
|
|
int id,i;
|
|
menubitmap_s *holdSubTopicButton,*holdMainTopicButton;
|
|
|
|
if (notification != QM_ACTIVATED)
|
|
{
|
|
return;
|
|
}
|
|
|
|
id = ((menucommon_s*)ptr)->id;
|
|
|
|
switch (id)
|
|
{
|
|
case ID_COMPUTERVOICE:
|
|
|
|
if (s_library.computerVoice.textEnum == MBT_COMPUTERVOICEON)
|
|
{
|
|
s_library.computerVoice.textEnum = MBT_COMPUTERVOICEOFF;
|
|
ui.S_StartLocalSound( nullSound, CHAN_MENU2 );
|
|
}
|
|
else
|
|
{
|
|
s_library.computerVoice.textEnum = MBT_COMPUTERVOICEON;
|
|
}
|
|
break;
|
|
|
|
case ID_ARROW1UP:
|
|
if ((s_library.topMainTopic - 1) >= 0)
|
|
{
|
|
s_library.topMainTopic--;
|
|
|
|
holdMainTopicButton = &s_library.mainTopicButton1;
|
|
|
|
for (i=s_library.topMainTopic;i<(s_library.topMainTopic + MAXMAINTOPICDISPLAYED);i++)
|
|
{
|
|
holdMainTopicButton->textPtr = libraryText[i].mainTopic;
|
|
holdMainTopicButton++;
|
|
}
|
|
}
|
|
|
|
// Show down arrow indicator
|
|
s_library.topicArrowDown.generic.flags &= ~QMF_HIDDEN;
|
|
|
|
// Show up arrow indicator???
|
|
if (s_library.topMainTopic == 0)
|
|
{
|
|
s_library.topicArrowUp.generic.flags |= QMF_HIDDEN;
|
|
}
|
|
else
|
|
{
|
|
s_library.topicArrowUp.generic.flags &= ~QMF_HIDDEN;
|
|
}
|
|
|
|
break;
|
|
|
|
case ID_ARROW1DOWN:
|
|
if (((s_library.topMainTopic + 1) + MAXMAINTOPICDISPLAYED) <= s_library.cntMainTopic)
|
|
{
|
|
|
|
s_library.topMainTopic++;
|
|
|
|
holdMainTopicButton = &s_library.mainTopicButton1;
|
|
|
|
for (i=s_library.topMainTopic;i<(s_library.topMainTopic + MAXMAINTOPICDISPLAYED);i++)
|
|
{
|
|
holdMainTopicButton->textPtr = libraryText[i].mainTopic;
|
|
holdMainTopicButton++;
|
|
}
|
|
}
|
|
|
|
// Show up arrow indicator
|
|
s_library.topicArrowUp.generic.flags &= ~QMF_HIDDEN;
|
|
|
|
// Show down arrow indicator???
|
|
if ((s_library.topMainTopic + MAXMAINTOPICDISPLAYED) >= s_library.cntMainTopic)
|
|
{
|
|
s_library.topicArrowDown.generic.flags |= QMF_HIDDEN;
|
|
}
|
|
else
|
|
{
|
|
s_library.topicArrowDown.generic.flags &= ~QMF_HIDDEN;
|
|
}
|
|
|
|
break;
|
|
|
|
case ID_ARROW2UP:
|
|
if ((s_library.topSubTopic - 1) >= 0)
|
|
{
|
|
s_library.topSubTopic--;
|
|
|
|
holdSubTopicButton = &s_library.subTopicButton1;
|
|
|
|
for (i=s_library.topSubTopic;i<(s_library.topSubTopic + MAXSUBTOPICDISPLAYED);i++)
|
|
{
|
|
holdSubTopicButton->textPtr = libraryText[s_library.mainTopic].subTopic[i];
|
|
holdSubTopicButton++;
|
|
}
|
|
|
|
// Hi-lite button when moved
|
|
if ((s_library.chosenButton >= 0) &&
|
|
(s_library.chosenButton <=MAXSUBTOPICDISPLAYED)) // Hi-lite new button
|
|
{
|
|
holdSubTopicButton = &s_library.subTopicButton1 + (s_library.chosenButton);
|
|
holdSubTopicButton->textcolor = CT_BLACK;
|
|
}
|
|
|
|
s_library.chosenButton++;
|
|
if ((s_library.chosenButton >= 0) &&
|
|
(s_library.chosenButton <=MAXSUBTOPICDISPLAYED)) // Hi-lite new button
|
|
{
|
|
holdSubTopicButton = &s_library.subTopicButton1 + (s_library.chosenButton);
|
|
holdSubTopicButton->textcolor = CT_VLTGOLD1;
|
|
}
|
|
}
|
|
|
|
// Show down arrow indicator
|
|
s_library.subTopicArrowDown.generic.flags &= ~QMF_HIDDEN;
|
|
|
|
// Show up arrow indicator???
|
|
if (s_library.topSubTopic == 0)
|
|
{
|
|
s_library.subTopicArrowUp.generic.flags |= QMF_HIDDEN;
|
|
}
|
|
else
|
|
{
|
|
s_library.subTopicArrowUp.generic.flags &= ~QMF_HIDDEN;
|
|
}
|
|
|
|
break;
|
|
|
|
case ID_ARROW2DOWN:
|
|
if (((s_library.topSubTopic + 1) + MAXSUBTOPICDISPLAYED) <= s_library.cntSubTopic[s_library.mainTopic])
|
|
{
|
|
s_library.topSubTopic++;
|
|
|
|
holdSubTopicButton = &s_library.subTopicButton1;
|
|
|
|
for (i=s_library.topSubTopic;i<(s_library.topSubTopic + MAXSUBTOPICDISPLAYED);i++)
|
|
{
|
|
holdSubTopicButton->textPtr = libraryText[s_library.mainTopic].subTopic[i];
|
|
holdSubTopicButton++;
|
|
}
|
|
|
|
// Hi-lite button when moved
|
|
if ((s_library.chosenButton >= 0) &&
|
|
(s_library.chosenButton <=MAXSUBTOPICDISPLAYED)) // Hi-lite new button
|
|
{
|
|
holdSubTopicButton = &s_library.subTopicButton1 + (s_library.chosenButton);
|
|
holdSubTopicButton->textcolor = CT_BLACK;
|
|
}
|
|
|
|
s_library.chosenButton--;
|
|
if ((s_library.chosenButton >= 0) &&
|
|
(s_library.chosenButton <=MAXSUBTOPICDISPLAYED)) // Hi-lite new button
|
|
{
|
|
holdSubTopicButton = &s_library.subTopicButton1 + (s_library.chosenButton);
|
|
holdSubTopicButton->textcolor = CT_VLTGOLD1;
|
|
}
|
|
}
|
|
|
|
// Show up arrow indicator
|
|
s_library.subTopicArrowUp.generic.flags &= ~QMF_HIDDEN;
|
|
|
|
// Show down arrow indicator???
|
|
if ((s_library.topSubTopic + MAXSUBTOPICDISPLAYED) >= s_library.cntSubTopic[s_library.mainTopic])
|
|
{
|
|
s_library.subTopicArrowDown.generic.flags |= QMF_HIDDEN;
|
|
}
|
|
else
|
|
{
|
|
s_library.subTopicArrowDown.generic.flags &= ~QMF_HIDDEN;
|
|
}
|
|
|
|
break;
|
|
|
|
case ID_QUIT:
|
|
UI_PopMenu();
|
|
if (libraryText[s_library.mainTopic].command[s_library.subTopic])
|
|
{
|
|
ui.Cmd_ExecuteText( EXEC_APPEND, libraryText[s_library.mainTopic].command[s_library.subTopic]);
|
|
}
|
|
|
|
ui.S_StartLocalSound( nullSound, CHAN_MENU2 );
|
|
|
|
char sex[16];
|
|
ui.Cvar_VariableStringBuffer( "sex", sex, sizeof( sex ) );
|
|
|
|
if (!Q_strncmp(sex,"male",4))
|
|
{
|
|
ui.Cvar_Set( "legsmodel", "hazard/default" );
|
|
ui.Cvar_Set( "torsomodel","hazard/default" );
|
|
ui.Cvar_Set( "headmodel", "munro/default" );
|
|
}
|
|
else
|
|
{
|
|
ui.Cvar_Set( "legsmodel", "hazardfemale/default" );
|
|
ui.Cvar_Set( "torsomodel","hazardfemale/default" );
|
|
ui.Cvar_Set( "headmodel", "alexandria/default" );
|
|
}
|
|
|
|
break;
|
|
case ID_MAINTOPICBUTTON1:
|
|
case ID_MAINTOPICBUTTON2:
|
|
case ID_MAINTOPICBUTTON3:
|
|
case ID_MAINTOPICBUTTON4:
|
|
|
|
// Blackout all main topic buttons
|
|
holdMainTopicButton = &s_library.mainTopicButton1;
|
|
for (i=0;i<MAXMAINTOPICDISPLAYED;i++)
|
|
{
|
|
holdMainTopicButton->textcolor = CT_BLACK;
|
|
++holdMainTopicButton;
|
|
}
|
|
|
|
// Highlight chosen button
|
|
holdMainTopicButton = &s_library.mainTopicButton1 + (id - ID_MAINTOPICBUTTON1);
|
|
holdMainTopicButton->textcolor = CT_LTGOLD1;
|
|
|
|
|
|
|
|
// Blackout all subtopic buttons
|
|
holdSubTopicButton = &s_library.subTopicButton1;
|
|
for (i=0;i<MAXSUBTOPICDISPLAYED;i++)
|
|
{
|
|
holdSubTopicButton->textcolor = CT_BLACK;
|
|
++holdSubTopicButton;
|
|
}
|
|
|
|
// Highlight top subtopic button
|
|
holdSubTopicButton = &s_library.subTopicButton1;
|
|
holdSubTopicButton->textcolor = CT_VLTGOLD1;
|
|
|
|
|
|
s_library.mainTopic = s_library.topMainTopic + (id-ID_MAINTOPICBUTTON1);
|
|
|
|
holdSubTopicButton = &s_library.subTopicButton1;
|
|
for (i=0;i<MAXSUBTOPICDISPLAYED;i++)
|
|
{
|
|
holdSubTopicButton->textPtr = libraryText[s_library.mainTopic].subTopic[i];
|
|
if (libraryText[s_library.mainTopic].subTopicDesc[i])
|
|
{
|
|
holdSubTopicButton->generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
}
|
|
else
|
|
{
|
|
holdSubTopicButton->generic.flags = QMF_HIDDEN;
|
|
}
|
|
holdSubTopicButton++;
|
|
}
|
|
ClearLibraryDesc();
|
|
|
|
s_library.subTopic = -1;
|
|
s_library.topSubTopic = 0;
|
|
ChangeLibraryDesc(s_library.topSubTopic);
|
|
|
|
s_library.subTopicArrowUp.generic.flags = QMF_HIDDEN;
|
|
s_library.topSubTopic = 0;
|
|
// Show down arrow indicator???
|
|
if ((s_library.topSubTopic + MAXSUBTOPICDISPLAYED) >= s_library.cntSubTopic[s_library.mainTopic])
|
|
{
|
|
s_library.subTopicArrowDown.generic.flags = QMF_HIDDEN;
|
|
}
|
|
else
|
|
{
|
|
s_library.subTopicArrowDown.generic.flags &= ~QMF_HIDDEN;
|
|
}
|
|
|
|
break;
|
|
case ID_SUBTOPICBUTTON1:
|
|
case ID_SUBTOPICBUTTON2:
|
|
case ID_SUBTOPICBUTTON3:
|
|
case ID_SUBTOPICBUTTON4:
|
|
case ID_SUBTOPICBUTTON5:
|
|
case ID_SUBTOPICBUTTON6:
|
|
case ID_SUBTOPICBUTTON7:
|
|
case ID_SUBTOPICBUTTON8:
|
|
case ID_SUBTOPICBUTTON9:
|
|
case ID_SUBTOPICBUTTON10:
|
|
|
|
// Blackout all subtopic buttons
|
|
holdSubTopicButton = &s_library.subTopicButton1;
|
|
for (i=0;i<MAXSUBTOPICDISPLAYED;i++)
|
|
{
|
|
holdSubTopicButton->textcolor = CT_BLACK;
|
|
++holdSubTopicButton;
|
|
}
|
|
|
|
// Highlight chosen button
|
|
// if (((id + s_library.topSubTopic - ID_SUBTOPICBUTTON1) > 0) &&
|
|
// ((id + s_library.topSubTopic - ID_SUBTOPICBUTTON1) < MAXSUBTOPICDISPLAYED))
|
|
holdSubTopicButton = &s_library.subTopicButton1 + (id - ID_SUBTOPICBUTTON1);
|
|
holdSubTopicButton->textcolor = CT_VLTGOLD1;
|
|
|
|
s_library.chosenButton = id - ID_SUBTOPICBUTTON1;
|
|
|
|
ChangeLibraryDesc(s_library.topSubTopic + (id-ID_SUBTOPICBUTTON1));
|
|
|
|
// if ((libraryText[s_library.mainTopic].soundHandle[s_library.subTopic]) &&
|
|
// (s_library.computerVoice.textEnum == MBT_COMPUTERVOICEON))
|
|
// {
|
|
// ui.S_StartLocalSound( libraryText[s_library.mainTopic].soundHandle[s_library.subTopic], CHAN_MENU2 );
|
|
// }
|
|
|
|
// If there's a .mdr
|
|
if (libraryText[s_library.mainTopic].modelLegs[s_library.subTopic])
|
|
{
|
|
ui.Cvar_Set( "legsmodel", libraryText[s_library.mainTopic].modelLegs[s_library.subTopic] );
|
|
}
|
|
|
|
if (libraryText[s_library.mainTopic].modelHead[s_library.subTopic])
|
|
{
|
|
ui.Cvar_Set( "headmodel", libraryText[s_library.mainTopic].modelHead[s_library.subTopic] );
|
|
}
|
|
|
|
if (libraryText[s_library.mainTopic].modelTorso[s_library.subTopic])
|
|
{
|
|
ui.Cvar_Set( "torsomodel", libraryText[s_library.mainTopic].modelTorso[s_library.subTopic] );
|
|
}
|
|
|
|
s_library.playerModel.generic.x = libraryText[s_library.mainTopic].modelX[s_library.subTopic];
|
|
s_library.playerModel.generic.y = libraryText[s_library.mainTopic].modelY[s_library.subTopic];
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
Library_StatusBar
|
|
=================
|
|
*/
|
|
static void Library_StatusBar(void *itemptr)
|
|
{
|
|
int id;
|
|
|
|
id = ((menucommon_s*)itemptr)->id;
|
|
|
|
switch (id)
|
|
{
|
|
case ID_MAINTOPICBUTTON1:
|
|
case ID_MAINTOPICBUTTON2:
|
|
case ID_MAINTOPICBUTTON3:
|
|
case ID_MAINTOPICBUTTON4:
|
|
UI_DrawProportionalString( 320, 410, libraryText[id + s_library.topMainTopic-ID_MAINTOPICBUTTON1].mainTopicDesc, UI_CENTER|UI_SMALLFONT, colorTable[CT_VLTGOLD1]);
|
|
break;
|
|
case ID_SUBTOPICBUTTON1:
|
|
case ID_SUBTOPICBUTTON2:
|
|
case ID_SUBTOPICBUTTON3:
|
|
case ID_SUBTOPICBUTTON4:
|
|
case ID_SUBTOPICBUTTON5:
|
|
case ID_SUBTOPICBUTTON6:
|
|
case ID_SUBTOPICBUTTON7:
|
|
case ID_SUBTOPICBUTTON8:
|
|
case ID_SUBTOPICBUTTON9:
|
|
case ID_SUBTOPICBUTTON10:
|
|
|
|
UI_DrawProportionalString( 320, 410,
|
|
libraryText[s_library.mainTopic].subTopicDesc[id + s_library.topSubTopic - ID_SUBTOPICBUTTON1],
|
|
UI_CENTER|UI_SMALLFONT, colorTable[CT_VLTGOLD1]);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
LibraryMenu_Key
|
|
=================
|
|
*/
|
|
sfxHandle_t LibraryMenu_Key (int key)
|
|
{
|
|
if ( key == K_ESCAPE )
|
|
{
|
|
ui.S_StartLocalSound( nullSound, CHAN_MENU2 );
|
|
if (libraryText[s_library.mainTopic].command[s_library.subTopic])
|
|
{
|
|
ui.Cmd_ExecuteText( EXEC_APPEND, libraryText[s_library.mainTopic].command[s_library.subTopic]);
|
|
}
|
|
}
|
|
|
|
return ( Menu_DefaultKey( &s_library.menu, key ) );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
M_LibraryMenu_Graphics
|
|
=================
|
|
*/
|
|
void M_LibraryMenu_Graphics (void)
|
|
{
|
|
int nameX,length,stardateX,textIndex;
|
|
int color1,color2,color3,color4,color5;
|
|
|
|
// Draw the basic screen frame
|
|
if (s_library.menuType == MENUTYPE_LIBRARY)
|
|
{
|
|
color1 = CT_VDKPURPLE2;
|
|
color2 = CT_DKBROWN1;
|
|
color3 = CT_DKPURPLE2;
|
|
color4 = CT_LTPURPLE2;
|
|
color5 = CT_VDKPURPLE3;
|
|
}
|
|
else
|
|
{
|
|
color1 = CT_VDKBLUE1;
|
|
color2 = CT_DKGOLD1;
|
|
color3 = CT_DKBLUE1;
|
|
color4 = CT_LTBLUE1;
|
|
color5 = CT_VDKBROWN1;
|
|
}
|
|
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 30, 24,16, 32, s_library.leftRound);
|
|
|
|
// Left corners
|
|
UI_DrawHandlePic( 181, 24, 32, 32, s_library.corner_ur_20_24);
|
|
|
|
ui.R_SetColor( colorTable[color3]);
|
|
UI_DrawHandlePic( 23, 354, -32, 32, s_library.corner_lr_18_20);
|
|
UI_DrawHandlePic( 181, 157, 32, 16, s_library.corner_lr_8_20);
|
|
UI_DrawHandlePic( 21, 153, -32, -16, s_library.corner_lr_8_20);
|
|
|
|
// Right corners
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 202, 24, -32, 32, s_library.corner_ur_20_24);
|
|
UI_DrawHandlePic( 204, 354, -32, 32, s_library.corner_lr_18_20);
|
|
|
|
// Lower corners
|
|
ui.R_SetColor( colorTable[color2]);
|
|
UI_DrawHandlePic( 30, 386, 64, -16, s_library.corner_ll_8_47);
|
|
UI_DrawHandlePic( 30, 425, 128, 64, s_library.corner_ll_18_47);
|
|
|
|
stardateX = 50;
|
|
UI_DrawProportionalString( stardateX , 24,
|
|
menu_normal_text[MNT_TOPICS], UI_BIGFONT , colorTable[color4]);
|
|
|
|
length = UI_ProportionalStringWidth( menu_normal_text[MNT_TOPICS],UI_BIGFONT);
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( stardateX + 4 + length, 24, (196 - (stardateX + 4 + length)), 24, uis.whiteShader);
|
|
|
|
// Left side
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 184, 36, 20, 23, uis.whiteShader); // Side line1
|
|
|
|
ui.R_SetColor( colorTable[color5]);
|
|
UI_DrawHandlePic( 184, 62, 20, 18, uis.whiteShader); // Side line2
|
|
UI_DrawHandlePic( 184, 83, 20, 42, uis.whiteShader); // Side line3
|
|
UI_DrawHandlePic( 184, 128, 20, 18, uis.whiteShader); // Side line4
|
|
|
|
ui.R_SetColor( colorTable[color3]);
|
|
UI_DrawHandlePic( 184, 149, 20, 13, uis.whiteShader); // Side line3
|
|
UI_DrawHandlePic( 37, 159, 162, 8, uis.whiteShader); // Bar across
|
|
|
|
UI_DrawHandlePic( 30, 165, 20, 12, uis.whiteShader); // Lower Left side
|
|
UI_DrawHandlePic( 30, 180, 20, 18, uis.whiteShader); // Lower Left side2
|
|
UI_DrawHandlePic( 30, 201, 20, 130, uis.whiteShader); // Lower Left side3
|
|
UI_DrawHandlePic( 30, 334, 20, 18, uis.whiteShader); // Lower Left side4
|
|
UI_DrawHandlePic( 30, 355, 20, 11, uis.whiteShader); // Lower Left side5
|
|
|
|
UI_DrawHandlePic( 51, 368, 8, 18, uis.whiteShader); // Bottom
|
|
UI_DrawHandlePic( 195, 368, 7, 18, uis.whiteShader); // Bottom2
|
|
|
|
// Right side
|
|
nameX = 592;
|
|
|
|
if (s_library.menuType == MENUTYPE_LIBRARY)
|
|
{
|
|
textIndex = MNT_LIBRARYSTATION;
|
|
}
|
|
else if (s_library.menuType == MENUTYPE_RECIPES)
|
|
{
|
|
textIndex = MNT_RECIPES;
|
|
}
|
|
else if (s_library.menuType == MENUTYPE_SOCIALCALENDAR)
|
|
{
|
|
textIndex = MNT_SOCIALCALENDAR;
|
|
}
|
|
else
|
|
{
|
|
textIndex = MNT_ASTROMETRICS;
|
|
}
|
|
|
|
UI_DrawProportionalString( nameX, 24,
|
|
menu_normal_text[textIndex], UI_BIGFONT | UI_RIGHT, colorTable[color4]);
|
|
length = UI_ProportionalStringWidth( menu_normal_text[textIndex],UI_BIGFONT);
|
|
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( nameX + 4, 24,-16, 32, s_library.leftRound);
|
|
UI_DrawHandlePic( 218, 24, (nameX - (length +4)) - 218, 24, uis.whiteShader);
|
|
|
|
UI_DrawProportionalString( 240, 58,va("%s / %s", libraryText[s_library.mainTopic].mainTopic,libraryText[s_library.mainTopic].subTopic[s_library.subTopic]),
|
|
UI_SMALLFONT , colorTable[CT_VLTGOLD1]);
|
|
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 211, 32, 20, 22, uis.whiteShader); // Side line
|
|
ui.R_SetColor( colorTable[color2]);
|
|
UI_DrawHandlePic( 211, 57, 20, 53, uis.whiteShader); // Side line2
|
|
UI_DrawHandlePic( 211, 113, 20, 248, uis.whiteShader); // Side line3
|
|
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 218, 368, 394, 18, uis.whiteShader); // Bottom line
|
|
|
|
// Bottom
|
|
ui.R_SetColor( colorTable[color2]);
|
|
UI_DrawHandlePic( 33, 391, 578, 8, uis.whiteShader); // Top line
|
|
UI_DrawHandlePic( 30, 396, 47, 39, uis.whiteShader); // Side line
|
|
UI_DrawHandlePic( 54, 438, 39, 18, uis.whiteShader); // Bottom line 1
|
|
ui.R_SetColor( colorTable[color1]);
|
|
UI_DrawHandlePic( 96, 438, 268, 18, uis.whiteShader); // Bottom line 2
|
|
UI_DrawHandlePic( 367, 438, 245, 18, uis.whiteShader); // Bottom line 3
|
|
|
|
if (libraryText[s_library.mainTopic].model[s_library.subTopic])
|
|
{
|
|
UI_LibraryDrawMD3Model(libraryText[s_library.mainTopic].modelHandle[s_library.subTopic],
|
|
libraryText[s_library.mainTopic].modelX[s_library.subTopic],
|
|
libraryText[s_library.mainTopic].modelY[s_library.subTopic],
|
|
libraryText[s_library.mainTopic].modelDistance[s_library.subTopic],
|
|
libraryText[s_library.mainTopic].modelYaw[s_library.subTopic],
|
|
libraryText[s_library.mainTopic].modelPitch[s_library.subTopic],
|
|
libraryText[s_library.mainTopic].modelRoll[s_library.subTopic],
|
|
libraryText[s_library.mainTopic].modelOriginY[s_library.subTopic]);
|
|
}
|
|
|
|
if ((libraryText[s_library.mainTopic].modelHead[s_library.subTopic]) ||
|
|
(libraryText[s_library.mainTopic].modelTorso[s_library.subTopic]) ||
|
|
(libraryText[s_library.mainTopic].modelLegs[s_library.subTopic]))
|
|
{
|
|
UI_DrawLibraryMDRModel(libraryText[s_library.mainTopic].modelHandle[s_library.subTopic],
|
|
libraryText[s_library.mainTopic].modelX[s_library.subTopic],
|
|
libraryText[s_library.mainTopic].modelY[s_library.subTopic]);
|
|
}
|
|
|
|
if (libraryText[s_library.mainTopic].shaderHandle[s_library.subTopic])
|
|
{
|
|
ui.R_SetColor( colorTable[CT_WHITE]);
|
|
UI_DrawHandlePic( libraryText[s_library.mainTopic].shaderXpos[s_library.subTopic],
|
|
libraryText[s_library.mainTopic].shaderYpos[s_library.subTopic],
|
|
libraryText[s_library.mainTopic].shaderXlength[s_library.subTopic],
|
|
libraryText[s_library.mainTopic].shaderYlength[s_library.subTopic],
|
|
libraryText[s_library.mainTopic].shaderHandle[s_library.subTopic]);
|
|
}
|
|
|
|
LogMenu_Blinkies();
|
|
|
|
UI_PrintMenuGraphics(logmenu_graphics,LMG_MAX);
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
LibraryMenu_Draw
|
|
===============
|
|
*/
|
|
void LibraryMenu_Draw(void)
|
|
{
|
|
M_LibraryMenu_Graphics();
|
|
|
|
Menu_Draw( &s_library.menu );
|
|
}
|
|
|
|
/*
|
|
===============
|
|
LibraryMenu_Init
|
|
===============
|
|
*/
|
|
void LibraryMenu_Init(void)
|
|
{
|
|
menubitmap_s *holdMainTopicButton,*holdSubTopicButton;
|
|
int x,y,pad,i;
|
|
|
|
s_library.menu.nitems = 0;
|
|
s_library.menu.draw = LibraryMenu_Draw;
|
|
s_library.menu.key = LibraryMenu_Key;
|
|
s_library.menu.fullscreen = qtrue;
|
|
s_library.menu.wrapAround = qtrue;
|
|
s_library.menu.descX = MENU_DESC_X;
|
|
s_library.menu.descY = MENU_DESC_Y;
|
|
s_library.menu.titleX = MENU_TITLE_X;
|
|
s_library.menu.titleY = MENU_TITLE_Y;
|
|
s_library.menu.titleI = MNT_CREDITSMENU_TITLE;
|
|
s_library.menu.footNoteEnum = MNT_CREDITS;
|
|
|
|
s_library.quitMenu.generic.type = MTYPE_BITMAP;
|
|
s_library.quitMenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_library.quitMenu.generic.x = 62;
|
|
s_library.quitMenu.generic.y = 368;
|
|
s_library.quitMenu.generic.name = GRAPHIC_SQUARE;
|
|
s_library.quitMenu.generic.id = ID_QUIT;
|
|
s_library.quitMenu.generic.callback = M_Library_Event;
|
|
s_library.quitMenu.width = MENU_BUTTON_MED_WIDTH;
|
|
s_library.quitMenu.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_library.quitMenu.color = CT_DKORANGE;
|
|
s_library.quitMenu.color2 = CT_LTORANGE;
|
|
s_library.quitMenu.textX = MENU_BUTTON_TEXT_X;
|
|
s_library.quitMenu.textY = MENU_BUTTON_TEXT_Y;
|
|
s_library.quitMenu.textEnum = MBT_PERSONALLOGRETURN;
|
|
s_library.quitMenu.textcolor = CT_BLACK;
|
|
s_library.quitMenu.textcolor2 = CT_WHITE;
|
|
|
|
s_library.topicArrowUp.generic.type = MTYPE_BITMAP;
|
|
s_library.topicArrowUp.generic.flags = QMF_HIGHLIGHT_IF_FOCUS | QMF_HIDDEN;
|
|
s_library.topicArrowUp.generic.x = 185;
|
|
s_library.topicArrowUp.generic.y = 64;
|
|
s_library.topicArrowUp.generic.name = "menu/common/arrow_up_16.tga";
|
|
s_library.topicArrowUp.generic.id = ID_ARROW1UP;
|
|
s_library.topicArrowUp.generic.callback = M_Library_Event;
|
|
s_library.topicArrowUp.width = 18;
|
|
s_library.topicArrowUp.height = 18;
|
|
s_library.topicArrowUp.color = CT_DKORANGE;
|
|
s_library.topicArrowUp.color2 = CT_LTORANGE;
|
|
|
|
s_library.topicArrowDown.generic.type = MTYPE_BITMAP;
|
|
s_library.topicArrowDown.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_library.topicArrowDown.generic.x = 185;
|
|
s_library.topicArrowDown.generic.y = 130;
|
|
s_library.topicArrowDown.generic.name = "menu/common/arrow_dn_16.tga";
|
|
s_library.topicArrowDown.generic.id = ID_ARROW1DOWN;
|
|
s_library.topicArrowDown.generic.callback = M_Library_Event;
|
|
s_library.topicArrowDown.width = 18;
|
|
s_library.topicArrowDown.height = 18;
|
|
s_library.topicArrowDown.color = CT_DKORANGE;
|
|
s_library.topicArrowDown.color2 = CT_LTORANGE;
|
|
|
|
s_library.subTopicArrowUp.generic.type = MTYPE_BITMAP;
|
|
s_library.subTopicArrowUp.generic.flags = QMF_HIGHLIGHT_IF_FOCUS | QMF_HIDDEN;
|
|
s_library.subTopicArrowUp.generic.x = 31;
|
|
s_library.subTopicArrowUp.generic.y = 182;
|
|
s_library.subTopicArrowUp.generic.name = "menu/common/arrow_up_16.tga";
|
|
s_library.subTopicArrowUp.generic.id = ID_ARROW2UP;
|
|
s_library.subTopicArrowUp.generic.callback = M_Library_Event;
|
|
s_library.subTopicArrowUp.width = 18;
|
|
s_library.subTopicArrowUp.height = 18;
|
|
s_library.subTopicArrowUp.color = CT_DKORANGE;
|
|
s_library.subTopicArrowUp.color2 = CT_LTORANGE;
|
|
|
|
s_library.subTopicArrowDown.generic.type = MTYPE_BITMAP;
|
|
s_library.subTopicArrowDown.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_library.subTopicArrowDown.generic.x = 31;
|
|
s_library.subTopicArrowDown.generic.y = 336;
|
|
s_library.subTopicArrowDown.generic.name = "menu/common/arrow_dn_16.tga";
|
|
s_library.subTopicArrowDown.generic.id = ID_ARROW2DOWN;
|
|
s_library.subTopicArrowDown.generic.callback = M_Library_Event;
|
|
s_library.subTopicArrowDown.width = 18;
|
|
s_library.subTopicArrowDown.height = 18;
|
|
s_library.subTopicArrowDown.color = CT_DKORANGE;
|
|
s_library.subTopicArrowDown.color2 = CT_LTORANGE;
|
|
|
|
s_library.computerVoice.generic.type = MTYPE_BITMAP;
|
|
s_library.computerVoice.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_library.computerVoice.generic.x = 360;
|
|
s_library.computerVoice.generic.y = 368;
|
|
s_library.computerVoice.generic.name = GRAPHIC_SQUARE;
|
|
s_library.computerVoice.generic.id = ID_COMPUTERVOICE;
|
|
s_library.computerVoice.generic.callback = M_Library_Event;
|
|
s_library.computerVoice.width = MENU_BUTTON_MED_WIDTH + 30;
|
|
s_library.computerVoice.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_library.computerVoice.color = CT_DKORANGE;
|
|
s_library.computerVoice.color2 = CT_LTORANGE;
|
|
s_library.computerVoice.textEnum = MBT_COMPUTERVOICEON;
|
|
s_library.computerVoice.textX = MENU_BUTTON_TEXT_X + 10;
|
|
|
|
Menu_AddItem( &s_library.menu, &s_library.quitMenu );
|
|
Menu_AddItem( &s_library.menu, &s_library.topicArrowUp );
|
|
Menu_AddItem( &s_library.menu, &s_library.topicArrowDown );
|
|
Menu_AddItem( &s_library.menu, &s_library.subTopicArrowUp );
|
|
Menu_AddItem( &s_library.menu, &s_library.subTopicArrowDown );
|
|
Menu_AddItem( &s_library.menu, &s_library.computerVoice );
|
|
|
|
holdMainTopicButton = &s_library.mainTopicButton1;
|
|
pad = 22;
|
|
y = 62;
|
|
x = 30;
|
|
s_library.maxMainTopics = 0;
|
|
s_library.topMainTopic = 0; // Top of Main topics starts at index 0
|
|
|
|
for (i=0;i<MAXMAINTOPICDISPLAYED;i++)
|
|
{
|
|
holdMainTopicButton->generic.type = MTYPE_BITMAP;
|
|
holdMainTopicButton->generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
holdMainTopicButton->generic.x = x;
|
|
holdMainTopicButton->generic.y = y;
|
|
holdMainTopicButton->generic.name = GRAPHIC_BUTTONRIGHT;
|
|
holdMainTopicButton->generic.id = ID_MAINTOPICBUTTON1 + i;
|
|
holdMainTopicButton->generic.callback = M_Library_Event;
|
|
holdMainTopicButton->generic.statusbarfunc = Library_StatusBar;
|
|
holdMainTopicButton->width = MENU_BUTTON_MED_WIDTH + 20;
|
|
holdMainTopicButton->height = MENU_BUTTON_MED_HEIGHT;
|
|
holdMainTopicButton->color = CT_DKAQUA;
|
|
holdMainTopicButton->color2 = CT_LTAQUA;
|
|
holdMainTopicButton->textX = MENU_BUTTON_TEXT_X;
|
|
holdMainTopicButton->textY = MENU_BUTTON_TEXT_Y;
|
|
holdMainTopicButton->textPtr = libraryText[i].mainTopic;
|
|
holdMainTopicButton->textcolor = CT_BLACK;
|
|
holdMainTopicButton->textcolor2 = CT_WHITE;
|
|
holdMainTopicButton->textStyle = UI_SMALLFONT;
|
|
|
|
holdMainTopicButton++;
|
|
s_library.maxMainTopics++;
|
|
|
|
y += pad;
|
|
}
|
|
|
|
holdMainTopicButton = &s_library.mainTopicButton1;
|
|
for (i=0;i<MAXMAINTOPICDISPLAYED;i++)
|
|
{
|
|
if (libraryText[i].mainTopic)
|
|
{
|
|
Menu_AddItem( &s_library.menu, holdMainTopicButton );
|
|
}
|
|
holdMainTopicButton++;
|
|
}
|
|
|
|
// Make top main topic button text gold
|
|
holdMainTopicButton = &s_library.mainTopicButton1;
|
|
holdMainTopicButton->textcolor = CT_LTGOLD1;
|
|
|
|
s_library.topSubTopic = 0; // Top of subtopics starts at index 0
|
|
|
|
holdSubTopicButton = &s_library.subTopicButton1;
|
|
pad = 22;
|
|
y = 180;
|
|
x = 62;
|
|
|
|
for (i=0;i<MAXSUBTOPICDISPLAYED;i++)
|
|
{
|
|
holdSubTopicButton->generic.type = MTYPE_BITMAP;
|
|
holdSubTopicButton->generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
holdSubTopicButton->generic.x = x;
|
|
holdSubTopicButton->generic.y = y;
|
|
holdSubTopicButton->generic.name = GRAPHIC_SQUARE;
|
|
holdSubTopicButton->generic.id = ID_SUBTOPICBUTTON1 + i;
|
|
holdSubTopicButton->generic.callback = M_Library_Event;
|
|
holdSubTopicButton->generic.statusbarfunc = Library_StatusBar;
|
|
holdSubTopicButton->width = MENU_BUTTON_MED_WIDTH;
|
|
holdSubTopicButton->height = MENU_BUTTON_MED_HEIGHT;
|
|
holdSubTopicButton->color = CT_DKAQUA;
|
|
holdSubTopicButton->color2 = CT_LTAQUA;
|
|
holdSubTopicButton->textX = MENU_BUTTON_TEXT_X;
|
|
holdSubTopicButton->textY = MENU_BUTTON_TEXT_Y;
|
|
holdSubTopicButton->textPtr = libraryText[0].subTopic[i];
|
|
holdSubTopicButton->textcolor = CT_BLACK;
|
|
holdSubTopicButton->textcolor2 = CT_WHITE;
|
|
holdSubTopicButton->textStyle = UI_SMALLFONT;
|
|
|
|
if (libraryText[0].subTopicDesc[i])
|
|
{
|
|
holdSubTopicButton->generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
}
|
|
else
|
|
{
|
|
holdSubTopicButton->generic.flags = QMF_HIDDEN;
|
|
}
|
|
|
|
Menu_AddItem( &s_library.menu, holdSubTopicButton );
|
|
|
|
holdSubTopicButton++;
|
|
|
|
y += pad;
|
|
}
|
|
|
|
// Make top subtopic button text gold
|
|
holdSubTopicButton = &s_library.subTopicButton1;
|
|
holdSubTopicButton->textcolor = CT_VLTGOLD1;
|
|
|
|
y = 120;
|
|
for (i=LMG_BIO_DESC1; i<(LMG_BIO_DESC1 +LOG_MAXDESC );i++)
|
|
{
|
|
logmenu_graphics[i].x = 242;
|
|
logmenu_graphics[i].y = y;
|
|
y += 12;
|
|
}
|
|
|
|
s_library.mainTopic = 0;
|
|
s_library.subTopic = 0;
|
|
|
|
ClearLibraryDesc();
|
|
|
|
s_library.playerModel.generic.type = MTYPE_BITMAP;
|
|
s_library.playerModel.generic.flags = QMF_INACTIVE;
|
|
s_library.playerModel.generic.x = 430;
|
|
s_library.playerModel.generic.y = 95;
|
|
s_library.playerModel.width = 32*7.6;
|
|
s_library.playerModel.height = 56*7.6;
|
|
|
|
// Show down arrow indicator???
|
|
if ((s_library.topMainTopic + MAXMAINTOPICDISPLAYED) >= s_library.cntMainTopic)
|
|
{
|
|
s_library.topicArrowDown.generic.flags |= QMF_HIDDEN;
|
|
}
|
|
else
|
|
{
|
|
s_library.topicArrowDown.generic.flags &= ~QMF_HIDDEN;
|
|
}
|
|
|
|
// Show down arrow indicator???
|
|
if ((s_library.topSubTopic + MAXSUBTOPICDISPLAYED) >= s_library.cntSubTopic[s_library.mainTopic])
|
|
{
|
|
s_library.subTopicArrowDown.generic.flags |= QMF_HIDDEN;
|
|
}
|
|
else
|
|
{
|
|
s_library.subTopicArrowDown.generic.flags &= ~QMF_HIDDEN;
|
|
}
|
|
|
|
s_library.subTopic = -1;
|
|
ChangeLibraryDesc(0);
|
|
}
|
|
|
|
/*
|
|
=================
|
|
UI_ParseLibraryText
|
|
=================
|
|
*/
|
|
static void UI_ParseLibraryText()
|
|
{
|
|
char *token;
|
|
char *buffer,*holdPtr;
|
|
int i,len;
|
|
|
|
memset(libraryText,0,sizeof(libraryText));
|
|
|
|
s_library.mainTopic = 0;
|
|
s_library.subTopic = 0;
|
|
s_library.cntMainTopic=0;
|
|
|
|
COM_BeginParseSession();
|
|
|
|
buffer = LibraryText;
|
|
i = 1; // Zero is null string
|
|
while ( buffer )
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
|
|
if (!Q_strncmp(token,"MAINTOPIC",9))
|
|
{
|
|
s_library.mainTopic = atoi(&token[9]);
|
|
s_library.mainTopic--;
|
|
|
|
// Get main topic
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
len = strlen(token);
|
|
libraryText[s_library.mainTopic].mainTopic = buffer - (len+1);
|
|
holdPtr = libraryText[s_library.mainTopic].mainTopic + len;
|
|
*holdPtr = NULL;
|
|
|
|
s_library.cntSubTopic[s_library.mainTopic] = 0;
|
|
s_library.cntMainTopic++;
|
|
}
|
|
else if (!Q_strncmp(token,"MAINDESC",8))
|
|
{
|
|
// Get main topic desc
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
len = strlen(token);
|
|
libraryText[s_library.mainTopic].mainTopicDesc = buffer - (len+1);
|
|
holdPtr = libraryText[s_library.mainTopic].mainTopicDesc + len;
|
|
*holdPtr = NULL;
|
|
}
|
|
else if (!Q_strncmp(token,"SUBTOPIC",8))
|
|
{
|
|
s_library.subTopic = atoi(&token[8]);
|
|
s_library.subTopic--;
|
|
|
|
// Get main topic desc
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
len = strlen(token);
|
|
libraryText[s_library.mainTopic].subTopic[s_library.subTopic] = buffer - (len+1);
|
|
holdPtr = libraryText[s_library.mainTopic].subTopic[s_library.subTopic] + len;
|
|
*holdPtr = NULL;
|
|
|
|
s_library.cntSubTopic[s_library.mainTopic]++;
|
|
|
|
}
|
|
else if (!Q_strncmp(token,"SUBDESC",7))
|
|
{
|
|
// Get main topic desc
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
len = strlen(token);
|
|
libraryText[s_library.mainTopic].subTopicDesc[s_library.subTopic] = buffer - (len+1);
|
|
holdPtr = libraryText[s_library.mainTopic].subTopicDesc[s_library.subTopic] + len;
|
|
*holdPtr = NULL;
|
|
}
|
|
else if (!Q_strncmp(token,"TEXTWIDTH",9))
|
|
{
|
|
// Get main topic desc
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
libraryText[s_library.mainTopic].textWidth[s_library.subTopic] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"TEXT",4))
|
|
{
|
|
// Get main topic desc
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
len = strlen(token);
|
|
libraryText[s_library.mainTopic].text[s_library.subTopic] = buffer - (len+1);
|
|
holdPtr = libraryText[s_library.mainTopic].text[s_library.subTopic] + len;
|
|
*holdPtr = NULL;
|
|
}
|
|
else if (!Q_strncmp(token,"STARTTEXTY",10))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
libraryText[s_library.mainTopic].textY[s_library.subTopic] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"MODELLEGS",9))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
len = strlen(token);
|
|
libraryText[s_library.mainTopic].modelLegs[s_library.subTopic] = buffer - (len+1);
|
|
holdPtr = libraryText[s_library.mainTopic].modelLegs[s_library.subTopic] + len;
|
|
*holdPtr = NULL;
|
|
}
|
|
else if (!Q_strncmp(token,"MODELHEAD",9))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
len = strlen(token);
|
|
libraryText[s_library.mainTopic].modelHead[s_library.subTopic] = buffer - (len+1);
|
|
holdPtr = libraryText[s_library.mainTopic].modelHead[s_library.subTopic] + len;
|
|
*holdPtr = NULL;
|
|
}
|
|
else if (!Q_strncmp(token,"MODELTORSO",10))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
len = strlen(token);
|
|
libraryText[s_library.mainTopic].modelTorso[s_library.subTopic] = buffer - (len+1);
|
|
holdPtr = libraryText[s_library.mainTopic].modelTorso[s_library.subTopic] + len;
|
|
*holdPtr = NULL;
|
|
}
|
|
else if (!Q_strncmp(token,"MODELX",6))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
libraryText[s_library.mainTopic].modelX[s_library.subTopic] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"MODELYAW",8))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
libraryText[s_library.mainTopic].modelYaw[s_library.subTopic] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"MODELPITCH",10))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
libraryText[s_library.mainTopic].modelPitch[s_library.subTopic] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"MODELROLL",9))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
libraryText[s_library.mainTopic].modelRoll[s_library.subTopic] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"MODELY",6))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
libraryText[s_library.mainTopic].modelY[s_library.subTopic] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"MODELDISTANCE",13)) // Model's distance from camera
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
libraryText[s_library.mainTopic].modelDistance[s_library.subTopic] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"MODELORIGINY",12)) // Model's change in Y origin
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
libraryText[s_library.mainTopic].modelOriginY[s_library.subTopic] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"MODEL",5))
|
|
{
|
|
// Get main topic desc
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
len = strlen(token);
|
|
libraryText[s_library.mainTopic].model[s_library.subTopic] = buffer - (len+1);
|
|
holdPtr = libraryText[s_library.mainTopic].model[s_library.subTopic] + len;
|
|
*holdPtr = NULL;
|
|
|
|
libraryText[s_library.mainTopic].modelHandle[s_library.subTopic] =
|
|
ui.R_RegisterModel(libraryText[s_library.mainTopic].model[s_library.subTopic]);
|
|
}
|
|
else if (!Q_strncmp(token,"SHADERXPOS",10))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
libraryText[s_library.mainTopic].shaderXpos[s_library.subTopic] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"SHADERYPOS",10))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
libraryText[s_library.mainTopic].shaderYpos[s_library.subTopic] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"SHADERXLENGTH",13))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
libraryText[s_library.mainTopic].shaderXlength[s_library.subTopic] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"SHADERYLENGTH",13))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
libraryText[s_library.mainTopic].shaderYlength[s_library.subTopic] = atoi(token);
|
|
}
|
|
else if (!Q_strncmp(token,"SHADER",6))
|
|
{
|
|
// Get main topic desc
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
len = strlen(token);
|
|
libraryText[s_library.mainTopic].shader[s_library.subTopic] = buffer - (len+1);
|
|
holdPtr = libraryText[s_library.mainTopic].shader[s_library.subTopic] + len;
|
|
*holdPtr = NULL;
|
|
|
|
libraryText[s_library.mainTopic].shaderHandle[s_library.subTopic] =
|
|
ui.R_RegisterShaderNoMip(libraryText[s_library.mainTopic].shader[s_library.subTopic]);
|
|
}
|
|
else if (!Q_strncmp(token,"COMMAND",7))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
len = strlen(token);
|
|
libraryText[s_library.mainTopic].command[s_library.subTopic] = buffer - (len+1);
|
|
holdPtr = libraryText[s_library.mainTopic].command[s_library.subTopic] + len;
|
|
*holdPtr = NULL;
|
|
}
|
|
else if (!Q_strncmp(token,"SOUND",5))
|
|
{
|
|
token = COM_ParseExt( &buffer, qtrue );
|
|
len = strlen(token);
|
|
libraryText[s_library.mainTopic].sound[s_library.subTopic] = buffer - (len+1);
|
|
holdPtr = libraryText[s_library.mainTopic].sound[s_library.subTopic] + len;
|
|
*holdPtr = NULL;
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_LibraryMenu_Cache
|
|
===============
|
|
*/
|
|
void UI_LibraryMenu_Cache (void)
|
|
{
|
|
char *buffer,*filePtr;
|
|
char filename[MAX_QPATH];
|
|
int len,i,i2;
|
|
|
|
s_library.leftRound = ui.R_RegisterShaderNoMip("menu/common/halfroundl_24.tga");
|
|
s_library.corner_ur_20_24 = ui.R_RegisterShaderNoMip("menu/common/corner_ur_20_24.tga");
|
|
s_library.corner_lr_18_20 = ui.R_RegisterShaderNoMip("menu/common/corner_lr_18_20.tga");
|
|
s_library.corner_ll_18_47 = ui.R_RegisterShaderNoMip("menu/common/corner_ll_47_18.tga");
|
|
s_library.corner_ll_8_47 = ui.R_RegisterShaderNoMip("menu/common/corner_ll_8_47.tga");
|
|
s_library.corner_lr_8_20 = ui.R_RegisterShaderNoMip("menu/common/corner_lr_8_20.tga");
|
|
|
|
if (s_library.menuType == MENUTYPE_LIBRARY)
|
|
{
|
|
UI_LanguageFilename("ext_data/sp_library","dat",filename);
|
|
filePtr = "SP_LIBRARY.DAT";
|
|
}
|
|
else
|
|
{
|
|
UI_LanguageFilename("ext_data/sp_astrometrics","dat",filename);
|
|
filePtr = "SP_ASTROMETRICS.DAT";
|
|
}
|
|
|
|
len = ui.FS_ReadFile( filename,(void **) &buffer );
|
|
|
|
if ( len == -1 )
|
|
{
|
|
ui.Error(ERR_FATAL, va("UI_LibraryMenu_Cache : %s file not found!\n",filePtr));
|
|
return;
|
|
}
|
|
|
|
if ( len > MAXLIBRARYTEXT )
|
|
{
|
|
ui.Error(ERR_FATAL, va("UI_LibraryMenu_Cache : %s too big! Max:%d Current Length:%d\n",filePtr,MAXLIBRARYTEXT,len));
|
|
return;
|
|
}
|
|
|
|
strncpy( LibraryText, buffer, sizeof( LibraryText ) - 1 );
|
|
ui.FS_FreeFile( buffer );
|
|
|
|
UI_ParseLibraryText();
|
|
|
|
nullSound = ui.S_RegisterSound("sound/null.wav");
|
|
|
|
for (i=0;i<=s_library.mainTopic;i++)
|
|
{
|
|
for (i2=0;i2<s_library.cntSubTopic[i];i2++)
|
|
{
|
|
if (libraryText[i].sound[i2])
|
|
{
|
|
libraryText[i].soundHandle[i2] = ui.S_RegisterSound(libraryText[i].sound[i2]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_Library_SpecialCache
|
|
===============
|
|
*/
|
|
void UI_Library_SpecialCache(void)
|
|
{
|
|
s_library.menuType = MENUTYPE_LIBRARY;
|
|
UI_LibraryMenu_Cache();
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_Library_SpecialCache
|
|
===============
|
|
*/
|
|
void UI_Astrometrics_SpecialCache(void)
|
|
{
|
|
s_library.menuType = MENUTYPE_ASTROMETRICS;
|
|
UI_LibraryMenu_Cache();
|
|
}
|
|
|
|
/*
|
|
===============
|
|
LibraryMenu_LoadText
|
|
===============
|
|
*/
|
|
void LibraryMenu_LoadText (void)
|
|
{
|
|
UI_LibraryMenu_Cache();
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_LibraryMenu
|
|
===============
|
|
*/
|
|
void UI_LibraryMenu(void)
|
|
{
|
|
uis.menusp = 0;
|
|
|
|
ingameFlag = qtrue; // true when in game menu is in use
|
|
|
|
Mouse_Show();
|
|
|
|
s_library.menuType = MENUTYPE_LIBRARY;
|
|
|
|
LibraryMenu_LoadText();
|
|
|
|
LibraryMenu_Init();
|
|
|
|
UI_PushMenu( &s_library.menu );
|
|
|
|
Menu_AdjustCursor( &s_library.menu, 1 );
|
|
}
|
|
|
|
|
|
/*
|
|
=================
|
|
M_Accessing_Graphics
|
|
=================
|
|
*/
|
|
void LibraryAccessingMenu_Draw (void)
|
|
{
|
|
int y;
|
|
|
|
y = 50;
|
|
|
|
if (s_libraryaccessing.menuType==1) // ASTROMETRICS
|
|
{
|
|
ui.R_SetColor( colorTable[CT_DKBLUE1]);
|
|
}
|
|
else // LIBRARY
|
|
{
|
|
ui.R_SetColor( colorTable[CT_DKPURPLE2]);
|
|
}
|
|
UI_DrawHandlePic( 132, y+ 42, 128, -64, s_libraryaccessing.cornerPic); // Top Left corner
|
|
UI_DrawHandlePic( 132, y+252, 128, 64, s_libraryaccessing.cornerPic); // Bottom Left corner
|
|
|
|
UI_DrawHandlePic( 429, y+ 42, -128, -64, s_libraryaccessing.cornerPic); // Top Right corner
|
|
UI_DrawHandlePic( 429, y+252, -128, 64, s_libraryaccessing.cornerPic); // Bottom Right corner
|
|
|
|
UI_DrawHandlePic(145, y+75, 395, 18, uis.whiteShader); // Top
|
|
UI_DrawHandlePic(132, y+93, 47, 175, uis.whiteShader); // Left side
|
|
UI_DrawHandlePic(510, y+93, 47, 175, uis.whiteShader); // Right side
|
|
UI_DrawHandlePic(147,y+265, 65, 18, uis.whiteShader); // Bottom Left
|
|
UI_DrawHandlePic(477,y+265, 65, 18, uis.whiteShader); // Bottom Right
|
|
UI_DrawHandlePic(214,y+265, 261, 18, uis.whiteShader); // Bottom
|
|
|
|
UI_DrawProportionalString(345,y+159,menu_normal_text[MNT_ACCESSING],UI_SMALLFONT | UI_CENTER,colorTable[CT_LTGOLD1]);
|
|
|
|
// Wait a second to display the accessing screen and then go to the Library stuff
|
|
if (s_libraryaccessing.timer <= uis.realtime)
|
|
{
|
|
UI_PopMenu();
|
|
|
|
if (s_libraryaccessing.menuType==1)
|
|
{
|
|
UI_AstrometricsMenu();
|
|
}
|
|
else
|
|
{
|
|
UI_LibraryMenu();
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_AccessingMenu_Cache
|
|
===============
|
|
*/
|
|
void UI_AccessingMenu_Cache (void)
|
|
{
|
|
s_libraryaccessing.cornerPic = ui.R_RegisterShaderNoMip("menu/common/corner_ll_47_18.tga");
|
|
}
|
|
|
|
/*
|
|
===============
|
|
AccessingMenu_Init
|
|
===============
|
|
*/
|
|
void AccessingMenu_Init(void)
|
|
{
|
|
|
|
UI_AccessingMenu_Cache();
|
|
|
|
s_libraryaccessing.menu.nitems = 0;
|
|
s_libraryaccessing.menu.draw = LibraryAccessingMenu_Draw;
|
|
s_libraryaccessing.menu.key = NULL;
|
|
s_libraryaccessing.menu.fullscreen = qtrue;
|
|
s_libraryaccessing.menu.wrapAround = qtrue;
|
|
s_libraryaccessing.menu.descX = MENU_DESC_X;
|
|
s_libraryaccessing.menu.descY = MENU_DESC_Y;
|
|
s_libraryaccessing.menu.titleX = MENU_TITLE_X;
|
|
s_libraryaccessing.menu.titleY = MENU_TITLE_Y;
|
|
s_libraryaccessing.menu.titleI = MNT_CREDITSMENU_TITLE;
|
|
s_libraryaccessing.menu.footNoteEnum = MNT_CREDITS;
|
|
|
|
s_libraryaccessing.timer = uis.realtime + 1000;
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_AccessingMenu
|
|
===============
|
|
*/
|
|
void UI_AccessingMenu(int menuType)
|
|
{
|
|
ingameFlag = qtrue; // true when in game menu is in use
|
|
|
|
Mouse_Hide();
|
|
|
|
s_libraryaccessing.menuType = menuType;
|
|
|
|
AccessingMenu_Init();
|
|
UI_PushMenu( &s_libraryaccessing.menu );
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_AstrometricsMenu
|
|
===============
|
|
*/
|
|
void UI_AstrometricsMenu(void)
|
|
{
|
|
uis.menusp = 0;
|
|
|
|
ingameFlag = qtrue; // true when in game menu is in use
|
|
|
|
Mouse_Show();
|
|
|
|
s_library.menuType = MENUTYPE_ASTROMETRICS;
|
|
|
|
LibraryMenu_LoadText();
|
|
|
|
LibraryMenu_Init();
|
|
|
|
UI_PushMenu( &s_library.menu );
|
|
|
|
Menu_AdjustCursor( &s_library.menu, 1 );
|
|
}
|
|
|
|
// Precache stuff for Dischler Game Screen
|
|
typedef struct
|
|
{
|
|
menuframework_s menu;
|
|
menubitmap_s team;
|
|
menubitmap_s mainmenu;
|
|
menubitmap_s start;
|
|
menubitmap_s level1;
|
|
menubitmap_s level2;
|
|
qhandle_t plaque;
|
|
qhandle_t corner_ll_4_8;
|
|
qhandle_t corner_ul_8_18;
|
|
qhandle_t cornerLower;
|
|
} dischlerGame_t;
|
|
|
|
|
|
static dischlerGame_t s_dischlerGame;
|
|
|
|
#define ID_MAINMENU 103
|
|
#define ID_LEVEL1 104
|
|
#define ID_LEVEL2 105
|
|
#define ID_STARTGAME 106
|
|
|
|
/*
|
|
=================
|
|
DischlerGame_MenuEvent
|
|
=================
|
|
*/
|
|
static void DischlerGame_MenuEvent( void* ptr, int notification )
|
|
{
|
|
menuframework_s* m;
|
|
|
|
if (notification != QM_ACTIVATED)
|
|
return;
|
|
|
|
m = ((menucommon_s*)ptr)->parent;
|
|
|
|
switch (((menucommon_s*)ptr)->id)
|
|
{
|
|
case ID_MAINMENU:
|
|
UI_PopMenu();
|
|
break;
|
|
|
|
case ID_LEVEL1:
|
|
s_dischlerGame.level1.textcolor = CT_WHITE;
|
|
s_dischlerGame.level2.textcolor = CT_BLACK;
|
|
|
|
s_dischlerGame.level2.generic.flags &= ~ QMF_BLINK;
|
|
s_dischlerGame.level1.generic.flags |= QMF_BLINK;
|
|
break;
|
|
|
|
case ID_LEVEL2:
|
|
s_dischlerGame.level1.textcolor = CT_BLACK;
|
|
s_dischlerGame.level2.textcolor = CT_WHITE;
|
|
|
|
s_dischlerGame.level1.generic.flags &= ~ QMF_BLINK;
|
|
s_dischlerGame.level2.generic.flags |= QMF_BLINK;
|
|
break;
|
|
|
|
case ID_STARTGAME:
|
|
UI_ForceMenuOff ();
|
|
ui.Cvar_SetValue( "cg_virtualVoyager", 1 );
|
|
// ui.Cmd_ExecuteText( EXEC_APPEND, "map tour/_holodeck_minigame\n");
|
|
ui.Cmd_ExecuteText( EXEC_APPEND, "use _holodeck_minigame\n");
|
|
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
DischlerGame_MenuKey
|
|
=================
|
|
*/
|
|
static sfxHandle_t DischlerGame_MenuKey( int key )
|
|
{
|
|
return Menu_DefaultKey( &s_dischlerGame.menu, key );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
M_DischlerGame_Graphics
|
|
=================
|
|
*/
|
|
static void M_DischlerGame_Graphics (void)
|
|
{
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 30, 425, 128, 64, s_dischlerGame.cornerLower);// Bottom Left Corner
|
|
|
|
ui.R_SetColor( colorTable[CT_LTBROWN1]);
|
|
UI_DrawHandlePic( 96, 438, 268, 18, uis.whiteShader); // Bottom front Line
|
|
|
|
|
|
ui.R_SetColor( colorTable[CT_WHITE]);
|
|
UI_DrawHandlePic(56, 55, 512, 256, s_dischlerGame.plaque); //
|
|
|
|
UI_DrawProportionalString( 320, 10,
|
|
menu_normal_text[MNT_BORGSLAYER], UI_GIANTFONT | UI_CENTER, colorTable[CT_YELLOW]);
|
|
|
|
ui.R_SetColor( colorTable[CT_LTBROWN1]);
|
|
UI_DrawHandlePic( 368, 438, 232, 18, uis.whiteShader); // Bottom back Line
|
|
|
|
// Gender frame
|
|
/* ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic(313, 345, 16, 32, s_dischlerGame.corner_ul_8_18); //
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic(313, 418, 16, 8, s_dischlerGame.corner_ll_4_8); //
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 317, 345, 162, 18, uis.whiteShader); // Top
|
|
UI_DrawHandlePic( 313, 350, 8, 69, uis.whiteShader); // Side
|
|
UI_DrawHandlePic( 317, 420, 162, 4, uis.whiteShader); // Bottom
|
|
|
|
UI_DrawProportionalString( 330, 347, menu_normal_text[MNT_LEVELS], UI_SMALLFONT, colorTable[CT_VLTBROWN1]);
|
|
*/
|
|
}
|
|
|
|
/*
|
|
===============
|
|
DischlerMenu_Draw
|
|
===============
|
|
*/
|
|
void DischlerMenu_Draw(void)
|
|
{
|
|
M_DischlerGame_Graphics();
|
|
|
|
Menu_Draw( &s_dischlerGame.menu );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
UI_DischlerGameMenu_Cache
|
|
=================
|
|
*/
|
|
void UI_DischlerGameMenu_Cache( void )
|
|
{
|
|
s_dischlerGame.plaque = ui.R_RegisterShaderNoMip("menu/common/menusign.tga");
|
|
// s_dischlerGame.plaque = ui.R_RegisterShaderNoMip("menu/special/borgslayer2.tga");
|
|
s_dischlerGame.corner_ll_4_8 = ui.R_RegisterShaderNoMip("menu/common/corner_ll_4_8.tga");
|
|
s_dischlerGame.corner_ul_8_18 = ui.R_RegisterShaderNoMip("menu/common/corner_ul_8_18.tga");
|
|
|
|
s_dischlerGame.cornerLower = ui.R_RegisterShaderNoMip("menu/common/corner_ll_47_18.tga");
|
|
}
|
|
|
|
/*
|
|
=================
|
|
DischlerGameMenu_Init
|
|
=================
|
|
*/
|
|
static void DischlerGameMenu_Init( void )
|
|
{
|
|
UI_DischlerGameMenu_Cache();
|
|
|
|
s_dischlerGame.menu.nitems = 0;
|
|
s_dischlerGame.menu.wrapAround = qtrue;
|
|
s_dischlerGame.menu.opening = NULL;
|
|
s_dischlerGame.menu.closing = NULL;
|
|
s_dischlerGame.menu.draw = DischlerMenu_Draw;
|
|
s_dischlerGame.menu.key = DischlerGame_MenuKey;
|
|
s_dischlerGame.menu.fullscreen = qtrue;
|
|
s_dischlerGame.menu.descX = MENU_DESC_X;
|
|
s_dischlerGame.menu.descY = MENU_DESC_Y;
|
|
s_dischlerGame.menu.listX = 230;
|
|
s_dischlerGame.menu.listY = 188;
|
|
s_dischlerGame.menu.titleX = MENU_TITLE_X;
|
|
s_dischlerGame.menu.titleY = MENU_TITLE_Y;
|
|
s_dischlerGame.menu.titleI = MNT_TOURVOYAGER;
|
|
s_dischlerGame.menu.footNoteEnum = MNT_TOURVOYAGER;
|
|
|
|
s_dischlerGame.mainmenu.generic.type = MTYPE_BITMAP;
|
|
s_dischlerGame.mainmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_dischlerGame.mainmenu.generic.x = 30;
|
|
s_dischlerGame.mainmenu.generic.y = 398;
|
|
s_dischlerGame.mainmenu.generic.name = GRAPHIC_BUTTONRIGHT;
|
|
s_dischlerGame.mainmenu.generic.id = ID_MAINMENU;
|
|
s_dischlerGame.mainmenu.generic.callback = DischlerGame_MenuEvent;
|
|
s_dischlerGame.mainmenu.width = MENU_BUTTON_MED_WIDTH;
|
|
s_dischlerGame.mainmenu.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_dischlerGame.mainmenu.color = CT_DKPURPLE1;
|
|
s_dischlerGame.mainmenu.color2 = CT_LTPURPLE1;
|
|
s_dischlerGame.mainmenu.textX = MENU_BUTTON_TEXT_X;
|
|
s_dischlerGame.mainmenu.textY = MENU_BUTTON_TEXT_Y;
|
|
s_dischlerGame.mainmenu.textEnum = MBT_HAZARDGAMERETURN;
|
|
s_dischlerGame.mainmenu.textcolor = CT_BLACK;
|
|
s_dischlerGame.mainmenu.textcolor2 = CT_WHITE;
|
|
|
|
s_dischlerGame.start.generic.type = MTYPE_BITMAP;
|
|
s_dischlerGame.start.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_dischlerGame.start.generic.x = 470;
|
|
s_dischlerGame.start.generic.y = 337;
|
|
s_dischlerGame.start.generic.name = "menu/common/square.tga";
|
|
s_dischlerGame.start.generic.id = ID_STARTGAME;
|
|
s_dischlerGame.start.generic.callback = DischlerGame_MenuEvent;
|
|
s_dischlerGame.start.width = MENU_BUTTON_MED_WIDTH;
|
|
s_dischlerGame.start.height = 79;
|
|
s_dischlerGame.start.color = CT_DKPURPLE1;
|
|
s_dischlerGame.start.color2 = CT_LTPURPLE1;
|
|
s_dischlerGame.start.textX = MENU_BUTTON_TEXT_X;
|
|
s_dischlerGame.start.textY = 56;
|
|
s_dischlerGame.start.textEnum = MBT_ENGAGE;
|
|
s_dischlerGame.start.textcolor = CT_BLACK;
|
|
s_dischlerGame.start.textcolor2 = CT_WHITE;
|
|
|
|
s_dischlerGame.level1.generic.type = MTYPE_BITMAP;
|
|
s_dischlerGame.level1.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_dischlerGame.level1.generic.x = 338;
|
|
s_dischlerGame.level1.generic.y = 370;
|
|
s_dischlerGame.level1.generic.name = "menu/common/square.tga";
|
|
s_dischlerGame.level1.generic.id = ID_LEVEL1;
|
|
s_dischlerGame.level1.generic.callback = DischlerGame_MenuEvent;
|
|
s_dischlerGame.level1.width = MENU_BUTTON_MED_WIDTH;
|
|
s_dischlerGame.level1.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_dischlerGame.level1.color = CT_DKPURPLE1;
|
|
s_dischlerGame.level1.color2 = CT_LTPURPLE1;
|
|
s_dischlerGame.level1.textX = MENU_BUTTON_TEXT_X;
|
|
s_dischlerGame.level1.textY = MENU_BUTTON_TEXT_Y;
|
|
s_dischlerGame.level1.textEnum = MBT_LEVEL1;
|
|
s_dischlerGame.level1.textcolor = CT_BLACK;
|
|
s_dischlerGame.level1.textcolor2 = CT_WHITE;
|
|
|
|
s_dischlerGame.level2.generic.type = MTYPE_BITMAP;
|
|
s_dischlerGame.level2.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_dischlerGame.level2.generic.x = 338;
|
|
s_dischlerGame.level2.generic.y = 395;
|
|
s_dischlerGame.level2.generic.name = "menu/common/square.tga";
|
|
s_dischlerGame.level2.generic.id = ID_LEVEL2;
|
|
s_dischlerGame.level2.generic.callback = DischlerGame_MenuEvent;
|
|
s_dischlerGame.level2.width = MENU_BUTTON_MED_WIDTH;
|
|
s_dischlerGame.level2.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_dischlerGame.level2.color = CT_DKPURPLE1;
|
|
s_dischlerGame.level2.color2 = CT_LTPURPLE1;
|
|
s_dischlerGame.level2.textX = MENU_BUTTON_TEXT_X;
|
|
s_dischlerGame.level2.textY = MENU_BUTTON_TEXT_Y;
|
|
s_dischlerGame.level2.textEnum = MBT_LEVEL2;
|
|
s_dischlerGame.level2.textcolor = CT_BLACK;
|
|
s_dischlerGame.level2.textcolor2 = CT_WHITE;
|
|
|
|
Menu_AddItem( &s_dischlerGame.menu, ( void * )&s_dischlerGame.mainmenu);
|
|
// Menu_AddItem( &s_dischlerGame.menu, ( void * )&s_dischlerGame.level1);
|
|
// Menu_AddItem( &s_dischlerGame.menu, ( void * )&s_dischlerGame.level2);
|
|
Menu_AddItem( &s_dischlerGame.menu, ( void * )&s_dischlerGame.start);
|
|
|
|
s_dischlerGame.level1.textcolor = CT_WHITE;
|
|
s_dischlerGame.level2.textcolor = CT_BLACK;
|
|
|
|
s_dischlerGame.level1.generic.flags |= QMF_BLINK;
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
DischlerGameMenu_LoadText
|
|
===============
|
|
*/
|
|
/*
|
|
void DischlerGameMenu_LoadText (void)
|
|
{
|
|
|
|
UI_DischlerGameMenu_Cache();
|
|
|
|
UI_ParseLibraryText();
|
|
}
|
|
*/
|
|
/*
|
|
===============
|
|
UI_DischlerGameMenu
|
|
===============
|
|
*/
|
|
void UI_DischlerGameMenu(void)
|
|
{
|
|
uis.menusp = 0;
|
|
|
|
ingameFlag = qtrue; // true when in game menu is in use
|
|
|
|
Mouse_Show();
|
|
|
|
// DischlerGameMenu_LoadText();
|
|
UI_DischlerGameMenu_Cache();
|
|
|
|
DischlerGameMenu_Init();
|
|
|
|
UI_PushMenu( &s_dischlerGame.menu );
|
|
|
|
Menu_AdjustCursor( &s_dischlerGame.menu, 1 );
|
|
}
|
|
|
|
|
|
typedef struct
|
|
{
|
|
menuframework_s menu;
|
|
|
|
qhandle_t cornerUpper;
|
|
qhandle_t cornerUpper2;
|
|
qhandle_t cornerLower;
|
|
|
|
menubitmap_s mainmenu;
|
|
menubitmap_s firephasers;
|
|
menubitmap_s phaserUpper;
|
|
menubitmap_s phaserLower;
|
|
menubitmap_s phaserVentral;
|
|
menubitmap_s phaserPort;
|
|
menubitmap_s phaserStarboard;
|
|
|
|
menubitmap_s photonFore;
|
|
menubitmap_s photonAft;
|
|
menubitmap_s firephotons;
|
|
} tactical_t;
|
|
|
|
|
|
static tactical_t s_tactical;
|
|
|
|
#define ID_PHASERUPPER 104
|
|
#define ID_PHASERLOWER 105
|
|
#define ID_PHASERFIRE 106
|
|
#define ID_PHASERAFT 107
|
|
#define ID_PHASERPORT 108
|
|
#define ID_PHASERVENTRAL 109
|
|
#define ID_PHASERSTARBOARD 110
|
|
#define ID_PHOTONFIRE 111
|
|
#define ID_PHOTONFORE 112
|
|
#define ID_PHOTONAFT 113
|
|
|
|
/*
|
|
=================
|
|
Tactical_MenuEvent
|
|
=================
|
|
*/
|
|
static void Tactical_MenuEvent( void* ptr, int notification )
|
|
{
|
|
menuframework_s* m;
|
|
|
|
if (notification != QM_ACTIVATED)
|
|
return;
|
|
|
|
m = ((menucommon_s*)ptr)->parent;
|
|
|
|
switch (((menucommon_s*)ptr)->id)
|
|
{
|
|
case ID_MAINMENU:
|
|
UI_PopMenu();
|
|
break;
|
|
|
|
case ID_PHASERUPPER:
|
|
if (s_tactical.phaserUpper.color == CT_DKPURPLE1)
|
|
{
|
|
s_tactical.phaserUpper.color = CT_VDKPURPLE1;
|
|
s_tactical.phaserUpper.color2 = CT_DKPURPLE1;
|
|
}
|
|
else
|
|
{
|
|
s_tactical.phaserUpper.color = CT_DKPURPLE1;
|
|
s_tactical.phaserUpper.color2 = CT_LTPURPLE1;
|
|
}
|
|
break;
|
|
|
|
case ID_PHASERLOWER:
|
|
if (s_tactical.phaserLower.color == CT_DKPURPLE1)
|
|
{
|
|
s_tactical.phaserLower.color = CT_VDKPURPLE1;
|
|
s_tactical.phaserLower.color2 = CT_DKPURPLE1;
|
|
}
|
|
else
|
|
{
|
|
s_tactical.phaserLower.color = CT_DKPURPLE1;
|
|
s_tactical.phaserLower.color2 = CT_LTPURPLE1;
|
|
}
|
|
break;
|
|
|
|
case ID_PHASERSTARBOARD:
|
|
if (s_tactical.phaserStarboard.color == CT_DKPURPLE1)
|
|
{
|
|
s_tactical.phaserStarboard.color = CT_VDKPURPLE1;
|
|
s_tactical.phaserStarboard.color2 = CT_DKPURPLE1;
|
|
}
|
|
else
|
|
{
|
|
s_tactical.phaserStarboard.color = CT_DKPURPLE1;
|
|
s_tactical.phaserStarboard.color2 = CT_LTPURPLE1;
|
|
}
|
|
break;
|
|
|
|
case ID_PHASERPORT:
|
|
if (s_tactical.phaserPort.color == CT_DKPURPLE1)
|
|
{
|
|
s_tactical.phaserPort.color = CT_VDKPURPLE1;
|
|
s_tactical.phaserPort.color2 = CT_DKPURPLE1;
|
|
}
|
|
else
|
|
{
|
|
s_tactical.phaserPort.color = CT_DKPURPLE1;
|
|
s_tactical.phaserPort.color2 = CT_LTPURPLE1;
|
|
}
|
|
break;
|
|
|
|
case ID_PHASERVENTRAL:
|
|
if (s_tactical.phaserVentral.color == CT_DKPURPLE1)
|
|
{
|
|
s_tactical.phaserVentral.color = CT_VDKPURPLE1;
|
|
s_tactical.phaserVentral.color2 = CT_DKPURPLE1;
|
|
}
|
|
else
|
|
{
|
|
s_tactical.phaserVentral.color = CT_DKPURPLE1;
|
|
s_tactical.phaserVentral.color2 = CT_LTPURPLE1;
|
|
}
|
|
break;
|
|
|
|
case ID_PHOTONFORE:
|
|
if (s_tactical.photonFore.color == CT_DKPURPLE1)
|
|
{
|
|
s_tactical.photonFore.color = CT_VDKPURPLE1;
|
|
s_tactical.photonFore.color2 = CT_DKPURPLE1;
|
|
}
|
|
else
|
|
{
|
|
s_tactical.photonFore.color = CT_DKPURPLE1;
|
|
s_tactical.photonFore.color2 = CT_LTPURPLE1;
|
|
}
|
|
break;
|
|
|
|
case ID_PHOTONAFT:
|
|
if (s_tactical.photonAft.color == CT_DKPURPLE1)
|
|
{
|
|
s_tactical.photonAft.color = CT_VDKPURPLE1;
|
|
s_tactical.photonAft.color2 = CT_DKPURPLE1;
|
|
}
|
|
else
|
|
{
|
|
s_tactical.photonAft.color = CT_DKPURPLE1;
|
|
s_tactical.photonAft.color2 = CT_LTPURPLE1;
|
|
}
|
|
break;
|
|
|
|
case ID_STARTGAME:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
Tactical_MenuKey
|
|
=================
|
|
*/
|
|
static sfxHandle_t Tactical_MenuKey( int key )
|
|
{
|
|
return Menu_DefaultKey( &s_tactical.menu, key );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
M_Tactical_Graphics
|
|
=================
|
|
*/
|
|
static void M_Tactical_Graphics (void)
|
|
{
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 160, 60, 330, 18, uis.whiteShader); // Phaser Line
|
|
UI_DrawProportionalString( 180, 62, menu_normal_text[MNT_PHASERS], UI_SMALLFONT, colorTable[CT_LTGOLD1]);
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 160, 258, 330, 18, uis.whiteShader); // Torpodoes Line
|
|
UI_DrawProportionalString( 180, 260, menu_normal_text[MNT_PHOTONTORPEDOES], UI_SMALLFONT, colorTable[CT_LTGOLD1]);
|
|
|
|
|
|
// Frame
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 30, 20, 128, 64, s_tactical.cornerUpper2); // Top corner
|
|
UI_DrawHandlePic( 50, 20, 99, 7, uis.whiteShader);
|
|
UI_DrawHandlePic( 152, 20, 135, 7, uis.whiteShader);
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 290, 20, 12, 7, uis.whiteShader);
|
|
|
|
ui.R_SetColor( colorTable[CT_LTBROWN1]);
|
|
UI_DrawHandlePic( 305, 20, 60, 4, uis.whiteShader);
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 368, 20, 111, 7, uis.whiteShader);
|
|
|
|
// Side left column
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 30, 51, 47, 119, uis.whiteShader);
|
|
UI_DrawHandlePic( 30,203, 47, 186, uis.whiteShader);
|
|
|
|
|
|
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 30, 173, 47, 27, uis.whiteShader); // Top left column
|
|
UI_DrawHandlePic( 30, 392, 47, 33, uis.whiteShader); // Bottom left column
|
|
UI_DrawHandlePic( 30, 425, 128, 64, s_tactical.cornerLower);// Bottom Left Corner
|
|
|
|
ui.R_SetColor( colorTable[CT_LTBROWN1]);
|
|
UI_DrawHandlePic( 96, 438, 268, 18, uis.whiteShader); // Bottom front Line
|
|
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
TacticalMenu_Draw
|
|
===============
|
|
*/
|
|
void TacticalMenu_Draw(void)
|
|
{
|
|
M_Tactical_Graphics();
|
|
|
|
Menu_Draw( &s_tactical.menu );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
UI_TacticalMenu_Cache
|
|
=================
|
|
*/
|
|
void UI_TacticalMenu_Cache( void )
|
|
{
|
|
s_tactical.cornerUpper = ui.R_RegisterShaderNoMip("menu/common/corner_ll_47_7.tga");
|
|
s_tactical.cornerUpper2= ui.R_RegisterShaderNoMip("menu/common/corner_ul_47_7.tga");
|
|
s_tactical.cornerLower = ui.R_RegisterShaderNoMip("menu/common/corner_ll_47_18.tga");
|
|
}
|
|
|
|
/*
|
|
=================
|
|
TacticalMenu_Init
|
|
=================
|
|
*/
|
|
static void TacticalMenu_Init( void )
|
|
{
|
|
int x,x2;
|
|
|
|
UI_TacticalMenu_Cache();
|
|
|
|
s_tactical.menu.nitems = 0;
|
|
s_tactical.menu.wrapAround = qtrue;
|
|
s_tactical.menu.opening = NULL;
|
|
s_tactical.menu.closing = NULL;
|
|
s_tactical.menu.draw = TacticalMenu_Draw;
|
|
s_tactical.menu.key = Tactical_MenuKey;
|
|
s_tactical.menu.fullscreen = qtrue;
|
|
s_tactical.menu.descX = MENU_DESC_X;
|
|
s_tactical.menu.descY = MENU_DESC_Y;
|
|
s_tactical.menu.listX = 230;
|
|
s_tactical.menu.listY = 188;
|
|
s_tactical.menu.titleX = MENU_TITLE_X;
|
|
s_tactical.menu.titleY = MENU_TITLE_Y;
|
|
s_tactical.menu.titleI = MNT_TACTICAL;
|
|
s_tactical.menu.footNoteEnum = MNT_TACTICAL;
|
|
|
|
x2 = 340;
|
|
s_tactical.mainmenu.generic.type = MTYPE_BITMAP;
|
|
s_tactical.mainmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_tactical.mainmenu.generic.x = 130;
|
|
s_tactical.mainmenu.generic.y = 398;
|
|
s_tactical.mainmenu.generic.name = GRAPHIC_BUTTONRIGHT;
|
|
s_tactical.mainmenu.generic.id = ID_MAINMENU;
|
|
s_tactical.mainmenu.generic.callback = Tactical_MenuEvent;
|
|
s_tactical.mainmenu.width = MENU_BUTTON_MED_WIDTH;
|
|
s_tactical.mainmenu.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_tactical.mainmenu.color = CT_DKPURPLE1;
|
|
s_tactical.mainmenu.color2 = CT_LTPURPLE1;
|
|
s_tactical.mainmenu.textX = MENU_BUTTON_TEXT_X;
|
|
s_tactical.mainmenu.textY = MENU_BUTTON_TEXT_Y;
|
|
s_tactical.mainmenu.textEnum = MBT_HAZARDGAMERETURN;
|
|
s_tactical.mainmenu.textcolor = CT_BLACK;
|
|
s_tactical.mainmenu.textcolor2 = CT_WHITE;
|
|
|
|
x = 178;
|
|
s_tactical.firephasers.generic.type = MTYPE_BITMAP;
|
|
s_tactical.firephasers.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_tactical.firephasers.generic.x = x2;
|
|
s_tactical.firephasers.generic.y = 114;
|
|
s_tactical.firephasers.generic.name = "menu/common/square.tga";
|
|
s_tactical.firephasers.generic.id = ID_PHASERFIRE;
|
|
s_tactical.firephasers.generic.callback = Tactical_MenuEvent;
|
|
s_tactical.firephasers.width = MENU_BUTTON_MED_WIDTH;
|
|
s_tactical.firephasers.height = 79;
|
|
s_tactical.firephasers.color = CT_DKPURPLE1;
|
|
s_tactical.firephasers.color2 = CT_LTPURPLE1;
|
|
s_tactical.firephasers.textX = MENU_BUTTON_TEXT_X;
|
|
s_tactical.firephasers.textY = 56;
|
|
s_tactical.firephasers.textEnum = MBT_FIREPHASERS;
|
|
s_tactical.firephasers.textcolor = CT_BLACK;
|
|
s_tactical.firephasers.textcolor2 = CT_WHITE;
|
|
|
|
s_tactical.phaserUpper.generic.type = MTYPE_BITMAP;
|
|
s_tactical.phaserUpper.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_tactical.phaserUpper.generic.x = x;
|
|
s_tactical.phaserUpper.generic.y = 100;
|
|
s_tactical.phaserUpper.generic.name = "menu/common/square.tga";
|
|
s_tactical.phaserUpper.generic.id = ID_PHASERUPPER;
|
|
s_tactical.phaserUpper.generic.callback = Tactical_MenuEvent;
|
|
s_tactical.phaserUpper.width = MENU_BUTTON_MED_WIDTH;
|
|
s_tactical.phaserUpper.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_tactical.phaserUpper.color = CT_VDKPURPLE1;
|
|
s_tactical.phaserUpper.color2 = CT_DKPURPLE1;
|
|
s_tactical.phaserUpper.textX = MENU_BUTTON_TEXT_X;
|
|
s_tactical.phaserUpper.textY = MENU_BUTTON_TEXT_Y;
|
|
s_tactical.phaserUpper.textEnum = MBT_PHASERUPPER;
|
|
s_tactical.phaserUpper.textcolor = CT_BLACK;
|
|
s_tactical.phaserUpper.textcolor2 = CT_WHITE;
|
|
|
|
s_tactical.phaserLower.generic.type = MTYPE_BITMAP;
|
|
s_tactical.phaserLower.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_tactical.phaserLower.generic.x = x;
|
|
s_tactical.phaserLower.generic.y = 120;
|
|
s_tactical.phaserLower.generic.name = "menu/common/square.tga";
|
|
s_tactical.phaserLower.generic.id = ID_PHASERLOWER;
|
|
s_tactical.phaserLower.generic.callback = Tactical_MenuEvent;
|
|
s_tactical.phaserLower.width = MENU_BUTTON_MED_WIDTH;
|
|
s_tactical.phaserLower.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_tactical.phaserLower.color = CT_VDKPURPLE1;
|
|
s_tactical.phaserLower.color2 = CT_DKPURPLE1;
|
|
s_tactical.phaserLower.textX = MENU_BUTTON_TEXT_X;
|
|
s_tactical.phaserLower.textY = MENU_BUTTON_TEXT_Y;
|
|
s_tactical.phaserLower.textEnum = MBT_PHASERLOWER;
|
|
s_tactical.phaserLower.textcolor = CT_BLACK;
|
|
s_tactical.phaserLower.textcolor2 = CT_WHITE;
|
|
|
|
s_tactical.phaserPort.generic.type = MTYPE_BITMAP;
|
|
s_tactical.phaserPort.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_tactical.phaserPort.generic.x = x;
|
|
s_tactical.phaserPort.generic.y = 140;
|
|
s_tactical.phaserPort.generic.name = "menu/common/square.tga";
|
|
s_tactical.phaserPort.generic.id = ID_PHASERPORT;
|
|
s_tactical.phaserPort.generic.callback = Tactical_MenuEvent;
|
|
s_tactical.phaserPort.width = MENU_BUTTON_MED_WIDTH;
|
|
s_tactical.phaserPort.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_tactical.phaserPort.color = CT_VDKPURPLE1;
|
|
s_tactical.phaserPort.color2 = CT_DKPURPLE1;
|
|
s_tactical.phaserPort.textX = MENU_BUTTON_TEXT_X;
|
|
s_tactical.phaserPort.textY = MENU_BUTTON_TEXT_Y;
|
|
s_tactical.phaserPort.textEnum = MBT_PHASERPORT;
|
|
s_tactical.phaserPort.textcolor = CT_BLACK;
|
|
s_tactical.phaserPort.textcolor2 = CT_WHITE;
|
|
|
|
s_tactical.phaserStarboard.generic.type = MTYPE_BITMAP;
|
|
s_tactical.phaserStarboard.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_tactical.phaserStarboard.generic.x = x;
|
|
s_tactical.phaserStarboard.generic.y = 160;
|
|
s_tactical.phaserStarboard.generic.name = "menu/common/square.tga";
|
|
s_tactical.phaserStarboard.generic.id = ID_PHASERSTARBOARD;
|
|
s_tactical.phaserStarboard.generic.callback = Tactical_MenuEvent;
|
|
s_tactical.phaserStarboard.width = MENU_BUTTON_MED_WIDTH;
|
|
s_tactical.phaserStarboard.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_tactical.phaserStarboard.color = CT_VDKPURPLE1;
|
|
s_tactical.phaserStarboard.color2 = CT_DKPURPLE1;
|
|
s_tactical.phaserStarboard.textX = MENU_BUTTON_TEXT_X;
|
|
s_tactical.phaserStarboard.textY = MENU_BUTTON_TEXT_Y;
|
|
s_tactical.phaserStarboard.textEnum = MBT_PHASERSTARBOARD;
|
|
s_tactical.phaserStarboard.textcolor = CT_BLACK;
|
|
s_tactical.phaserStarboard.textcolor2 = CT_WHITE;
|
|
|
|
s_tactical.phaserVentral.generic.type = MTYPE_BITMAP;
|
|
s_tactical.phaserVentral.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_tactical.phaserVentral.generic.x = x;
|
|
s_tactical.phaserVentral.generic.y = 180;
|
|
s_tactical.phaserVentral.generic.name = "menu/common/square.tga";
|
|
s_tactical.phaserVentral.generic.id = ID_PHASERVENTRAL;
|
|
s_tactical.phaserVentral.generic.callback = Tactical_MenuEvent;
|
|
s_tactical.phaserVentral.width = MENU_BUTTON_MED_WIDTH;
|
|
s_tactical.phaserVentral.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_tactical.phaserVentral.color = CT_VDKPURPLE1;
|
|
s_tactical.phaserVentral.color2 = CT_DKPURPLE1;
|
|
s_tactical.phaserVentral.textX = MENU_BUTTON_TEXT_X;
|
|
s_tactical.phaserVentral.textY = MENU_BUTTON_TEXT_Y;
|
|
s_tactical.phaserVentral.textEnum = MBT_PHASERVENTRAL;
|
|
s_tactical.phaserVentral.textcolor = CT_BLACK;
|
|
s_tactical.phaserVentral.textcolor2 = CT_WHITE;
|
|
|
|
|
|
s_tactical.photonFore.generic.type = MTYPE_BITMAP;
|
|
s_tactical.photonFore.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_tactical.photonFore.generic.x = x;
|
|
s_tactical.photonFore.generic.y = 300;
|
|
s_tactical.photonFore.generic.name = "menu/common/square.tga";
|
|
s_tactical.photonFore.generic.id = ID_PHOTONFORE;
|
|
s_tactical.photonFore.generic.callback = Tactical_MenuEvent;
|
|
s_tactical.photonFore.width = MENU_BUTTON_MED_WIDTH;
|
|
s_tactical.photonFore.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_tactical.photonFore.color = CT_VDKPURPLE1;
|
|
s_tactical.photonFore.color2 = CT_DKPURPLE1;
|
|
s_tactical.photonFore.textX = MENU_BUTTON_TEXT_X;
|
|
s_tactical.photonFore.textY = MENU_BUTTON_TEXT_Y;
|
|
s_tactical.photonFore.textEnum = MBT_PHOTONFORE;
|
|
s_tactical.photonFore.textcolor = CT_BLACK;
|
|
s_tactical.photonFore.textcolor2 = CT_WHITE;
|
|
|
|
s_tactical.photonAft.generic.type = MTYPE_BITMAP;
|
|
s_tactical.photonAft.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_tactical.photonAft.generic.x = x;
|
|
s_tactical.photonAft.generic.y = 320;
|
|
s_tactical.photonAft.generic.name = "menu/common/square.tga";
|
|
s_tactical.photonAft.generic.id = ID_PHOTONAFT;
|
|
s_tactical.photonAft.generic.callback = Tactical_MenuEvent;
|
|
s_tactical.photonAft.width = MENU_BUTTON_MED_WIDTH;
|
|
s_tactical.photonAft.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_tactical.photonAft.color = CT_VDKPURPLE1;
|
|
s_tactical.photonAft.color2 = CT_DKPURPLE1;
|
|
s_tactical.photonAft.textX = MENU_BUTTON_TEXT_X;
|
|
s_tactical.photonAft.textY = MENU_BUTTON_TEXT_Y;
|
|
s_tactical.photonAft.textEnum = MBT_PHOTONAFT;
|
|
s_tactical.photonAft.textcolor = CT_BLACK;
|
|
s_tactical.photonAft.textcolor2 = CT_WHITE;
|
|
|
|
|
|
s_tactical.firephotons.generic.type = MTYPE_BITMAP;
|
|
s_tactical.firephotons.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_tactical.firephotons.generic.x = x2;
|
|
s_tactical.firephotons.generic.y = 292;
|
|
s_tactical.firephotons.generic.name = "menu/common/square.tga";
|
|
s_tactical.firephotons.generic.id = ID_STARTGAME;
|
|
s_tactical.firephotons.generic.callback = Tactical_MenuEvent;
|
|
s_tactical.firephotons.width = MENU_BUTTON_MED_WIDTH;
|
|
s_tactical.firephotons.height = 79;
|
|
s_tactical.firephotons.color = CT_DKPURPLE1;
|
|
s_tactical.firephotons.color2 = CT_LTPURPLE1;
|
|
s_tactical.firephotons.textX = MENU_BUTTON_TEXT_X;
|
|
s_tactical.firephotons.textY = 56;
|
|
s_tactical.firephotons.textEnum = MBT_FIREPHOTONS;
|
|
s_tactical.firephotons.textcolor = CT_BLACK;
|
|
s_tactical.firephotons.textcolor2 = CT_WHITE;
|
|
|
|
Menu_AddItem( &s_tactical.menu, ( void * )&s_tactical.mainmenu);
|
|
Menu_AddItem( &s_tactical.menu, ( void * )&s_tactical.firephasers);
|
|
Menu_AddItem( &s_tactical.menu, ( void * )&s_tactical.phaserUpper);
|
|
Menu_AddItem( &s_tactical.menu, ( void * )&s_tactical.phaserLower);
|
|
Menu_AddItem( &s_tactical.menu, ( void * )&s_tactical.phaserPort);
|
|
Menu_AddItem( &s_tactical.menu, ( void * )&s_tactical.phaserStarboard);
|
|
Menu_AddItem( &s_tactical.menu, ( void * )&s_tactical.phaserVentral);
|
|
|
|
Menu_AddItem( &s_tactical.menu, ( void * )&s_tactical.photonFore);
|
|
Menu_AddItem( &s_tactical.menu, ( void * )&s_tactical.photonAft);
|
|
Menu_AddItem( &s_tactical.menu, ( void * )&s_tactical.firephotons);
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_TacticalMenu
|
|
===============
|
|
*/
|
|
void UI_TacticalMenu(void)
|
|
{
|
|
uis.menusp = 0;
|
|
|
|
ingameFlag = qtrue; // true when in game menu is in use
|
|
|
|
Mouse_Show();
|
|
|
|
UI_TacticalMenu_Cache();
|
|
|
|
TacticalMenu_Init();
|
|
|
|
UI_PushMenu( &s_tactical.menu );
|
|
|
|
Menu_AdjustCursor( &s_tactical.menu, 1 );
|
|
}
|
|
|
|
typedef struct
|
|
{
|
|
menuframework_s menu;
|
|
|
|
qhandle_t cornerUpper;
|
|
qhandle_t cornerUpper2;
|
|
qhandle_t cornerLower;
|
|
qhandle_t monitorBar;
|
|
qhandle_t arrowRight;
|
|
qhandle_t arrowLeft;
|
|
|
|
menubitmap_s mainmenu;
|
|
|
|
} engineeringStatus_t;
|
|
|
|
|
|
static engineeringStatus_t s_engineeringStatus;
|
|
|
|
/*
|
|
=================
|
|
EngineeringStatus_MenuEvent
|
|
=================
|
|
*/
|
|
static void EngineeringStatus_MenuEvent( void* ptr, int notification )
|
|
{
|
|
menuframework_s* m;
|
|
|
|
if (notification != QM_ACTIVATED)
|
|
return;
|
|
|
|
m = ((menucommon_s*)ptr)->parent;
|
|
|
|
switch (((menucommon_s*)ptr)->id)
|
|
{
|
|
case ID_MAINMENU:
|
|
UI_PopMenu();
|
|
break;
|
|
|
|
case ID_STARTGAME:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
EngineeringStatus_MenuKey
|
|
=================
|
|
*/
|
|
static sfxHandle_t EngineeringStatus_MenuKey( int key )
|
|
{
|
|
return Menu_DefaultKey( &s_engineeringStatus.menu, key );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
M_EngineeringStatus_Graphics
|
|
=================
|
|
*/
|
|
static void M_EngineeringStatus_Graphics (void)
|
|
{
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 160, 60, 330, 18, uis.whiteShader); // Phaser Line
|
|
UI_DrawProportionalString( 180, 62, "WARP DRIVE STATUS", UI_SMALLFONT, colorTable[CT_LTGOLD1]);
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 160, 228, 330, 18, uis.whiteShader); // Torpodoes Line
|
|
UI_DrawProportionalString( 180, 230, "IMPULSE DRIVE STATUS", UI_SMALLFONT, colorTable[CT_LTGOLD1]);
|
|
|
|
// Frame
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 30, 20, 128, 64, s_engineeringStatus.cornerUpper2); // Top corner
|
|
UI_DrawHandlePic( 50, 20, 99, 7, uis.whiteShader);
|
|
UI_DrawHandlePic( 152, 20, 135, 7, uis.whiteShader);
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 290, 20, 12, 7, uis.whiteShader);
|
|
|
|
ui.R_SetColor( colorTable[CT_LTBROWN1]);
|
|
UI_DrawHandlePic( 305, 20, 60, 4, uis.whiteShader);
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 368, 20, 111, 7, uis.whiteShader);
|
|
|
|
ui.R_SetColor( colorTable[CT_LTRED1]);
|
|
UI_DrawHandlePic( 176, 100, 32, 64, s_engineeringStatus.monitorBar);
|
|
UI_DrawHandlePic( 256, 100, 32, 64, s_engineeringStatus.monitorBar);
|
|
UI_DrawHandlePic( 336, 100, 32, 64, s_engineeringStatus.monitorBar);
|
|
|
|
ui.R_SetColor( colorTable[CT_LTPURPLE2]);
|
|
UI_DrawHandlePic( 168, 120, 8, 8, s_engineeringStatus.arrowRight);
|
|
UI_DrawHandlePic( 184, 140, 8, 8, s_engineeringStatus.arrowLeft);
|
|
|
|
ui.R_SetColor( colorTable[CT_LTPURPLE2]);
|
|
UI_DrawHandlePic( 248, 110, 8, 8, s_engineeringStatus.arrowRight);
|
|
UI_DrawHandlePic( 264, 154, 8, 8, s_engineeringStatus.arrowLeft);
|
|
|
|
ui.R_SetColor( colorTable[CT_LTPURPLE2]);
|
|
UI_DrawHandlePic( 328, 140, 8, 8, s_engineeringStatus.arrowRight);
|
|
UI_DrawHandlePic( 344, 110, 8, 8, s_engineeringStatus.arrowLeft);
|
|
|
|
UI_DrawProportionalString( 180, 180, "Warp Core", UI_TINYFONT | UI_CENTER, colorTable[CT_LTGOLD1]);
|
|
UI_DrawProportionalString( 260, 180, "Port Nacelle", UI_TINYFONT | UI_CENTER, colorTable[CT_LTGOLD1]);
|
|
UI_DrawProportionalString( 340, 180, "Starboard Nacelle", UI_TINYFONT | UI_CENTER, colorTable[CT_LTGOLD1]);
|
|
|
|
ui.R_SetColor( colorTable[CT_LTRED1]);
|
|
UI_DrawHandlePic( 176, 260, 32, 64, s_engineeringStatus.monitorBar);
|
|
UI_DrawHandlePic( 256, 260, 32, 64, s_engineeringStatus.monitorBar);
|
|
|
|
ui.R_SetColor( colorTable[CT_LTPURPLE2]);
|
|
UI_DrawHandlePic( 168, 300, 8, 8, s_engineeringStatus.arrowRight);
|
|
UI_DrawHandlePic( 184, 290, 8, 8, s_engineeringStatus.arrowLeft);
|
|
|
|
ui.R_SetColor( colorTable[CT_LTPURPLE2]);
|
|
UI_DrawHandlePic( 248, 305, 8, 8, s_engineeringStatus.arrowRight);
|
|
UI_DrawHandlePic( 264, 305, 8, 8, s_engineeringStatus.arrowLeft);
|
|
|
|
|
|
UI_DrawProportionalString( 180, 340, "Engine 1", UI_TINYFONT| UI_CENTER, colorTable[CT_LTGOLD1]);
|
|
UI_DrawProportionalString( 260, 340, "Engine 2", UI_TINYFONT| UI_CENTER, colorTable[CT_LTGOLD1]);
|
|
|
|
|
|
// Side left column
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 30, 51, 47, 119, uis.whiteShader);
|
|
UI_DrawHandlePic( 30,203, 47, 186, uis.whiteShader);
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 30, 173, 47, 27, uis.whiteShader); // Top left column
|
|
UI_DrawHandlePic( 30, 392, 47, 33, uis.whiteShader); // Bottom left column
|
|
UI_DrawHandlePic( 30, 425, 128, 64, s_engineeringStatus.cornerLower);// Bottom Left Corner
|
|
|
|
ui.R_SetColor( colorTable[CT_LTBROWN1]);
|
|
UI_DrawHandlePic( 96, 438, 268, 18, uis.whiteShader); // Bottom front Line
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
EngineeringStatusMenu_Draw
|
|
===============
|
|
*/
|
|
void EngineeringStatusMenu_Draw(void)
|
|
{
|
|
M_EngineeringStatus_Graphics();
|
|
|
|
Menu_Draw( &s_engineeringStatus.menu );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
UI_EngineeringStatusMenu_Cache
|
|
=================
|
|
*/
|
|
void UI_EngineeringStatusMenu_Cache( void )
|
|
{
|
|
s_engineeringStatus.cornerUpper = ui.R_RegisterShaderNoMip("menu/common/corner_ll_47_7.tga");
|
|
s_engineeringStatus.cornerUpper2= ui.R_RegisterShaderNoMip("menu/common/corner_ul_47_7.tga");
|
|
s_engineeringStatus.cornerLower = ui.R_RegisterShaderNoMip("menu/common/corner_ll_47_18.tga");
|
|
s_engineeringStatus.monitorBar = ui.R_RegisterShaderNoMip("menu/common/mon_bar.tga");
|
|
|
|
s_engineeringStatus.arrowRight = ui.R_RegisterShaderNoMip("menu/common/right_arrow.tga");
|
|
s_engineeringStatus.arrowLeft = ui.R_RegisterShaderNoMip("menu/common/left_arrow.tga");
|
|
|
|
}
|
|
/*
|
|
=================
|
|
EngineeringStatusMenu_Init
|
|
=================
|
|
*/
|
|
static void EngineeringStatusMenu_Init( void )
|
|
{
|
|
int x2;
|
|
|
|
UI_EngineeringStatusMenu_Cache();
|
|
|
|
s_engineeringStatus.menu.nitems = 0;
|
|
s_engineeringStatus.menu.wrapAround = qtrue;
|
|
s_engineeringStatus.menu.opening = NULL;
|
|
s_engineeringStatus.menu.closing = NULL;
|
|
s_engineeringStatus.menu.draw = EngineeringStatusMenu_Draw;
|
|
s_engineeringStatus.menu.key = EngineeringStatus_MenuKey;
|
|
s_engineeringStatus.menu.fullscreen = qtrue;
|
|
s_engineeringStatus.menu.descX = MENU_DESC_X;
|
|
s_engineeringStatus.menu.descY = MENU_DESC_Y;
|
|
s_engineeringStatus.menu.listX = 230;
|
|
s_engineeringStatus.menu.listY = 188;
|
|
s_engineeringStatus.menu.titleX = MENU_TITLE_X;
|
|
s_engineeringStatus.menu.titleY = MENU_TITLE_Y;
|
|
s_engineeringStatus.menu.titleI = MNT_TACTICAL;
|
|
s_engineeringStatus.menu.footNoteEnum = MNT_TACTICAL;
|
|
|
|
x2 = 340;
|
|
s_engineeringStatus.mainmenu.generic.type = MTYPE_BITMAP;
|
|
s_engineeringStatus.mainmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_engineeringStatus.mainmenu.generic.x = 130;
|
|
s_engineeringStatus.mainmenu.generic.y = 398;
|
|
s_engineeringStatus.mainmenu.generic.name = GRAPHIC_BUTTONRIGHT;
|
|
s_engineeringStatus.mainmenu.generic.id = ID_MAINMENU;
|
|
s_engineeringStatus.mainmenu.generic.callback = EngineeringStatus_MenuEvent;
|
|
s_engineeringStatus.mainmenu.width = MENU_BUTTON_MED_WIDTH;
|
|
s_engineeringStatus.mainmenu.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_engineeringStatus.mainmenu.color = CT_DKPURPLE1;
|
|
s_engineeringStatus.mainmenu.color2 = CT_LTPURPLE1;
|
|
s_engineeringStatus.mainmenu.textX = MENU_BUTTON_TEXT_X;
|
|
s_engineeringStatus.mainmenu.textY = MENU_BUTTON_TEXT_Y;
|
|
s_engineeringStatus.mainmenu.textEnum = MBT_HAZARDGAMERETURN;
|
|
s_engineeringStatus.mainmenu.textcolor = CT_BLACK;
|
|
s_engineeringStatus.mainmenu.textcolor2 = CT_WHITE;
|
|
|
|
Menu_AddItem( &s_engineeringStatus.menu, ( void * )&s_engineeringStatus.mainmenu);
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_EngineeringStatusMenu
|
|
===============
|
|
*/
|
|
void UI_EngineeringStatusMenu(void)
|
|
{
|
|
uis.menusp = 0;
|
|
|
|
ingameFlag = qtrue; // true when in game menu is in use
|
|
|
|
Mouse_Show();
|
|
|
|
UI_EngineeringStatusMenu_Cache();
|
|
|
|
EngineeringStatusMenu_Init();
|
|
|
|
UI_PushMenu( &s_engineeringStatus.menu );
|
|
|
|
Menu_AdjustCursor( &s_engineeringStatus.menu, 1 );
|
|
}
|
|
|
|
|
|
typedef struct
|
|
{
|
|
menuframework_s menu;
|
|
|
|
qhandle_t cornerUpper;
|
|
qhandle_t cornerUpper2;
|
|
qhandle_t cornerLower;
|
|
|
|
menuslider_s warp_slider;
|
|
menuslider_s impulse_slider;
|
|
|
|
menubitmap_s mainmenu;
|
|
menubitmap_s engage;
|
|
menufield_s heading1;
|
|
menufield_s heading2;
|
|
|
|
} navigation_t;
|
|
|
|
|
|
static navigation_t s_navigation;
|
|
|
|
/*
|
|
=================
|
|
WarpCallback
|
|
=================
|
|
*/
|
|
void WarpCallback( void *s, int notification )
|
|
{
|
|
menuslider_s *slider = ( menuslider_s * ) s;
|
|
|
|
if (notification != QM_ACTIVATED)
|
|
return;
|
|
|
|
s_navigation.warp_slider.color = CT_DKPURPLE1;
|
|
s_navigation.warp_slider.color2 = CT_LTPURPLE1;
|
|
|
|
s_navigation.impulse_slider.color = CT_VDKPURPLE1;
|
|
s_navigation.impulse_slider.color2 = CT_DKPURPLE1;
|
|
s_navigation.impulse_slider.curvalue = 0;
|
|
|
|
}
|
|
|
|
/*
|
|
=================
|
|
ImpulseCallback
|
|
=================
|
|
*/
|
|
void ImpulseCallback( void *s, int notification )
|
|
{
|
|
menuslider_s *slider = ( menuslider_s * ) s;
|
|
|
|
if (notification != QM_ACTIVATED)
|
|
return;
|
|
|
|
s_navigation.warp_slider.color = CT_VDKPURPLE1;
|
|
s_navigation.warp_slider.color2 = CT_DKPURPLE1;
|
|
s_navigation.warp_slider.curvalue = 0;
|
|
|
|
s_navigation.impulse_slider.color = CT_DKPURPLE1;
|
|
s_navigation.impulse_slider.color2 = CT_LTPURPLE1;
|
|
}
|
|
|
|
/*
|
|
=================
|
|
Navigation_MenuEvent
|
|
=================
|
|
*/
|
|
static void Navigation_MenuEvent( void* ptr, int notification )
|
|
{
|
|
menuframework_s* m;
|
|
|
|
if (notification != QM_ACTIVATED)
|
|
return;
|
|
|
|
m = ((menucommon_s*)ptr)->parent;
|
|
|
|
switch (((menucommon_s*)ptr)->id)
|
|
{
|
|
case ID_MAINMENU:
|
|
UI_PopMenu();
|
|
break;
|
|
|
|
case ID_STARTGAME:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
Navigation_MenuKey
|
|
=================
|
|
*/
|
|
static sfxHandle_t Navigation_MenuKey( int key )
|
|
{
|
|
return Menu_DefaultKey( &s_navigation.menu, key );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
M_Navigation_Graphics
|
|
=================
|
|
*/
|
|
static void M_Navigation_Graphics (void)
|
|
{
|
|
// Frame
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 30, 20, 128, 64, s_engineeringStatus.cornerUpper2); // Top corner
|
|
UI_DrawHandlePic( 50, 20, 99, 7, uis.whiteShader);
|
|
UI_DrawHandlePic( 152, 20, 135, 7, uis.whiteShader);
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 290, 20, 12, 7, uis.whiteShader);
|
|
|
|
ui.R_SetColor( colorTable[CT_LTBROWN1]);
|
|
UI_DrawHandlePic( 305, 20, 60, 4, uis.whiteShader);
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 368, 20, 111, 7, uis.whiteShader);
|
|
|
|
|
|
// Side left column
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 30, 51, 47, 119, uis.whiteShader);
|
|
UI_DrawHandlePic( 30,203, 47, 186, uis.whiteShader);
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 30, 173, 47, 27, uis.whiteShader); // Top left column
|
|
UI_DrawHandlePic( 30, 392, 47, 33, uis.whiteShader); // Bottom left column
|
|
UI_DrawHandlePic( 30, 425, 128, 64, s_engineeringStatus.cornerLower);// Bottom Left Corner
|
|
|
|
ui.R_SetColor( colorTable[CT_LTBROWN1]);
|
|
UI_DrawHandlePic( 96, 438, 268, 18, uis.whiteShader); // Bottom front Line
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 160, 58, 330, 18, uis.whiteShader); // Torpodoes Line
|
|
UI_DrawProportionalString( 180, 60, "SPEED", UI_SMALLFONT, colorTable[CT_LTGOLD1]);
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 160, 195, 330, 18, uis.whiteShader); // Torpodoes Line
|
|
UI_DrawProportionalString( 180, 197, "COURSE HEADING", UI_SMALLFONT, colorTable[CT_LTGOLD1]);
|
|
|
|
UI_DrawProportionalString( 300, 226, "MARK", UI_SMALLFONT|UI_CENTER, colorTable[CT_LTGOLD1]);
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
NavigationMenu_Draw
|
|
===============
|
|
*/
|
|
void NavigationMenu_Draw(void)
|
|
{
|
|
M_Navigation_Graphics();
|
|
|
|
Menu_Draw( &s_navigation.menu );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
UI_NavigationMenu_Cache
|
|
=================
|
|
*/
|
|
void UI_NavigationMenu_Cache( void )
|
|
{
|
|
s_navigation.cornerUpper = ui.R_RegisterShaderNoMip("menu/common/corner_ll_47_7.tga");
|
|
s_navigation.cornerUpper2= ui.R_RegisterShaderNoMip("menu/common/corner_ul_47_7.tga");
|
|
s_navigation.cornerLower = ui.R_RegisterShaderNoMip("menu/common/corner_ll_47_18.tga");
|
|
}
|
|
|
|
/*
|
|
=================
|
|
NavigationMenu_Init
|
|
=================
|
|
*/
|
|
static void NavigationMenu_Init( void )
|
|
{
|
|
int x2;
|
|
|
|
UI_NavigationMenu_Cache();
|
|
|
|
s_navigation.menu.nitems = 0;
|
|
s_navigation.menu.wrapAround = qtrue;
|
|
s_navigation.menu.opening = NULL;
|
|
s_navigation.menu.closing = NULL;
|
|
s_navigation.menu.draw = NavigationMenu_Draw;
|
|
s_navigation.menu.key = Navigation_MenuKey;
|
|
s_navigation.menu.fullscreen = qtrue;
|
|
s_navigation.menu.descX = MENU_DESC_X;
|
|
s_navigation.menu.descY = MENU_DESC_Y;
|
|
s_navigation.menu.listX = 230;
|
|
s_navigation.menu.listY = 188;
|
|
s_navigation.menu.titleX = MENU_TITLE_X;
|
|
s_navigation.menu.titleY = MENU_TITLE_Y;
|
|
s_navigation.menu.titleI = MNT_TACTICAL;
|
|
s_navigation.menu.footNoteEnum = MNT_TACTICAL;
|
|
|
|
x2 = 340;
|
|
s_navigation.mainmenu.generic.type = MTYPE_BITMAP;
|
|
s_navigation.mainmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_navigation.mainmenu.generic.x = 130;
|
|
s_navigation.mainmenu.generic.y = 398;
|
|
s_navigation.mainmenu.generic.name = GRAPHIC_BUTTONRIGHT;
|
|
s_navigation.mainmenu.generic.id = ID_MAINMENU;
|
|
s_navigation.mainmenu.generic.callback = Navigation_MenuEvent;
|
|
s_navigation.mainmenu.width = MENU_BUTTON_MED_WIDTH;
|
|
s_navigation.mainmenu.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_navigation.mainmenu.color = CT_DKPURPLE1;
|
|
s_navigation.mainmenu.color2 = CT_LTPURPLE1;
|
|
s_navigation.mainmenu.textX = MENU_BUTTON_TEXT_X;
|
|
s_navigation.mainmenu.textY = MENU_BUTTON_TEXT_Y;
|
|
s_navigation.mainmenu.textEnum = MBT_HAZARDGAMERETURN;
|
|
s_navigation.mainmenu.textcolor = CT_BLACK;
|
|
s_navigation.mainmenu.textcolor2 = CT_WHITE;
|
|
|
|
|
|
int x,y;
|
|
|
|
x = 180;
|
|
y = 90;
|
|
s_navigation.warp_slider.generic.type = MTYPE_SLIDER;
|
|
s_navigation.warp_slider.generic.x = x + 162;
|
|
s_navigation.warp_slider.generic.y = y;
|
|
s_navigation.warp_slider.generic.flags = QMF_SMALLFONT;
|
|
s_navigation.warp_slider.generic.callback = WarpCallback;
|
|
s_navigation.warp_slider.minvalue = 5;
|
|
s_navigation.warp_slider.maxvalue = 30;
|
|
s_navigation.warp_slider.color = CT_DKPURPLE1;
|
|
s_navigation.warp_slider.color2 = CT_LTPURPLE1;
|
|
s_navigation.warp_slider.generic.name = "menu/common/monbar_2.tga";
|
|
s_navigation.warp_slider.width = 256;
|
|
s_navigation.warp_slider.height = 32;
|
|
s_navigation.warp_slider.focusWidth = 145;
|
|
s_navigation.warp_slider.focusHeight = 18;
|
|
s_navigation.warp_slider.picName = GRAPHIC_SQUARE;
|
|
s_navigation.warp_slider.picX = x;
|
|
s_navigation.warp_slider.picY = y;
|
|
s_navigation.warp_slider.picWidth = MENU_BUTTON_MED_WIDTH + 21;
|
|
s_navigation.warp_slider.picHeight = MENU_BUTTON_MED_HEIGHT;
|
|
s_navigation.warp_slider.textX = MENU_BUTTON_TEXT_X;
|
|
s_navigation.warp_slider.textY = MENU_BUTTON_TEXT_Y;
|
|
s_navigation.warp_slider.textEnum = MBT_WARPDRIVE;
|
|
s_navigation.warp_slider.textcolor = CT_BLACK;
|
|
s_navigation.warp_slider.textcolor2 = CT_WHITE;
|
|
s_navigation.warp_slider.thumbName = GRAPHIC_BUTTONSLIDER;
|
|
s_navigation.warp_slider.thumbHeight = 32;
|
|
s_navigation.warp_slider.thumbWidth = 16;
|
|
s_navigation.warp_slider.thumbGraphicWidth = 9;
|
|
s_navigation.warp_slider.thumbColor = CT_DKBLUE1;
|
|
s_navigation.warp_slider.thumbColor2 = CT_LTBLUE1;
|
|
|
|
|
|
s_navigation.impulse_slider.generic.type = MTYPE_SLIDER;
|
|
s_navigation.impulse_slider.generic.x = x + 162;
|
|
s_navigation.impulse_slider.generic.y = y + 40;
|
|
s_navigation.impulse_slider.generic.flags = QMF_SMALLFONT;
|
|
s_navigation.impulse_slider.generic.callback = ImpulseCallback;
|
|
s_navigation.impulse_slider.minvalue = 5;
|
|
s_navigation.impulse_slider.maxvalue = 30;
|
|
s_navigation.impulse_slider.color = CT_VDKPURPLE1;
|
|
s_navigation.impulse_slider.color2 = CT_DKPURPLE1;
|
|
s_navigation.impulse_slider.generic.name = "menu/common/monbar_2.tga";
|
|
s_navigation.impulse_slider.width = 256;
|
|
s_navigation.impulse_slider.height = 32;
|
|
s_navigation.impulse_slider.focusWidth = 145;
|
|
s_navigation.impulse_slider.focusHeight = 18;
|
|
s_navigation.impulse_slider.picName = GRAPHIC_SQUARE;
|
|
s_navigation.impulse_slider.picX = x;
|
|
s_navigation.impulse_slider.picY = y + 40;
|
|
s_navigation.impulse_slider.picWidth = MENU_BUTTON_MED_WIDTH + 21;
|
|
s_navigation.impulse_slider.picHeight = MENU_BUTTON_MED_HEIGHT;
|
|
s_navigation.impulse_slider.textX = MENU_BUTTON_TEXT_X;
|
|
s_navigation.impulse_slider.textY = MENU_BUTTON_TEXT_Y;
|
|
s_navigation.impulse_slider.textEnum = MBT_IMPULSEDRIVE;
|
|
s_navigation.impulse_slider.textcolor = CT_BLACK;
|
|
s_navigation.impulse_slider.textcolor2 = CT_WHITE;
|
|
s_navigation.impulse_slider.thumbName = GRAPHIC_BUTTONSLIDER;
|
|
s_navigation.impulse_slider.thumbHeight = 32;
|
|
s_navigation.impulse_slider.thumbWidth = 16;
|
|
s_navigation.impulse_slider.thumbGraphicWidth = 9;
|
|
s_navigation.impulse_slider.thumbColor = CT_DKBLUE1;
|
|
s_navigation.impulse_slider.thumbColor2 = CT_LTBLUE1;
|
|
|
|
s_navigation.heading1.generic.type = MTYPE_FIELD;
|
|
s_navigation.heading1.generic.x = 200;
|
|
s_navigation.heading1.generic.y = 226;
|
|
s_navigation.heading1.field.style = UI_SMALLFONT;
|
|
s_navigation.heading1.field.widthInChars = 6;
|
|
s_navigation.heading1.field.maxchars = 6;
|
|
s_navigation.heading1.field.style = UI_TINYFONT;
|
|
|
|
s_navigation.heading2.generic.type = MTYPE_FIELD;
|
|
s_navigation.heading2.generic.x = 350;
|
|
s_navigation.heading2.generic.y = 226;
|
|
s_navigation.heading2.field.style = UI_SMALLFONT;
|
|
s_navigation.heading2.field.widthInChars = 6;
|
|
s_navigation.heading2.field.maxchars = 6;
|
|
s_navigation.heading2.field.style = UI_TINYFONT;
|
|
|
|
s_navigation.engage.generic.type = MTYPE_BITMAP;
|
|
s_navigation.engage.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_navigation.engage.generic.x = 262;
|
|
s_navigation.engage.generic.y = 316;
|
|
s_navigation.engage.generic.name = "menu/common/square.tga";
|
|
s_navigation.engage.generic.id = ID_STARTGAME;
|
|
s_navigation.engage.generic.callback = Navigation_MenuEvent;
|
|
s_navigation.engage.width = MENU_BUTTON_MED_WIDTH + 40;
|
|
s_navigation.engage.height = 60;
|
|
s_navigation.engage.color = CT_DKPURPLE1;
|
|
s_navigation.engage.color2 = CT_LTPURPLE1;
|
|
s_navigation.engage.textX = MENU_BUTTON_TEXT_X + 30;
|
|
s_navigation.engage.textY = 40;
|
|
s_navigation.engage.textEnum = MBT_ENGAGE;
|
|
s_navigation.engage.textcolor = CT_BLACK;
|
|
s_navigation.engage.textcolor2 = CT_WHITE;
|
|
|
|
Menu_AddItem( &s_navigation.menu, ( void * )&s_navigation.mainmenu);
|
|
Menu_AddItem( &s_navigation.menu, ( void * )&s_navigation.warp_slider);
|
|
Menu_AddItem( &s_navigation.menu, ( void * )&s_navigation.impulse_slider);
|
|
Menu_AddItem( &s_navigation.menu, ( void * )&s_navigation.heading1);
|
|
Menu_AddItem( &s_navigation.menu, ( void * )&s_navigation.heading2);
|
|
Menu_AddItem( &s_navigation.menu, ( void * )&s_navigation.engage);
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_NavigationMenu
|
|
===============
|
|
*/
|
|
void UI_NavigationMenu(void)
|
|
{
|
|
uis.menusp = 0;
|
|
|
|
ingameFlag = qtrue; // true when in game menu is in use
|
|
|
|
Mouse_Show();
|
|
|
|
UI_NavigationMenu_Cache();
|
|
|
|
NavigationMenu_Init();
|
|
|
|
UI_PushMenu( &s_navigation.menu );
|
|
|
|
Menu_AdjustCursor( &s_navigation.menu, 1 );
|
|
}
|
|
|
|
|
|
typedef struct
|
|
{
|
|
menuframework_s menu;
|
|
|
|
qhandle_t cornerUpper;
|
|
qhandle_t cornerUpper2;
|
|
qhandle_t cornerLower;
|
|
|
|
menubitmap_s mainGenerator1;
|
|
menubitmap_s mainGenerator2;
|
|
menubitmap_s mainGenerator3;
|
|
menubitmap_s auxGenerator1;
|
|
menubitmap_s auxGenerator2;
|
|
|
|
menuslider_s sensors;
|
|
menuslider_s phasers;
|
|
menuslider_s shields;
|
|
menuslider_s engines;
|
|
menuslider_s environment;
|
|
menuslider_s misc;
|
|
|
|
menubitmap_s mainmenu;
|
|
} ops_t;
|
|
|
|
static ops_t s_ops;
|
|
|
|
|
|
#define ID_GENERATOR1 104
|
|
#define ID_GENERATOR2 105
|
|
#define ID_GENERATOR3 106
|
|
#define ID_AUXGENERATOR1 107
|
|
#define ID_AUXGENERATOR2 108
|
|
|
|
|
|
|
|
/*
|
|
=================
|
|
Ops_MenuEvent
|
|
=================
|
|
*/
|
|
static void Ops_MenuEvent( void* ptr, int notification )
|
|
{
|
|
menuframework_s* m;
|
|
|
|
if (notification != QM_ACTIVATED)
|
|
return;
|
|
|
|
m = ((menucommon_s*)ptr)->parent;
|
|
|
|
switch (((menucommon_s*)ptr)->id)
|
|
{
|
|
case ID_MAINMENU:
|
|
UI_PopMenu();
|
|
break;
|
|
|
|
case ID_GENERATOR1:
|
|
if (s_ops.mainGenerator1.color == CT_DKPURPLE1)
|
|
{
|
|
s_ops.mainGenerator1.color = CT_VDKPURPLE1;
|
|
s_ops.mainGenerator1.color2 = CT_DKPURPLE1;
|
|
}
|
|
else
|
|
{
|
|
s_ops.mainGenerator1.color = CT_DKPURPLE1;
|
|
s_ops.mainGenerator1.color2 = CT_LTPURPLE1;
|
|
}
|
|
break;
|
|
|
|
case ID_GENERATOR2:
|
|
if (s_ops.mainGenerator2.color == CT_DKPURPLE1)
|
|
{
|
|
s_ops.mainGenerator2.color = CT_VDKPURPLE1;
|
|
s_ops.mainGenerator2.color2 = CT_DKPURPLE1;
|
|
}
|
|
else
|
|
{
|
|
s_ops.mainGenerator2.color = CT_DKPURPLE1;
|
|
s_ops.mainGenerator2.color2 = CT_LTPURPLE1;
|
|
}
|
|
break;
|
|
|
|
case ID_GENERATOR3:
|
|
if (s_ops.mainGenerator3.color == CT_DKPURPLE1)
|
|
{
|
|
s_ops.mainGenerator3.color = CT_VDKPURPLE1;
|
|
s_ops.mainGenerator3.color2 = CT_DKPURPLE1;
|
|
}
|
|
else
|
|
{
|
|
s_ops.mainGenerator3.color = CT_DKPURPLE1;
|
|
s_ops.mainGenerator3.color2 = CT_LTPURPLE1;
|
|
}
|
|
break;
|
|
|
|
case ID_AUXGENERATOR1:
|
|
if (s_ops.auxGenerator1.color == CT_DKPURPLE1)
|
|
{
|
|
s_ops.auxGenerator1.color = CT_VDKPURPLE1;
|
|
s_ops.auxGenerator1.color2 = CT_DKPURPLE1;
|
|
}
|
|
else
|
|
{
|
|
s_ops.auxGenerator1.color = CT_DKPURPLE1;
|
|
s_ops.auxGenerator1.color2 = CT_LTPURPLE1;
|
|
}
|
|
break;
|
|
|
|
case ID_AUXGENERATOR2:
|
|
if (s_ops.auxGenerator2.color == CT_DKPURPLE1)
|
|
{
|
|
s_ops.auxGenerator2.color = CT_VDKPURPLE1;
|
|
s_ops.auxGenerator2.color2 = CT_DKPURPLE1;
|
|
}
|
|
else
|
|
{
|
|
s_ops.auxGenerator2.color = CT_DKPURPLE1;
|
|
s_ops.auxGenerator2.color2 = CT_LTPURPLE1;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*
|
|
=================
|
|
Ops_MenuKey
|
|
=================
|
|
*/
|
|
static sfxHandle_t Ops_MenuKey( int key )
|
|
{
|
|
return Menu_DefaultKey( &s_ops.menu, key );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
M_Ops_Graphics
|
|
=================
|
|
*/
|
|
static void M_Ops_Graphics (void)
|
|
{
|
|
// Frame
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 30, 20, 128, 64, s_engineeringStatus.cornerUpper2); // Top corner
|
|
UI_DrawHandlePic( 50, 20, 99, 7, uis.whiteShader);
|
|
UI_DrawHandlePic( 152, 20, 135, 7, uis.whiteShader);
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 290, 20, 12, 7, uis.whiteShader);
|
|
|
|
ui.R_SetColor( colorTable[CT_LTBROWN1]);
|
|
UI_DrawHandlePic( 305, 20, 60, 4, uis.whiteShader);
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 368, 20, 111, 7, uis.whiteShader);
|
|
|
|
|
|
// Side left column
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 30, 51, 20, 119, uis.whiteShader);
|
|
UI_DrawHandlePic( 30,203, 20, 186, uis.whiteShader);
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 30, 173, 20, 27, uis.whiteShader); // Top left column
|
|
UI_DrawHandlePic( 30, 392, 20, 33, uis.whiteShader); // Bottom left column
|
|
UI_DrawHandlePic( 30, 425, 128, 64, s_engineeringStatus.cornerLower);// Bottom Left Corner
|
|
|
|
ui.R_SetColor( colorTable[CT_LTBROWN1]);
|
|
UI_DrawHandlePic( 96, 438, 268, 18, uis.whiteShader); // Bottom front Line
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 160, 60, 330, 18, uis.whiteShader); // Torpodoes Line
|
|
UI_DrawProportionalString( 180, 62, "POWER AVAILABLE", UI_SMALLFONT, colorTable[CT_LTGOLD1]);
|
|
|
|
|
|
ui.R_SetColor( colorTable[CT_DKBROWN1]);
|
|
UI_DrawHandlePic( 160, 250, 330, 18, uis.whiteShader); // Torpodoes Line
|
|
UI_DrawProportionalString( 180, 252, "POWER CONSUMPTION", UI_SMALLFONT, colorTable[CT_LTGOLD1]);
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
OpsMenu_Draw
|
|
===============
|
|
*/
|
|
void OpsMenu_Draw(void)
|
|
{
|
|
M_Ops_Graphics();
|
|
|
|
Menu_Draw( &s_ops.menu );
|
|
}
|
|
|
|
/*
|
|
=================
|
|
UI_OpsMenu_Cache
|
|
=================
|
|
*/
|
|
void UI_OpsMenu_Cache( void )
|
|
{
|
|
s_ops.cornerUpper = ui.R_RegisterShaderNoMip("menu/common/corner_ll_47_7.tga");
|
|
s_ops.cornerUpper2= ui.R_RegisterShaderNoMip("menu/common/corner_ul_47_7.tga");
|
|
s_ops.cornerLower = ui.R_RegisterShaderNoMip("menu/common/corner_ll_47_18.tga");
|
|
}
|
|
|
|
/*
|
|
=================
|
|
OpsMenu_Init
|
|
=================
|
|
*/
|
|
static void OpsMenu_Init( void )
|
|
{
|
|
int x2;
|
|
|
|
UI_OpsMenu_Cache();
|
|
|
|
s_ops.menu.nitems = 0;
|
|
s_ops.menu.wrapAround = qtrue;
|
|
s_ops.menu.opening = NULL;
|
|
s_ops.menu.closing = NULL;
|
|
s_ops.menu.draw = OpsMenu_Draw;
|
|
s_ops.menu.key = Ops_MenuKey;
|
|
s_ops.menu.fullscreen = qtrue;
|
|
s_ops.menu.descX = MENU_DESC_X;
|
|
s_ops.menu.descY = MENU_DESC_Y;
|
|
s_ops.menu.listX = 230;
|
|
s_ops.menu.listY = 188;
|
|
s_ops.menu.titleX = MENU_TITLE_X;
|
|
s_ops.menu.titleY = MENU_TITLE_Y;
|
|
s_ops.menu.titleI = MNT_TACTICAL;
|
|
s_ops.menu.footNoteEnum = MNT_TACTICAL;
|
|
|
|
|
|
s_ops.mainGenerator1.generic.type = MTYPE_BITMAP;
|
|
s_ops.mainGenerator1.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_ops.mainGenerator1.generic.x = 80;
|
|
s_ops.mainGenerator1.generic.y = 98;
|
|
s_ops.mainGenerator1.generic.name = "menu/common/square.tga";
|
|
s_ops.mainGenerator1.generic.id = ID_GENERATOR1;
|
|
s_ops.mainGenerator1.generic.callback = Ops_MenuEvent;
|
|
s_ops.mainGenerator1.width = MENU_BUTTON_MED_WIDTH + 10;
|
|
s_ops.mainGenerator1.height = 40;
|
|
s_ops.mainGenerator1.color = CT_DKPURPLE1;
|
|
s_ops.mainGenerator1.color2 = CT_LTPURPLE1;
|
|
s_ops.mainGenerator1.textX = MENU_BUTTON_TEXT_X + 30;
|
|
s_ops.mainGenerator1.textY = 20;
|
|
s_ops.mainGenerator1.textEnum = MBT_GENERATOR1;
|
|
s_ops.mainGenerator1.textcolor = CT_BLACK;
|
|
s_ops.mainGenerator1.textcolor2 = CT_WHITE;
|
|
|
|
s_ops.mainGenerator2.generic.type = MTYPE_BITMAP;
|
|
s_ops.mainGenerator2.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_ops.mainGenerator2.generic.x = 280;
|
|
s_ops.mainGenerator2.generic.y = 98;
|
|
s_ops.mainGenerator2.generic.name = "menu/common/square.tga";
|
|
s_ops.mainGenerator2.generic.id = ID_GENERATOR2;
|
|
s_ops.mainGenerator2.generic.callback = Ops_MenuEvent;
|
|
s_ops.mainGenerator2.width = MENU_BUTTON_MED_WIDTH + 10;
|
|
s_ops.mainGenerator2.height = 40;
|
|
s_ops.mainGenerator2.color = CT_DKPURPLE1;
|
|
s_ops.mainGenerator2.color2 = CT_LTPURPLE1;
|
|
s_ops.mainGenerator2.textX = MENU_BUTTON_TEXT_X + 30;
|
|
s_ops.mainGenerator2.textY = 20;
|
|
s_ops.mainGenerator2.textEnum = MBT_GENERATOR2;
|
|
s_ops.mainGenerator2.textcolor = CT_BLACK;
|
|
s_ops.mainGenerator2.textcolor2 = CT_WHITE;
|
|
|
|
s_ops.mainGenerator3.generic.type = MTYPE_BITMAP;
|
|
s_ops.mainGenerator3.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_ops.mainGenerator3.generic.x = 480;
|
|
s_ops.mainGenerator3.generic.y = 98;
|
|
s_ops.mainGenerator3.generic.name = "menu/common/square.tga";
|
|
s_ops.mainGenerator3.generic.id = ID_GENERATOR3;
|
|
s_ops.mainGenerator3.generic.callback = Ops_MenuEvent;
|
|
s_ops.mainGenerator3.width = MENU_BUTTON_MED_WIDTH + 10;
|
|
s_ops.mainGenerator3.height = 40;
|
|
s_ops.mainGenerator3.color = CT_VDKPURPLE1;
|
|
s_ops.mainGenerator3.color2 = CT_DKPURPLE1;
|
|
s_ops.mainGenerator3.textX = MENU_BUTTON_TEXT_X + 30;
|
|
s_ops.mainGenerator3.textY = 20;
|
|
s_ops.mainGenerator3.textEnum = MBT_GENERATOR3;
|
|
s_ops.mainGenerator3.textcolor = CT_BLACK;
|
|
s_ops.mainGenerator3.textcolor2 = CT_WHITE;
|
|
|
|
|
|
s_ops.auxGenerator1.generic.type = MTYPE_BITMAP;
|
|
s_ops.auxGenerator1.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_ops.auxGenerator1.generic.x = 188;
|
|
s_ops.auxGenerator1.generic.y = 158;
|
|
s_ops.auxGenerator1.generic.name = "menu/common/square.tga";
|
|
s_ops.auxGenerator1.generic.id = ID_AUXGENERATOR1;
|
|
s_ops.auxGenerator1.generic.callback = Ops_MenuEvent;
|
|
s_ops.auxGenerator1.width = MENU_BUTTON_MED_WIDTH;
|
|
s_ops.auxGenerator1.height = 30;
|
|
s_ops.auxGenerator1.color = CT_VDKPURPLE1;
|
|
s_ops.auxGenerator1.color2 = CT_DKPURPLE1;
|
|
s_ops.auxGenerator1.textX = MENU_BUTTON_TEXT_X;
|
|
s_ops.auxGenerator1.textY = 10;
|
|
s_ops.auxGenerator1.textEnum = MBT_AUXGENERATOR1;
|
|
s_ops.auxGenerator1.textcolor = CT_BLACK;
|
|
s_ops.auxGenerator1.textcolor2 = CT_WHITE;
|
|
|
|
s_ops.auxGenerator2.generic.type = MTYPE_BITMAP;
|
|
s_ops.auxGenerator2.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_ops.auxGenerator2.generic.x = 388;
|
|
s_ops.auxGenerator2.generic.y = 158;
|
|
s_ops.auxGenerator2.generic.name = "menu/common/square.tga";
|
|
s_ops.auxGenerator2.generic.id = ID_AUXGENERATOR2;
|
|
s_ops.auxGenerator2.generic.callback = Ops_MenuEvent;
|
|
s_ops.auxGenerator2.width = MENU_BUTTON_MED_WIDTH;
|
|
s_ops.auxGenerator2.height = 30;
|
|
s_ops.auxGenerator2.color = CT_VDKPURPLE1;
|
|
s_ops.auxGenerator2.color2 = CT_DKPURPLE1;
|
|
s_ops.auxGenerator2.textX = MENU_BUTTON_TEXT_X;
|
|
s_ops.auxGenerator2.textY = 10;
|
|
s_ops.auxGenerator2.textEnum = MBT_AUXGENERATOR2;
|
|
s_ops.auxGenerator2.textcolor = CT_BLACK;
|
|
s_ops.auxGenerator2.textcolor2 = CT_WHITE;
|
|
|
|
|
|
|
|
x2 = 340;
|
|
s_ops.mainmenu.generic.type = MTYPE_BITMAP;
|
|
s_ops.mainmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
|
|
s_ops.mainmenu.generic.x = 130;
|
|
s_ops.mainmenu.generic.y = 398;
|
|
s_ops.mainmenu.generic.name = GRAPHIC_BUTTONRIGHT;
|
|
s_ops.mainmenu.generic.id = ID_MAINMENU;
|
|
s_ops.mainmenu.generic.callback = Ops_MenuEvent;
|
|
s_ops.mainmenu.width = MENU_BUTTON_MED_WIDTH;
|
|
s_ops.mainmenu.height = MENU_BUTTON_MED_HEIGHT;
|
|
s_ops.mainmenu.color = CT_DKPURPLE1;
|
|
s_ops.mainmenu.color2 = CT_LTPURPLE1;
|
|
s_ops.mainmenu.textX = MENU_BUTTON_TEXT_X;
|
|
s_ops.mainmenu.textY = MENU_BUTTON_TEXT_Y;
|
|
s_ops.mainmenu.textEnum = MBT_HAZARDGAMERETURN;
|
|
s_ops.mainmenu.textcolor = CT_BLACK;
|
|
s_ops.mainmenu.textcolor2 = CT_WHITE;
|
|
|
|
|
|
int x,y;
|
|
|
|
x = 60;
|
|
y = 280;
|
|
s_ops.sensors.generic.type = MTYPE_SLIDER;
|
|
s_ops.sensors.generic.x = x + 121;
|
|
s_ops.sensors.generic.y = y;
|
|
s_ops.sensors.generic.flags = QMF_SMALLFONT;
|
|
s_ops.sensors.generic.callback = WarpCallback;
|
|
s_ops.sensors.minvalue = 5;
|
|
s_ops.sensors.maxvalue = 30;
|
|
s_ops.sensors.color = CT_DKPURPLE1;
|
|
s_ops.sensors.color2 = CT_LTPURPLE1;
|
|
s_ops.sensors.generic.name = "menu/common/monbar_2.tga";
|
|
s_ops.sensors.width = 256;
|
|
s_ops.sensors.height = 32;
|
|
s_ops.sensors.focusWidth = 145;
|
|
s_ops.sensors.focusHeight = 18;
|
|
s_ops.sensors.picName = GRAPHIC_SQUARE;
|
|
s_ops.sensors.picX = x;
|
|
s_ops.sensors.picY = y;
|
|
s_ops.sensors.picWidth = MENU_BUTTON_MED_WIDTH - 20;
|
|
s_ops.sensors.picHeight = MENU_BUTTON_MED_HEIGHT;
|
|
s_ops.sensors.textX = MENU_BUTTON_TEXT_X;
|
|
s_ops.sensors.textY = MENU_BUTTON_TEXT_Y;
|
|
s_ops.sensors.textEnum = MBT_POWER_SENSORS;
|
|
s_ops.sensors.textcolor = CT_BLACK;
|
|
s_ops.sensors.textcolor2 = CT_WHITE;
|
|
s_ops.sensors.thumbName = GRAPHIC_BUTTONSLIDER;
|
|
s_ops.sensors.thumbHeight = 32;
|
|
s_ops.sensors.thumbWidth = 16;
|
|
s_ops.sensors.thumbGraphicWidth = 9;
|
|
s_ops.sensors.thumbColor = CT_DKBLUE1;
|
|
s_ops.sensors.thumbColor2 = CT_LTBLUE1;
|
|
|
|
y += 30;
|
|
s_ops.phasers.generic.type = MTYPE_SLIDER;
|
|
s_ops.phasers.generic.x = x + 121;
|
|
s_ops.phasers.generic.y = y;
|
|
s_ops.phasers.generic.flags = QMF_SMALLFONT;
|
|
s_ops.phasers.generic.callback = WarpCallback;
|
|
s_ops.phasers.minvalue = 5;
|
|
s_ops.phasers.maxvalue = 30;
|
|
s_ops.phasers.color = CT_DKPURPLE1;
|
|
s_ops.phasers.color2 = CT_LTPURPLE1;
|
|
s_ops.phasers.generic.name = "menu/common/monbar_2.tga";
|
|
s_ops.phasers.width = 256;
|
|
s_ops.phasers.height = 32;
|
|
s_ops.phasers.focusWidth = 145;
|
|
s_ops.phasers.focusHeight = 18;
|
|
s_ops.phasers.picName = GRAPHIC_SQUARE;
|
|
s_ops.phasers.picX = x;
|
|
s_ops.phasers.picY = y;
|
|
s_ops.phasers.picWidth = MENU_BUTTON_MED_WIDTH - 20;
|
|
s_ops.phasers.picHeight = MENU_BUTTON_MED_HEIGHT;
|
|
s_ops.phasers.textX = MENU_BUTTON_TEXT_X;
|
|
s_ops.phasers.textY = MENU_BUTTON_TEXT_Y;
|
|
s_ops.phasers.textEnum = MBT_POWER_PHASERS;
|
|
s_ops.phasers.textcolor = CT_BLACK;
|
|
s_ops.phasers.textcolor2 = CT_WHITE;
|
|
s_ops.phasers.thumbName = GRAPHIC_BUTTONSLIDER;
|
|
s_ops.phasers.thumbHeight = 32;
|
|
s_ops.phasers.thumbWidth = 16;
|
|
s_ops.phasers.thumbGraphicWidth = 9;
|
|
s_ops.phasers.thumbColor = CT_DKBLUE1;
|
|
s_ops.phasers.thumbColor2 = CT_LTBLUE1;
|
|
|
|
y += 30;
|
|
s_ops.shields.generic.type = MTYPE_SLIDER;
|
|
s_ops.shields.generic.x = x + 121;
|
|
s_ops.shields.generic.y = y;
|
|
s_ops.shields.generic.flags = QMF_SMALLFONT;
|
|
s_ops.shields.generic.callback = WarpCallback;
|
|
s_ops.shields.minvalue = 5;
|
|
s_ops.shields.maxvalue = 30;
|
|
s_ops.shields.color = CT_DKPURPLE1;
|
|
s_ops.shields.color2 = CT_LTPURPLE1;
|
|
s_ops.shields.generic.name = "menu/common/monbar_2.tga";
|
|
s_ops.shields.width = 256;
|
|
s_ops.shields.height = 32;
|
|
s_ops.shields.focusWidth = 145;
|
|
s_ops.shields.focusHeight = 18;
|
|
s_ops.shields.picName = GRAPHIC_SQUARE;
|
|
s_ops.shields.picX = x;
|
|
s_ops.shields.picY = y;
|
|
s_ops.shields.picWidth = MENU_BUTTON_MED_WIDTH - 20;
|
|
s_ops.shields.picHeight = MENU_BUTTON_MED_HEIGHT;
|
|
s_ops.shields.textX = MENU_BUTTON_TEXT_X;
|
|
s_ops.shields.textY = MENU_BUTTON_TEXT_Y;
|
|
s_ops.shields.textEnum = MBT_POWER_SHIELDS;
|
|
s_ops.shields.textcolor = CT_BLACK;
|
|
s_ops.shields.textcolor2 = CT_WHITE;
|
|
s_ops.shields.thumbName = GRAPHIC_BUTTONSLIDER;
|
|
s_ops.shields.thumbHeight = 32;
|
|
s_ops.shields.thumbWidth = 16;
|
|
s_ops.shields.thumbGraphicWidth = 9;
|
|
s_ops.shields.thumbColor = CT_DKBLUE1;
|
|
s_ops.shields.thumbColor2 = CT_LTBLUE1;
|
|
|
|
|
|
x = 360;
|
|
y = 280;
|
|
s_ops.engines.generic.type = MTYPE_SLIDER;
|
|
s_ops.engines.generic.x = x + 121;
|
|
s_ops.engines.generic.y = y;
|
|
s_ops.engines.generic.flags = QMF_SMALLFONT;
|
|
s_ops.engines.generic.callback = WarpCallback;
|
|
s_ops.engines.minvalue = 5;
|
|
s_ops.engines.maxvalue = 30;
|
|
s_ops.engines.color = CT_DKPURPLE1;
|
|
s_ops.engines.color2 = CT_LTPURPLE1;
|
|
s_ops.engines.generic.name = "menu/common/monbar_2.tga";
|
|
s_ops.engines.width = 256;
|
|
s_ops.engines.height = 32;
|
|
s_ops.engines.focusWidth = 145;
|
|
s_ops.engines.focusHeight = 18;
|
|
s_ops.engines.picName = GRAPHIC_SQUARE;
|
|
s_ops.engines.picX = x;
|
|
s_ops.engines.picY = y;
|
|
s_ops.engines.picWidth = MENU_BUTTON_MED_WIDTH - 20;
|
|
s_ops.engines.picHeight = MENU_BUTTON_MED_HEIGHT;
|
|
s_ops.engines.textX = MENU_BUTTON_TEXT_X;
|
|
s_ops.engines.textY = MENU_BUTTON_TEXT_Y;
|
|
s_ops.engines.textEnum = MBT_POWER_ENGINES;
|
|
s_ops.engines.textcolor = CT_BLACK;
|
|
s_ops.engines.textcolor2 = CT_WHITE;
|
|
s_ops.engines.thumbName = GRAPHIC_BUTTONSLIDER;
|
|
s_ops.engines.thumbHeight = 32;
|
|
s_ops.engines.thumbWidth = 16;
|
|
s_ops.engines.thumbGraphicWidth = 9;
|
|
s_ops.engines.thumbColor = CT_DKBLUE1;
|
|
s_ops.engines.thumbColor2 = CT_LTBLUE1;
|
|
|
|
y += 30;
|
|
s_ops.environment.generic.type = MTYPE_SLIDER;
|
|
s_ops.environment.generic.x = x + 121;
|
|
s_ops.environment.generic.y = y;
|
|
s_ops.environment.generic.flags = QMF_SMALLFONT;
|
|
s_ops.environment.generic.callback = WarpCallback;
|
|
s_ops.environment.minvalue = 5;
|
|
s_ops.environment.maxvalue = 30;
|
|
s_ops.environment.color = CT_DKPURPLE1;
|
|
s_ops.environment.color2 = CT_LTPURPLE1;
|
|
s_ops.environment.generic.name = "menu/common/monbar_2.tga";
|
|
s_ops.environment.width = 256;
|
|
s_ops.environment.height = 32;
|
|
s_ops.environment.focusWidth = 145;
|
|
s_ops.environment.focusHeight = 18;
|
|
s_ops.environment.picName = GRAPHIC_SQUARE;
|
|
s_ops.environment.picX = x;
|
|
s_ops.environment.picY = y;
|
|
s_ops.environment.picWidth = MENU_BUTTON_MED_WIDTH - 20;
|
|
s_ops.environment.picHeight = MENU_BUTTON_MED_HEIGHT;
|
|
s_ops.environment.textX = MENU_BUTTON_TEXT_X;
|
|
s_ops.environment.textY = MENU_BUTTON_TEXT_Y;
|
|
s_ops.environment.textEnum = MBT_POWER_ENVIRONMENT;
|
|
s_ops.environment.textcolor = CT_BLACK;
|
|
s_ops.environment.textcolor2 = CT_WHITE;
|
|
s_ops.environment.thumbName = GRAPHIC_BUTTONSLIDER;
|
|
s_ops.environment.thumbHeight = 32;
|
|
s_ops.environment.thumbWidth = 16;
|
|
s_ops.environment.thumbGraphicWidth = 9;
|
|
s_ops.environment.thumbColor = CT_DKBLUE1;
|
|
s_ops.environment.thumbColor2 = CT_LTBLUE1;
|
|
|
|
y += 30;
|
|
s_ops.misc.generic.type = MTYPE_SLIDER;
|
|
s_ops.misc.generic.x = x + 121;
|
|
s_ops.misc.generic.y = y;
|
|
s_ops.misc.generic.flags = QMF_SMALLFONT;
|
|
s_ops.misc.generic.callback = WarpCallback;
|
|
s_ops.misc.minvalue = 5;
|
|
s_ops.misc.maxvalue = 30;
|
|
s_ops.misc.color = CT_DKPURPLE1;
|
|
s_ops.misc.color2 = CT_LTPURPLE1;
|
|
s_ops.misc.generic.name = "menu/common/monbar_2.tga";
|
|
s_ops.misc.width = 256;
|
|
s_ops.misc.height = 32;
|
|
s_ops.misc.focusWidth = 145;
|
|
s_ops.misc.focusHeight = 18;
|
|
s_ops.misc.picName = GRAPHIC_SQUARE;
|
|
s_ops.misc.picX = x;
|
|
s_ops.misc.picY = y;
|
|
s_ops.misc.picWidth = MENU_BUTTON_MED_WIDTH - 20;
|
|
s_ops.misc.picHeight = MENU_BUTTON_MED_HEIGHT;
|
|
s_ops.misc.textX = MENU_BUTTON_TEXT_X;
|
|
s_ops.misc.textY = MENU_BUTTON_TEXT_Y;
|
|
s_ops.misc.textEnum = MBT_POWER_MISC;
|
|
s_ops.misc.textcolor = CT_BLACK;
|
|
s_ops.misc.textcolor2 = CT_WHITE;
|
|
s_ops.misc.thumbName = GRAPHIC_BUTTONSLIDER;
|
|
s_ops.misc.thumbHeight = 32;
|
|
s_ops.misc.thumbWidth = 16;
|
|
s_ops.misc.thumbGraphicWidth = 9;
|
|
s_ops.misc.thumbColor = CT_DKBLUE1;
|
|
s_ops.misc.thumbColor2 = CT_LTBLUE1;
|
|
|
|
Menu_AddItem( &s_ops.menu, ( void * )&s_ops.mainmenu);
|
|
|
|
Menu_AddItem( &s_ops.menu, ( void * )&s_ops.mainGenerator1);
|
|
Menu_AddItem( &s_ops.menu, ( void * )&s_ops.mainGenerator2);
|
|
Menu_AddItem( &s_ops.menu, ( void * )&s_ops.mainGenerator3);
|
|
|
|
Menu_AddItem( &s_ops.menu, ( void * )&s_ops.auxGenerator1);
|
|
Menu_AddItem( &s_ops.menu, ( void * )&s_ops.auxGenerator2);
|
|
|
|
Menu_AddItem( &s_ops.menu, ( void * )&s_ops.sensors);
|
|
Menu_AddItem( &s_ops.menu, ( void * )&s_ops.phasers);
|
|
Menu_AddItem( &s_ops.menu, ( void * )&s_ops.shields);
|
|
|
|
Menu_AddItem( &s_ops.menu, ( void * )&s_ops.engines);
|
|
Menu_AddItem( &s_ops.menu, ( void * )&s_ops.environment);
|
|
Menu_AddItem( &s_ops.menu, ( void * )&s_ops.misc);
|
|
|
|
s_ops.sensors.curvalue = 8;
|
|
s_ops.phasers.curvalue = 28;
|
|
s_ops.shields.curvalue = 18;
|
|
s_ops.engines.curvalue = 15;
|
|
s_ops.environment.curvalue = 20;
|
|
s_ops.misc.curvalue = 25;
|
|
|
|
}
|
|
|
|
/*
|
|
===============
|
|
UI_OpsMenu
|
|
===============
|
|
*/
|
|
void UI_OpsMenu(void)
|
|
{
|
|
uis.menusp = 0;
|
|
|
|
ingameFlag = qtrue; // true when in game menu is in use
|
|
|
|
Mouse_Show();
|
|
|
|
UI_OpsMenu_Cache();
|
|
|
|
OpsMenu_Init();
|
|
|
|
UI_PushMenu( &s_ops.menu );
|
|
|
|
Menu_AdjustCursor( &s_ops.menu, 1 );
|
|
}
|