mirror of
https://github.com/1dot13/source.git
synced 2026-09-02 14:36:06 +02:00
New option AI_DECISION_INFO enables extended logging for AI decisions.
Moved zombie AI into separate file ZombieDecideAction.cpp New zombie AI: - simplified code - advancing using cover - if zombie cannot reach any opponent, he tries to hide - if zombie cannot reach opponent and cannot hide and he is under fire, he will retreat, seeking cover away from known opponents - if zombie doesn't know enemy location, he will try to run to closest friend who knows enemy location - new zombie AI has extended AI logging More water splash sounds (Data\Sounds\Misc\Splash1.ogg .. SplashN.ogg). CalcCoverValue: - allow moving into shallow water if it provides better position - special calculations for zombies: zombie is very dangerous at close range - if soldier has no gun, use different calculation based on distance instead of CTGT FindBestNearbyCover: zombies only choose spots that provide sight cover. Added functions for extended AI log. ClosestReachableDisturbance: - if soldier is zombie and he cannot climb, skip location - zombies do not attack vehicles - improved check to avoid choosing dying opponents EstimatePathCostToLocation: return 0 if checking for zombie which cannot climb and path needs climbing. RoamingRange: always max roaming range for zombies. SightCoverAtSpot, ProneSightCoverAtSpot: - improved max sight range calculation - added option for unlimited sight range check New AI functions: - AIDirection - AICheckIsSniper - AICheckIsMarksman - AICheckIsMedic - AICheckIsMortarOperator - AICheckIsGLOperator - AICheckIsOfficer - AICheckIsCommander - AICheckIsMachinegunner - AIGunInHandScoped - AIGunScoped - AIGunRange - AIGunClass - AIGunType - AIGunDeadliness - AIGunAmmo - AIGunAutofireCapable - FindObstacleNearSpot - InSmoke - CorpseWarning - CorpseEnemyTeam - CorpseMilitiaTeam - AICheckUnderground - AnyCoverAtSpot - AICheckHasWeaponOfType - AICheckHasGun - AICheckShortWeaponRange GetCorpseAtGridNo: additional check for valid gridno. More zombie raise sounds (Data\Sounds\Misc\ZombieRaise1.ogg .. ZombieRaiseN.ogg). GetCorpseRotFactor: improved code to return FLOAT value between 0 and 1. New debug topic id TOPIC_DECISIONS for logging AI decisions. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8760 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+53
-4
@@ -5,6 +5,7 @@
|
||||
#include "worlddef.h"
|
||||
#include "Soldier Control.h"
|
||||
#include "Isometric Utils.h"
|
||||
#include "Rotting Corpses.h"
|
||||
|
||||
#define TESTAICONTROL
|
||||
|
||||
@@ -109,6 +110,7 @@ typedef enum
|
||||
AI_ACTION_DOCTOR_SELF, // added by Flugente: AI-ONLY! bandage/surgery on self. DO NOT USE THIS FOR MERCS!!!
|
||||
AI_ACTION_SELFDETONATE, // added by Flugente: blow up an explosive in own inventory
|
||||
AI_ACTION_STOP_MEDIC, // sevenfm: stop giving aid animation
|
||||
AI_ACTION_LAST = AI_ACTION_STOP_MEDIC
|
||||
} ActionType;
|
||||
|
||||
|
||||
@@ -153,6 +155,12 @@ enum QuoteActionType
|
||||
|
||||
extern INT8 gbDiff[MAX_DIFF_PARMS][5];
|
||||
|
||||
enum{
|
||||
ADVANCE_SPOT_SIGHT_COVER,
|
||||
ADVANCE_SPOT_PRONE_COVER,
|
||||
ADVANCE_SPOT_ANY_COVER
|
||||
};
|
||||
|
||||
void ActionDone(SOLDIERTYPE *pSoldier);
|
||||
INT16 ActionInProgress(SOLDIERTYPE *pSoldier);
|
||||
|
||||
@@ -173,7 +181,9 @@ INT32 ClosestUnDisguisedPC( SOLDIERTYPE *pSoldier, INT32 * psDistance ); // Flug
|
||||
BOOLEAN CanAutoBandage( BOOLEAN fDoFullCheck );
|
||||
|
||||
void DebugAI( STR szOutput );
|
||||
INT8 DecideAction(SOLDIERTYPE *pSoldier);
|
||||
enum { AI_MSG_START, AI_MSG_DECIDE, AI_MSG_INFO, AI_MSG_TOPIC };
|
||||
void DebugAI(INT8 bMsgType, SOLDIERTYPE *pSoldier, STR szOutput, INT8 bAction = -1);
|
||||
INT8 DecideAction(SOLDIERTYPE *pSoldier);
|
||||
INT8 DecideActionBlack(SOLDIERTYPE *pSoldier);
|
||||
INT8 DecideActionEscort(SOLDIERTYPE *pSoldier);
|
||||
INT8 DecideActionGreen(SOLDIERTYPE *pSoldier);
|
||||
@@ -293,8 +303,13 @@ BOOLEAN AICheckIsFlanking( SOLDIERTYPE *pSoldier );
|
||||
|
||||
INT8 CalcMoraleNew(SOLDIERTYPE *pSoldier);
|
||||
|
||||
BOOLEAN ProneSightCoverAtSpot( SOLDIERTYPE *pSoldier, INT32 sSpot );
|
||||
BOOLEAN SightCoverAtSpot( SOLDIERTYPE *pSoldier, INT32 sSpot );
|
||||
BOOLEAN ProneSightCoverAtSpot(SOLDIERTYPE *pSoldier, INT32 sSpot, BOOLEAN fUnlimited);
|
||||
BOOLEAN SightCoverAtSpot(SOLDIERTYPE *pSoldier, INT32 sSpot, BOOLEAN fUnlimited);
|
||||
BOOLEAN AnyCoverAtSpot(SOLDIERTYPE *pSoldier, INT32 sSpot);
|
||||
BOOLEAN AnyCoverFromSpot(INT32 sSpot, INT8 bLevel, INT32 sThreatLoc, INT8 bThreatLevel);
|
||||
|
||||
INT32 FindAdvanceSpot(SOLDIERTYPE *pSoldier, INT32 sTargetSpot, INT8 bAction, UINT8 ubType, BOOLEAN fUnlimited);
|
||||
INT32 FindRetreatSpot(SOLDIERTYPE *pSoldier);
|
||||
|
||||
BOOLEAN CheckDoorAtGridno(UINT32 usGridNo);
|
||||
BOOLEAN CheckDoorNearGridno(UINT32 usGridNo);
|
||||
@@ -307,19 +322,53 @@ BOOLEAN FindNearbyExplosiveStructure(INT32 sSpot, INT8 bLevel);
|
||||
INT16 DistanceToClosestActiveOpponent(SOLDIERTYPE *pSoldier, INT32 sSpot);
|
||||
BOOLEAN ValidOpponent(SOLDIERTYPE* pSoldier, SOLDIERTYPE* pOpponent);
|
||||
|
||||
BOOLEAN AnyCoverFromSpot( INT32 sSpot, INT8 bLevel, INT32 sThreatLoc, INT8 bThreatLevel );
|
||||
UINT8 CountSeenEnemiesLastTurn( SOLDIERTYPE *pSoldier );
|
||||
|
||||
BOOLEAN FindObstacleNearSpot(INT32 sSpot, INT8 bLevel);
|
||||
|
||||
BOOLEAN CheckNPCDestination(SOLDIERTYPE *pSoldier, INT32 sGridNo);
|
||||
UINT8 SpotDangerLevel(SOLDIERTYPE *pSoldier, INT32 sGridNo);
|
||||
BOOLEAN AllowDeepWaterFlanking(SOLDIERTYPE *pSoldier);
|
||||
BOOLEAN AICheckUnderground(void);
|
||||
|
||||
BOOLEAN CorpseWarning(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel);
|
||||
BOOLEAN CorpseEnemyTeam(ROTTING_CORPSE *pCorpse);
|
||||
BOOLEAN CorpseMilitiaTeam(ROTTING_CORPSE *pCorpse);
|
||||
|
||||
BOOLEAN NorthSpot(INT32 sSpot, INT8 bLevel);
|
||||
BOOLEAN SoldierAI(SOLDIERTYPE *pSoldier);
|
||||
|
||||
UINT8 AIDirection(INT32 sSpot1, INT32 sSpot2);
|
||||
|
||||
BOOLEAN AIGunScoped(SOLDIERTYPE *pSoldier);
|
||||
BOOLEAN AIGunInHandScoped(SOLDIERTYPE *pSoldier);
|
||||
UINT16 AIGunRange(SOLDIERTYPE *pSoldier); // gun range in tiles
|
||||
UINT16 AIGunClass(SOLDIERTYPE *pSoldier);
|
||||
UINT16 AIGunType(SOLDIERTYPE *pSoldier);
|
||||
UINT16 AIGunAmmo(SOLDIERTYPE *pSoldier);
|
||||
BOOLEAN AIGunAutofireCapable(SOLDIERTYPE *pSoldier);
|
||||
UINT8 AIGunDeadliness(SOLDIERTYPE *pSoldier);
|
||||
|
||||
BOOLEAN AICheckNVG(SOLDIERTYPE *pSoldier);
|
||||
BOOLEAN AICheckHasWeaponOfType(SOLDIERTYPE *pSoldier, UINT8 ubWeaponType);
|
||||
BOOLEAN AICheckHasGun(SOLDIERTYPE *pSoldier);
|
||||
BOOLEAN AICheckShortWeaponRange(SOLDIERTYPE *pSoldier);
|
||||
|
||||
BOOLEAN AICheckIsSniper(SOLDIERTYPE *pSoldier);
|
||||
BOOLEAN AICheckIsMarksman(SOLDIERTYPE *pSoldier);
|
||||
BOOLEAN AICheckIsMachinegunner(SOLDIERTYPE *pSoldier);
|
||||
BOOLEAN AICheckIsRadioOperator(SOLDIERTYPE *pSoldier);
|
||||
BOOLEAN AICheckIsMedic(SOLDIERTYPE *pSoldier);
|
||||
BOOLEAN AICheckIsMortarOperator(SOLDIERTYPE *pSoldier);
|
||||
BOOLEAN AICheckIsGLOperator(SOLDIERTYPE *pSoldier);
|
||||
BOOLEAN AICheckIsOfficer(SOLDIERTYPE *pSoldier);
|
||||
BOOLEAN AICheckIsCommander(SOLDIERTYPE *pSoldier);
|
||||
|
||||
#define MAX_FLANKS_RED 25
|
||||
#define MAX_FLANKS_YELLOW 25
|
||||
|
||||
#define MAX_TILES_MOVE_TURN (APBPConstants[AP_MAXIMUM] / (APBPConstants[AP_MOVEMENT_FLAT] + APBPConstants[AP_MODIFIER_RUN]))
|
||||
|
||||
// vision range defines
|
||||
#define DAY_VISION_RANGE (gGameExternalOptions.ubStraightSightRange * STRAIGHT_RATIO * 2)
|
||||
#define NIGHT_VISION_RANGE (gGameExternalOptions.ubStraightSightRange * STRAIGHT_RATIO )
|
||||
|
||||
Reference in New Issue
Block a user