reman3/Rayman_X/cpa/tempgrp/GMT/GmtVFunc.c

354 lines
14 KiB
C

/* (c) Ubi R&D 1997*/
/* See Alain Robin for any comment or question*/
/****************************************************************************/
/* INCLUDES */
/****************************************************************************/
#include "cpa_std.h"
#include "acp_base.h"
#include "SCR.h"
#include "GLI/Material.h"
#include "MEC.h"
#include "ErmGmt.h"
#include "GmtStruc.h" /* structure definition*/
#include "GmtProto.h" /* functions prototype*/
#include "GmtFunct.h" /* accessors*/
#include "GmtVProt.h" /* virtual functions implementations*/
#include "GmtLoad.h" /* load functions and defines*/
/*---------------------------------------------------------------------------/
// Description : GMT_fn_hCreateFor3DOS
// Structure creation for 3DOS
------------------------------------------------------------------------------
// Methods : Allocate memory and return the handle
------------------------------------------------------------------------------
// Input :
// Output : The handle to the allocated memory
------------------------------------------------------------------------------
// Creation date : Apr 97 Author: Alain Robin
------------------------------------------------------------------------------
// Modifications :
// Modification date : Modification author :
---------------------------------------------------------------------------*/
GMT_tdxHandleToGameMaterial GMT_fn_hCreateFor3DOS(void)
{
GMT_tdxHandleToGameMaterial hNewGameMaterial;
MMG_fn_vAddMemoryInfo( MMG_C_lTypeGMT , MMG_C_lSubTypeFor3DOS , 0 );
GEO_M_CPAMalloc(hNewGameMaterial,GMT_tdxHandleToGameMaterial,sizeof(struct GMT_tdstGameMaterial_),E_uwGEONotEnoughtMemory);
if(hNewGameMaterial!=NULL)
{
/* pointers initialization */
DNM_fn_vInvalidateMatCharacteristics(&(hNewGameMaterial->hMechanicsMaterial));
hNewGameMaterial->hVisualMaterial=(ACP_tdxHandleOfMaterial)NULL;
hNewGameMaterial->hSoundMaterial=(SND_tdxHandleToSoundMaterial)GMT_C_InvalidSoundMaterial;
hNewGameMaterial->hCollideMaterial=(GMT_tdxHandleToCollideMaterial)GMT_C_InvalidCollideMaterial;
/* fbolefeysot - 01/10/98*/
/* remove init values in GMT{*/
/* hNewGameMaterial->p_stInitialValues=NULL;*/
/*END fbolefeysot}*/
#ifdef SECTOR_IN_GMT
hNewGameMaterial->hSectorMaterial=(HIE_tdxHandleToSuperObject)NULL;
#endif /* SECTOR_IN_GMT*/
return hNewGameMaterial;
}
return NULL;
}
/*----------------------------------------------------------------------------
// Description : GMT_fn_vCopyFor3DOS
// Used to copy an existing game material struct for 3DOS (all fields)
----------------------------------------------------------------------------//
// Methods : Use the "Get" and the "Set" macros to copy the field pointers
----------------------------------------------------------------------------//
// Input : _hSrc : source game material
// Output : _hDst : copied game material
----------------------------------------------------------------------------//
// Creation date : May 97 Author: Alain Robin
----------------------------------------------------------------------------//
// Modifications :
// Modification date : Modification author :
----------------------------------------------------------------------------*/
void GMT_fn_vCopyFor3DOS(GMT_tdxHandleToGameMaterial _hDst, GMT_tdxHandleToGameMaterial _hSrc)
{
ACP_tdxHandleOfMaterial hVisual,hCopyOfVisual;
#ifdef _DEBUG
if((!GMT_fn_b_ulIsValid(_hDst))||(!GMT_fn_b_ulIsValid(_hSrc)))
GMT_fn_vRaiseFatalError();
#endif
/* Duplicate visual material */
hVisual=GMT_fn_hGetVisualMaterial(_hSrc);
GLI_xDuplicateMaterial (&hCopyOfVisual,hVisual);
GMT_M_vSetVisualMaterial(_hDst,hCopyOfVisual);
GMT_M_vSetSoundMaterial(_hDst,GMT_M_hGetSoundMaterial(_hSrc));
GMT_M_vSetCollideMaterial(_hDst,GMT_M_hGetCollideMaterial(_hSrc));
GMT_M_vSetMechanicsMaterial(_hDst,GMT_M_hGetMechanicsMaterial(_hSrc));
#ifdef SECTOR_IN_GMT
GMT_M_vSetSectorMaterial(_hDst,GMT_M_hGetSectorMaterial(_hSrc));
#endif /* SECTOR_IN_GMT */
/* Copy initial values */
/* fbolefeysot - 01/10/98*/
/* remove init values in GMT{*/
/* if(_hSrc->p_stInitialValues!=NULL)
{
if(_hDst->p_stInitialValues==NULL)
{
_hDst->p_stInitialValues=GMT_fn_hCreateGameMaterial();
memcpy(_hDst->p_stInitialValues,_hSrc->p_stInitialValues,sizeof(struct GMT_tdstGameMaterial_));
}
else
{
memcpy(_hDst->p_stInitialValues,_hSrc->p_stInitialValues,sizeof(struct GMT_tdstGameMaterial_));
}
}
*/
/*END fbolefeysot}*/
}
/* ////////////////////////////////////////////////////////////////////////////
// Description : GMT_fn_vDestroyFor3DOS
// Delete a created game material handle
//////////////////////////////////////////////////////////////////////////////
// Methods : None
//////////////////////////////////////////////////////////////////////////////
// Input : _hOld : game material handle to delete
// Output :
//////////////////////////////////////////////////////////////////////////////
// Creation date : May 97 Author: Alain Robin
//////////////////////////////////////////////////////////////////////////////
// Modifications :
// Modification date : Modification author :
//////////////////////////////////////////////////////////////////////////// */
/*XB 22/06/99*/
#ifndef U64
void GMT_fn_vDestroyFor3DOS(GMT_tdxHandleToGameMaterial _hOld)
{
#ifdef _DEBUG
if(!GMT_fn_b_ulIsValid(_hOld))
GMT_fn_vRaiseFatalError();
#endif
/* Free initial values if needed */
/* fbolefeysot - 01/10/98*/
/* remove init values in GMT{*/
/* if(_hOld->p_stInitialValues!=NULL)
GEO_M_CPAFree(_hOld->p_stInitialValues);
*/
/*END fbolefeysot}*/
/* Free allocated structure */
GEO_M_CPAFree(_hOld);
}
#endif /* U64 */
/*End XB 22/06/99*/
/*---------------------------------------------------------------------------/
// Description : GMT_fn_hCreateForA3D
// Structure creation for 3DOS
------------------------------------------------------------------------------
// Methods : Allocate memory and return the handle
------------------------------------------------------------------------------
// Input :
// Output : The handle to the allocated memory
------------------------------------------------------------------------------
// Creation date : Apr 97 Author: Alain Robin
------------------------------------------------------------------------------
// Modifications :
// Modification date : Modification author :
---------------------------------------------------------------------------*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
/*GMT_tdxHandleToGameMaterial GMT_fn_hCreateForA3D(void)
{
GMT_tdxHandleToGameMaterial hNewGameMaterial;
MMG_fn_vAddMemoryInfo( MMG_C_lTypeGMT , MMG_C_lSubTypeCollideMaterial , 0 );
GEO_M_CPAMalloc(hNewGameMaterial,GMT_tdxHandleToGameMaterial,sizeof(struct GMT_tdstGameMaterial_),E_uwGEONotEnoughtMemory);
if(hNewGameMaterial!=NULL)
{
// pointers initialization
hNewGameMaterial->hVisualMaterial=(ACP_tdxHandleOfMaterial)NULL;
hNewGameMaterial->hSoundMaterial=(SND_tdxHandleToSoundMaterial)GMT_C_InvalidSoundMaterial;
hNewGameMaterial->hCollideMaterial=(GMT_tdxHandleToCollideMaterial)GMT_C_InvalidCollideMaterial;
hNewGameMaterial->p_stInitialValues=NULL;
#ifdef SECTOR_IN_GMT
hNewGameMaterial->hSectorMaterial=(HIE_tdxHandleToSuperObject)NULL;
#endif // SECTOR_IN_GMT
// We don't initialize the DNM handle to avoid call of dnm function but we set it to NULL
hNewGameMaterial->hMechanicsMaterial=NULL;
return hNewGameMaterial;
}
return NULL;
}
*/
/*----------------------------------------------------------------------------
// Description : GMT_fn_vCopyForA3D
// Used to copy an existing game material struct for 3DOS (all fields)
----------------------------------------------------------------------------//
// Methods : Use the "Get" and the "Set" macros to copy the field pointers
----------------------------------------------------------------------------//
// Input : _hSrc : source game material
// Output : _hDst : copied game material
----------------------------------------------------------------------------//
// Creation date : May 97 Author: Alain Robin
----------------------------------------------------------------------------//
// Modifications :
// Modification date : Modification author :
----------------------------------------------------------------------------*/
/*void GMT_fn_vCopyForA3D(GMT_tdxHandleToGameMaterial _hDst, GMT_tdxHandleToGameMaterial _hSrc)
{
ACP_tdxHandleOfMaterial hVisual,hCopyOfVisual;
#ifdef _DEBUG
if((!GMT_fn_b_ulIsValid(_hDst))||(!GMT_fn_b_ulIsValid(_hSrc)))
GMT_fn_vRaiseFatalError();
#endif
// Duplicate visual material
hVisual=GMT_fn_hGetVisualMaterial(_hSrc);
GLI_xDuplicateMaterial (&hCopyOfVisual,hVisual);
GMT_M_vSetVisualMaterial(_hDst,hCopyOfVisual);
// Copy initial values
if(_hSrc->p_stInitialValues!=NULL)
{
if(_hDst->p_stInitialValues==NULL)
{
_hDst->p_stInitialValues=GMT_fn_hCreateGameMaterial();
memcpy(_hDst->p_stInitialValues,_hSrc->p_stInitialValues,sizeof(struct GMT_tdstGameMaterial_));
}
else
{
memcpy(_hDst->p_stInitialValues,_hSrc->p_stInitialValues,sizeof(struct GMT_tdstGameMaterial_));
}
}
}
*/
/* ////////////////////////////////////////////////////////////////////////////
// Description : GMT_fn_vDestroyForA3D
// Delete a created game material handle
//////////////////////////////////////////////////////////////////////////////
// Methods : None
//////////////////////////////////////////////////////////////////////////////
// Input : _hOld : game material handle to delete
// Output :
//////////////////////////////////////////////////////////////////////////////
// Creation date : May 97 Author: Alain Robin
//////////////////////////////////////////////////////////////////////////////
// Modifications :
// Modification date : Modification author :
//////////////////////////////////////////////////////////////////////////// */
/*void GMT_fn_vDestroyForA3D(GMT_tdxHandleToGameMaterial _hOld)
{
#ifdef _DEBUG
if(!GMT_fn_b_ulIsValid(_hOld))
GMT_fn_vRaiseFatalError();
#endif
// Free initial values if needed
if(_hOld->p_stInitialValues!=NULL)
GEO_M_CPAFree(_hOld->p_stInitialValues);
// Free allocated structure
GEO_M_CPAFree(_hOld);
}
*/
#endif
/* ////////////////////////////////////////////////////////////////////////////
// Description : GMT_fn_vInitLoadGameMaterialFor3DOS
// Loading process initialization for 3DOS
//////////////////////////////////////////////////////////////////////////////
// Methods : Register the callbacks
//////////////////////////////////////////////////////////////////////////////
// Input :
// Output :
//////////////////////////////////////////////////////////////////////////////
// Creation date : 27 Feb 97 Author: Alain Robin
//////////////////////////////////////////////////////////////////////////////
// Modifications : Init the link table
// Modification date : 01 Apr 97 Modification author : Alain Robin
//////////////////////////////////////////////////////////////////////////// */
void GMT_fn_vInitLoadGameMaterialFor3DOS(void)
{
#if !defined(U64)
SCR_fn_v_RdL0_RegisterCallback(C_SectionGameMaterial,fn_eScriptCallBackGameMaterial, SCR_CRC_c_RdL0_ForSection);
/*BEGIN OS 4/3/98*/
/* SCR_fn_v_RdL0_RegisterCallback(C_SectionGameMaterial,fn_eScriptCallBackBinGameMaterial, SCR_CRC_c_RdL0_ForBinSection);*/
/*END OS 4/3/98*/
DNM_fn_vInitLoadMecMatCharacteristics(); /* Register the mechanic callback*/
GMT_fn_vInitLoadCollideMaterial(); /* Register collide material*/
SCR_fn_v_Link_InitTable(&g_stGmtLinkTable);
#endif /* U64 */
}
/* ////////////////////////////////////////////////////////////////////////////
// Description : GMT_fn_vInitLoadGameMaterialForA3D
// Loading process initialization for A3D
//////////////////////////////////////////////////////////////////////////////
// Methods : Register the callbacks
//////////////////////////////////////////////////////////////////////////////
// Input :
// Output :
//////////////////////////////////////////////////////////////////////////////
// Creation date : 27 Feb 97 Author: Alain Robin
//////////////////////////////////////////////////////////////////////////////
// Modifications : Init the link table
// Modification date : 01 Apr 97 Modification author : Alain Robin
//////////////////////////////////////////////////////////////////////////// */
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void GMT_fn_vInitLoadGameMaterialForA3D(void)
{
#if !defined(U64)
SCR_fn_v_RdL0_RegisterCallback(C_SectionGameMaterial,fn_eScriptCallBackGameMaterial, SCR_CRC_c_RdL0_ForSection);
/*BEGIN OS 4/3/98*/
/* SCR_fn_v_RdL0_RegisterCallback(C_SectionGameMaterial,fn_eScriptCallBackBinGameMaterial, SCR_CRC_c_RdL0_ForBinSection);*/
/*END OS 4/3/98*/
SCR_fn_v_Link_InitTable(&g_stGmtLinkTable);
#endif /* U64 */
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#if !defined(U64)
char * GMT_fn_p_szZdmMaskToName(GMT_tdxMask _xMask)
{
switch(_xMask)
{
case GMT_C_uwPieds:
return GMT_C_szPieds;
break;
case GMT_C_uwCorps:
return GMT_C_szCorps;
break;
case GMT_C_uwTete:
return GMT_C_szTete;
break;
case GMT_C_uwMains:
return GMT_C_szMains;
break;
case GMT_C_uwFigee:
return GMT_C_szFigee;
break;
case GMT_C_uwDos:
return GMT_C_szDos;
break;
default:
return NULL;
break;
}
}
#endif /* U64 */