161 lines
6.4 KiB
C++

/*
** 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 <http://www.gnu.org/licenses/>.
*/
////////////////////////////////////////////////////////////////////////////////
// //
// (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_