reman3/Rayman_X/cpa/public/GAM/ZdxStuff.h

402 lines
20 KiB
C

/*
* Loading of differents Zdx Tables in a global structure
* (Csa means CollSetChoice Array)
*/
#ifndef __ZDXSTUFF_H
#define __ZDXSTUFF_H
/******************************************/
#if _MSC_VER >= 1000
#pragma once
#endif /* _MSC_VER >= 1000 */
/******************************************/
#include "GAM/Header.h"
#if defined(__cplusplus)
extern "C"
{
#endif /* __cplusplus */
/* ANNECY AV NONEVER {*/
/* EXTERN ACP_tdxHandleOfObject g_hNeverMovingZDM; */
/* END ANNECY AV NONEVER }*/
#define C_MaxLengthOfName 20
#define C_lAllZdxAreOn 0xFFFFFFFF
#define C_lModuleZdxAreOn 1
#define C_lCharacterZdxAreOn 2
#define C_lZdeAreOn 4
#define C_lZddAreOn 8
#define C_lZdrAreOn 16
#define C_lZdmAreOn 32
/*----------------------------------------------------------------------
* Handles
*--------------------------------------------------------------------*/
typedef struct tdstGeometricZdxList_ * ZDX_tdxHandleToGeoZdxList;
typedef struct tdstZdxIndexList_ * ZDX_tdxHandleToZdxIndexList;
typedef struct tdstZoneSetEncapsulation_ * ZDX_tdxHandleToZoneSetEncapsulation;
LST2_M_StaticUseListOf(ZDX_tdxHandleToGeoZdxList);
LST2_M_StaticUseListOf(ZDX_tdxHandleToZoneSetList);
LST2_M_StaticUseListOf(ZDX_tdxHandleToZdxIndexList);
LST2_M_StaticUseListOf(ZDX_tdxHandleToZoneSetEncapsulation);
#ifdef D_ZdxStuff_StructureDefine
/*----------------------------------------------------------------------
* Structures
*--------------------------------------------------------------------*/
typedef struct tdstCsaList_
{
LST2_M_StaticAnchorDeclaration(ZDX_tdxHandleToZoneSetEncapsulation) hZoneSetEncapsulationList;
} tdstCsaList;
/*--------------------------------------------------------------------*/
typedef struct tdstZdxList_
{
LST2_M_StaticAnchorDeclaration(ZDX_tdxHandleToGeoZdxList) hGeoZdxList;
unsigned short uwNumberOfZdx;
} tdstZdxList;
/*--------------------------------------------------------------------*/
typedef struct tdstGeometricZdxList_
{
LST2_M_StaticElementDeclaration(ZDX_tdxHandleToGeoZdxList)
ACP_tdxHandleOfObject hGeoObj;
} tdstGeometricZdxList;
/*--------------------------------------------------------------------*/
typedef struct tdstZoneSetList_
{
LST2_M_StaticAnchorDeclaration(ZDX_tdxHandleToZdxIndexList) hZdxIndexList;
} tdstZoneSetList;
/*--------------------------------------------------------------------*/
typedef struct tdstZdxIndexList_
{
LST2_M_StaticElementDeclaration(ZDX_tdxHandleToZdxIndexList)
unsigned short uwZdxIndex;
} tdstZdxIndexList;
/*--------------------------------------------------------------------*/
/*
* This structure is added for binarisation
*/
typedef struct tdstZoneSetEncapsulation_
{
LST2_M_StaticElementDeclaration(ZDX_tdxHandleToZoneSetEncapsulation)
tdstZoneSetList * p_stZoneSetList;
/* Oliv' - 21/06/1999 */
#ifndef D_THROW_ZSE_INDEX
unsigned short uwIndex;
#endif
/* EndOfOliv' */
} tdstZoneSetEncapsulation;
/*--------------------------------------------------------------------*/
#endif /* D_ZdxStuff_StructureDefine */
/*----------------------------------------------------------------------
* Sections
*--------------------------------------------------------------------*/
#define C_SectionCreateNewArrayOfZdx "CreateNewArrayOfZdx"
#define C_SectionCreateNewZoneSetArray "CreateNewArrayOfZoneSet"
/* MR0404*/
#define C_SectionNewActivationZone "NewActivationZone"
/* JO 22/04/97 */
#define C_SectionPhysicalCollideSetDescription "Physical_CollSet"
/* JO 15/07/97*/
#define C_SectionAddActivation "AddActivation"
/*----------------------------------------------------------------------
* Entries
*--------------------------------------------------------------------*/
#define C_EntryGeometricObject "GeometricObject"
#define C_EntryNewCollSet "NewCollSet"
#define C_EntryEndCollSet "EndCollSet"
#define C_EntryNewZdd "Zdd"
#define C_EntryNewZdm "Zdm"
#define C_EntryNewZde "Zde"
#define C_EntryNewZdr "Zdr"
#define C_EntryNewIndex "ZdxIndex"
#define C_EntryActivationZone "ActivationZone"
/*----------------------------------------------------------------------
* Miscellaneous
*--------------------------------------------------------------------*/
#define C_szTypeZdd "Zdd"
#define C_szTypeZdm "Zdm"
#define C_szTypeZde "Zde"
#define C_szTypeZdr "Zdr"
#define C_ucTypeZdd (unsigned char)0
#define C_ucTypeZdm (unsigned char)1
#define C_ucTypeZde (unsigned char)2
#define C_ucTypeZdr (unsigned char)3
/*----------------------------------------------------------------------
* CallBacks
*--------------------------------------------------------------------*/
#if !defined(U64)
SCR_tde_Anl_ReturnValue fn_eScriptCallBackZdxArrayDescription(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction);
SCR_tde_Anl_ReturnValue fn_eScriptCallBackCreateNewZoneSetArray(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction);
/* MR0404*/
SCR_tde_Anl_ReturnValue fn_eScriptCallBackCreateNewActivationZone(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction);
/* JO 15/07/97*/
SCR_tde_Anl_ReturnValue fn_eScriptCallBackCreateActivation(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction);
#endif /* U64 */
/*----------------------------------------------------------------------
* Memory management functions
*--------------------------------------------------------------------*/
extern CPA_EXPORT ZDX_tdxHandleToZdxList fn_p_stCreateZdxListElement();
extern CPA_EXPORT ZDX_tdxHandleToZdxIndexList fn_p_stCreateZdxIndexListElement();
extern CPA_EXPORT ZDX_tdxHandleToGeoZdxList fn_p_stCreateGeometricZdxListElement();
extern CPA_EXPORT ZDX_tdxHandleToZoneSetList fn_p_stCreateZoneSetListElement();
extern CPA_EXPORT ZDX_tdxHandleToCsaList fn_p_stCreateCsaListElement();
extern CPA_EXPORT void fn_vFreeZdxListElement(ZDX_tdxHandleToZdxList p_stZdxList);
extern CPA_EXPORT void fn_vFreeZdxIndexListElement(ZDX_tdxHandleToZdxIndexList p_stZdxIndexList);
extern CPA_EXPORT void fn_vFreeGeometricZdxListElement(ZDX_tdxHandleToGeoZdxList p_stGeoZdxList);
extern CPA_EXPORT void fn_vFreeZoneSetListElement(ZDX_tdxHandleToZoneSetList p_stZoneSetList);
extern CPA_EXPORT void fn_vFreeCsaListElement(ZDX_tdxHandleToCsaList p_stCsaList);
/* JO 24/09/97*/
extern CPA_EXPORT ZDX_tdxHandleToZoneSetEncapsulation fn_p_stCreateZoneSetEncapsulation();
extern CPA_EXPORT void fn_vFreeZoneSetEncapsulation(ZDX_tdxHandleToZoneSetEncapsulation);
/*----------------------------------------------------------------------
* Access functions
*--------------------------------------------------------------------*/
extern CPA_EXPORT unsigned short fn_uwGetNumberOfGeoObjInList(ZDX_tdxHandleToZdxList hZdxList);
/*--------------------------------------------------------------------*/
long fn_lGetZdxListNumberOfElements(unsigned char ucZoneType,HIE_tdxHandleToSuperObject hSuperObj);
/*--------------------------------------------------------------------*/
/*** tdstGeometricZdxList ***/
extern CPA_EXPORT ACP_tdxHandleOfObject fn_hGetGeoObjFromGeoZdx(ZDX_tdxHandleToGeoZdxList hGeoZdxList);
extern CPA_EXPORT void fn_vSetGeoObjInGeoZdx(ZDX_tdxHandleToGeoZdxList hGeoZdxList,ACP_tdxHandleOfObject hGeoObj);
/*--------------------------------------------------------------------*/
/*** tdstZdxIndexList ***/
extern CPA_EXPORT unsigned short fn_uwGetIndexFromZdxIndexList(struct tdstZdxIndexList_ * p_stZdxIndexList);
extern CPA_EXPORT ZDX_tdxHandleToZdxIndexList ZDX_fn_hGetNextBrotherInZdxIndexList(ZDX_tdxHandleToZdxIndexList hZdxIndexList);
/*--------------------------------------------------------------------*/
/*** Mixed access functions ***/
/* JO 20/10/97 for optimisation*/
extern CPA_EXPORT ZDX_tdxHandleToZoneSetList fn_p_stGetCurrentZoneSetOfType2(unsigned char ucZoneType,HIE_tdxHandleToSuperObject hSuperObj);
extern CPA_EXPORT void fn_vUpdateCurrentActivationForCharacter(HIE_tdxHandleToSuperObject _hCharacter);
extern CPA_EXPORT ZDX_tdxHandleToZoneSetList fn_p_stGetCurrentZoneSetOfType(unsigned char ucZoneType,HIE_tdxHandleToSuperObject hSuperObj);
extern CPA_EXPORT unsigned short fn_uwGetIndexOfZdx(unsigned char ucZoneNumber,struct tdstZoneSetList_ * p_stZoneSetList);
extern CPA_EXPORT void fn_vSetGeometricZdxOfTypeAtIndex(unsigned char ucZoneType,unsigned short uwIndex,HIE_tdxHandleToSuperObject hSuperObj,ACP_tdxHandleOfObject hGeoObj);
extern CPA_EXPORT ACP_tdxHandleOfObject fn_hGetGeometricZdxOfTypeAtIndex(unsigned char ucZoneType,unsigned short uwIndex,HIE_tdxHandleToSuperObject hSuperObj);
extern CPA_EXPORT void ZDX_fn_vDisplayAllZdx(GLD_tdstViewportAttributes * p_stViewPort,HIE_tdxHandleToSuperObject p_stSupObject);
/*ANNECY TQ 11/03/98{*/
extern CPA_EXPORT void ZDX_fn_vDisplayAllBoundingVolumes(GLD_tdstViewportAttributes * p_stViewPort,HIE_tdxHandleToSuperObject p_stSupObject);
/*ENDANNECY TQ}*/
/*--------------------------------------------------------------------*/
/*** Access functions for editors ***/
extern CPA_EXPORT ACP_tdxHandleOfObject ZDX_fn_hGetGeometricZdxInListAtIndex(unsigned short uwIndex,ZDX_tdxHandleToZdxList hZdxList);
extern CPA_EXPORT void ZDX_fn_vSetGeometricZdxInListAtIndex(unsigned short uwIndex,ZDX_tdxHandleToZdxList hZdxList,ACP_tdxHandleOfObject hGeoObj);
extern CPA_EXPORT ZDX_tdxHandleToZdxList ZDX_fn_hCreateEmptyListOftype(unsigned char ucZonetype,unsigned short uwNumberOfElements);
extern CPA_EXPORT ZDX_tdxHandleToZdxIndexList ZDX_fn_hGetFirstZdxIndexListOfTypeInZoneSet(unsigned char ucZoneType,ZDX_tdxHandleToZoneSetList hZoneSet);
extern CPA_EXPORT ZDX_tdxHandleToZdxList ZDX_fn_hCreateEmptyListOftype(unsigned char ucZonetype,unsigned short uwNumberOfElements);
#ifdef ACTIVE_EDITOR
extern CPA_EXPORT void ZDX_fn_vDestructZdxList(ZDX_tdxHandleToZdxList hZdxList);
#endif /* ACTIVE_EDITOR */
/*--------------------------------------------------------------------*/
/*** New for convenience... ***/
ACP_tdxHandleOfObject ZDX_fn_hGetGeoObjOfTypeAndMatrixFromZdxInfos(
HIE_tdxHandleToSuperObject _hCharacter,
unsigned char _ucZoneType,
unsigned char _ucModuleOrCharacter,
unsigned char _ucChannelNumber,
POS_tdstCompletePosition ** _p_hMatrix);
/*--------------------------------------------------------------------
* Return Game Material if this type exist, NULL if can't find it
*--------------------------------------------------------------------*/
GMT_tdxHandleToGameMaterial fn_hIsTypeExistsInGeoObj(ACP_tdxHandleOfObject _hGeoObj,GMT_tdxMask _wMaterialMask);
/*--------------------------------------------------------------------*/
/*** Functions to use Zde ***/
ACP_tdxBool fn_bIsThisModuleZdeInContactWithZdeOfTypes(HIE_tdxHandleToSuperObject _hSuperObj,unsigned short _uwChannelNumber,GMT_tdxMask wMaterialMask);
ACP_tdxBool fn_bIsThisZdeInClashWithCharacterZdeOfTypes(ACP_tdxHandleOfObject _hGeoObj,POS_tdstCompletePosition * _hMatrix,HIE_tdxHandleToSuperObject _hCharacter,GMT_tdxMask wMaterialMask);
/*** New request from design ***/
void fn_vGetAllCharactersInContactWithThisZde(HIE_tdxHandleToSuperObject _hSuperObj,unsigned char _ucModuleOrCharacter,unsigned char _ucChannelNumber,HIE_tdxHandleToSuperObject * _hSuperObjTable,unsigned short * _p_wNumber,GMT_tdxMask _wMaterialMask);
void fn_vGetAllCharactersInContactWithThisModuleZde(
HIE_tdxHandleToSuperObject _hSuperObj,
unsigned char _ucChannelNumber,
HIE_tdxHandleToSuperObject * _hSuperObjTable,
GMT_tdxMask _wMaterialMask,
long _lMaxNumberOfObjects,
long * _p_lCurrentNumberOfObjects);
void fn_vGetAllCharacterInContactWithThisGeoObj(
HIE_tdxHandleToSuperObject _hSuperObj,
ACP_tdxHandleOfObject _hGeoObj,
POS_tdstCompletePosition * _hMatrix,
HIE_tdxHandleToSuperObject * _hSuperObjTable,
GMT_tdxMask _wMaterialMask,
long _lMaxNumberOfObjects,
long * _p_lCurrentNumberofObjects);
ACP_tdxBool fn_bCharacterOwnsZdeOfType(HIE_tdxHandleToSuperObject _hCharacter,GMT_tdxMask _wMaterialMask);
ACP_tdxBool fn_bIsTypeExistsInGeoObj(ACP_tdxHandleOfObject _hGeoObj,GMT_tdxMask _wMaterialMask);
/*** New request from AI ***/
ACP_tdxBool fn_bThisZdeFromOneVsAllZdeFromTwo(
HIE_tdxHandleToSuperObject _hCharacterONE,
unsigned char _ucModuleOrCharacter,
unsigned char _ucChannelNumber,
HIE_tdxHandleToSuperObject _hCharacterTWO,
GMT_tdxMask _wMaterialMask);
/*** Re-New request from AI (oh yes) ***/
ACP_tdxBool fn_bThisZdeFromOneVsThisZdeFromTwo(
HIE_tdxHandleToSuperObject _hCharacterONE,
unsigned char _ucModuleOrCharacterForONE,
unsigned char _ucChannelNumberForONE,
HIE_tdxHandleToSuperObject _hCharacterTWO,
unsigned char _ucModuleOrCharacterForTWO,
unsigned char _ucChannelNumberForTWO);
ACP_tdxBool fn_bThisTypeFromOneVsThisTypeFromTwo(
HIE_tdxHandleToSuperObject _hCharacterONE,
GMT_tdxMask _wMaterialMaskOfONE,
HIE_tdxHandleToSuperObject _hCharacterTWO,
GMT_tdxMask _wMaterialMaskOfTWO);
void fn_vThisTypeVsThisType(
HIE_tdxHandleToSuperObject _hCharacter,
GMT_tdxMask _wCharacterMask,
GMT_tdxMask _wOthersMask,
HIE_tdxHandleToSuperObject * _p_hObjectTable,
unsigned short * _p_uwNumber);
/*--------------------------------------------------------------------*/
/*** Coz Physical Collide Set is now a CPA module ***/
void fn_vDetectAllObjectsInThisModule(
HIE_tdxHandleToSuperObject _hCharacter,
ACP_tdxHandleOfObject _hModule,
POS_tdstCompletePosition * _p_stMatrix,
HIE_tdxHandleToSuperObject * _p_hSuperObjTable,
long _lMaxNumberOfObjects,
long * _p_lCurrentNumberOfObjects);
PCS_tdxHandleToPhysicalCollSet fn_pGetPhysicalCollSet(HIE_tdxHandleToSuperObject hSuperObj,unsigned char ucChannelNumber,unsigned char ucSubChannelNumber,POS_tdstCompletePosition * p_stMatrix);
ACP_tdxHandleOfObject fn_hGetGeoObjOfZdm(HIE_tdxHandleToSuperObject hSuperObj,unsigned char ucChannelNumber,unsigned char ucSubChannelNumber);
HIE_tdxHandleToSuperObject * fn_pGetObjectsInZone (HIE_tdxHandleToSuperObject hObj,long lIndex,unsigned short * uwnb);
#if !defined(U64)
SCR_tde_Anl_ReturnValue fn_eScriptCallBackPhysicalCollideSetDescription(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction);
#endif /* U64 */
/*** New request from AI ***/
ACP_tdxBool fn_bIsCharacterTWODetectedByThisZddOfCharacterOne(
HIE_tdxHandleToSuperObject _hCharacterONE,
unsigned char _ucModuleOrCharacter,
unsigned char _ucChannelNumber,
HIE_tdxHandleToSuperObject _hCharacterTWO);
ACP_tdxBool fn_bIsCharacterTWODetectedByCharacterOne(
HIE_tdxHandleToSuperObject _hCharacterONE,
HIE_tdxHandleToSuperObject _hCharacterTWO);
void fn_vFirstTimeInitCollisionGeometricObject();
void fn_vClearCollisionGeometricObject(void);
void fn_vClearStaticCollisionGeometricObject(void);
ACP_tdxHandleOfObject fn_hStaticMakeOneObjectFromManyZdx(
unsigned char _ucZoneType,
HIE_tdxHandleToSuperObject _hCharacter);
ACP_tdxHandleOfObject fn_hMakeOneObjectFromManyZdx(
unsigned char _ucZoneType,
HIE_tdxHandleToSuperObject _hCharacter);
ACP_tdxHandleOfObject fn_hMakeOneObjectFromManyOthers(
unsigned char _ucZoneType,
HIE_tdxHandleToSuperObject _hCharacter,
ACP_tdxHandleOfObject _hTargetObject);
EXTERN ACP_tdxHandleOfObject g_hCollisionGeoObj;
EXTERN ACP_tdxHandleOfObject g_hStaticCollisionGeoObj;
/* ANNECY AV {*/
/*EXTERN ACP_tdxHandleOfObject g_hZdrCollisionGeoObj;*/
/* END ANNECY AV }*/
/*--------------------------------------------------------------------*/
/*** Zdx drawing management for one character ***/
extern CPA_EXPORT void fn_vSetActivationOfModuleZdxDrawing(
HIE_tdxHandleToSuperObject _hCharacter,
ACP_tdxBool _bState);
extern CPA_EXPORT void fn_vSetActivationOfCharacterZdxDrawing(
HIE_tdxHandleToSuperObject _hCharacter,
ACP_tdxBool _bState);
extern CPA_EXPORT void fn_vSetActivationOfZoneTypeDrawing(
HIE_tdxHandleToSuperObject _hCharacter,
ACP_tdxBool _bState,
unsigned char _ucZoneType);
extern CPA_EXPORT void fn_vUnactivateAllZdxDisplay(
HIE_tdxHandleToSuperObject _hCharacter);
extern CPA_EXPORT void fn_vActivateAllZdxDisplay(
HIE_tdxHandleToSuperObject _hCharacter);
/*--------------------------------------------------------------------*/
/*** Zdx drawing management for all characters ***/
extern CPA_EXPORT void fn_vSetActivationOfModuleZdxDrawingForAllCharacters(
ACP_tdxBool _bState);
extern CPA_EXPORT void fn_vSetActivationOfCharacterZdxDrawingForAllCharacters(
ACP_tdxBool _bState);
extern CPA_EXPORT void fn_vUnactivateAllZdxDisplayForAllCharacters(void);
extern CPA_EXPORT void fn_vActivateAllZdxDisplayForAllCharacters(void);
extern CPA_EXPORT void fn_vSetActivationOfZoneTypeDrawingForAllCharacters(
ACP_tdxBool _bState,unsigned char _ucZoneType);
/*--------------------------------------------------------------------*/
/*** Special functions to test integrity of Activation Lists ***/
extern CPA_EXPORT void fn_vCorrectActivationList(
ZDX_tdxHandleToCsaList _p_stCsaList,long _lNumberOfState);
/*--------------------------------------------------------------------*/
/*** Functions used for tests in the console ***/
/* ANNECY AV {*/
/* Not used anymore
ACP_tdxBool GAM_fn_bTestZoneDisplacement (HIE_tdxHandleToSuperObject _hCharacter,
unsigned char _ucZoneType,
long _lZoneNumber,
MTH3D_tdstVector * _p_stDisplacement);
*/
/* END ANNECY AV }*/
/*--------------------------------------------------------------------*/
/*** Function to order ZoneSetList by index ***/
extern CPA_EXPORT void GAM_fn_vOrderZoneSetList(ZDX_tdxHandleToZoneSetList _hZoneSetList);
tdeCollSetPrivilegedActivation fn_eGetPrivilegedActivationZoneOfCharacter(
unsigned char _ucZoneType,
HIE_tdxHandleToSuperObject _hCharacter,
ACP_tdxIndex _xIndex);
ACP_tdxBool fn_bIsAllDefaultPrivilegedActivationZoneOfCharacter(
unsigned char _ucZoneType,
HIE_tdxHandleToSuperObject _hCharacter);
/*--------------------------------------------------------------------*/
/*#define ZDX_M_ForEachZdxIndexListOfTypeInZoneSet(_ZoneType,_hZoneSet,_hZdxIndexList,_i) \
for \
( \
_i=0,(_hZdxIndexList)=ZDX_fn_hGetFirstZdxIndexListOfTypeInZoneSet(_ZoneType,_hZoneSet); \
_hZdxIndexList; \
_i++,(_hZdxIndexList)=ZDX_fn_hGetNextBrotherInZdxIndexList(_hZdxIndexList) \
)*/
/* AR9808 This macro wasn't valid for optimized static lists*/
#define ZDX_M_ForEachZdxIndexListOfTypeInZoneSet(_ZoneType,_hZoneSet,_hZdxIndexList,_i) \
LST2_M_StaticForEachElementOf(&_hZoneSet->hZdxIndexList, _hZdxIndexList, _i)
/*--------------------------------------------------------------------
* Return geometric zone if active, NULL if inactive
*--------------------------------------------------------------------*/
ACP_tdxHandleOfObject fn_hIsThisZoneActive(
HIE_tdxHandleToSuperObject _hCharacter,
unsigned char _ucZoneType,
unsigned char _ucZoneNumber);
#if defined(__cplusplus)
}
#endif /* __cplusplus */
#endif /* __ZDXSTUFF_H */