200 lines
9.6 KiB
C++
200 lines
9.6 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/VERSION.H 2 3/10/97 6:22p Steve_tall $ */
|
|
/***************************************************************************
|
|
*** 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 : VERSION.H *
|
|
* *
|
|
* Programmer : Bill R. Randolph *
|
|
* *
|
|
* Start Date : 10/26/95 *
|
|
* *
|
|
* Last Update : October 26, 1995 [BRR] *
|
|
* *
|
|
* This class maintains version information, and communications protocol *
|
|
* information. *
|
|
* *
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
#ifndef VERSION_H
|
|
#define VERSION_H
|
|
|
|
#define VERSION_RED_ALERT_104 0x00010000 //Shipped US version number
|
|
#define VERSION_RED_ALERT_107 0x00011000 //Shipped Counterstrike number
|
|
#define VERSION_RED_ALERT_106 0x00010500 //Patch without CS installed
|
|
#define VERSION_RED_ALERT_108 0x00011500 //Patch with CS installed
|
|
#define VERSION_AFTERMATH_CS 0x00011FFF //Aftermath with CS installed
|
|
#define VERSION_AFTERMATH 0x00012000 //Aftermath
|
|
|
|
// Aftermath has, in a sense, used version 2.00. (Because of the text on title screen.) Call ourselves version 3.
|
|
#define VERSION_RA_300 0x00030000 // RA, CS, AM executables unified into one. All are now the same version. -ajw
|
|
// It seems that extra information, that didn't belong there, was being stuffed into version number. Namely, whether or not
|
|
// Counterstrike is installed. I'm going to change things back to the way they should be, as I see it. Version will describe
|
|
// the version of the executable only. When it comes to communicating whether or not a player has expansions present, separate
|
|
// data will be transmitted.
|
|
|
|
// However, having said that, a caveat. I'm going to have to use the same communication method that was used previously, because
|
|
// I need to have prior versions of the game recognize that they can't play against this version. What I'll do is encode
|
|
// "does player have aftermath" (which is actually the only fact that matters, in multiplayer) in the communicated version
|
|
// number, as a high bit set/unset. This version of the game will receive this communicated value and pull out the Aftermath
|
|
// bit. Older version will reject us as a possible opponent, because, whether or not AM is installed, our version number will
|
|
// be too high for them.
|
|
|
|
// These horrible things are no longer used. ajw
|
|
#define CS_MAJOR_VERSION_MODIFIER 0x0000
|
|
#define CS_MINOR_VERSION_MODIFIER 0x1000
|
|
|
|
//---------------------------------------------------------------------------
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
typedef enum CommProtocolEnum {
|
|
COMM_PROTOCOL_SINGLE_NO_COMP = 0, // single frame with no compression
|
|
COMM_PROTOCOL_SINGLE_E_COMP, // single frame with event compression
|
|
COMM_PROTOCOL_MULTI_E_COMP, // multiple frame with event compression
|
|
COMM_PROTOCOL_COUNT,
|
|
DEFAULT_COMM_PROTOCOL = COMM_PROTOCOL_MULTI_E_COMP
|
|
} CommProtocolType;
|
|
|
|
typedef struct {
|
|
unsigned long Version;
|
|
CommProtocolType Protocol;
|
|
} VersionProtocolType;
|
|
|
|
class VersionClass {
|
|
public:
|
|
//.....................................................................
|
|
// Constructor/Destructor
|
|
//.....................................................................
|
|
VersionClass(void);
|
|
virtual ~VersionClass() {};
|
|
|
|
//.....................................................................
|
|
// These routines return the current version number. The long version
|
|
// number contains the major version in the high word, and the minor
|
|
// version in the low word. They should be interpreted in hex.
|
|
//.....................................................................
|
|
unsigned long Version_Number(void);
|
|
unsigned short Major_Version(void);
|
|
unsigned short Minor_Version(void);
|
|
|
|
//.....................................................................
|
|
// Retrieves a pointer to the version # as a text string (#.#), with
|
|
// the trailing 0's trimmed off.
|
|
//.....................................................................
|
|
char *Version_Name(void);
|
|
|
|
//.....................................................................
|
|
// Retrieves a pointer to the current version text.
|
|
//.....................................................................
|
|
char *Version_Text() {return (VersionText);}
|
|
|
|
//.....................................................................
|
|
// Returns the default comm protocol for a given version number.
|
|
//.....................................................................
|
|
CommProtocolType Version_Protocol(unsigned long version);
|
|
|
|
//.....................................................................
|
|
// These routines support "version clipping".
|
|
//.....................................................................
|
|
void Init_Clipping(void);
|
|
unsigned long Clip_Version(unsigned long minver, unsigned long maxver);
|
|
unsigned long Get_Clipped_Version(void) {return (MaxClipVer);}
|
|
|
|
//.....................................................................
|
|
// These routines return the theoretical lowest & highest version #'s
|
|
// that this program will connect to; this does not take any previous
|
|
// version clipping into account.
|
|
//.....................................................................
|
|
unsigned long Min_Version(void);
|
|
unsigned long Max_Version(void);
|
|
|
|
private:
|
|
//.....................................................................
|
|
// Fills in a 'VersionText' with a descriptive version name.
|
|
//.....................................................................
|
|
void Read_Text_String(void);
|
|
|
|
//.....................................................................
|
|
// These values define the major & minor version #'s for the current
|
|
// version. Change these values to change the game's version #!
|
|
//.....................................................................
|
|
enum VersionEnum {
|
|
#ifdef FIXIT_VERSION_3
|
|
MAJOR_VERSION = 0x0003,
|
|
MINOR_VERSION = 0x0000
|
|
#else
|
|
MAJOR_VERSION = 0x0001,
|
|
MINOR_VERSION = 0x2000
|
|
#endif
|
|
};
|
|
|
|
//.....................................................................
|
|
// These values control which other versions this program will connect
|
|
// to. Keep them current!
|
|
// If CHEAT is defined, the program will only connect to itself; these
|
|
// values aren't used.
|
|
//.....................................................................
|
|
enum VersionRangeEnum {
|
|
#ifdef FIXIT_VERSION_3
|
|
// ajw - We can only play against same version.
|
|
MIN_VERSION = VERSION_RA_300,
|
|
MAX_VERSION = VERSION_RA_300
|
|
#else
|
|
MIN_VERSION = VERSION_RED_ALERT_104, //0x00010000, // Version: 1.0
|
|
MAX_VERSION = VERSION_AFTERMATH //0x00012000 // Version: 1.2
|
|
#endif
|
|
};
|
|
|
|
//.....................................................................
|
|
// This is the program's version number, stored internally.
|
|
//.....................................................................
|
|
unsigned long Version;
|
|
unsigned short MajorVer;
|
|
unsigned short MinorVer;
|
|
|
|
//.....................................................................
|
|
// This array is used for formatting the version # as a string
|
|
//.....................................................................
|
|
char VersionName[30];
|
|
|
|
//.....................................................................
|
|
// This array contains special version labels (such as "Beta"), stored
|
|
// in the file VERSION.TXT. If the file isn't present, no label is
|
|
// shown.
|
|
//.....................................................................
|
|
char VersionText[16];
|
|
|
|
//.....................................................................
|
|
// Values used for "Version Clipping"
|
|
//.....................................................................
|
|
unsigned long MinClipVer;
|
|
unsigned long MaxClipVer;
|
|
|
|
//.....................................................................
|
|
// Bitfield Flags
|
|
// IsInitialized: is set if the VERSION.TXT file has been read
|
|
//.....................................................................
|
|
unsigned VersionInit : 1;
|
|
unsigned MajorInit : 1;
|
|
unsigned MinorInit : 1;
|
|
unsigned TextInit : 1;
|
|
};
|
|
#endif
|
|
/************************** end of version.h *******************************/
|
|
|