AIPaths Asset: Difference between revisions

From COD Engine Research
Created page with "__NOTOC__ Category:Assets Category:MW3 Category:Ghosts The aipaths asset was added on Modern Warfare 3 and clearly holds pathing information for AI to follow aroun..."
 
 
Line 60: Line 60:
== Ghosts ==
== Ghosts ==
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
struct unknownAIPathsStruct1Internal1
enum PathNodeErrorCode
{
{
   char unknown1[8];
  PNERR_NONE = 0x0,
   ScriptString unknownScriptString1;
  PNERR_INSOLID = 0x1,
   ScriptString unknownScriptString2;
  PNERR_FLOATING = 0x2,
   ScriptString unknownScriptString3;
  PNERR_NOLINK = 0x3,
   ScriptString unknownScriptString4;
  PNERR_DUPLICATE = 0x4,
   ScriptString unknownScriptString5;
  PNERR_NOSTANCE = 0x5,
   char unknown2[0x1E];
  PNERR_INVALIDDOOR = 0x6,
  PNERR_NOANGLES = 0x7,
  PNERR_BADPLACEMENT = 0x8,
  NUM_PATH_NODE_ERRORS = 0x9,
};
 
struct pathnode_yaworient_t
{
  float fLocalAngle;
  float localForward[2];
};
 
union PathNodeParentUnion
{
  scr_string_t name;
  unsigned __int16 index;
};
 
struct pathlink_s
{
  float fDist;
  unsigned __int16 nodeNum;
  char disconnectCount;
  char negotiationLink;
  char flags;
   char ubBadPlaceCount[3];
};
 
struct pathnode_constant_t
{
  unsigned __int16 type;
  unsigned int spawnflags;
  scr_string_t targetname;
  scr_string_t script_linkName;
   scr_string_t script_noteworthy;
   scr_string_t target;
   scr_string_t animscript;
   int animscriptfunc;
   float vLocalOrigin[3];
   union {
    pathnode_yaworient_t yaw_orient;
    float angles[3];
  };
  PathNodeParentUnion parent;
   union {
   union {
     ScriptString unknownScriptString6;
     float minUseDistSq;
     unsigned short unknown35;
     PathNodeErrorCode error;
  };
  __int16 wOverlapNode[2];
  unsigned __int16 totalLinkCount;
  pathlink_s *Links;
};
 
struct SentientHandle
{
  unsigned __int16 number;
  unsigned __int16 infoIndex;
};
 
struct pathnode_dynamic_t
{
  SentientHandle pOwner;
  int iFreeTime;
  int iValidTime[3];
  __int16 wLinkCount;
  __int16 wOverlapCount;
  __int16 turretEntNumber;
  char userCount;
  char hasBadPlaceLink;
  int spreadUsedTime[2];
  __int16 flags;
  __int16 dangerousCount;
  int recentUseProxTime;
};
 
struct __declspec(align(8)) pathnode_transient_t
{
  int iSearchFrame;
  pathnode_t *pNextOpen;
  pathnode_t *pPrevOpen;
  pathnode_t *pParent;
  float fCost;
  float fHeuristic;
  union
  {
    float nodeCost;
    int linkIndex;
   };
   };
  char unknown5[0xE];
  unsigned short unknownCount;
  char * unknown3; //Size ((unknownCount << 1) + unknownCount) << 2
};
};


struct unknownAIPathsStruct1
struct pathnode_t
{
{
   unknownAIPathsStruct1Internal1 unknownEmbeddedStruct;
   pathnode_constant_t constant;
   char unknown[0x48];
   pathnode_dynamic_t dynamic;
  pathnode_transient_t transient;
};
};


struct unknownAIPathsUnion1Struct1
struct pathnode_tree_nodes_t
{
{
   unsigned int unknownCount;
   int nodeCount;
   unsigned short * unknown; //Count = unknownCount
   unsigned __int16 *nodes;
};
};


union unknownAIPathsUnion1;
union pathnode_tree_info_t
{
{
   unknownAIPathsUnion1Struct1 unknownStruct1;
   pathnode_tree_t *child[2];
  unknownAIPathsUnion1 * repeater[2];
  pathnode_tree_nodes_t s;
};
};


struct unknownAIPathsStruct2
struct pathnode_tree_t
{
{
   unknownAIPathsUnion1 unknownUnion;
   int axis;
   char unknown[8];
   float dist;
  pathnode_tree_info_t u;
};
};


struct unknownAIPathsStruct3
struct PathDynamicNodeGroup
{
{
   int unknown;
   unsigned __int16 parentIndex;
   unsigned int unknownCount;
   int nodeTreeCount;
   unknownAIPathsStruct2 * unknownStructArray; //Count = unknownCount
   pathnode_tree_t *nodeTree;
};
};


struct AIPaths
struct PathData
{
{
   const char * name;
   const char * name;
   unsigned int unknownCount1;
   unsigned int nodeCount;
   unknownAIPathsStruct1 * unknownStructArray1;
   pathnode_t *nodes;
   unsigned int unknownCount2;
  bool parentIndexResolved;
   byte * unknown1; //Size = unknownCount2
   unsigned __int16 version;
   unsigned int unknownCount3;
  int visBytes;
   unknownAIPathsStruct2 * unknownStructArray2; //Count = unknownCount3
   char *pathVis;
   unsigned int unknownCount4;
   int nodeTreeCount;
   unknownAIPathsStruct3 * unknownStructArray3; //Count = unknownCount4
   pathnode_tree_t *nodeTree;
   unsigned int unknownCount5;
   int dynamicNodeGroupCount;
   byte * unknown2; //Size = unknownCount5
   PathDynamicNodeGroup *dynamicNodeGroups;
   unsigned int unknownCount6;
   int exposureBytes;
   byte * unknown3; //Size = unknownCount6
   char *pathExposure;
   int unknown4;
   int noPeekVisBytes;
   unsigned int unknownCount7;
   char *pathNoPeekVis;
   byte * unknown5; //Size = unknownCount7
   int zoneCount;
   unsigned int unknownCount8;
   int zonesBytes;
   byte * unknown6; //Size = unknownCount8;
   char *pathZones;
   int dynStatesBytes;
   char *pathDynStates;
};
};
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 05:18, 22 December 2014

The aipaths asset was added on Modern Warfare 3 and clearly holds pathing information for AI to follow around the map. This is part of the D3DBSP system produced by radiant. When compared to the vehicle_track asset, the pathing information in this asset is much more dynamic.

Modern Warfare 3

struct unknownAIPathsStruct1Internal1
{
  char unknown1[6];
  ScriptString unknownScriptString1;
  ScriptString unknownScriptString2;
  ScriptString unknownScriptString3;
  ScriptString unknownScriptString4;
  ScriptString unknownScriptString5;
  char unknown2[0x28];
  unsigned short unknownCount;
  char * unknown3; //Size ((unknownCount << 1) + unknownCount) << 2
};

struct unknownAIPathsStruct1
{
  unknownAIPathsStruct1Internal1 unknownEmbeddedStruct;
  char unknown[0x48];
};

struct unknownAIPathsUnion1Struct1
{
  unsigned int unknownCount;
  unsigned short * unknown; //Count = unknownCount
};

union unknownAIPathsUnion1;
{
  unknownAIPathsUnion1Struct1 unknownStruct1;
  unknownAIPathsUnion1 * repeater[2];
};

struct unknownAIPathsStruct2
{
  unknownAIPathsUnion1 unknownUnion;
  char unknown[8];
};

struct AIPaths
{
  const char * name;
  unsigned int unknownCount1;
  unknownAIPathsStruct1 * unknownStructArray1;
  char * unknown1; //Size = unknownCount1 << 4
  int unknown2;
  unsigned short * unknown3; //Count = unknownCount1;
  unsigned short * unknown4; //Count = unknowncount1;
  unsigned int unknownCount2;
  byte * unknown5; //Size = unknownCount2
  unsigned int unknownCount3;
  unknownAIPathsStruct2 * unknownStructArray2; //Count = unknownCount3
};

Ghosts

enum PathNodeErrorCode
{
  PNERR_NONE = 0x0,
  PNERR_INSOLID = 0x1,
  PNERR_FLOATING = 0x2,
  PNERR_NOLINK = 0x3,
  PNERR_DUPLICATE = 0x4,
  PNERR_NOSTANCE = 0x5,
  PNERR_INVALIDDOOR = 0x6,
  PNERR_NOANGLES = 0x7,
  PNERR_BADPLACEMENT = 0x8,
  NUM_PATH_NODE_ERRORS = 0x9,
};

struct pathnode_yaworient_t
{
  float fLocalAngle;
  float localForward[2];
};

union PathNodeParentUnion
{
  scr_string_t name;
  unsigned __int16 index;
};

struct pathlink_s
{
  float fDist;
  unsigned __int16 nodeNum;
  char disconnectCount;
  char negotiationLink;
  char flags;
  char ubBadPlaceCount[3];
};

struct pathnode_constant_t
{
  unsigned __int16 type;
  unsigned int spawnflags;
  scr_string_t targetname;
  scr_string_t script_linkName;
  scr_string_t script_noteworthy;
  scr_string_t target;
  scr_string_t animscript;
  int animscriptfunc;
  float vLocalOrigin[3];
  union {
    pathnode_yaworient_t yaw_orient;
    float angles[3];
  };
  PathNodeParentUnion parent;
  union {
    float minUseDistSq;
    PathNodeErrorCode error;
  };
  __int16 wOverlapNode[2];
  unsigned __int16 totalLinkCount;
  pathlink_s *Links;
};

struct SentientHandle
{
  unsigned __int16 number;
  unsigned __int16 infoIndex;
};

struct pathnode_dynamic_t
{
  SentientHandle pOwner;
  int iFreeTime;
  int iValidTime[3];
  __int16 wLinkCount;
  __int16 wOverlapCount;
  __int16 turretEntNumber;
  char userCount;
  char hasBadPlaceLink;
  int spreadUsedTime[2];
  __int16 flags;
  __int16 dangerousCount;
  int recentUseProxTime;
};

struct __declspec(align(8)) pathnode_transient_t
{
  int iSearchFrame;
  pathnode_t *pNextOpen;
  pathnode_t *pPrevOpen;
  pathnode_t *pParent;
  float fCost;
  float fHeuristic;
  union
  {
    float nodeCost;
    int linkIndex;
  };
};

struct pathnode_t
{
  pathnode_constant_t constant;
  pathnode_dynamic_t dynamic;
  pathnode_transient_t transient;
};

struct pathnode_tree_nodes_t
{
  int nodeCount;
  unsigned __int16 *nodes;
};

union pathnode_tree_info_t
{
  pathnode_tree_t *child[2];
  pathnode_tree_nodes_t s;
};

struct pathnode_tree_t
{
  int axis;
  float dist;
  pathnode_tree_info_t u;
};

struct PathDynamicNodeGroup
{
  unsigned __int16 parentIndex;
  int nodeTreeCount;
  pathnode_tree_t *nodeTree;
};

struct PathData
{
  const char * name;
  unsigned int nodeCount;
  pathnode_t *nodes;
  bool parentIndexResolved;
  unsigned __int16 version;
  int visBytes;
  char *pathVis;
  int nodeTreeCount;
  pathnode_tree_t *nodeTree;
  int dynamicNodeGroupCount;
  PathDynamicNodeGroup *dynamicNodeGroups;
  int exposureBytes;
  char *pathExposure;
  int noPeekVisBytes;
  char *pathNoPeekVis;
  int zoneCount;
  int zonesBytes;
  char *pathZones;
  int dynStatesBytes;
  char *pathDynStates;
};