// // 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/SCENARIO.H 1 3/03/97 10:25a 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 : SCENARIO.H * * * * Programmer : Joe L. Bostic * * * * Start Date : 02/26/96 * * * * Last Update : February 26, 1996 [JLB] * * * *---------------------------------------------------------------------------------------------* * Functions: * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #ifndef SCENARIO_H #define SCENARIO_H /* ** This class holds the information about the current game being played. This information is ** global to the scenario and is generally of a similar nature to the information that was held ** in the controlling scenario INI file. It is safe to write this structure out as a whole since ** it doesn't contain any embedded pointers. */ class ScenarioClass { public: // Constructor. ScenarioClass(void); void Set_Scenario_Name(int scenario, ScenarioPlayerType player, ScenarioDirType dir = SCEN_DIR_NONE, ScenarioVarType var = SCEN_VAR_NONE); void Set_Scenario_Name(char const * name); bool Set_Global_To(int global, bool value); void Do_BW_Fade(void); void Do_Fade_AI(void); /* ** This is the source of the random numbers used in the game. This controls ** the game logic and thus must be in sync with any networked machines. */ RandomClass RandomNumber; /* ** This is the difficulty setting of the game. */ DiffType Difficulty; // For human player. DiffType CDifficulty; // For computer players. /* ** This is the main mission timer. This is the timer that is reset at the ** start of the mission. It, effectively, holds the elapsed time of the ** mission. */ TTimerClass Timer; /* ** This is an array of waypoints; each waypoint corresponds to a letter of ** the alphabet, and points to a cell number. -1 means unassigned. ** The CellClass has a bit that tells if that cell has a waypoint attached to ** it; the only way to find which waypoint it is, is to scan this array. This ** shouldn't be needed often; usually, you know the waypoint & you want the CELL. */ CELL Waypoint[WAYPT_COUNT]; /* ** This holds the system wide mission countdown timer. Time based missions ** are governed by this timer. Various trigger events can modify and examine ** this timer. The current value of this timer will display on the game ** screen. */ CDTimerClass MissionTimer; /* ** The shroud regrowth (if enabled) is regulated by this timer. When the ** timer expires, the shroud will regrow one step. */ CDTimerClass ShroudTimer; /* ** The scenario number. */ int Scenario; /* ** The theater of the current scenario. */ TheaterType Theater; /* ** The full name of the scenario (as it exists on disk). */ char ScenarioName[_MAX_FNAME+_MAX_EXT]; /* ** Description of the scenario. */ char Description[DESCRIP_MAX]; /* ** The filename of the introduction movie. */ VQType IntroMovie; /* ** The filename of the briefing movie. */ VQType BriefMovie; /* ** The filename of the movie to play if the scenario is won. */ VQType WinMovie; /* ** The filename of the movie to play if the scenario is won. */ VQType WinMovie2; /* ** The filename of the movie to play if the scenario is won. */ VQType WinMovie3; /* ** The filename of the movie to play if the scenario is won. */ VQType WinMovie4; /* ** The filename of the movie to play if the scenario is lost. */ VQType LoseMovie; /* ** The filename of the movie to play right after the briefing and ** just before the game. */ VQType ActionMovie; /* ** This is the full text of the briefing. This text will be ** displayed when the player commands the "restate mission ** objectives" operation. */ char BriefingText[1024]; /* ** This is the theme to start playing at the beginning of the action ** movie. A score started in this fashion will continue to play as ** the game progresses. */ ThemeType TransitTheme; /* ** The house that the player is to be (obsolete). */ HousesType PlayerHouse; /* ** The percentage of money that is allowed to be carried over into the ** following scenario. */ fixed CarryOverPercent; /* ** This is the amount of money that was left over in the previous ** scenario. */ int CarryOverMoney; /* ** This specifies the maximum amount of money that is allowed to be ** carried over from the previous scenario. This limits the amount ** regardless of what the carry over percentage is set to. */ int CarryOverCap; /* ** This is the percent that the computer controlled base is to be ** built up to at the scenario start. */ int Percent; /* ** Global flags that are used in the trigger system and are persistent ** over the course of the game. */ bool GlobalFlags[30]; /* ** This records the bookmark view locations the player has recorded. */ CELL Views[4]; /* ** This is the number of active passable bridges in the current game. */ int BridgeCount; /* ** This records the carry over timer value that is used when the mission ** starts (presuming the appropriate flag is set) and also used when the ** scenario restarts. */ int CarryOverTimer; /* ** If a bridge has been destroyed, then this flag will be set to true. ** If there is a trigger that depends on this, it might be triggered. */ unsigned IsBridgeChanged:1; /* ** If a global has changed and global change trigger events must be ** processed, then this flag will be set to true. */ unsigned IsGlobalChanged:1; /* ** Are the buildings and units in this scenario to carry over into ** some (unspecified) later scenario and thus have to be recorded ** at the end? */ unsigned IsToCarryOver:1; /* ** Is this scenario to begin by taking the previously recorded ** carryover objects and creating them onto the map? */ unsigned IsToInherit:1; /* ** If Tanya or a civilian is to be automatically evacuated when they enter ** a transport vehicle, then this flag will be true. */ unsigned IsTanyaEvac:1; /* ** These variables are assigned to the chronosphere effect, and control ** whether the palette should be fading towards b&w or towards color. */ unsigned IsFadingBW:1; unsigned IsFadingColor:1; /* ** If this scenario is to be the last mission of the game (for this side), then ** this flag will be true. */ unsigned IsEndOfGame:1; /* ** If the mission countdown timer is to be inherited from the previous ** scenario, then this flag will be set to true. */ unsigned IsInheritTimer:1; /* ** If the spy plane is to be disabled in this scenario even though circumstances ** might otherwise indicate that it should appear, then this flag will be true. */ unsigned IsNoSpyPlane:1; /* ** If the score screen (and "mission accomplished" voice) is to be skipped when ** this scenario is finished, then this flag will be true. */ unsigned IsSkipScore:1; /* ** If this is to be a one time only mission such that when it is completed, the game ** will return to the main menu, then this flag will be set to true. */ unsigned IsOneTimeOnly:1; /* ** If the map selection is to be skipped then this flag will be true. If this ** ins't a one time only scenario, then the next scenario will have the same ** name as the current one but will be for variation "B". */ unsigned IsNoMapSel:1; /* ** If trucks are supposed to drop wood crates when they explode, then this flag ** will be set to true. */ unsigned IsTruckCrate:1; /* ** If the initial money is to be assigned as ore in available silos, then ** this flag will be set to true. */ unsigned IsMoneyTiberium:1; /* ** This is the fading countdown timer. As this timer counts down, the ** fading to b&w or color will progress. This timer represents a ** percentage of the Options.Get_Saturation() to fade towards. */ CDTimerClass FadeTimer; #ifdef FIXIT_VERSION_3 // For endgame auto-sonar pulse. // Timer to set the period for checking if an auto-sonar pulse should be performed. // This will take place if a player has nothing but subs left in the game. CDTimerClass AutoSonarTimer; #endif #ifdef FIXIT_VERSION_3 // Stalemate games. bool bLocalProposesDraw; // True if the local player in a 2-player game has a draw offer extended. bool bOtherProposesDraw; // True if the other player in a 2-player game has a draw offer extended. #endif }; #endif