161 lines
6.4 KiB
C
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_
|