Initial Source Code commit
Initial commit of original Tiberian Dawn and Red Alert source code converted to build as DLLs, and compatible with the release version of Command & Conquer Remastered.
This commit is contained in:
parent
ea8ecc76fa
commit
03416d24e1
1038 changed files with 629779 additions and 0 deletions
523
REDALERT/HDATA.CPP
Normal file
523
REDALERT/HDATA.CPP
Normal file
|
@ -0,0 +1,523 @@
|
|||
//
|
||||
// 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/HDATA.CPP 1 3/03/97 10:24a 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 : HDATA.CPP *
|
||||
* *
|
||||
* Programmer : Joe L. Bostic *
|
||||
* *
|
||||
* Start Date : May 22, 1994 *
|
||||
* *
|
||||
* Last Update : September 4, 1996 [JLB] *
|
||||
* *
|
||||
*---------------------------------------------------------------------------------------------*
|
||||
* Functions: *
|
||||
* HouseTypeClass::As_Reference -- Fetches a reference to the house specified. *
|
||||
* HouseTypeClass::From_Name -- Fetch house pointer from its name. *
|
||||
* HouseTypeClass::HouseTypeClass -- Constructor for house type objects. *
|
||||
* HouseTypeClass::Init_Heap -- Allocate all heap objects for the house types. *
|
||||
* HouseTypeClass::One_Time -- One-time initialization *
|
||||
* HouseTypeClass::Read_INI -- Fetch the house control values from ini database. *
|
||||
* HouseTypeClass::Remap_Table -- Fetches the remap table for this house. *
|
||||
* HouseTypeClass::operator delete -- Returns a house type object back to the heap. *
|
||||
* HouseTypeClass::operator new -- Allocates a house type class object from special heap. *
|
||||
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
|
||||
#include "function.h"
|
||||
|
||||
static HouseTypeClass const HouseEngland(
|
||||
HOUSE_ENGLAND,
|
||||
"England", // NAME: House name.
|
||||
TXT_ENGLAND, // FULLNAME: Translated house name.
|
||||
"ENG", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_GREEN, // Remap color ID number.
|
||||
'E' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseGermany(
|
||||
HOUSE_GERMANY,
|
||||
"Germany", // NAME: House name.
|
||||
TXT_GERMANY, // FULLNAME: Translated house name.
|
||||
"GER", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_GREY, // Remap color ID number.
|
||||
'G' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseFrance(
|
||||
HOUSE_FRANCE,
|
||||
"France", // NAME: House name.
|
||||
TXT_FRANCE, // FULLNAME: Translated house name.
|
||||
"FRA", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_BLUE, // Remap color ID number.
|
||||
'F' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseUkraine(
|
||||
HOUSE_UKRAINE,
|
||||
"Ukraine", // NAME: House name.
|
||||
TXT_UKRAINE, // FULLNAME: Translated house name.
|
||||
"UKA", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_ORANGE, // Remap color ID number.
|
||||
'K' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseUSSR(
|
||||
HOUSE_USSR,
|
||||
"USSR", // NAME: House name.
|
||||
TXT_USSR, // FULLNAME: Translated house name.
|
||||
"RED", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_RED, // Remap color ID number.
|
||||
'U' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseGreece(
|
||||
HOUSE_GREECE,
|
||||
"Greece", // NAME: House name.
|
||||
TXT_GREECE, // FULLNAME: Translated house name.
|
||||
"GRE", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_LTBLUE, // Remap color ID number.
|
||||
'G' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseTurkey(
|
||||
HOUSE_TURKEY,
|
||||
"Turkey", // NAME: House name.
|
||||
TXT_TURKEY, // FULLNAME: Translated house name.
|
||||
"TRK", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_BROWN, // Remap color ID number.
|
||||
'T' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseSpain(
|
||||
HOUSE_SPAIN,
|
||||
"Spain", // NAME: House name.
|
||||
TXT_SPAIN, // FULLNAME: Translated house name.
|
||||
"SPN", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_GOLD, // Remap color ID number.
|
||||
'S' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseGood(
|
||||
HOUSE_GOOD,
|
||||
"GoodGuy", // NAME: House name.
|
||||
TXT_GOODGUY, // FULLNAME: Translated house name.
|
||||
"GDI", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_LTBLUE, // Remap color ID number.
|
||||
'G' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseBad(
|
||||
HOUSE_BAD,
|
||||
"BadGuy", // NAME: House name.
|
||||
TXT_BADGUY, // FULLNAME: Translated house name.
|
||||
"NOD", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_RED, // Remap color ID number.
|
||||
'B' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseCivilian(
|
||||
HOUSE_NEUTRAL,
|
||||
"Neutral", // NAME: House name.
|
||||
TXT_CIVILIAN, // FULLNAME: Translated house name.
|
||||
"CIV", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_GOLD, // Remap color ID number.
|
||||
'C' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseJP(
|
||||
HOUSE_JP,
|
||||
"Special", // NAME: House name.
|
||||
TXT_JP, // FULLNAME: Translated house name.
|
||||
"JP", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_GOLD, // Remap color ID number.
|
||||
'J' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseMulti1(
|
||||
HOUSE_MULTI1,
|
||||
"Multi1", // NAME: House name.
|
||||
TXT_CIVILIAN, // FULLNAME: Translated house name.
|
||||
"MP1", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_GOLD, // Remap color ID number.
|
||||
'M' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseMulti2(
|
||||
HOUSE_MULTI2,
|
||||
"Multi2", // NAME: House name.
|
||||
TXT_CIVILIAN, // FULLNAME: Translated house name.
|
||||
"MP2", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_LTBLUE, // Remap color ID number.
|
||||
'M' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseMulti3(
|
||||
HOUSE_MULTI3,
|
||||
"Multi3", // NAME: House name.
|
||||
TXT_CIVILIAN, // FULLNAME: Translated house name.
|
||||
"MP3", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_RED, // Remap color ID number.
|
||||
'M' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseMulti4(
|
||||
HOUSE_MULTI4,
|
||||
"Multi4", // NAME: House name.
|
||||
TXT_CIVILIAN, // FULLNAME: Translated house name.
|
||||
"MP4", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_GREEN, // Remap color ID number.
|
||||
'M' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseMulti5(
|
||||
HOUSE_MULTI5,
|
||||
"Multi5", // NAME: House name.
|
||||
TXT_CIVILIAN, // FULLNAME: Translated house name.
|
||||
"MP5", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_ORANGE, // Remap color ID number.
|
||||
'M' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseMulti6(
|
||||
HOUSE_MULTI6,
|
||||
"Multi6", // NAME: House name.
|
||||
TXT_CIVILIAN, // FULLNAME: Translated house name.
|
||||
"MP6", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_GREY, // Remap color ID number.
|
||||
'M' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseMulti7(
|
||||
HOUSE_MULTI7,
|
||||
"Multi7", // NAME: House name.
|
||||
TXT_CIVILIAN, // FULLNAME: Translated house name.
|
||||
"MP7", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_BLUE, // Remap color ID number.
|
||||
'M' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
static HouseTypeClass const HouseMulti8(
|
||||
HOUSE_MULTI8,
|
||||
"Multi8", // NAME: House name.
|
||||
TXT_CIVILIAN, // FULLNAME: Translated house name.
|
||||
"MP8", // SUFFIX: House file suffix.
|
||||
0, // LEMON: Lemon vehicle frequency.
|
||||
PCOLOR_BROWN, // Remap color ID number.
|
||||
'M' // VOICE: Voice prefix character.
|
||||
);
|
||||
|
||||
#ifdef OBSOLETE
|
||||
HouseTypeClass const * const HouseTypeClass::Pointers[HOUSE_COUNT] = {
|
||||
&HouseSpain,
|
||||
&HouseGreece,
|
||||
&HouseUSSR,
|
||||
&HouseEngland,
|
||||
&HouseUkraine,
|
||||
&HouseGermany,
|
||||
&HouseFrance,
|
||||
&HouseTurkey,
|
||||
&HouseGood,
|
||||
&HouseBad,
|
||||
&HouseCivilian,
|
||||
&HouseJP,
|
||||
&HouseMulti1,
|
||||
&HouseMulti2,
|
||||
&HouseMulti3,
|
||||
&HouseMulti4,
|
||||
&HouseMulti5,
|
||||
&HouseMulti6,
|
||||
&HouseMulti7,
|
||||
&HouseMulti8,
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
/***********************************************************************************************
|
||||
* HouseTypeClass::HouseTypeClass -- Constructor for house type objects. *
|
||||
* *
|
||||
* This is the constructor for house type objects. This object holds the constant data *
|
||||
* for the house type. *
|
||||
* *
|
||||
* INPUT: see below... *
|
||||
* *
|
||||
* OUTPUT: none *
|
||||
* *
|
||||
* WARNINGS: none *
|
||||
* *
|
||||
* HISTORY: *
|
||||
* 06/21/1994 JLB : Created. *
|
||||
*=============================================================================================*/
|
||||
HouseTypeClass::HouseTypeClass(
|
||||
HousesType house,
|
||||
char const * ini,
|
||||
int fullname,
|
||||
char const * ext,
|
||||
int lemon,
|
||||
PlayerColorType remapcolor,
|
||||
char prefix) :
|
||||
AbstractTypeClass(RTTI_HOUSETYPE, house, fullname, ini),
|
||||
// RTTI(RTTI_HOUSETYPE),
|
||||
// ID(house),
|
||||
House(house),
|
||||
// IniName(ini),
|
||||
// FullName(fullname),
|
||||
Lemon(lemon),
|
||||
RemapColor(remapcolor),
|
||||
Prefix(prefix),
|
||||
FirepowerBias(1),
|
||||
GroundspeedBias(1),
|
||||
AirspeedBias(1),
|
||||
ArmorBias(1),
|
||||
ROFBias(1),
|
||||
CostBias(1),
|
||||
BuildSpeedBias(1)
|
||||
{
|
||||
strncpy(Suffix, ext, 3);
|
||||
Suffix[3] = '\0';
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************************************
|
||||
* HouseTypeClass::operator new -- Allocates a house type class object from special heap. *
|
||||
* *
|
||||
* This will allocate a house type object from the special heap that is used to maintain *
|
||||
* objects of this type. *
|
||||
* *
|
||||
* INPUT: none *
|
||||
* *
|
||||
* OUTPUT: Returns a pointer to the newly allocated house type object. *
|
||||
* *
|
||||
* WARNINGS: If there is insufficient room, this routine may return NULL. *
|
||||
* *
|
||||
* HISTORY: *
|
||||
* 09/04/1996 JLB : Created. *
|
||||
*=============================================================================================*/
|
||||
void * HouseTypeClass::operator new(size_t)
|
||||
{
|
||||
return(HouseTypes.Alloc());
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************************************
|
||||
* HouseTypeClass::operator delete -- Returns a house type object back to the heap. *
|
||||
* *
|
||||
* This will return the house type object specified back into the special heap that *
|
||||
* is used to maintain house type objects. *
|
||||
* *
|
||||
* INPUT: ptr -- Pointer to the house type object to delete. *
|
||||
* *
|
||||
* OUTPUT: none *
|
||||
* *
|
||||
* WARNINGS: none *
|
||||
* *
|
||||
* HISTORY: *
|
||||
* 09/04/1996 JLB : Created. *
|
||||
*=============================================================================================*/
|
||||
void HouseTypeClass::operator delete(void * ptr)
|
||||
{
|
||||
HouseTypes.Free((HouseTypeClass *)ptr);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************************************
|
||||
* HouseTypeClass::Init_Heap -- Allocate all heap objects for the house types. *
|
||||
* *
|
||||
* This will preallocate all the house types. They must be allocated in a particular order. *
|
||||
* *
|
||||
* INPUT: none *
|
||||
* *
|
||||
* OUTPUT: none *
|
||||
* *
|
||||
* WARNINGS: This routine should be called only once at the beginning of the game. *
|
||||
* *
|
||||
* HISTORY: *
|
||||
* 09/04/1996 JLB : Created. *
|
||||
*=============================================================================================*/
|
||||
void HouseTypeClass::Init_Heap(void)
|
||||
{
|
||||
/*
|
||||
** These house type class objects must be allocated in the exact order that they
|
||||
** are specified in the HousesType enumeration. This is necessary because the heap
|
||||
** allocation block index serves double duty as the type number index.
|
||||
*/
|
||||
new HouseTypeClass(HouseSpain);
|
||||
new HouseTypeClass(HouseGreece);
|
||||
new HouseTypeClass(HouseUSSR);
|
||||
new HouseTypeClass(HouseEngland);
|
||||
new HouseTypeClass(HouseUkraine);
|
||||
new HouseTypeClass(HouseGermany);
|
||||
new HouseTypeClass(HouseFrance);
|
||||
new HouseTypeClass(HouseTurkey);
|
||||
new HouseTypeClass(HouseGood);
|
||||
new HouseTypeClass(HouseBad);
|
||||
new HouseTypeClass(HouseCivilian);
|
||||
new HouseTypeClass(HouseJP);
|
||||
new HouseTypeClass(HouseMulti1);
|
||||
new HouseTypeClass(HouseMulti2);
|
||||
new HouseTypeClass(HouseMulti3);
|
||||
new HouseTypeClass(HouseMulti4);
|
||||
new HouseTypeClass(HouseMulti5);
|
||||
new HouseTypeClass(HouseMulti6);
|
||||
new HouseTypeClass(HouseMulti7);
|
||||
new HouseTypeClass(HouseMulti8);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************************************
|
||||
* HouseTypeClass::From_Name -- Fetch house pointer from its name. *
|
||||
* *
|
||||
* This routine will convert the ASCII house name specified into a *
|
||||
* real house number. Typically, this is used when processing a *
|
||||
* scenario INI file. *
|
||||
* *
|
||||
* INPUT: name -- ASCII name of house to process. *
|
||||
* *
|
||||
* OUTPUT: Returns with actual house number represented by the ASCII *
|
||||
* name specified. *
|
||||
* *
|
||||
* WARNINGS: none *
|
||||
* *
|
||||
* HISTORY: *
|
||||
* 10/07/1992 JLB : Created. *
|
||||
* 05/21/1994 JLB : Converted to member function. *
|
||||
*=============================================================================================*/
|
||||
HousesType HouseTypeClass::From_Name(char const * name)
|
||||
{
|
||||
if (name != NULL) {
|
||||
for (HousesType house = HOUSE_FIRST; house < HOUSE_COUNT; house++) {
|
||||
if (stricmp(As_Reference(house).IniName, name) == 0) {
|
||||
// if (stricmp(Pointers[house]->IniName, name) == 0) {
|
||||
return(house);
|
||||
}
|
||||
}
|
||||
}
|
||||
return(HOUSE_NONE);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************************************
|
||||
* HouseTypeClass::One_Time -- One-time initialization *
|
||||
* *
|
||||
* INPUT: none *
|
||||
* *
|
||||
* OUTPUT: none *
|
||||
* *
|
||||
* WARNINGS: none *
|
||||
* *
|
||||
* HISTORY: *
|
||||
* 05/21/1994 JLB : Converted to member function. *
|
||||
* 06/19/1996 JLB : Converted to regular heap class management. *
|
||||
*=============================================================================================*/
|
||||
void HouseTypeClass::One_Time(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************************************
|
||||
* HouseTypeClass::As_Reference -- Fetches a reference to the house specified. *
|
||||
* *
|
||||
* Use this routine to fetch a reference to the house number specified. *
|
||||
* *
|
||||
* INPUT: house -- The house number (HousesType) to look up. *
|
||||
* *
|
||||
* OUTPUT: Returns with a reference to the HouseTypeClass object that matches the house *
|
||||
* number specified. *
|
||||
* *
|
||||
* WARNINGS: none *
|
||||
* *
|
||||
* HISTORY: *
|
||||
* 01/23/1995 JLB : Created. *
|
||||
*=============================================================================================*/
|
||||
HouseTypeClass & HouseTypeClass::As_Reference(HousesType house)
|
||||
{
|
||||
return(*HouseTypes.Ptr(house));
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************************************
|
||||
* HouseTypeClass::Remap_Table -- Fetches the remap table for this house. *
|
||||
* *
|
||||
* Use this routine to fetch the remap table assigned to this house. The remap table is *
|
||||
* what gives the house's units/buildings their distinctive color. *
|
||||
* *
|
||||
* INPUT: none *
|
||||
* *
|
||||
* OUTPUT: Returns with a pointer to the remap table to use for this house. *
|
||||
* *
|
||||
* WARNINGS: none *
|
||||
* *
|
||||
* HISTORY: *
|
||||
* 06/03/1996 JLB : Created. *
|
||||
*=============================================================================================*/
|
||||
unsigned char const * HouseTypeClass::Remap_Table(void) const
|
||||
{
|
||||
return(ColorRemaps[RemapColor].RemapTable);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************************************
|
||||
* HouseTypeClass::Read_INI -- Fetch the house control values from ini database. *
|
||||
* *
|
||||
* This routine will fetch the rules controllable values for the house type from the *
|
||||
* INI database specified. *
|
||||
* *
|
||||
* INPUT: ini -- Reference to the INI database to fetch the house control values from. *
|
||||
* *
|
||||
* OUTPUT: bool; Was the house section found and processed? *
|
||||
* *
|
||||
* WARNINGS: none *
|
||||
* *
|
||||
* HISTORY: *
|
||||
* 09/04/1996 JLB : Created. *
|
||||
*=============================================================================================*/
|
||||
bool HouseTypeClass::Read_INI(CCINIClass & ini)
|
||||
{
|
||||
if (ini.Is_Present(Name())) {
|
||||
FirepowerBias = ini.Get_Fixed(Name(), "Firepower", FirepowerBias);
|
||||
GroundspeedBias = ini.Get_Fixed(Name(), "Groundspeed", GroundspeedBias);
|
||||
AirspeedBias = ini.Get_Fixed(Name(), "Airspeed", AirspeedBias);
|
||||
ArmorBias = ini.Get_Fixed(Name(), "Armor", ArmorBias);
|
||||
ROFBias = ini.Get_Fixed(Name(), "ROF", ROFBias);
|
||||
CostBias = ini.Get_Fixed(Name(), "Cost", CostBias);
|
||||
BuildSpeedBias = ini.Get_Fixed(Name(), "BuildTime", BuildSpeedBias);
|
||||
return(true);
|
||||
}
|
||||
return(false);
|
||||
}
|
Reference in a new issue