// // Copyright 2020 Electronic Arts Inc. // // TiberianDawn.DLL and RedAlert.dll and corresponding source code is free // software: you can redistribute it and/or modify it under the terms of // the GNU General Public License as published by the Free Software Foundation, // either version 3 of the License, or (at your option) any later version. // TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed // in the hope that it will be useful, but with permitted additional restrictions // under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT // distributed with this program. You should have received a copy of the // GNU General Public License along with permitted additional restrictions // with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection /* $Header: /CounterStrike/INTRO.CPP 1 3/03/97 10:24a Joe_bostic $ */ /*********************************************************************************************** *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S *** *********************************************************************************************** * * * Project Name : Command & Conquer * * * * File Name : INTRO.H * * * * Programmer : Barry W. Green * * * * Start Date : May 8, 1995 * * * * Last Update : May 8, 1995 [BWG] * * * *---------------------------------------------------------------------------------------------* * Functions: * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #include "function.h" #if (0) //PG VQAHandle * Open_Movie(char * name); VQAHandle * Open_Movie(char * name) { if (!Debug_Quiet && Get_Digi_Handle() != -1) { AnimControl.OptionFlags |= VQAOPTF_AUDIO; } else { AnimControl.OptionFlags &= ~VQAOPTF_AUDIO; } VQAHandle * vqa = VQA_Alloc(); if (vqa) { VQA_Init(vqa, MixFileHandler); if (VQA_Open(vqa, name, &AnimControl) != 0) { VQA_Free(vqa); vqa = 0; } } return(vqa); } #endif /*********************************************************************************************** * Choose_Side -- play the introduction movies, select house * * * * INPUT: none * * * * OUTPUT: none * * * * WARNINGS: * * * * HISTORY: * * 5/08/1995 BWG : Created. * *=============================================================================================*/ void Choose_Side(void) // ajw - In RA, all this did was play a movie. Denzil is using it in its original sense. { Whom = HOUSE_GOOD; #if (0) //PG if (Special.IsFromInstall) { #ifdef DVD // Denzil if( Using_DVD() ) { Hide_Mouse(); Load_Title_Page(); GamePalette = CCPalette; HidPage.Blit(SeenPage); CCPalette.Set(); Set_Logic_Page(SeenBuff); Show_Mouse(); switch (WWMessageBox().Process(TXT_CHOOSE, TXT_ALLIES, TXT_SOVIET)) { case 0: CurrentCD = 0; break; case 1: CurrentCD = 1; break; } Hide_Mouse(); BlackPalette.Set(FADE_PALETTE_SLOW); SeenPage.Clear(); } #endif Play_Movie(VQ_INTRO_MOVIE, THEME_NONE, false); } #endif // Scen.ScenPlayer = SCEN_PLAYER_GREECE; #ifdef OBSOLETE static char const _yellowpal[]={0x0,0x0,0xC9,0x0,0xBA,0x0,0x93,0x0,0x61,0x0,0x0,0x0,0x0,0x0,0xEE,0x0}; static char const _redpal[] ={0x0,0x0,0xA8,0x0,0xD9,0x0,0xDA,0x0,0xE1,0x0,0x0,0x0,0x0,0x0,0xD4,0x0}; static char const _graypal[] ={0x0,0x0,0x17,0x0,0x10,0x0,0x12,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x1C,0x0}; void * anim; VQAHandle * gdibrief=0, * nodbrief=0; void const * staticaud, * oldfont; void const * speechg, * speechn, * speech; int statichandle, speechhandle, speechplaying = 0; int oldfontxspacing = FontXSpacing; int setpalette = 0; int frame = 0, endframe = 255, selection = 0, lettersdone = 0; Hide_Mouse(); /* Change to the six-point font for Text_Print */ oldfont = Set_Font(ScoreFontPtr); Call_Back(); staticaud = Load_Alloc_Data(CCFileClass("STRUGGLE.AUD")); speechg = Load_Alloc_Data(CCFileClass("GDI_SLCT.AUD")); speechn = Load_Alloc_Data(CCFileClass("NOD_SLCT.AUD")); // staticaud = MixFileClass::Retrieve("STRUGGLE.AUD"); // speechg = MixFileClass::Retrieve("GDI_SLCT.AUD"); // speechn = MixFileClass::Retrieve("NOD_SLCT.AUD"); anim = Open_Animation("CHOOSE.WSA", NULL, 0L, (WSAOpenType)(WSA_OPEN_FROM_MEM | WSA_OPEN_TO_PAGE), Palette); Call_Back(); nodbrief = Open_Movie("NOD1PRE.VQA"); Call_Back(); gdibrief = Open_Movie("GDI1.VQA"); if (Special.IsFromInstall) { Set_Video_Mode(MCGA_MODE); PreserveVQAScreen = 1; // Hide_Mouse(); Play_Movie("INTRO2", THEME_NONE, false); Show_Mouse(); } HidPage.Clear(); if (!Special.IsFromInstall) { SeenPage.Clear(); // Set_Palette(Palette); Palette.Set(); } else { setpalette = 1; } statichandle = Play_Sample(staticaud, 255, 64); Alloc_Object(new ScorePrintClass(TXT_GDI_NAME, 0, 180, _yellowpal)); #ifdef FRENCH Alloc_Object(new ScorePrintClass(TXT_GDI_NAME2, 0, 187, _yellowpal)); #endif Alloc_Object(new ScorePrintClass(TXT_NOD_NAME, 180, 180, _redpal)); #ifdef GERMAN Alloc_Object(new ScorePrintClass(TXT_SEL_TRANS, 57, 190, _graypal)); #else #ifdef FRENCH Alloc_Object(new ScorePrintClass(TXT_SEL_TRANS, 103, 194, _graypal)); #else Alloc_Object(new ScorePrintClass(TXT_SEL_TRANS, 103, 190, _graypal)); #endif #endif Keyboard->Clear(); while (endframe != frame || (speechplaying && Is_Sample_Playing(speech)) ) { Animate_Frame(anim, HidPage, frame++); Hide_Mouse(); if (setpalette) { Wait_Vert_Blank(VertBlank); //Set_Palette(Palette); Palette.Set(); setpalette = 0; } HidPage.Blit(SeenPage, 0, 22, 0, 22, 320, 156); Show_Mouse(); if (!Is_Sample_Playing(staticaud)) statichandle = Play_Sample(staticaud, 255, 64); Call_Back_Delay(3); // delay only if haven't clicked /* keep the mouse hidden until the letters are thru printing */ if (!lettersdone) { lettersdone = true; for (int i=0; i < MAXSCOREOBJS; i++) if (ScoreObjs[i]) lettersdone = 0; if (lettersdone) { Show_Mouse(); } } if (frame >= Get_Animation_Frame_Count(anim)) frame = 0; if (Keyboard->Check() && endframe == 255) { if ((Keyboard->Get() & 0xFF) == KN_LMOUSE) { if ((MouseQY > 48) && (MouseQY < 150)) { if ((MouseQX > 18) && (MouseQX < 148)) { // Chose GDI Whom = HOUSE_GOOD; ScenPlayer = SCEN_PLAYER_GDI; endframe = 0; speechhandle = Play_Sample(speechg); speechplaying = true; speech = speechg; } else if ((MouseQX > 160) && (MouseQX < 300)) { // Chose Nod selection = 1; endframe = 14; Whom = HOUSE_BAD; ScenPlayer = SCEN_PLAYER_NOD; speechhandle = Play_Sample(speechn); speechplaying = true; speech = speechn; } } } } } Hide_Mouse(); Close_Animation(anim); // erase the "choose side" text SeenBuff.Fill_Rect(0, 180, 319, 199, 0); Keyboard->Clear(); /* play the scenario 1 briefing movie */ if (Whom == HOUSE_GOOD) { if (nodbrief) { VQA_Close(nodbrief); VQA_Free(nodbrief); } if (gdibrief) { #ifdef CHEAT_KEYS #else VQA_Play(gdibrief, VQAMODE_RUN); #endif VQA_Close(gdibrief); VQA_Free(gdibrief); } } else { if (gdibrief) { VQA_Close(gdibrief); VQA_Free(gdibrief); } if (nodbrief) { #ifdef CHEAT_KEYS #else VQA_Play(nodbrief, VQAMODE_RUN); #endif VQA_Close(nodbrief); VQA_Free(nodbrief); } } /* get rid of all the animating objects */ for (int i = 0; i < MAXSCOREOBJS; i++) if (ScoreObjs[i]) { delete ScoreObjs[i]; ScoreObjs[i] = 0; } if (Whom == HOUSE_GOOD) { /* ** Make sure the screen's fully clear after the movie plays */ SeenPage.Clear(); BlackPalette.Adjust(WhitePalette, 0x08); BlackPalette.Set(); BlackPalette.Adjust(0xFF); BlackPalette.Set(); // memset(BlackPalette, 0x01, 768); // Set_Palette(BlackPalette); // memset(BlackPalette, 0x00, 768); } else { PreserveVQAScreen = 1; } Free(staticaud); Free(speechg); Free(speechn); Set_Font(oldfont); FontXSpacing = oldfontxspacing; #endif }