/* ** Command & Conquer Generals Zero Hour(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program 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. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . */ //////////////////////////////////////////////////////////////////////////////// // // // (c) 2001-2003 Electronic Arts Inc. // // // //////////////////////////////////////////////////////////////////////////////// // FILE: ChallengeGenerals.h ////////////////////////////////////////////////////////////////////// // Author: Steve Copeland, 6/24/2003 // Desc: This is a manager for data pertaining to the Generals' Challenge personas and related GUI. /////////////////////////////////////////////////////////////////////////////////////////////////// #pragma once #ifndef __CHALLENGEGENERALS_H_ #define __CHALLENGEGENERALS_H_ // INCLUDES ////////////////////////////////////////////////////////////////////////////////// #include "Common/GameType.h" #include "Common/Overridable.h" // DEFINES //////////////////////////////////////////////////////////////////////////////////////// //static const Int NUM_GENERALS = 12; // ChallengeMenu.wnd dependent #define NUM_GENERALS (12) // FORWARD REFERENCES ///////////////////////////////////////////////////////////////////////////// // CLASS DEFINITIONS ////////////////////////////////////////////////////////////////////////////// class GeneralPersona { friend class ChallengeGenerals; private: Bool m_bStartsEnabled; AsciiString m_strBioName; AsciiString m_strBioDOB; AsciiString m_strBioBirthplace; AsciiString m_strBioStrategy; AsciiString m_strBioRank; AsciiString m_strBioBranch; AsciiString m_strBioClassNumber; Image *m_imageBioPortraitSmall; Image *m_imageBioPortraitLarge; AsciiString m_strCampaign; AsciiString m_strPlayerTemplateName; AsciiString m_strPortraitMovieLeftName; AsciiString m_strPortraitMovieRightName; Image *m_imageDefeated; Image *m_imageVictorious; AsciiString m_strDefeated; AsciiString m_strVictorious; AsciiString m_strSelectionSound; AsciiString m_strTauntSound1; AsciiString m_strTauntSound2; AsciiString m_strTauntSound3; AsciiString m_strWinSound; AsciiString m_strLossSound; AsciiString m_strPreviewSound; AsciiString m_strNameSound ; public: GeneralPersona( void ) : m_imageBioPortraitSmall(NULL), m_imageBioPortraitLarge(NULL) { } // ~GeneralPersona( void ); const Bool isStartingEnabled() const { return m_bStartsEnabled; } const AsciiString& getBioName() const { return m_strBioName; } const AsciiString& getBioDOB() const { return m_strBioDOB; } const AsciiString& getBioBirthplace() const { return m_strBioBirthplace; } const AsciiString& getBioStrategy() const { return m_strBioStrategy; } const AsciiString& getBioRank() const { return m_strBioRank; } const AsciiString& getBioClassNumber() const { return m_strBioClassNumber; } const AsciiString& getBioBranch() const { return m_strBioBranch; } const Image *getBioPortraitSmall() const { return m_imageBioPortraitSmall; } const Image *getBioPortraitLarge() const { return m_imageBioPortraitLarge; } const AsciiString& getPortraitMovieLeftName() const { return m_strPortraitMovieLeftName; } const AsciiString& getPortraitMovieRightName() const { return m_strPortraitMovieRightName; } const AsciiString& getCampaign() const { return m_strCampaign; } const AsciiString& getPlayerTemplateName() const { return m_strPlayerTemplateName; } // template name, as parsed in from ini const Image *getImageDefeated() const { return m_imageDefeated; } const Image *getImageVictorious() const { return m_imageVictorious; } const AsciiString& getStringDefeated() const { return m_strDefeated; } const AsciiString& getStringVictorious() const { return m_strVictorious; } const AsciiString& getSelectionSound() const { return m_strSelectionSound; } const AsciiString& getRandomTauntSound() const { switch (rand()%3) // don't care about distribution or exactly how random this is { case 0: return m_strTauntSound1; case 1: return m_strTauntSound2; } return m_strTauntSound3; } const AsciiString& getWinSound() const { return m_strWinSound; } const AsciiString& getLossSound() const { return m_strLossSound; } const AsciiString& getPreviewSound() const { return m_strPreviewSound; } const AsciiString& getNameSound() const { return m_strNameSound; } }; class ChallengeGenerals { private: /*const*/ GeneralPersona m_position[ NUM_GENERALS ]; Int m_PlayerTemplateNum; // the template number as ThePlayerTemplateStore has it GameDifficulty m_currentDifficulty; // the last selected game difficulty for the challenge generals static void parseGeneralPersona( INI* ini, void *instance, void *store, const void *userData ); public: ChallengeGenerals( void ); ~ChallengeGenerals( void ); void init( void ); const GeneralPersona* getChallengeGenerals() const { return m_position; } const FieldParse* getFieldParse( void ) const { return s_fieldParseTable; } // for INI file parsing const GeneralPersona* getPlayerGeneralByCampaignName( AsciiString name ) const; const GeneralPersona* getGeneralByGeneralName( AsciiString name ) const; const GeneralPersona* getGeneralByTemplateName( AsciiString name ) const; void setCurrentPlayerTemplateNum( Int playerTemplateNum) { m_PlayerTemplateNum = playerTemplateNum; } Int getCurrentPlayerTemplateNum( void ) { return m_PlayerTemplateNum; } void setCurrentDifficulty( GameDifficulty diff ) { m_currentDifficulty = diff; } const GameDifficulty getCurrentDifficulty( void ) { return m_currentDifficulty; } protected: static const FieldParse s_fieldParseTable[]; }; // EXTERNALS ////////////////////////////////////////////////////////////////////////////////////// extern ChallengeGenerals *TheChallengeGenerals; extern ChallengeGenerals *createChallengeGenerals( void ); #endif // end __CHALLENGEGENERALS_H_