// // 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/BBDATA.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 : BBDATA.CPP * * * * Programmer : Joe L. Bostic * * * * Start Date : May 23, 1994 * * * * Last Update : July 19, 1996 [JLB] * * * *---------------------------------------------------------------------------------------------* * Functions: * * BulletTypeClass::As_Reference -- Returns with a reference to the bullet type object specif* * BulletTypeClass::BulletTypeClass -- Constructor for bullet type objects. * * BulletTypeClass::Init_Heap -- Initialize the heap objects for the bullet type. * * BulletTypeClass::Load_Shapes -- Load shape data for bullet types. * * BulletTypeClass::One_Time -- Performs the one time processing for bullets. * * BulletTypeClass::Read_INI -- Fetch the bullet type data from the INI database. * * BulletTypeClass::operator delete -- Deletes a bullet type object from the special heap. * * BulletTypeClass::operator new -- Allocates a bullet type object from the special heap. * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #include "function.h" /*********************************************************************************************** * BulletTypeClass::BulletTypeClass -- Constructor for bullet type objects. * * * * This is basically a constructor for static type objects used by bullets. All bullets * * are of a type constructed by this routine at game initialization time. * * * * INPUT: see below... * * * * OUTPUT: none * * * * WARNINGS: none * * * * HISTORY: * * 10/17/1994 JLB : Created. * * 07/17/1996 JLB : Uses correct default values. * *=============================================================================================*/ BulletTypeClass::BulletTypeClass(char const * name) : ObjectTypeClass( RTTI_BULLETTYPE, BulletTypes.ID(this), true, true, false, false, true, true, false, TXT_NONE, name ), IsHigh(false), IsShadow(true), IsArcing(false), IsDropping(false), IsInvisible(false), IsProximityArmed(false), IsFlameEquipped(false), IsFueled(false), IsFaceless(true), IsInaccurate(false), IsTranslucent(false), IsAntiAircraft(false), IsAntiGround(true), IsAntiSub(false), IsDegenerate(false), IsSubSurface(false), IsParachuted(false), IsGigundo(false), Type(BulletType(ID)), ROT(0), Arming(0), Tumble(0) { } /*********************************************************************************************** * BulletTypeClass::operator new -- Allocates a bullet type object from the special heap. * * * * This allocates a bullet type object from a special heap that is used just for * * objects of this type. * * * * INPUT: none * * * * OUTPUT: Returns with a pointer to an allocated block or NULL if the allocation could not * * occur. * * * * WARNINGS: none * * * * HISTORY: * * 07/06/1996 JLB : Created. * *=============================================================================================*/ void * BulletTypeClass::operator new(size_t) { return(BulletTypes.Alloc()); } /*********************************************************************************************** * BulletTypeClass::operator delete -- Deletes a bullet type object from the special heap. * * * * This is the counterpart to the operator new function for bullet type objects. It will * * return the bullet type object back to the special heap used for bullet type object * * allocation. * * * * INPUT: ptr -- Pointer to the bullet type object to free. * * * * OUTPUT: none * * * * WARNINGS: none * * * * HISTORY: * * 07/06/1996 JLB : Created. * *=============================================================================================*/ void BulletTypeClass::operator delete(void * ptr) { BulletTypes.Free((BulletTypeClass *)ptr); } /*********************************************************************************************** * BulletTypeClass::Init_Heap -- Initialize the heap objects for the bullet type. * * * * This performs any necessary initialization for the bullet types. * * * * INPUT: none * * * * OUTPUT: none * * * * WARNINGS: none * * * * HISTORY: * * 07/06/1996 JLB : Created. * *=============================================================================================*/ void BulletTypeClass::Init_Heap(void) { /* ** These bullet type class objects must be allocated in the exact order that they ** are specified in the BulletType enumeration. This is necessary because the heap ** allocation block index serves double duty as the type number index. */ new BulletTypeClass("Invisible"); // BULLET_INVISIBLE new BulletTypeClass("Cannon"); // BULLET_CANNON new BulletTypeClass("Ack"); // BULLET_ACK new BulletTypeClass("Torpedo"); // BULLET_TORPEDO new BulletTypeClass("FROG"); // BULLET_FROG new BulletTypeClass("HeatSeeker"); // BULLET_HEAT_SEEKER new BulletTypeClass("LaserGuided"); // BULLET_LASER_GUIDED new BulletTypeClass("Lobbed"); // BULLET_LOBBED new BulletTypeClass("Bomblet"); // BULLET_BOMBLET new BulletTypeClass("Ballistic"); // BULLET_BALLISTIC new BulletTypeClass("Parachute"); // BULLET_PARACHUTE new BulletTypeClass("Fireball"); // BULLET_FIREBALL new BulletTypeClass("LeapDog"); // BULLET_DOG new BulletTypeClass("Catapult"); // BULLET_CATAPULT new BulletTypeClass("AAMissile"); // BULLET_AAMISSILE new BulletTypeClass("GPSSatellite");// BULLET_GPS_SATELLITE new BulletTypeClass("NukeUp"); // BULLET_NUKE_UP new BulletTypeClass("NukeDown"); // BULLET_NUKE_DOWN } /*********************************************************************************************** * BulletTypeClass::One_Time -- Performs the one time processing for bullets. * * * * This routine is used to perform any one time processing for the bullet type class. It * * handles loading of the shape files. * * * * INPUT: none * * * * OUTPUT: none * * * * WARNINGS: This routine must be called before any rendering of bullets occurs and should * * only be called once. * * * * HISTORY: * * 05/28/1994 JLB : Created. * *=============================================================================================*/ void BulletTypeClass::One_Time(void) { /* ** Load the bullet shapes. */ for (int index = BULLET_FIRST; index < BULLET_COUNT; index++) { BulletTypeClass const & bullet = As_Reference((BulletType)index); char fullname[_MAX_FNAME+_MAX_EXT]; if (!bullet.IsInvisible) { _makepath(fullname, NULL, NULL, bullet.GraphicName, ".SHP"); #ifdef NDEBUG ((void const *&)bullet.ImageData) = MFCD::Retrieve(fullname); #else RawFileClass file(fullname); if (file.Is_Available()) { ((void const *&)bullet.ImageData) = Load_Alloc_Data(file); } else { ((void const *&)bullet.ImageData) = MFCD::Retrieve(fullname); } #endif } } } /*********************************************************************************************** * BulletTypeClass::As_Reference -- Returns with a reference to the bullet type object specifi * * * * Given a bullet type identifier, this routine will return a reference to the bullet type * * object it refers to. * * * * INPUT: type -- The bullet type identifier to convert to a reference. * * * * OUTPUT: Returns with a reference to the bullet type object. * * * * WARNINGS: Make sure that the type parameter specified is a valid bullet type. If not, * * then the results are undefined. * * * * HISTORY: * * 07/06/1996 JLB : Created. * *=============================================================================================*/ BulletTypeClass & BulletTypeClass::As_Reference(BulletType type) { return(*BulletTypes.Ptr(type)); } /*********************************************************************************************** * BulletTypeClass::Read_INI -- Fetch the bullet type data from the INI database. * * * * Use this routine to fetch override information about this bullet type class object * * from the INI database specified. * * * * INPUT: ini -- Reference to the INI database to examine. * * * * OUTPUT: bool; Was the section for this bullet found and the data extracted? * * * * WARNINGS: none * * * * HISTORY: * * 07/19/1996 JLB : Created. * *=============================================================================================*/ bool BulletTypeClass::Read_INI(CCINIClass & ini) { if (ini.Is_Present(Name())) { Arming = ini.Get_Int(Name(), "Arm", Arming); ROT = ini.Get_Int(Name(), "ROT", ROT); Tumble = ini.Get_Int(Name(), "Frames", Tumble); IsHigh = ini.Get_Bool(Name(), "High", IsHigh); IsShadow = ini.Get_Bool(Name(), "Shadow", IsShadow); IsArcing = ini.Get_Bool(Name(), "Arcing", IsArcing); IsDropping = ini.Get_Bool(Name(), "Dropping", IsDropping); IsInvisible = ini.Get_Bool(Name(), "Inviso", IsInvisible); IsProximityArmed = ini.Get_Bool(Name(), "Proximity", IsProximityArmed); IsFlameEquipped = ini.Get_Bool(Name(), "Animates", IsFlameEquipped); IsFueled = ini.Get_Bool(Name(), "Ranged", IsFueled); IsInaccurate = ini.Get_Bool(Name(), "Inaccuate", IsInaccurate); IsAntiAircraft = ini.Get_Bool(Name(), "AA", IsAntiAircraft); IsAntiGround = ini.Get_Bool(Name(), "AG", IsAntiGround); IsAntiSub = ini.Get_Bool(Name(), "ASW", IsAntiSub); IsDegenerate = ini.Get_Bool(Name(), "Degenerates", IsDegenerate); IsSubSurface = ini.Get_Bool(Name(), "UnderWater", IsSubSurface); IsParachuted = ini.Get_Bool(Name(), "Parachuted", IsParachuted); IsFaceless = !ini.Get_Bool(Name(), "Rotates", !IsFaceless); IsTranslucent = ini.Get_Bool(Name(), "Translucent", IsTranslucent); IsGigundo = ini.Get_Bool(Name(), "Gigundo", IsGigundo); ini.Get_String(Name(), "Image", GraphicName, GraphicName, sizeof(GraphicName)); return(true); } return(false); }