Quake-III-Arena

Quake III Arena GPL Source Release
Log | Files | Refs

ui_cinematics.c (12605B)


      1 /*
      2 ===========================================================================
      3 Copyright (C) 1999-2005 Id Software, Inc.
      4 
      5 This file is part of Quake III Arena source code.
      6 
      7 Quake III Arena source code is free software; you can redistribute it
      8 and/or modify it under the terms of the GNU General Public License as
      9 published by the Free Software Foundation; either version 2 of the License,
     10 or (at your option) any later version.
     11 
     12 Quake III Arena source code is distributed in the hope that it will be
     13 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 GNU General Public License for more details.
     16 
     17 You should have received a copy of the GNU General Public License
     18 along with Foobar; if not, write to the Free Software
     19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
     20 ===========================================================================
     21 */
     22 //
     23 #include "ui_local.h"
     24 
     25 
     26 #define ART_BACK0		"menu/art/back_0"
     27 #define ART_BACK1		"menu/art/back_1"	
     28 #define ART_FRAMEL		"menu/art/frame2_l"
     29 #define ART_FRAMER		"menu/art/frame1_r"
     30 
     31 #define VERTICAL_SPACING	30
     32 
     33 #define ID_BACK			10
     34 #define ID_CIN_IDLOGO	11
     35 #define ID_CIN_INTRO	12
     36 #define ID_CIN_TIER1	13
     37 #define ID_CIN_TIER2	14
     38 #define ID_CIN_TIER3	15
     39 #define ID_CIN_TIER4	16
     40 #define ID_CIN_TIER5	17
     41 #define ID_CIN_TIER6	18
     42 #define ID_CIN_TIER7	19
     43 #define ID_CIN_END		20
     44 
     45 
     46 typedef struct {
     47 	menuframework_s	menu;
     48 	menutext_s		banner;
     49 	menubitmap_s	framel;
     50 	menubitmap_s	framer;
     51 	menutext_s		cin_idlogo;
     52 	menutext_s		cin_intro;
     53 	menutext_s		cin_tier1;
     54 	menutext_s		cin_tier2;
     55 	menutext_s		cin_tier3;
     56 	menutext_s		cin_tier4;
     57 	menutext_s		cin_tier5;
     58 	menutext_s		cin_tier6;
     59 	menutext_s		cin_tier7;
     60 	menutext_s		cin_end;
     61 	menubitmap_s	back;
     62 } cinematicsMenuInfo_t;
     63 
     64 static cinematicsMenuInfo_t	cinematicsMenuInfo;
     65 
     66 static char *cinematics[] = {
     67 	"idlogo",
     68 	"intro",
     69 	"tier1",
     70 	"tier2",
     71 	"tier3",
     72 	"tier4",
     73 	"tier5",
     74 	"tier6",
     75 	"tier7",
     76 	"end"
     77 };
     78 
     79 /*
     80 ===============
     81 UI_CinematicsMenu_BackEvent
     82 ===============
     83 */
     84 static void UI_CinematicsMenu_BackEvent( void *ptr, int event ) {
     85 	if( event != QM_ACTIVATED ) {
     86 		return;
     87 	}
     88 	UI_PopMenu();
     89 }
     90 
     91 
     92 /*
     93 ===============
     94 UI_CinematicsMenu_Event
     95 ===============
     96 */
     97 static void UI_CinematicsMenu_Event( void *ptr, int event ) {
     98 	int		n;
     99 
    100 	if (event != QM_ACTIVATED)
    101 		return;
    102 
    103 	n = ((menucommon_s*)ptr)->id - ID_CIN_IDLOGO;
    104 	trap_Cvar_Set( "nextmap", va( "ui_cinematics %i", n ) );
    105 	if( uis.demoversion && ((menucommon_s*)ptr)->id == ID_CIN_END ) {
    106 		trap_Cmd_ExecuteText( EXEC_APPEND, "disconnect; cinematic demoEnd.RoQ 1\n" );
    107 	}
    108 	else {
    109 		trap_Cmd_ExecuteText( EXEC_APPEND, va( "disconnect; cinematic %s.RoQ\n", cinematics[n] ) );
    110 	}
    111 }
    112 
    113 
    114 /*
    115 ===============
    116 UI_CinematicsMenu_Init
    117 ===============
    118 */
    119 static void UI_CinematicsMenu_Init( void ) {
    120 	int		y;
    121 
    122 	UI_CinematicsMenu_Cache();
    123 
    124 	memset( &cinematicsMenuInfo, 0, sizeof(cinematicsMenuInfo) );
    125 	cinematicsMenuInfo.menu.fullscreen = qtrue;
    126 
    127 	cinematicsMenuInfo.banner.generic.type		= MTYPE_BTEXT;
    128 	cinematicsMenuInfo.banner.generic.x			= 320;
    129 	cinematicsMenuInfo.banner.generic.y			= 16;
    130 	cinematicsMenuInfo.banner.string			= "CINEMATICS";
    131 	cinematicsMenuInfo.banner.color				= color_white;
    132 	cinematicsMenuInfo.banner.style				= UI_CENTER;
    133 
    134 	cinematicsMenuInfo.framel.generic.type		= MTYPE_BITMAP;
    135 	cinematicsMenuInfo.framel.generic.name		= ART_FRAMEL;
    136 	cinematicsMenuInfo.framel.generic.flags		= QMF_INACTIVE;
    137 	cinematicsMenuInfo.framel.generic.x			= 0;  
    138 	cinematicsMenuInfo.framel.generic.y			= 78;
    139 	cinematicsMenuInfo.framel.width  			= 256;
    140 	cinematicsMenuInfo.framel.height  			= 329;
    141 
    142 	cinematicsMenuInfo.framer.generic.type		= MTYPE_BITMAP;
    143 	cinematicsMenuInfo.framer.generic.name		= ART_FRAMER;
    144 	cinematicsMenuInfo.framer.generic.flags		= QMF_INACTIVE;
    145 	cinematicsMenuInfo.framer.generic.x			= 376;
    146 	cinematicsMenuInfo.framer.generic.y			= 76;
    147 	cinematicsMenuInfo.framer.width  			= 256;
    148 	cinematicsMenuInfo.framer.height  			= 334;
    149 
    150 	y = 100;
    151 	cinematicsMenuInfo.cin_idlogo.generic.type		= MTYPE_PTEXT;
    152 	cinematicsMenuInfo.cin_idlogo.generic.flags		= QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
    153 	cinematicsMenuInfo.cin_idlogo.generic.x			= 320;
    154 	cinematicsMenuInfo.cin_idlogo.generic.y			= y;
    155 	cinematicsMenuInfo.cin_idlogo.generic.id		= ID_CIN_IDLOGO;
    156 	cinematicsMenuInfo.cin_idlogo.generic.callback	= UI_CinematicsMenu_Event; 
    157 	cinematicsMenuInfo.cin_idlogo.string			= "ID LOGO";
    158 	cinematicsMenuInfo.cin_idlogo.color				= color_red;
    159 	cinematicsMenuInfo.cin_idlogo.style				= UI_CENTER;
    160 
    161 	y += VERTICAL_SPACING;
    162 	cinematicsMenuInfo.cin_intro.generic.type		= MTYPE_PTEXT;
    163 	cinematicsMenuInfo.cin_intro.generic.flags		= QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
    164 	cinematicsMenuInfo.cin_intro.generic.x			= 320;
    165 	cinematicsMenuInfo.cin_intro.generic.y			= y;
    166 	cinematicsMenuInfo.cin_intro.generic.id			= ID_CIN_INTRO;
    167 	cinematicsMenuInfo.cin_intro.generic.callback	= UI_CinematicsMenu_Event; 
    168 	cinematicsMenuInfo.cin_intro.string				= "INTRO";
    169 	cinematicsMenuInfo.cin_intro.color				= color_red;
    170 	cinematicsMenuInfo.cin_intro.style				= UI_CENTER;
    171 	if( uis.demoversion ) {
    172 		cinematicsMenuInfo.cin_intro.generic.flags |= QMF_GRAYED;
    173 	}
    174 
    175 	y += VERTICAL_SPACING;
    176 	cinematicsMenuInfo.cin_tier1.generic.type		= MTYPE_PTEXT;
    177 	cinematicsMenuInfo.cin_tier1.generic.flags		= QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
    178 	cinematicsMenuInfo.cin_tier1.generic.x			= 320;
    179 	cinematicsMenuInfo.cin_tier1.generic.y			= y;
    180 	cinematicsMenuInfo.cin_tier1.generic.id			= ID_CIN_TIER1;
    181 	cinematicsMenuInfo.cin_tier1.generic.callback	= UI_CinematicsMenu_Event; 
    182 	cinematicsMenuInfo.cin_tier1.string				= "Tier 1";
    183 	cinematicsMenuInfo.cin_tier1.color				= color_red;
    184 	cinematicsMenuInfo.cin_tier1.style				= UI_CENTER;
    185 	if( !UI_CanShowTierVideo( 1 ) ) {
    186 		cinematicsMenuInfo.cin_tier1.generic.flags |= QMF_GRAYED;
    187 	}
    188 
    189 	y += VERTICAL_SPACING;
    190 	cinematicsMenuInfo.cin_tier2.generic.type		= MTYPE_PTEXT;
    191 	cinematicsMenuInfo.cin_tier2.generic.flags		= QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
    192 	cinematicsMenuInfo.cin_tier2.generic.x			= 320;
    193 	cinematicsMenuInfo.cin_tier2.generic.y			= y;
    194 	cinematicsMenuInfo.cin_tier2.generic.id			= ID_CIN_TIER2;
    195 	cinematicsMenuInfo.cin_tier2.generic.callback	= UI_CinematicsMenu_Event; 
    196 	cinematicsMenuInfo.cin_tier2.string				= "Tier 2";
    197 	cinematicsMenuInfo.cin_tier2.color				= color_red;
    198 	cinematicsMenuInfo.cin_tier2.style				= UI_CENTER;
    199 	if( !UI_CanShowTierVideo( 2 ) ) {
    200 		cinematicsMenuInfo.cin_tier2.generic.flags |= QMF_GRAYED;
    201 	}
    202 
    203 	y += VERTICAL_SPACING;
    204 	cinematicsMenuInfo.cin_tier3.generic.type		= MTYPE_PTEXT;
    205 	cinematicsMenuInfo.cin_tier3.generic.flags		= QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
    206 	cinematicsMenuInfo.cin_tier3.generic.x			= 320;
    207 	cinematicsMenuInfo.cin_tier3.generic.y			= y;
    208 	cinematicsMenuInfo.cin_tier3.generic.id			= ID_CIN_TIER3;
    209 	cinematicsMenuInfo.cin_tier3.generic.callback	= UI_CinematicsMenu_Event; 
    210 	cinematicsMenuInfo.cin_tier3.string				= "Tier 3";
    211 	cinematicsMenuInfo.cin_tier3.color				= color_red;
    212 	cinematicsMenuInfo.cin_tier3.style				= UI_CENTER;
    213 	if( !UI_CanShowTierVideo( 3 ) ) {
    214 		cinematicsMenuInfo.cin_tier3.generic.flags |= QMF_GRAYED;
    215 	}
    216 
    217 	y += VERTICAL_SPACING;
    218 	cinematicsMenuInfo.cin_tier4.generic.type		= MTYPE_PTEXT;
    219 	cinematicsMenuInfo.cin_tier4.generic.flags		= QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
    220 	cinematicsMenuInfo.cin_tier4.generic.x			= 320;
    221 	cinematicsMenuInfo.cin_tier4.generic.y			= y;
    222 	cinematicsMenuInfo.cin_tier4.generic.id			= ID_CIN_TIER4;
    223 	cinematicsMenuInfo.cin_tier4.generic.callback	= UI_CinematicsMenu_Event; 
    224 	cinematicsMenuInfo.cin_tier4.string				= "Tier 4";
    225 	cinematicsMenuInfo.cin_tier4.color				= color_red;
    226 	cinematicsMenuInfo.cin_tier4.style				= UI_CENTER;
    227 	if( !UI_CanShowTierVideo( 4 ) ) {
    228 		cinematicsMenuInfo.cin_tier4.generic.flags |= QMF_GRAYED;
    229 	}
    230 
    231 	y += VERTICAL_SPACING;
    232 	cinematicsMenuInfo.cin_tier5.generic.type		= MTYPE_PTEXT;
    233 	cinematicsMenuInfo.cin_tier5.generic.flags		= QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
    234 	cinematicsMenuInfo.cin_tier5.generic.x			= 320;
    235 	cinematicsMenuInfo.cin_tier5.generic.y			= y;
    236 	cinematicsMenuInfo.cin_tier5.generic.id			= ID_CIN_TIER5;
    237 	cinematicsMenuInfo.cin_tier5.generic.callback	= UI_CinematicsMenu_Event; 
    238 	cinematicsMenuInfo.cin_tier5.string				= "Tier 5";
    239 	cinematicsMenuInfo.cin_tier5.color				= color_red;
    240 	cinematicsMenuInfo.cin_tier5.style				= UI_CENTER;
    241 	if( !UI_CanShowTierVideo( 5 ) ) {
    242 		cinematicsMenuInfo.cin_tier5.generic.flags |= QMF_GRAYED;
    243 	}
    244 
    245 	y += VERTICAL_SPACING;
    246 	cinematicsMenuInfo.cin_tier6.generic.type		= MTYPE_PTEXT;
    247 	cinematicsMenuInfo.cin_tier6.generic.flags		= QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
    248 	cinematicsMenuInfo.cin_tier6.generic.x			= 320;
    249 	cinematicsMenuInfo.cin_tier6.generic.y			= y;
    250 	cinematicsMenuInfo.cin_tier6.generic.id			= ID_CIN_TIER6;
    251 	cinematicsMenuInfo.cin_tier6.generic.callback	= UI_CinematicsMenu_Event; 
    252 	cinematicsMenuInfo.cin_tier6.string				= "Tier 6";
    253 	cinematicsMenuInfo.cin_tier6.color				= color_red;
    254 	cinematicsMenuInfo.cin_tier6.style				= UI_CENTER;
    255 	if( !UI_CanShowTierVideo( 6 ) ) {
    256 		cinematicsMenuInfo.cin_tier6.generic.flags |= QMF_GRAYED;
    257 	}
    258 
    259 	y += VERTICAL_SPACING;
    260 	cinematicsMenuInfo.cin_tier7.generic.type		= MTYPE_PTEXT;
    261 	cinematicsMenuInfo.cin_tier7.generic.flags		= QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
    262 	cinematicsMenuInfo.cin_tier7.generic.x			= 320;
    263 	cinematicsMenuInfo.cin_tier7.generic.y			= y;
    264 	cinematicsMenuInfo.cin_tier7.generic.id			= ID_CIN_TIER7;
    265 	cinematicsMenuInfo.cin_tier7.generic.callback	= UI_CinematicsMenu_Event; 
    266 	cinematicsMenuInfo.cin_tier7.string				= "Tier 7";
    267 	cinematicsMenuInfo.cin_tier7.color				= color_red;
    268 	cinematicsMenuInfo.cin_tier7.style				= UI_CENTER;
    269 	if( !UI_CanShowTierVideo( 7 ) ) {
    270 		cinematicsMenuInfo.cin_tier7.generic.flags |= QMF_GRAYED;
    271 	}
    272 
    273 	y += VERTICAL_SPACING;
    274 	cinematicsMenuInfo.cin_end.generic.type			= MTYPE_PTEXT;
    275 	cinematicsMenuInfo.cin_end.generic.flags		= QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
    276 	cinematicsMenuInfo.cin_end.generic.x			= 320;
    277 	cinematicsMenuInfo.cin_end.generic.y			= y;
    278 	cinematicsMenuInfo.cin_end.generic.id			= ID_CIN_END;
    279 	cinematicsMenuInfo.cin_end.generic.callback		= UI_CinematicsMenu_Event; 
    280 	cinematicsMenuInfo.cin_end.string				= "END";
    281 	cinematicsMenuInfo.cin_end.color				= color_red;
    282 	cinematicsMenuInfo.cin_end.style				= UI_CENTER;
    283 	if( !UI_CanShowTierVideo( 8 ) ) {
    284 		cinematicsMenuInfo.cin_end.generic.flags |= QMF_GRAYED;
    285 	}
    286 
    287 	cinematicsMenuInfo.back.generic.type		= MTYPE_BITMAP;
    288 	cinematicsMenuInfo.back.generic.name		= ART_BACK0;
    289 	cinematicsMenuInfo.back.generic.flags		= QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
    290 	cinematicsMenuInfo.back.generic.id			= ID_BACK;
    291 	cinematicsMenuInfo.back.generic.callback	= UI_CinematicsMenu_BackEvent;
    292 	cinematicsMenuInfo.back.generic.x			= 0;
    293 	cinematicsMenuInfo.back.generic.y			= 480-64;
    294 	cinematicsMenuInfo.back.width				= 128;
    295 	cinematicsMenuInfo.back.height				= 64;
    296 	cinematicsMenuInfo.back.focuspic			= ART_BACK1;
    297 
    298 	Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.banner );
    299 	Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.framel );
    300 	Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.framer );
    301 	Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_idlogo );
    302 	Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_intro );
    303 	Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_tier1 );
    304 	Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_tier2 );
    305 	Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_tier3 );
    306 	Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_tier4 );
    307 	Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_tier5 );
    308 	Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_tier6 );
    309 	Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_tier7 );
    310 	Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_end );
    311 	Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.back );
    312 }
    313 
    314 
    315 /*
    316 =================
    317 UI_CinematicsMenu_Cache
    318 =================
    319 */
    320 void UI_CinematicsMenu_Cache( void ) {
    321 	trap_R_RegisterShaderNoMip( ART_BACK0 );
    322 	trap_R_RegisterShaderNoMip( ART_BACK1 );
    323 	trap_R_RegisterShaderNoMip( ART_FRAMEL );
    324 	trap_R_RegisterShaderNoMip( ART_FRAMER );
    325 }
    326 
    327 
    328 /*
    329 ===============
    330 UI_CinematicsMenu
    331 ===============
    332 */
    333 void UI_CinematicsMenu( void ) {
    334 	UI_CinematicsMenu_Init();
    335 	UI_PushMenu( &cinematicsMenuInfo.menu );
    336 }
    337 
    338 
    339 /*
    340 ===============
    341 UI_CinematicsMenu_f
    342 ===============
    343 */
    344 void UI_CinematicsMenu_f( void ) {
    345 	int		n;
    346 
    347 	n = atoi( UI_Argv( 1 ) );
    348 	UI_CinematicsMenu();
    349 	Menu_SetCursorToItem( &cinematicsMenuInfo.menu, cinematicsMenuInfo.menu.items[n + 3] );
    350 }