AIPaths Asset: Difference between revisions
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"> | ||
enum PathNodeErrorCode | |||
{ | { | ||
char | 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 { | union { | ||
float minUseDistSq; | |||
unsigned | 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 | struct pathnode_t | ||
{ | { | ||
pathnode_constant_t constant; | |||
pathnode_dynamic_t dynamic; | |||
pathnode_transient_t transient; | |||
}; | }; | ||
struct | struct pathnode_tree_nodes_t | ||
{ | { | ||
int nodeCount; | |||
unsigned | unsigned __int16 *nodes; | ||
}; | }; | ||
union | union pathnode_tree_info_t | ||
{ | { | ||
pathnode_tree_t *child[2]; | |||
pathnode_tree_nodes_t s; | |||
}; | }; | ||
struct | struct pathnode_tree_t | ||
{ | { | ||
int axis; | |||
float dist; | |||
pathnode_tree_info_t u; | |||
}; | }; | ||
struct | struct PathDynamicNodeGroup | ||
{ | { | ||
unsigned __int16 parentIndex; | |||
int nodeTreeCount; | |||
pathnode_tree_t *nodeTree; | |||
}; | }; | ||
struct | struct PathData | ||
{ | { | ||
const char * name; | const char * name; | ||
unsigned int | unsigned int nodeCount; | ||
pathnode_t *nodes; | |||
unsigned int | bool parentIndexResolved; | ||
unsigned __int16 version; | |||
int visBytes; | |||
char *pathVis; | |||
int nodeTreeCount; | |||
pathnode_tree_t *nodeTree; | |||
int dynamicNodeGroupCount; | |||
PathDynamicNodeGroup *dynamicNodeGroups; | |||
int exposureBytes; | |||
char *pathExposure; | |||
int | int noPeekVisBytes; | ||
char *pathNoPeekVis; | |||
int zoneCount; | |||
int zonesBytes; | |||
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;
};