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 }