Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,8 @@ static PoolSizeRec PoolSizes[] =
{ "ParticleUplinkCannonUpdate", 16, 16 },
{ "SpectreGunshipUpdate", 8, 8 },
{ "SpectreGunshipDeploymentUpdate", 8, 8 },
{ "KodiakUpdate", 8, 8 },
{ "KodiakDeploymentUpdate", 8, 8 },
{ "BaikonurLaunchPower", 4, 4 },
{ "RadiusDecalUpdate", 16, 16 },
{ "RadiusDecalBehavior", 32, 32 },
Expand Down
4 changes: 4 additions & 0 deletions GeneralsMD/Code/GameEngine/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -491,6 +491,8 @@ set(GAMEENGINE_SRC
Include/GameLogic/Module/WeaponBonusUpgrade.h
Include/GameLogic/Module/WeaponSetUpgrade.h
Include/GameLogic/Module/WorkerAIUpdate.h
Include/GameLogic/Module/KodiakDeploymentUpdate.h
Include/GameLogic/Module/KodiakUpdate.h
Include/GameLogic/Object.h
Include/GameLogic/ObjectCreationList.h
Include/GameLogic/ObjectIter.h
Expand Down Expand Up @@ -1082,6 +1084,8 @@ set(GAMEENGINE_SRC
Source/GameLogic/Object/Update/WaveGuideUpdate.cpp
Source/GameLogic/Object/Update/WeaponBonusUpdate.cpp
Source/GameLogic/Object/Update/ArmorDamageScalarUpdate.cpp
Source/GameLogic/Object/Update/KodiakDeploymentUpdate.cpp
Source/GameLogic/Object/Update/KodiakUpdate.cpp
Source/GameLogic/Object/Upgrade/ActiveShroudUpgrade.cpp
Source/GameLogic/Object/Upgrade/ArmorUpgrade.cpp
Source/GameLogic/Object/Upgrade/CommandSetUpgrade.cpp
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,7 @@ class ContainModuleInterface
virtual short getRiderSlot(ObjectID riderID) const = 0; // get the slot occupied by the object.
virtual short getPortableSlot(ObjectID portableID) const = 0; // get the slot occupied by the object.
virtual const ContainedItemsList* getAddOnList() const = 0;
virtual ContainedItemsList* getAddOnList() = 0;
};
//-------------------------------------------------------------------------------------------------

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
// FILE: KodiakDeploymentUpdate.h //////////////////////////////////////////////////////////////////////////
// Desc: Update module to handle deployment of the Kodiak Generals special power.from command center
///////////////////////////////////////////////////////////////////////////////////////////////////

#pragma once

#ifndef __KODIAK_DEPLOYMENT_UPDATE_H_
#define __KODIAK_DEPLOYMENT_UPDATE_H_

// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
#include "Common/KindOf.h"
#include "GameLogic/Module/SpecialPowerUpdateModule.h"
#include "SpecialPowerModule.h"
#include <GameClient/RadiusDecal.h>
#include "SpectreGunshipDeploymentUpdate.h"

// FORWARD REFERENCES /////////////////////////////////////////////////////////////////////////////
class SpecialPowerModule;
class ParticleSystem;
class FXList;
class AudioEventRTS;
enum ParticleSystemID CPP_11(: Int);
enum ScienceType CPP_11(: Int);

//#define MAX_OUTER_NODES 16

//#define PUCK


//enum GunshipCreateLocType CPP_11(: Int)
//{
// CREATE_GUNSHIP_AT_EDGE_NEAR_SOURCE,
// CREATE_GUNSHIP_AT_EDGE_FARTHEST_FROM_SOURCE,
// CREATE_GUNSHIP_AT_EDGE_NEAR_TARGET,
// CREATE_GUNSHIP_AT_EDGE_FARTHEST_FROM_TARGET,
//};



//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
class KodiakDeploymentUpdateModuleData : public ModuleData
{
public:
SpecialPowerTemplate *m_specialPowerTemplate;
ScienceType m_extraRequiredScience; ///< science required (if any) to actually execute this power
WeaponTemplate *m_howitzerWeaponTemplate;
AsciiString m_gunshipTemplateName;
AsciiString m_gattlingTemplateName;
// AsciiString m_howitzerTemplateName;
RadiusDecalTemplate m_attackAreaDecalTemplate;
RadiusDecalTemplate m_targetingReticleDecalTemplate;
UnsignedInt m_orbitFrames;
Real m_attackAreaRadius;
Real m_targetingReticleRadius;
Real m_gunshipOrbitRadius;
GunshipCreateLocType m_createLoc;


const ParticleSystemTemplate * m_gattlingStrafeFXParticleSystem;

KodiakDeploymentUpdateModuleData();
static void buildFieldParse(MultiIniFieldParse& p);

private:

};

//enum GunshipDeployStatus CPP_11(: Int)
//{
// GUNSHIPDEPLOY_STATUS_INSERTING,
// GUNSHIPDEPLOY_STATUS_ORBITING,
// GUNSHIPDEPLOY_STATUS_DEPARTING,
// GUNSHIPDEPLOY_STATUS_IDLE,
//};


//-------------------------------------------------------------------------------------------------
/** The default update module */
//-------------------------------------------------------------------------------------------------
class KodiakDeploymentUpdate : public SpecialPowerUpdateModule
{

MEMORY_POOL_GLUE_WITH_USERLOOKUP_CREATE( KodiakDeploymentUpdate, "KodiakDeploymentUpdate" )
MAKE_STANDARD_MODULE_MACRO_WITH_MODULE_DATA( KodiakDeploymentUpdate, KodiakDeploymentUpdateModuleData );

public:

KodiakDeploymentUpdate( Thing *thing, const ModuleData* moduleData );
// virtual destructor prototype provided by memory pool declaration

// SpecialPowerUpdateInterface
virtual Bool initiateIntentToDoSpecialPower(const SpecialPowerTemplate *specialPowerTemplate, const Object *targetObj, const Coord3D *targetPos, const Waypoint *way, UnsignedInt commandOptions );
virtual Bool isSpecialAbility() const { return false; }
virtual Bool isSpecialPower() const { return true; }
virtual Bool isActive() const {return FALSE;}
virtual SpecialPowerUpdateInterface* getSpecialPowerUpdateInterface() { return this; }
virtual CommandOption getCommandOption() const { return (CommandOption)0; }
virtual Bool isPowerCurrentlyInUse( const CommandButton *command = NULL ) const { return FALSE; };
virtual ScienceType getExtraRequiredScience() const { return getKodiakDeploymentUpdateModuleData()->m_extraRequiredScience; } //Does this object have more than one special power module with the same spTemplate?

virtual void onObjectCreated();
virtual UpdateSleepTime update();

void cleanUp();



virtual Bool doesSpecialPowerHaveOverridableDestinationActive() const { return FALSE; };
virtual Bool doesSpecialPowerHaveOverridableDestination() const { return FALSE; } //Does it have it, even if it's not active?
virtual void setSpecialPowerOverridableDestination( const Coord3D *loc ) {};

// Disabled conditions to process (termination conditions!)
virtual DisabledMaskType getDisabledTypesToProcess() const { return MAKE_DISABLED_MASK4( DISABLED_SUBDUED, DISABLED_UNDERPOWERED, DISABLED_EMP, DISABLED_HACKED ); }

protected:



SpecialPowerModuleInterface* m_specialPowerModule;
Coord3D m_initialTargetPosition;
ObjectID m_gunshipID;


};


#endif // __SPECTRE_GUNSHIP_DEPLOYMENT_UPDATE_H_

144 changes: 144 additions & 0 deletions GeneralsMD/Code/GameEngine/Include/GameLogic/Module/KodiakUpdate.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
// FILE: KodiakUpdate.h //////////////////////////////////////////////////////////////////////////
// Desc: Update module to handle weapon firing of the Kodiak Generals special power.
///////////////////////////////////////////////////////////////////////////////////////////////////

#pragma once

#ifndef __KODIAK_UPDATE_H_
#define __KODIAK_UPDATE_H_

// INCLUDES ///////////////////////////////////////////////////////////////////////////////////////
#include "Common/KindOf.h"
#include "GameLogic/Module/SpecialPowerUpdateModule.h"
#include "SpecialPowerModule.h"
#include <GameClient/RadiusDecal.h>
#include "UpdateModule.h"
#include "SpectreGunshipUpdate.h"

// FORWARD REFERENCES /////////////////////////////////////////////////////////////////////////////
class SpecialPowerModule;
class ParticleSystem;
class FXList;
class AudioEventRTS;
enum ParticleSystemID CPP_11(: Int);

//#define MAX_OUTER_NODES 16
//#define TRACKERS

//#define PUCK

//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
class KodiakUpdateModuleData : public ModuleData
{
public:
SpecialPowerTemplate *m_specialPowerTemplate;

RadiusDecalTemplate m_attackAreaDecalTemplate;
RadiusDecalTemplate m_targetingReticleDecalTemplate;
UnsignedInt m_orbitFrames;
UnsignedInt m_mainTargetingRate;
UnsignedInt m_sideTargetingRate;
UnsignedInt m_aaTargetingRate;
UnsignedInt m_turretRecenterFramesBeforeExit;
UnsignedInt m_initialAttackDelayFrames;

Real m_attackAreaRadius;
Real m_sideAttackAreaRadius;
Real m_aaAttackAreaRadius;
Real m_targetingReticleRadius;
Real m_gunshipOrbitRadius;
Real m_missileLockRadius;
UnsignedInt m_numMainTurrets;
UnsignedInt m_numSideTurrets;
UnsignedInt m_numAATurrets;

Real m_missileScatterRadius;
std::vector<Coord2D> m_scatterTargets; ///< targets for missile attack, amount of targets should match clip size of primary weapon

//const ParticleSystemTemplate * m_gattlingStrafeFXParticleSystem;

KodiakUpdateModuleData();
static void buildFieldParse(MultiIniFieldParse& p);


static void parseScatterTarget(INI* ini, void* instance, void* /*store*/, const void* /*userData*/);
private:

};

//-------------------------------------------------------------------------------------------------
/** The default update module */
//-------------------------------------------------------------------------------------------------
class KodiakUpdate : public SpecialPowerUpdateModule
{
MEMORY_POOL_GLUE_WITH_USERLOOKUP_CREATE( KodiakUpdate, "KodiakUpdate" )
MAKE_STANDARD_MODULE_MACRO_WITH_MODULE_DATA( KodiakUpdate, KodiakUpdateModuleData );

public:

KodiakUpdate( Thing *thing, const ModuleData* moduleData );
// virtual destructor prototype provided by memory pool declaration

// SpecialPowerUpdateInterface
virtual Bool initiateIntentToDoSpecialPower(const SpecialPowerTemplate *specialPowerTemplate, const Object *targetObj, const Coord3D *targetPos, const Waypoint *way, UnsignedInt commandOptions );
virtual Bool isSpecialAbility() const { return false; }
virtual Bool isSpecialPower() const { return true; }
virtual Bool isActive() const {return m_status < GUNSHIP_STATUS_DEPARTING;}
virtual SpecialPowerUpdateInterface* getSpecialPowerUpdateInterface() { return this; }
virtual CommandOption getCommandOption() const { return (CommandOption)0; }
virtual Bool isPowerCurrentlyInUse( const CommandButton *command = NULL ) const;

virtual void onObjectCreated();
virtual UpdateSleepTime update();

void cleanUp();



virtual Bool doesSpecialPowerHaveOverridableDestinationActive() const;
virtual Bool doesSpecialPowerHaveOverridableDestination() const { return true; } //Does it have it, even if it's not active?
virtual void setSpecialPowerOverridableDestination( const Coord3D *loc );

// Disabled conditions to process (termination conditions!)
virtual DisabledMaskType getDisabledTypesToProcess() const { return MAKE_DISABLED_MASK4( DISABLED_SUBDUED, DISABLED_UNDERPOWERED, DISABLED_EMP, DISABLED_HACKED ); }
static void parseScatterTarget(INI* ini, void* instance, void* /*store*/, const void* /*userData*/);
protected:

void setLogicalStatus( GunshipStatus newStatus ) { m_status = newStatus; }
void disengageAndDepartAO( Object *gunship );

Bool isPointOffMap( const Coord3D& testPos ) const;
Bool isFairDistanceFromShip( Object *target );

SpecialPowerModuleInterface* m_specialPowerModule;

void friend_enableAfterburners(Bool v);




Coord3D m_initialTargetPosition;
Coord3D m_overrideTargetDestination;
Coord3D m_movementPosition;
Coord3D m_positionToShootAt;


GunshipStatus m_status;

UnsignedInt m_orbitEscapeFrame;

RadiusDecal m_attackAreaDecal;
RadiusDecal m_targetingReticleDecal;

#if defined TRACKERS
RadiusDecal m_howitzerTrackerDecal;
#endif

AudioEventRTS m_afterburnerSound;

};


#endif // __KODIAK_UPDATE_H_

Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ class MultiAddOnContain : public TransportContain
virtual short getRiderSlot(ObjectID riderID) const;
virtual short getPortableSlot(ObjectID riderID) const;
virtual const ContainedItemsList* getAddOnList() const { return &m_addOnList; }
virtual ContainedItemsList* getAddOnList() { return &m_addOnList; }

private:
void parseAddOnEntry(INI* ini, void* instance, void* store, const void* /*userData*/);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,7 @@ class OpenContain : public UpdateModule,
virtual short getRiderSlot(ObjectID riderID) const { return -1; }
virtual short getPortableSlot(ObjectID portableID) const { return -1; }
virtual const ContainedItemsList* getAddOnList() const { return NULL; }
virtual ContainedItemsList* getAddOnList() { return NULL; }

void pruneDeadWanters();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,8 @@
#include "GameLogic/Module/ParticleUplinkCannonUpdate.h"
#include "GameLogic/Module/SpectreGunshipUpdate.h"
#include "GameLogic/Module/SpectreGunshipDeploymentUpdate.h"
#include "GameLogic/Module/KodiakUpdate.h"
#include "GameLogic/Module/KodiakDeploymentUpdate.h"
#include "GameLogic/Module/BaikonurLaunchPower.h"
#include "GameLogic/Module/BattlePlanUpdate.h"
#include "GameLogic/Module/LifetimeUpdate.h"
Expand Down Expand Up @@ -450,6 +452,8 @@ void ModuleFactory::init( void )
addModule( ParticleUplinkCannonUpdate );
addModule( SpectreGunshipUpdate );
addModule( SpectreGunshipDeploymentUpdate );
addModule( KodiakUpdate );
addModule( KodiakDeploymentUpdate );
addModule( BaikonurLaunchPower );
addModule( BattlePlanUpdate );
addModule( ProjectileStreamUpdate );
Expand Down
Loading