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
189
REDALERT/WARHEAD.CPP
Normal file
189
REDALERT/WARHEAD.CPP
Normal file
|
@ -0,0 +1,189 @@
|
|||
//
|
||||
// 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/WARHEAD.CPP 1 3/03/97 10:26a 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 : WARHEAD.CPP *
|
||||
* *
|
||||
* Programmer : Joe L. Bostic *
|
||||
* *
|
||||
* Start Date : 05/20/96 *
|
||||
* *
|
||||
* Last Update : July 19, 1996 [JLB] *
|
||||
* *
|
||||
*---------------------------------------------------------------------------------------------*
|
||||
* Functions: *
|
||||
* WarheadTypeClass::As_Pointer -- Convert a warhead type number into a pointer. *
|
||||
* WarheadTypeClass::Read_INI -- Fetches the warhead data from the INI database. *
|
||||
* WarheadTypeClass::WarheadTypeClass -- Default constructor for warhead objects. *
|
||||
* WarheadTypeClass::operator delete -- Returns warhead object back to special memory pool. *
|
||||
* WarheadTypeClass::operator new -- Allocate a warhead object from the special heap. *
|
||||
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
|
||||
|
||||
#include "function.h"
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** This is the warhead data object array.
|
||||
*/
|
||||
TFixedIHeapClass<WarheadTypeClass> Warheads;
|
||||
|
||||
|
||||
/***********************************************************************************************
|
||||
* WarheadTypeClass::WarheadTypeClass -- Default constructor for warhead objects. *
|
||||
* *
|
||||
* This default constructor for a warhead object will fill in all the default values *
|
||||
* for a warhead. It is presumed that these values will be normal unless specifically *
|
||||
* overridden by the INI database. *
|
||||
* *
|
||||
* INPUT: none *
|
||||
* *
|
||||
* OUTPUT: none *
|
||||
* *
|
||||
* WARNINGS: none *
|
||||
* *
|
||||
* HISTORY: *
|
||||
* 07/19/1996 JLB : Created. *
|
||||
*=============================================================================================*/
|
||||
WarheadTypeClass::WarheadTypeClass(char const * name) :
|
||||
ID(Warheads.ID(this)),
|
||||
IniName(name),
|
||||
SpreadFactor(1),
|
||||
IsWallDestroyer(false),
|
||||
IsWoodDestroyer(false),
|
||||
IsTiberiumDestroyer(false),
|
||||
IsOrganic(false),
|
||||
ExplosionSet(0),
|
||||
InfantryDeath(0)
|
||||
{
|
||||
for (ArmorType armor = ARMOR_FIRST; armor < ARMOR_COUNT; armor++) {
|
||||
Modifier[armor] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************************************
|
||||
* WarheadTypeClass::operator new -- Allocate a warhead object from the special heap. *
|
||||
* *
|
||||
* This will allocate a warhead object from the special heap that is maintained for *
|
||||
* this purpose. *
|
||||
* *
|
||||
* INPUT: none *
|
||||
* *
|
||||
* OUTPUT: Returns with a pointer to the newly allocated warhead type object. If there is *
|
||||
* insufficient memory for the allocation, then NULL is returned. *
|
||||
* *
|
||||
* WARNINGS: none *
|
||||
* *
|
||||
* HISTORY: *
|
||||
* 07/19/1996 JLB : Created. *
|
||||
*=============================================================================================*/
|
||||
void * WarheadTypeClass::operator new(size_t)
|
||||
{
|
||||
return(Warheads.Alloc());
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************************************
|
||||
* WarheadTypeClass::operator delete -- Returns warhead object back to special memory pool. *
|
||||
* *
|
||||
* This routine will return the warhead object to the memory pool from whence it came. *
|
||||
* *
|
||||
* INPUT: pointer -- Pointer to the warhead object to return to the memory pool. *
|
||||
* *
|
||||
* OUTPUT: none *
|
||||
* *
|
||||
* WARNINGS: none *
|
||||
* *
|
||||
* HISTORY: *
|
||||
* 07/19/1996 JLB : Created. *
|
||||
*=============================================================================================*/
|
||||
void WarheadTypeClass::operator delete(void * pointer)
|
||||
{
|
||||
Warheads.Free((WarheadTypeClass *)pointer);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************************************
|
||||
* WarheadTypeClass::As_Pointer -- Convert a warhead type number into a pointer. *
|
||||
* *
|
||||
* This will locate the warhead type specified and return a pointer to it. *
|
||||
* *
|
||||
* INPUT: warhead -- The warhead to convert into a pointer. *
|
||||
* *
|
||||
* OUTPUT: Returns with a pointer to the warhead type object that is represented by the *
|
||||
* warhead type number specified. *
|
||||
* *
|
||||
* WARNINGS: none *
|
||||
* *
|
||||
* HISTORY: *
|
||||
* 07/19/1996 JLB : Created. *
|
||||
*=============================================================================================*/
|
||||
WarheadTypeClass * WarheadTypeClass::As_Pointer(WarheadType warhead)
|
||||
{
|
||||
if (warhead != WARHEAD_NONE) {
|
||||
return(Warheads.Ptr(warhead));
|
||||
}
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************************************
|
||||
* WarheadTypeClass::Read_INI -- Fetches the warhead data from the INI database. *
|
||||
* *
|
||||
* Use this routine to retrieve the data specific to this warhead type class object from *
|
||||
* the INI database specified. Typical use of this is when processing the rules.ini *
|
||||
* file. *
|
||||
* *
|
||||
* INPUT: ini -- Reference to the INI database to fetch the values from. *
|
||||
* *
|
||||
* OUTPUT: bool; Was the warhead entry found and the data retrieved? *
|
||||
* *
|
||||
* WARNINGS: none *
|
||||
* *
|
||||
* HISTORY: *
|
||||
* 07/19/1996 JLB : Created. *
|
||||
*=============================================================================================*/
|
||||
bool WarheadTypeClass::Read_INI(CCINIClass & ini)
|
||||
{
|
||||
if (ini.Is_Present(Name())) {
|
||||
SpreadFactor = ini.Get_Int(Name(), "Spread", SpreadFactor);
|
||||
IsWallDestroyer = ini.Get_Bool(Name(), "Wall", IsWallDestroyer);
|
||||
IsWoodDestroyer = ini.Get_Bool(Name(), "Wood", IsWoodDestroyer);
|
||||
IsTiberiumDestroyer = ini.Get_Bool(Name(), "Ore", IsTiberiumDestroyer);
|
||||
ExplosionSet = ini.Get_Int(Name(), "Explosion", ExplosionSet);
|
||||
InfantryDeath = ini.Get_Int(Name(), "InfDeath", InfantryDeath);
|
||||
|
||||
char buffer[128];
|
||||
if (ini.Get_String(Name(), "Verses", "100%%,100%%,100%%,100%%,100%%", buffer, sizeof(buffer))) {
|
||||
char * aval = strtok(buffer, ",");
|
||||
for (ArmorType armor = ARMOR_FIRST; armor < ARMOR_COUNT; armor++) {
|
||||
Modifier[armor] = fixed(aval);
|
||||
aval = strtok(NULL, ",");
|
||||
}
|
||||
}
|
||||
|
||||
IsOrganic = (Modifier[ARMOR_STEEL] == 0);
|
||||
return(true);
|
||||
}
|
||||
return(false);
|
||||
}
|
||||
|
Reference in a new issue