rpg-x2/ui/ui_credits.c
2011-06-01 14:20:56 +02:00

1026 lines
32 KiB
C

// Copyright (C) 2006 UberGames
// RPG-X: UI Credits Menu
// Developer: -=TiM=-
// Function: To load in, cache, initialize and draw all of the elements that create the Credits menu
//
// Marcin: I've modified this stuff okay? - 03/01/2009
#include "ui_local.h"
#define MAX_DEVS 15 //Max number of developers per menu
#define MAX_MENUS 9 //Max number of menus
//Just to be on the safe side, I made these increment from 1 rather than 0
//and then compensated in the code. :)
#define ID_LEADS 1
#define ID_CODERS 2
#define ID_2D 3
#define ID_3D 4
#define ID_MAPPING 5
#define ID_SOUNDS 6
#define ID_EXTRAS 7
#define ID_BETAS 8
#define ID_THANKS 9
#define ID_MAINMENU 100
#define MAIN_LOGO_MODEL "models/mapobjects/rpg-x/logo.md3"
#define LCARS_CORNER_U "menu/common/corner_lr_7_12.tga"
#define LCARS_LOGO_BACKDROP "menu/rpgx_credits/logo_backdrop"
#define LCARS_BLIP "sound/interface/button7.wav"
//----------------------------------------------------------------
//TiM : In order to lower memory by recycling any repeated names
//Developer Names
#define NAME_PHENIX "Dominic 'Phenix' Black"
#define NAME_JAY "Jason 'J2J' Griffith"
#define NAME_SHARKY "Nazar 'Sharky' Surmai"
#define NAME_RED "Stephen 'RedTechie' Shamakian"
#define NAME_TIM "Timothy 'TiM' Oliver"
#define NAME_SCOOTER "Scooter"
#define NAME_MARCIN "Marcin 'turbomarcin' Koziuk"
#define NAME_WILL "William Riker"
#define NAME_ANT "Anthony"
#define NAME_TDP "The Dark Project"
//#define NAME_DI "Digital Intervention" //TiM: DI is the brand I put all of my high-end 3D artwork under now as standardiazation for client work. :)
#define NAME_SIMMO "Tom 'Simmo666' Simpson"
#define NAME_KURO "Kuro-chan" //Kare to kare no nihongo no na dazo lol. :P
#define NAME_JAREN "Jaren"
#define NAME_MONROE "James 'Emorog' Monroe"
#define NAME_GENE "Gene Roddenberry"
#define NAME_RAVEN "Raven Software"
#define NAME_EFPEEPS "The EF RPG Community"
#define NAME_STEVE "Steve" //Never even met this d00d lol
#define NAME_GSIO01 "Walter 'GSIO01' Hennecke"
#define NAME_JEROEN "Jeroen"
#define NAME_LAZ "Laz Rojas"
#define NAME_PARKER "Chris 'Parker' Vad"
#define NAME_HOCKING "AdmiralHocking"
//Developer Uber professional sounding titles
#define TITLE_LEADER "Project Lead"
#define TITLE_LPROG "Lead Coding"
#define TITLE_L2DAS "Lead 2-D & Audio Art"
#define TITLE_L3D "Lead 3-D Art"
#define TITLE_LMAPPER "Lead Level Design"
//Programming titles
#define TITLE_PROG "Primary Coding"
#define TITLE_GPROG "Graphics Coding"
#define TITLE_ADPROG "Additional Coding"
//#define TITLE_SCRIPTING "Player Scripting"
//2-D Titles
#define TITLE_L2D "Lead 2-D Art"
#define TITLE_LCARS "Secondary 2-D Art / LCARS Design" //Simmo special lol
#define TITLE_AD2D "Additional 2-D Art"
#define TITLE_RANKS "Menu Rank Icons Creation" // Kuro special
#define TITLE_ACAI "Additional Coding / Many ideas"
//3-D Titles... none O_O
//Mapping titles
#define TITLE_LEVELART "Level Design"
//Audio Titles
#define TITLE_LAUDIO "Audio Lead"
#define TITLE_ADAUDIO "Additional Audio"
//Additional Titles
#define TITLE_CANON "Canon Inspector" //Scooter... and only Scooter hehe
#define TITLE_DOCU "Documentation"
#define TITLE_DEUTSCH "German Translation"
#define TITLE_NEDERLANDS "Dutch Translation"
//#define TITLE_CIN "Opening Cinematic"
#define TITLE_SKINSMODELS "Providing Additional Skins and Models"
//Thank you Titles
#define TITLE_TREK "Creator of Star Trek"
#define TITLE_EF "Creators of Elite Force"
#define TITLE_TEST "For Suggestions and Additional Testing"
#define TITLE_PLAGIA "Creator of the original EF RPG Mod"
#define TITLE_RAVENCODER "EF Engine Consulting and Assistance"
//----------------------------------------------------------------
static qhandle_t cornerUpper;
static qhandle_t spaceBackdrop;
int i;
static float cm_buttons[9][2] =
{
{129,62},
{129,86},
{129,109},
{305,62},
{305,86},
{305,109},
{481,62},
{481,86},
{481,109},
};
typedef struct
{
menuframework_s menu;
menulist_s list;
menubitmap_s mainmenu;
menubitmap_s leads;
menubitmap_s coders;
menubitmap_s twodee;
menubitmap_s threedee;
menubitmap_s mapping;
menubitmap_s sounds;
menubitmap_s extras;
menubitmap_s betas;
menubitmap_s thanks;
qhandle_t logoModel;
sfxHandle_t pingSound;
int startTime; //the time index the player hit t3h button, so we can calc display times
int beepTime; //increment this each time a new item appears, so we can play beep then. :)
int creditsNum; //Index of the button we last clicked
} credits_t;
static credits_t s_credits;
typedef struct
{
char name[MAX_QPATH];
char position[MAX_QPATH];
} devInfo_t;
typedef struct
{
char mainTitle[MAX_NAME_LENGTH];
devInfo_t devInfo[MAX_DEVS];
} creditsInfo_t;
//Arrays were cool for the first vers of the credits menu,
//But structs kick the utter crap out of straight arrays :)
static creditsInfo_t creditsInfo[MAX_MENUS] =
{
//The d00ds leading this shizzie :)
{ "PROJECT LEADS",
NAME_PHENIX, TITLE_LEADER,
NAME_JAY, TITLE_LPROG,
NAME_SHARKY, TITLE_L2DAS,
NAME_TIM, TITLE_L3D,
NAME_WILL, TITLE_LMAPPER
},
//The d00ds l33tzor haxxoring this shizzie.
{ "PROGRAMMING",
NAME_JAY, TITLE_LPROG,
NAME_TIM, TITLE_PROG,
NAME_PHENIX, TITLE_PROG,
NAME_RED, TITLE_ADPROG,
NAME_MARCIN, TITLE_PROG, // Scooter was originally here...sorry... not enough space!
NAME_SCOOTER, TITLE_ADPROG,
NAME_GSIO01, TITLE_PROG,
},
//The d00ds painting and texturing this shizzie.
{ "2-D ART",
NAME_SHARKY, TITLE_L2D,
NAME_SIMMO, TITLE_LCARS,
NAME_TIM, TITLE_AD2D,
NAME_SCOOTER, TITLE_AD2D,
NAME_KURO, TITLE_RANKS,
},
//The d00d modeling this shizzie. I feel so alone rofl.
{ "3-D ART",
NAME_TIM, TITLE_L3D,
//{ "Ralph Schoberth", "Enterprise-E LightWave Mesh" }, //FixMe: Put mesh credits in a smaller section below here somehow lol
},
//The d00ds mapping this shizzie.
{ "LEVEL DESIGN",
NAME_WILL, TITLE_LMAPPER ,
NAME_ANT, TITLE_LEVELART,
//{ "Jack Amzadi", "Level Artist" }, //Seriously... did we see ANYTHING come out of these guys? O_o
//{ "Johan", "Level Artist" },
//{ "RED-RUM", "Level Artist" },
NAME_PHENIX, TITLE_LEVELART,
// NAME_SCOOTER, TITLE_LEVELART, //I think he wanted to be taken off
//NAME_WILL, TITLE_LEVELART,
},
//The d00ds... uh.. soundzor-ing this shizzie. :)
{ "AUDIO DESIGN",
NAME_SHARKY, TITLE_LAUDIO,
NAME_PHENIX, TITLE_ADAUDIO,
NAME_TIM, TITLE_ADAUDIO,
NAME_SCOOTER, TITLE_ADAUDIO,
NAME_TDP, TITLE_ADAUDIO,
},
{ "ADDITIONAL SUPPORT",
NAME_SCOOTER, TITLE_CANON,
//{ "Highlander", "Public Relations" }, //He didn't publicly relate anything in this mod, this edition. Plus I want the space at the bottom of this lol
NAME_GSIO01, TITLE_DEUTSCH,
NAME_JEROEN, TITLE_NEDERLANDS,
NAME_MARCIN, TITLE_NEDERLANDS,
NAME_LAZ, TITLE_SKINSMODELS,
//NAME_PHENIX, TITLE_DOCU,
//NAME_SHARKY, TITLE_DOCU,
//NAME_RED, TITLE_DOCU,
//NAME_DI, TITLE_CIN,
NAME_PARKER, TITLE_ACAI,
NAME_HOCKING, TITLE_AD2D
},
//The d00ds beta testing this shizzie
{ "BETA TESTERS",
"Jordan", "",
"sharpkiller", "",
"Telex Ferra", "",
"AdmiralHocking", "",
"Lee Wolfgang", "",
"Quince", "",
/*"Alex L.", "",
"Chase Benedict", "",
"Jake Conhale", "",
"James Young", "",
"Kadratis Velevere", "",
"Ricksal0224", "",
"SimmerALPHA", "",
"Slayer", "",
NAME_MARCIN, "",
"Tuskin"*/ ""
/*"Alex L.", "",
"Alex Mcpherson", "",
"AlphaOmega", "",
"Andrew", "",
"Crusader", "",
"Diaz", "",
"Fred", "",
"Jake Conhale", "",
"Martin", "",
"Mr Fibbles", "",
"Myntz", "",
"Nuttycomputer", "",
"Rigs", "",*/
//"Pending...", ""
},
//Totally awesome d00ds whose input contributed greatly to this shizzie. :)
{ "SPECIAL THANKS",
NAME_GENE, TITLE_TREK,
NAME_RAVEN, TITLE_EF,
NAME_EFPEEPS, TITLE_TEST,
NAME_STEVE, TITLE_PLAGIA,
NAME_MONROE, TITLE_RAVENCODER
}
};
/*char *ra_leads[11] =
{
"PROJECT LEADS",
"Dominic 'Phenix' Black",
"Project Leader",
"Jason 'J2J' Griffith",
"Lead Programmer",
"Nazar 'Sharky' Surmai",
"Lead 2-D & Audio Artist",
"Timothy 'TiM' Oliver",
"Lead 3-D Artist",
"Sniper",
"Lead Level Designer"
};
char *ra_coders[11] =
{
"PROGRAMMING",
"Jason 'J2J' Griffith",
"Lead Programmer",
"Dominic 'Phenix' Black",
"Primary Coding",
"Stephen 'RedTechie' Shamakian",
"Primary Coding",
"Timothy 'TiM' Oliver",
"Graphics Coding",
"Scooter",
"Additional Coding"
};
char *ra_2D[11] =
{
"2-D ART",
"Nazar 'Sharky' Surmai",
"Lead 2-D Artist",
"Tom 'Simmo666' Simpson",
"Secondary 2-D Artist / LCARS Design Guru",
"Dominic 'Phenix' Black",
"Additional 2-D Art",
"Timothy 'TiM' Oliver",
"Additional 2-D Art",
"Steven Marriott",
"Rank Icons Creator"
};
char *ra_3D[7] =
{
"3-D ART",
"Timothy 'TiM' Oliver",
"Lead 3-D Artist",
"Ralph Schoberth",
"Enterprise-E LightWave Mesh",
"Timothy 'TiM' Oliver",
"Opening Cinematic"
};
char *ra_mappers[17] = //urk! how the hell is this going to fit?!?!? O_o
{
"LEVEL DESIGN",
"Sniper",
"Lead Level Artist",
"Anthony",
"Level Artist",
"Jack Amzadi",
"Level Artist",
"Johan",
"Level Artist",
"RED-RUM",
"Level Artist",
"Phenix",
"Level Artist",
"Scooter",
"Level Artist",
"William Riker",
"Level Artist",
};
char *ra_sounds[11] =
{
"AUDIO DESIGN",
"Nazar 'Sharky' Surmai",
"Audio Lead",
"Jaren",
"Additional Audio",
"Dominic 'Phenix' Black",
"Additional Audio",
"Timothy 'TiM' Oliver",
"Additional Audio",
"Scooter",
"Additional Audio"
};
char *ra_adds[11] =
{
"ADDITIONAL SUPPORT",
"Scooter",
"Canon Inspector",
"Highlander",
"Public Relations",
"Dominic 'Phenix' Black",
"Mod Documentation",
"Nazar 'Sharky' Surmai",
"Mod Documentation",
"Stephen 'RedTechie' Shamakian",
"Mod Documentation"
};
char *ra_betas[14] =
{
"BETA TESTERS",
"Alex L.",
"Alex Mcpherson",
"AlphaOmega",
"Andrew",
"Crusader",
"Diaz",
"Fred",
"Jake Conhale",
"Martin",
"Mr Fibbles",
"Myntz",
"Nuttycomputer",
"Rigs",
};
char *ra_thanks[11] =
{
"SPECIAL THANKS",
"Gene Roddenberry",
"Creator of Star Trek",
"Raven Software",
"Creators of Elite Force",
"The EF RPG Community",
"For Suggestions and Additional Testing",
"Steve",
"Creator of the original EF RPG Mod",
"James Monroe",
"Our friend from RavenSoft"
};*/
/*
=================
UI_drawCreditNames
TiM: From the various arrays above, this function systematically
draws each value from the array in a specific order whilst playing a sound
for each set
=================
*/
void UI_drawCreditNames( int creditsIndex )
{
int timeDeviation; //used to separate the times when each credit appears
int yDeviation; //used to place each separate credit down the y-axis each loop
//w00t! I can count the length of arrays dynamically now!!!!!!! ^_^!!!!
//*SOB* Didn't work :(
//int arrayLen = sizeof ( creditSec ) / sizeof ( creditSec[0] );
//trap_Print ( va( "arrayLen = %i\n", arrayLen ) );
timeDeviation = 200;
yDeviation = 40;
{
if (uis.realtime >= s_credits.startTime + timeDeviation ) { //After .2 seconds, the title will appear
UI_DrawProportionalString( 512, 184, creditsInfo[creditsIndex].mainTitle,UI_CENTER|UI_BIGFONT, colorTable[CT_LTGOLD1]);
/*if(uis.realtime > s_credits.startTime + timeDeviation && uis.realtime < s_credits.startTime + timeDeviation + 20){
trap_S_StartLocalSound(s_credits.pingSound, CHAN_LOCAL ); //play the sound
}*/
if ( s_credits.beepTime == 0 ) {
trap_S_StartLocalSound(s_credits.pingSound, CHAN_LOCAL );
s_credits.beepTime++;
}
timeDeviation += 200;
}
for( i = 0; i < MAX_DEVS; i++ )
{
if ( !creditsInfo[creditsIndex].devInfo[i].name[0] ) {
break;
}
if (uis.realtime > s_credits.startTime + timeDeviation) {
//For entries that have positions (ie, not beta testers )
if ( i <= 9 && creditsInfo[creditsIndex].devInfo[i].position[0] ) {
if(creditsIndex == 1 || creditsIndex == 6) { // make all programmers|additional people fit in
UI_DrawProportionalString( 420, 169 + yDeviation, creditsInfo[creditsIndex].devInfo[i].name,UI_LEFT|UI_SMALLFONT, colorTable[CT_DKPURPLE2]);
UI_DrawProportionalString( 420, 187 + yDeviation, creditsInfo[creditsIndex].devInfo[i].position,UI_LEFT|UI_TINYFONT, colorTable[CT_DKPURPLE2]); //18 varaition
} else {
UI_DrawProportionalString( 420, 180 + yDeviation, creditsInfo[creditsIndex].devInfo[i].name,UI_LEFT|UI_SMALLFONT, colorTable[CT_DKPURPLE2]);
UI_DrawProportionalString( 420, 198 + yDeviation, creditsInfo[creditsIndex].devInfo[i].position,UI_LEFT|UI_TINYFONT, colorTable[CT_DKPURPLE2]); //18 varaition
}
//Play a beep effect
if ( i == s_credits.beepTime-1 ) {
trap_S_StartLocalSound(s_credits.pingSound, CHAN_LOCAL ); //play the beep-in effect
s_credits.beepTime++;
}
}
else //Beta Testers
{
UI_DrawProportionalString( 420, 180 + yDeviation, creditsInfo[creditsIndex].devInfo[i].name,UI_LEFT|UI_SMALLFONT, colorTable[CT_DKPURPLE2]);
//UI_DrawProportionalString( 512, 180 + yDeviation, creditsInfo[creditsIndex].devInfo[i+1].name,UI_LEFT|UI_SMALLFONT, colorTable[CT_DKPURPLE2]);
//i++;
//Play a beep effect
if ( i == s_credits.beepTime -1 ) {
trap_S_StartLocalSound(s_credits.pingSound, CHAN_LOCAL ); //play the beep-in effect
s_credits.beepTime++;
}
}
if ( i >= 3) { //So it appears below lead d00d
if ( creditsInfo[creditsIndex].devInfo[i+8].name[0] && creditsInfo[creditsIndex].devInfo[i+8].position[0] ) { /*( arrayLen > 11 ) && ( ( i + 10 ) <= arrayLen )*/
UI_DrawProportionalString( 524, 180 + yDeviation, creditsInfo[creditsIndex].devInfo[i+8].name,UI_LEFT|UI_SMALLFONT, colorTable[CT_DKPURPLE2]);
UI_DrawProportionalString( 524, 198 + yDeviation, creditsInfo[creditsIndex].devInfo[i+8].position,UI_LEFT|UI_TINYFONT, colorTable[CT_DKPURPLE2]); //18 varaition
}
}
}
//Increment the data for the next iteration
timeDeviation += 200; //each loop, delay the display time by .2 seconds (hence the text doesn't all appear at once)
if ( creditsInfo[creditsIndex].devInfo[i+1].position[0] )
if(creditsIndex == 1 || creditsIndex == 6) // make all programmers|additional people fit in
yDeviation += 30;
else
yDeviation += 40; //and don't all display at the same y co-ord
else
yDeviation += 18;
}
}
}
/*
===============
Credits_MenuEvent
===============
*/
static void Credits_MenuEvent( void *ptr, int event )
{
if( event != QM_ACTIVATED )
{
return;
}
s_credits.startTime = uis.realtime;
s_credits.beepTime = 0;
switch ( ((menucommon_s*)ptr)->id )
{
case ID_MAINMENU:
UI_PopMenu();
break;
case ID_LEADS:
case ID_CODERS:
case ID_2D:
case ID_3D:
case ID_MAPPING:
case ID_SOUNDS:
case ID_EXTRAS:
case ID_BETAS:
case ID_THANKS:
s_credits.creditsNum = ((menucommon_s*)ptr)->id;
break;
}
}
/*
=================
C_MainMenu_Graphics
=================
*/
void CreditsMenu_Graphics (void)
{
// Draw the basic screen layout
UI_MenuFrame(&s_credits.menu);
UI_DrawProportionalString( 74, 66, "69",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 84, "604369",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 188, "71",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 206, "6154",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 395, "2004",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
trap_R_SetColor( colorTable[CT_LTBROWN1]);
UI_DrawHandlePic(30,203, 47, 123, uis.whiteShader); // Top left column square on bottom 3rd
UI_DrawHandlePic(30,328, 47, 61, uis.whiteShader); // Bottom left column square on bottom 3rd
UI_DrawProportionalString( 74, 206, "38",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
UI_DrawProportionalString( 74, 332, "28",UI_RIGHT|UI_TINYFONT, colorTable[CT_BLACK]);
/*
Courtesy of EF SP's Credits :P
*/
trap_R_SetColor( colorTable[CT_WHITE]);
UI_DrawHandlePic(85, 169, 306, 256, spaceBackdrop);
/*
// Grid over top of space map
trap_R_SetColor( colorTable[CT_LTBLUE1]);
UI_DrawHandlePic( 89, 234, 296, 1, uis.whiteShader);
UI_DrawHandlePic( 89, 296, 296, 1, uis.whiteShader);
UI_DrawHandlePic( 89, 364, 296, 1, uis.whiteShader);
UI_DrawHandlePic( 116, 169, 1, 256, uis.whiteShader);
UI_DrawHandlePic( 234, 169, 1, 256, uis.whiteShader);
UI_DrawHandlePic( 354, 169, 1, 256, uis.whiteShader);
*/
//Left Bracket around galaxy picture
trap_R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(85,169, 16, 16, uis.graphicBracket1CornerLU);
UI_DrawHandlePic(85,185, 8, 87, uis.whiteShader);
trap_R_SetColor( colorTable[CT_DKBROWN1]);
UI_DrawHandlePic(85,275, 8, 10, uis.whiteShader);
trap_R_SetColor( colorTable[CT_LTORANGE]);
UI_DrawHandlePic(87,288, 6, 21, uis.whiteShader);
trap_R_SetColor( colorTable[CT_DKBROWN1]);
UI_DrawHandlePic(85,312, 8, 10, uis.whiteShader);
trap_R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(85,325, 8, 87, uis.whiteShader);
UI_DrawHandlePic(85,412, 16, -16, uis.graphicBracket1CornerLU); //LD
//Right Bracket around galaxy picture
trap_R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(375,169, -16, 16, uis.graphicBracket1CornerLU); //RU
UI_DrawHandlePic(383,185, 8, 87, uis.whiteShader);
trap_R_SetColor( colorTable[CT_DKBROWN1]);
UI_DrawHandlePic(383,275, 8, 10, uis.whiteShader);
trap_R_SetColor( colorTable[CT_LTORANGE]);
UI_DrawHandlePic(383,288, 6, 21, uis.whiteShader);
trap_R_SetColor( colorTable[CT_DKBROWN1]);
UI_DrawHandlePic(383,312, 8, 10, uis.whiteShader);
trap_R_SetColor( colorTable[CT_DKPURPLE2]);
UI_DrawHandlePic(383,325, 8, 87, uis.whiteShader);
UI_DrawHandlePic(375,412, -16, -16, uis.graphicBracket1CornerLU); //RD
// Description frame
trap_R_SetColor( colorTable[CT_LTBLUE1]);
UI_DrawHandlePic( 397, 163, -16, -16, cornerUpper); // Top corner
UI_DrawHandlePic( 397, 418, -16, 16, cornerUpper);// Bottom Left Corner
UI_DrawHandlePic(398, 182, 12, 233, uis.whiteShader); // Block between top & bottom corner
UI_DrawHandlePic( 412, 169, 10, 7, uis.whiteShader); // Top line
UI_DrawHandlePic( 425, 169, 187, 7, uis.whiteShader); // Top line
UI_DrawHandlePic( 412, 421, 10, 7, uis.whiteShader); // Top line
UI_DrawHandlePic( 425, 421, 187, 7, uis.whiteShader); // Bottom line
//end
//UI_Draw3DModel( 230, 290, 245, 245, s_credits.logoModel, m_origin, m_angles, m_mid );
trap_R_SetColor( colorTable[s_credits.leads.color]);
UI_DrawHandlePic(s_credits.leads.generic.x - 14, s_credits.leads.generic.y,MENU_BUTTON_MED_HEIGHT, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd);
UI_DrawHandlePic(s_credits.coders.generic.x - 14, s_credits.coders.generic.y,MENU_BUTTON_MED_HEIGHT, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd);
UI_DrawHandlePic(s_credits.twodee.generic.x - 14, s_credits.twodee.generic.y,MENU_BUTTON_MED_HEIGHT, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd);
UI_DrawHandlePic(s_credits.threedee.generic.x - 14, s_credits.threedee.generic.y,MENU_BUTTON_MED_HEIGHT, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd);
UI_DrawHandlePic(s_credits.mapping.generic.x - 14, s_credits.mapping.generic.y,MENU_BUTTON_MED_HEIGHT, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd);
UI_DrawHandlePic(s_credits.sounds.generic.x - 14, s_credits.sounds.generic.y,MENU_BUTTON_MED_HEIGHT, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd);
UI_DrawHandlePic(s_credits.extras.generic.x - 14, s_credits.extras.generic.y,MENU_BUTTON_MED_HEIGHT, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd);
UI_DrawHandlePic(s_credits.betas.generic.x - 14, s_credits.betas.generic.y,MENU_BUTTON_MED_HEIGHT, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd);
UI_DrawHandlePic(s_credits.thanks.generic.x - 14, s_credits.thanks.generic.y,MENU_BUTTON_MED_HEIGHT, MENU_BUTTON_MED_HEIGHT, uis.graphicButtonLeftEnd);
}
static void UI_drawLogo ( void )
{
refdef_t refdef;
refEntity_t ent;
vec3_t origin = {0.0, 0.0, 0.0};
vec3_t angles;
float adjust;
float x, y, w, h;
//vec4_t color = {0.5, 0, 0, 1};
// setup the refdef
memset( &refdef, 0, sizeof( refdef ) );
refdef.rdflags = RDF_NOWORLDMODEL;
AxisClear( refdef.viewaxis );
x = 0;
y = 0;
w = 400; //640 //TiM: I don't know exactly, but w and h seem to control the size of the region the model will be drawn in
h = 480; //120
UI_AdjustFrom640( &x, &y, &w, &h );
refdef.x = x;
refdef.y = y;
refdef.width = w;
refdef.height = h;
adjust = 0; // JDC: Kenneth asked me to stop this 1.0 * sin( (float)uis.realtime / 1000 );
refdef.fov_x = 17 + adjust; //60 //TiM: Controls width scale
refdef.fov_y = 19.6875 + adjust; //19.6875
refdef.time = uis.realtime;
origin[0] = 800; //300 //TiM: Controls Overall Size
origin[1] = -22; //TiM: Controls Horizontal Position
origin[2] = -70; //-32 //TiM: Controls vertical Position
trap_R_ClearScene();
// add the model
memset( &ent, 0, sizeof(ent) );
adjust = 20.0/300.0 * uis.realtime; //5.0 * sin( (float)uis.realtime / 5000 );
VectorSet( angles, 0, 180 + adjust, 0 );
AnglesToAxis( angles, ent.axis );
ent.hModel = s_credits.logoModel;
if (trap_Cvar_VariableValue("r_dynamiclight") ) {
ent.renderfx = RF_LOWLIGHT|RF_NOSHADOW; // keep it dark, and no stencil shadows //RF_LOWBRIGHT
} else {
ent.renderfx = RF_NOSHADOW; // no stencil shadows
}
VectorCopy( origin, ent.origin );
VectorCopy( origin, ent.lightingOrigin );
VectorCopy( ent.origin, ent.oldorigin );
origin[0] -= 50; // + = behind, - = in front
origin[1] += 50; // + = left, - = right
origin[2] += 50; // + = above, - = below
trap_R_AddLightToScene( origin, 150, 1.0, 1.0, 1.0 );
trap_R_AddRefEntityToScene( &ent );
trap_R_RenderScene( &refdef );
}
/*
=================
CreditsMenu_Draw
=================
*/
void CreditsMenu_Draw (void)
{
CreditsMenu_Graphics();
Menu_Draw( &s_credits.menu );
UI_drawLogo();
UI_drawCreditNames( s_credits.creditsNum-1 );
/*switch(s_credits.creditsNum)
{
case 0:
UI_drawCreditNames( ra_leads, 11 );
break;
case 1:
UI_drawCreditNames( ra_coders, 11 );
break;
case 2:
UI_drawCreditNames( ra_2D, 11 );
break;
case 3:
UI_drawCreditNames( ra_3D, 7 );
break;
case 4:
UI_drawCreditNames( ra_mappers, 17 );
break;
case 5:
UI_drawCreditNames( ra_sounds, 11 );
break;
case 6:
UI_drawCreditNames( ra_adds, 11 );
break;
case 7:
UI_drawCreditNames( ra_betas, 14 );
break;
case 8:
UI_drawCreditNames( ra_thanks, 11 );
break;
}*/
}
/*
=================
UI_Credits_Cache
=================
*/
void UI_CreditsMenu_Cache( void )
{
s_credits.logoModel = trap_R_RegisterModel( MAIN_LOGO_MODEL );
s_credits.pingSound = trap_S_RegisterSound( LCARS_BLIP );
cornerUpper = trap_R_RegisterShaderNoMip( LCARS_CORNER_U );
spaceBackdrop = trap_R_RegisterShaderNoMip( LCARS_LOGO_BACKDROP );
}
/*
===============
UI_Credits_MenuInit
===============
*/
static void UI_Credits_MenuInit( void )
{
memset( &s_credits, 0 ,sizeof(credits_t) );
s_credits.creditsNum = ID_LEADS;
s_credits.beepTime = 0;
// Menu Data
s_credits.menu.wrapAround = qtrue;
s_credits.menu.fullscreen = qtrue;
s_credits.menu.draw = CreditsMenu_Draw;
s_credits.menu.descX = MENU_DESC_X;
s_credits.menu.descY = MENU_DESC_Y;
s_credits.menu.titleX = MENU_TITLE_X;
s_credits.menu.titleY = MENU_TITLE_Y;
s_credits.menu.titleI = MNT_CREDITS_TITLE;
s_credits.menu.footNoteEnum = MNT_CREDITS;
UI_CreditsMenu_Cache();
// Button Data
s_credits.mainmenu.generic.type = MTYPE_BITMAP;
s_credits.mainmenu.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_credits.mainmenu.generic.x = 482;
s_credits.mainmenu.generic.y = 136;
s_credits.mainmenu.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_credits.mainmenu.generic.id = ID_MAINMENU;
s_credits.mainmenu.generic.callback = Credits_MenuEvent;
s_credits.mainmenu.width = MENU_BUTTON_MED_WIDTH;
s_credits.mainmenu.height = MENU_BUTTON_MED_HEIGHT;
s_credits.mainmenu.color = CT_DKPURPLE1;
s_credits.mainmenu.color2 = CT_LTPURPLE1;
s_credits.mainmenu.textX = MENU_BUTTON_TEXT_X;
s_credits.mainmenu.textY = MENU_BUTTON_TEXT_Y;
s_credits.mainmenu.textEnum = MBT_MAINMENU;
s_credits.mainmenu.textcolor = CT_BLACK;
s_credits.mainmenu.textcolor2 = CT_WHITE;
s_credits.leads.generic.type = MTYPE_BITMAP;
s_credits.leads.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_credits.leads.generic.x = cm_buttons[0][0];
s_credits.leads.generic.y = cm_buttons[0][1];
s_credits.leads.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_credits.leads.generic.id = ID_LEADS;
s_credits.leads.generic.callback = Credits_MenuEvent;
s_credits.leads.width = MENU_BUTTON_MED_WIDTH;
s_credits.leads.height = MENU_BUTTON_MED_HEIGHT;
s_credits.leads.color = CT_DKPURPLE1;
s_credits.leads.color2 = CT_LTPURPLE1;
s_credits.leads.textX = MENU_BUTTON_TEXT_X;
s_credits.leads.textY = MENU_BUTTON_TEXT_Y;
s_credits.leads.textEnum = MBT_LEADS;
s_credits.leads.textcolor = CT_BLACK;
s_credits.leads.textcolor2 = CT_WHITE;
s_credits.coders.generic.type = MTYPE_BITMAP;
s_credits.coders.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_credits.coders.generic.x = cm_buttons[1][0];
s_credits.coders.generic.y = cm_buttons[1][1];
s_credits.coders.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_credits.coders.generic.id = ID_CODERS;
s_credits.coders.generic.callback = Credits_MenuEvent;
s_credits.coders.width = MENU_BUTTON_MED_WIDTH;
s_credits.coders.height = MENU_BUTTON_MED_HEIGHT;
s_credits.coders.color = CT_DKPURPLE1;
s_credits.coders.color2 = CT_LTPURPLE1;
s_credits.coders.textX = MENU_BUTTON_TEXT_X;
s_credits.coders.textY = MENU_BUTTON_TEXT_Y;
s_credits.coders.textEnum = MBT_CODERS;
s_credits.coders.textcolor = CT_BLACK;
s_credits.coders.textcolor2 = CT_WHITE;
s_credits.twodee.generic.type = MTYPE_BITMAP;
s_credits.twodee.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_credits.twodee.generic.x = cm_buttons[2][0];
s_credits.twodee.generic.y = cm_buttons[2][1];
s_credits.twodee.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_credits.twodee.generic.id = ID_2D;
s_credits.twodee.generic.callback = Credits_MenuEvent;
s_credits.twodee.width = MENU_BUTTON_MED_WIDTH;
s_credits.twodee.height = MENU_BUTTON_MED_HEIGHT;
s_credits.twodee.color = CT_DKPURPLE1;
s_credits.twodee.color2 = CT_LTPURPLE1;
s_credits.twodee.textX = MENU_BUTTON_TEXT_X;
s_credits.twodee.textY = MENU_BUTTON_TEXT_Y;
s_credits.twodee.textEnum = MBT_2D;
s_credits.twodee.textcolor = CT_BLACK;
s_credits.twodee.textcolor2 = CT_WHITE;
s_credits.threedee.generic.type = MTYPE_BITMAP;
s_credits.threedee.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_credits.threedee.generic.x = cm_buttons[3][0];
s_credits.threedee.generic.y = cm_buttons[3][1];
s_credits.threedee.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_credits.threedee.generic.id = ID_3D;
s_credits.threedee.generic.callback = Credits_MenuEvent;
s_credits.threedee.width = MENU_BUTTON_MED_WIDTH;
s_credits.threedee.height = MENU_BUTTON_MED_HEIGHT;
s_credits.threedee.color = CT_DKPURPLE1;
s_credits.threedee.color2 = CT_LTPURPLE1;
s_credits.threedee.textX = MENU_BUTTON_TEXT_X;
s_credits.threedee.textY = MENU_BUTTON_TEXT_Y;
s_credits.threedee.textEnum = MBT_3D;
s_credits.threedee.textcolor = CT_BLACK;
s_credits.threedee.textcolor2 = CT_WHITE;
s_credits.mapping.generic.type = MTYPE_BITMAP;
s_credits.mapping.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_credits.mapping.generic.x = cm_buttons[4][0];
s_credits.mapping.generic.y = cm_buttons[4][1];
s_credits.mapping.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_credits.mapping.generic.id = ID_MAPPING;
s_credits.mapping.generic.callback = Credits_MenuEvent;
s_credits.mapping.width = MENU_BUTTON_MED_WIDTH;
s_credits.mapping.height = MENU_BUTTON_MED_HEIGHT;
s_credits.mapping.color = CT_DKPURPLE1;
s_credits.mapping.color2 = CT_LTPURPLE1;
s_credits.mapping.textX = MENU_BUTTON_TEXT_X;
s_credits.mapping.textY = MENU_BUTTON_TEXT_Y;
s_credits.mapping.textEnum = MBT_MAPPING;
s_credits.mapping.textcolor = CT_BLACK;
s_credits.mapping.textcolor2 = CT_WHITE;
s_credits.sounds.generic.type = MTYPE_BITMAP;
s_credits.sounds.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_credits.sounds.generic.x = cm_buttons[5][0];
s_credits.sounds.generic.y = cm_buttons[5][1];
s_credits.sounds.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_credits.sounds.generic.id = ID_SOUNDS;
s_credits.sounds.generic.callback = Credits_MenuEvent;
s_credits.sounds.width = MENU_BUTTON_MED_WIDTH;
s_credits.sounds.height = MENU_BUTTON_MED_HEIGHT;
s_credits.sounds.color = CT_DKPURPLE1;
s_credits.sounds.color2 = CT_LTPURPLE1;
s_credits.sounds.textX = MENU_BUTTON_TEXT_X;
s_credits.sounds.textY = MENU_BUTTON_TEXT_Y;
s_credits.sounds.textEnum = MBT_SOUNDS;
s_credits.sounds.textcolor = CT_BLACK;
s_credits.sounds.textcolor2 = CT_WHITE;
s_credits.extras.generic.type = MTYPE_BITMAP;
s_credits.extras.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_credits.extras.generic.x = cm_buttons[6][0];
s_credits.extras.generic.y = cm_buttons[6][1];
s_credits.extras.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_credits.extras.generic.id = ID_EXTRAS;
s_credits.extras.generic.callback = Credits_MenuEvent;
s_credits.extras.width = MENU_BUTTON_MED_WIDTH;
s_credits.extras.height = MENU_BUTTON_MED_HEIGHT;
s_credits.extras.color = CT_DKPURPLE1;
s_credits.extras.color2 = CT_LTPURPLE1;
s_credits.extras.textX = MENU_BUTTON_TEXT_X;
s_credits.extras.textY = MENU_BUTTON_TEXT_Y;
s_credits.extras.textEnum = MBT_EXTRAS;
s_credits.extras.textcolor = CT_BLACK;
s_credits.extras.textcolor2 = CT_WHITE;
s_credits.betas.generic.type = MTYPE_BITMAP;
s_credits.betas.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_credits.betas.generic.x = cm_buttons[7][0];
s_credits.betas.generic.y = cm_buttons[7][1];
s_credits.betas.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_credits.betas.generic.id = ID_BETAS;
s_credits.betas.generic.callback = Credits_MenuEvent;
s_credits.betas.width = MENU_BUTTON_MED_WIDTH;
s_credits.betas.height = MENU_BUTTON_MED_HEIGHT;
s_credits.betas.color = CT_DKPURPLE1;
s_credits.betas.color2 = CT_LTPURPLE1;
s_credits.betas.textX = MENU_BUTTON_TEXT_X;
s_credits.betas.textY = MENU_BUTTON_TEXT_Y;
s_credits.betas.textEnum = MBT_BETAS;
s_credits.betas.textcolor = CT_BLACK;
s_credits.betas.textcolor2 = CT_WHITE;
s_credits.thanks.generic.type = MTYPE_BITMAP;
s_credits.thanks.generic.flags = QMF_HIGHLIGHT_IF_FOCUS;
s_credits.thanks.generic.x = cm_buttons[8][0];
s_credits.thanks.generic.y = cm_buttons[8][1];
s_credits.thanks.generic.name = BUTTON_GRAPHIC_LONGRIGHT;
s_credits.thanks.generic.id = ID_THANKS;
s_credits.thanks.generic.callback = Credits_MenuEvent;
s_credits.thanks.width = MENU_BUTTON_MED_WIDTH;
s_credits.thanks.height = MENU_BUTTON_MED_HEIGHT;
s_credits.thanks.color = CT_DKPURPLE1;
s_credits.thanks.color2 = CT_LTPURPLE1;
s_credits.thanks.textX = MENU_BUTTON_TEXT_X;
s_credits.thanks.textY = MENU_BUTTON_TEXT_Y;
s_credits.thanks.textEnum = MBT_THANKS;
s_credits.thanks.textcolor = CT_BLACK;
s_credits.thanks.textcolor2 = CT_WHITE;
Menu_AddItem( &s_credits.menu, &s_credits.mainmenu );
Menu_AddItem( &s_credits.menu, &s_credits.leads );
Menu_AddItem( &s_credits.menu, &s_credits.coders );
Menu_AddItem( &s_credits.menu, &s_credits.twodee );
Menu_AddItem( &s_credits.menu, &s_credits.threedee );
Menu_AddItem( &s_credits.menu, &s_credits.mapping );
Menu_AddItem( &s_credits.menu, &s_credits.sounds );
Menu_AddItem( &s_credits.menu, &s_credits.extras );
Menu_AddItem( &s_credits.menu, &s_credits.betas );
Menu_AddItem( &s_credits.menu, &s_credits.thanks );
}
/*
===============
UI_CreditsMenu
===============
*/
void UI_CreditsMenu( void )
{
UI_Credits_MenuInit();
UI_PushMenu( &s_credits.menu );
}