// 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" #include "ui_logger.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" #define NAME_YOUNG "Hendrik 'Harry Young' Gerritzen" //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" #define TITLE_LLUA "Lead Lua Coding" //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" #define TITLE_LUAENH "Lua Level Enhancement" //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; int32_t 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; int32_t startTime; //the time index the player hit t3h button, so we can calc display times int32_t beepTime; //increment this each time a new item appears, so we can play beep then. :) int32_t 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 }, //one had to go. { NAME_GSIO01, TITLE_PROG }, { NAME_YOUNG, TITLE_LLUA } } }, //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 }, { "Alexander Richardson", "Master System Display's" }, { 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 }, { NAME_YOUNG, TITLE_LUAENH } } }, //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", "" }, { NAME_YOUNG, "" }, /*{ "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 } } } }; /* ================= 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( int32_t creditsIndex ) { UI_LogFuncBegin(); int32_t timeDeviation; //used to separate the times when each credit appears int32_t 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 :( //int32_t 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; } } UI_LogFuncEnd(); } /* =============== Credits_MenuEvent =============== */ static void Credits_MenuEvent( void *ptr, int32_t event ) { UI_LogFuncBegin(); 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; } UI_LogFuncEnd(); } /* ================= C_MainMenu_Graphics ================= */ void CreditsMenu_Graphics (void) { UI_LogFuncBegin(); // 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); //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); UI_LogFuncBegin(); } static void UI_drawLogo ( void ) { UI_LogFuncBegin(); 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 ); UI_LogFuncBegin(); } /* ================= CreditsMenu_Draw ================= */ void CreditsMenu_Draw (void) { UI_LogFuncBegin(); CreditsMenu_Graphics(); Menu_Draw( &s_credits.menu ); UI_drawLogo(); UI_drawCreditNames( s_credits.creditsNum-1 ); UI_LogFuncBegin(); } /* ================= UI_Credits_Cache ================= */ void UI_CreditsMenu_Cache( void ) { UI_LogFuncBegin(); 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_LogFuncBegin(); } /* =============== UI_Credits_MenuInit =============== */ static void UI_Credits_MenuInit( void ) { UI_LogFuncBegin(); 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_LogFuncBegin(); } /* =============== UI_CreditsMenu =============== */ void UI_CreditsMenu( void ) { UI_LogFuncBegin(); UI_Credits_MenuInit(); UI_PushMenu( &s_credits.menu ); UI_LogFuncBegin(); }