#ifndef __ASD_H #define __ASD_H /** * @file * @author Flugente (bears-pit.com) */ #include "types.h" /** Flugente: Arulco special division decision code * * As I do not want to alter the current strategic AI (fragile and obscure as it is), * I am leaving the control over a number of new toys to a second 'AI' - the 'Arulco Special Division'. * This should control if, how and when new features are used by the AI. * * It has its own 'budget', which allows it to purchase new actions. This serves to limit the amount of the AIs actions. * It also gives the player a way to compete with the AI - lower the AI budget, and the AI can do less harm. * For example, part of the AI budget might come from mine income, which the player can take away. * * If possible, the AI should have to buy and maintain its assets. * This way the player could harm the AI by specifically targetting those assets if he chooses so. * Ideally this gives the player another immersive way to do sth. in the game. * For example, enemy helicopters have to be bought, fuelled and repaired. * In order to stop enemy heli raids, the player could * - shoot them down * - steal enemy fuel deliveries * - sabotage enemy helis in their airfield * * There is a cyclic update of this AI. Each time the AI decides whether it wants (and can afford) new assets. * These assets then have to be ordered and can only be used once arrived. * The AI also decides how to use these assets. */ void InitASD( ); BOOLEAN SaveASDData( HWFILE hwFile ); BOOLEAN LoadASDData( HWFILE hwFile ); // when called, evaluate the current situation, and perform actions to harm the player if necessary void UpdateASD( ); // decide whether to purchase something void ASDDecideOnPurchases(); // decide in what to do with helicopters void ASDDecideHeliOperations(); // various flags for the AI to remember #define ASDFACT_HELI_UNLOCKED 0x00000001 // AI is allowed to purchase helicopters #define ASDFACT_JEEP_UNLOCKED 0x00000002 // AI is allowed to purchase jeeps #define ASDFACT_TANK_UNLOCKED 0x00000004 // AI is allowed to purchase tanks #define ASDFACT_ROBOT_UNLOCKED 0x00000008 // AI is allowed to purchase robots void SetASDFlag( UINT32 aFlag ); UINT32 ASDResourceDeliveryTime( UINT8 aType ); UINT32 ASDResourceCostMoney( UINT8 aType ); INT32 GetStrategicAIResourceCount( UINT8 aType ); // add resources to the AIs resource pool void AddStrategicAIResources( UINT8 aType, INT32 aAmount ); // when we receive an ordered shipment, reduce our backlog void ASDReduceOrderedStrategicResources( UINT8 aType, INT32 aAmount ); // enemy helis class ENEMY_HELI { public: // determine best heli flight path (minimising contact to hostile SAM sectors) and return number of possible SAM contacts UINT8 SetHeliFlightPath( UINT8 aDest ); void Destroy( ); public: UINT32 flagmask; // flags: destroyed, refueling... UINT8 sector_current; // we are here UINT8 sector_destination; // we want to fly here UINT8 sector_waypoint; // a sector we travel to between our starting point and our destiantion. Choosing this gives us a way to plot a path minimising SAM-exposure UINT8 sector_home; // this is where our base is UINT8 troopcount; // number of troops we carry UINT8 hp; UINT8 fuel; }; extern std::vector gEnemyHeliVector; void EnemyHeliInit( ); void AddNewHeli( ); // all enemy helis carrying troops in this sector drop these into combat, and get the order to head home void EnemyHeliTroopDrop( UINT8 aSector ); std::set GetEnemyHeliSectors( BOOLEAN afKnownToPlayer ); // returns vector of all helis, -1 if known to player, id otherwise std::vector GetEnemyHeliIDKnowledgeStatus(); void BuyHeliInfoWithIntel( INT16 id ); void UpdateEnemyHeliRepair( INT16 id ); void UpdateEnemyHeliRefuel( INT16 id ); void UpdateEnemyHeli( INT16 id ); void EnemyHeliSAMCheck( INT16 id ); void EnemyHeliMANPADSCheck( INT16 id ); void EnemyHeliCheckPlayerKnowledge( INT16 id ); UINT8 NumPlayerAirSpaceOnHeliPath( UINT8 aStart, UINT8 aEnd ); // get the next sector in an enemy heli flight path. UINT8 GetNextEnemyHeliSector( UINT8 aStart, UINT8 aDest ); void HandleEnemyHelicopterOnGroundGraphic( ); void UpdateAndDamageEnemyHeliIfFound( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ, INT32 sGridNo, UINT8 ubDamage, BOOLEAN aDestroyed = FALSE ); // enemy tanks (how and when they are used) UINT32 ASDResourceCostFuel( UINT8 aType ); // if ASD is used, any tanks the queen uses in mobile attacks come from its pool, and we have to account for that BOOLEAN ASDSoldierUpgradeToTank( ); BOOLEAN ASDSoldierUpgradeToJeep( ); BOOLEAN ASDSoldierUpgradeToRobot( ); #endif //__ASD_H