334 lines
11 KiB
C++
334 lines
11 KiB
C++
|
//
|
||
|
// 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<FrameTimerClass> 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<FrameTimerClass> MissionTimer;
|
||
|
|
||
|
/*
|
||
|
** The shroud regrowth (if enabled) is regulated by this timer. When the
|
||
|
** timer expires, the shroud will regrow one step.
|
||
|
*/
|
||
|
CDTimerClass<FrameTimerClass> 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<FrameTimerClass> 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<FrameTimerClass> 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
|