reman3/Rayman_X/cpa/tempgrp/GAM/Actions/StdGame.c

731 lines
31 KiB
C

/*=========================================================================
* StdGame.cpp : StdGame's functions
*
*
*
* StdGame MUST BE REPLACE BY THE C FILENAME
*
*
* Version 1.0
* Creation date 01/10/96
* Revision date
*
* That file needs to be compatible for all platforms.
*
* (c) Ubi Studios 1996
*=======================================================================*/
/*******************************************************/
/**** For the structures and variables declarations ****/
/*******************************************************/
#define D_StdGame_StructureDefine
#define D_StdGame_VariableDefine
#include "ToolsCPA.h"
#include "Macros.h"
#include "Actions/AllActs.h"
#include "Structur/3DOSLkTb.h"
#include "Structur/MemGame.h"
#include "Structur/ErrGame.h"
#include "Structur/Objects.h"
#include "Structur/GameScpt.h"
#include "Structur/EngMode.h"
#include "structur/StdObjSt.h"
#include "safe.h" /*BART*/
#include "Basic.h"
#include "Family.h"
#include "ObjInit.h"
#include "ObjType.h"
#include "ZeMem.h"
#include "MainChar.h"
#include "ToolCam.h"
#include "Structur/ObjsTbls.h"
#include "Always.h"
/*******************************************************/
#define C_TRANSPARENCY_ZONE_MIN 70
#define C_TRANSPARENCY_ZONE_MAX 80
#define C_TOOFARLIMIT_INIT 70
/*******************************************************/
void fn_vStdGamePlayerSavedValueSAI(MS_tdxHandleToStandardGame h_StdGame);
void fn_vStdGamePlayerFreeInitValueSAI(MS_tdxHandleToStandardGame h_StdGame);
extern ACP_tdxBool fn_bIsInFix(struct tdstEngineObject_ *p_stObject);
/*-----------------------------------------------------------------------------
* Description : StdGame object action script callback
*-----------------------------------------------------------------------------
* Input : Object pointer
* Output : None
*-----------------------------------------------------------------------------
* Creation date : 01/10/96 Author : Francois
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
#if defined(GAM_USE_SCRIPT)
SCR_tde_Anl_ReturnValue fn_eStdGameScriptCallBack(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction)
{
SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
MS_tdxHandleToStandardGame h_StdGame;
struct tdstEngineObject_ *p_stEngineObject;
_p_stFile=_p_stFile;
SCR_M_RdL0_GetSectionLong(C_ParentSection,0,struct tdstEngineObject_ *, p_stEngineObject);
if (M_IsTitle)
{
MMG_fn_vBeginMemoryInfo (MMG_C_lTypeMiniStructure , MMG_C_lSubTypeStdGame , p_stEngineObject);
h_StdGame = fn_h_StdGameRealAlloc();
MMG_fn_vEndMemoryInfo ();
p_stEngineObject->h_StandardGame=h_StdGame;
/* JO 04/11/97*/
fn_ucStandardGameSetPlatFormType(h_StdGame,(unsigned char)0);
/*fn_ucStandardGameSetSpecialPositionFlag(h_StdGame,(unsigned char)0);*/
fn_vStandardGameSetCustomBits(h_StdGame,(unsigned long)GAM_C_CustBitUsesTransparencyZone);
fn_vStandardGameSetTransparencyZoneMin(h_StdGame,C_TRANSPARENCY_ZONE_MIN);
fn_vStandardGameSetTransparencyZoneMax(h_StdGame,C_TRANSPARENCY_ZONE_MAX);
/* ANNECY MT - 22/10/98 {*/
fn_vStandardGameSetTooFarLimit(h_StdGame,C_TOOFARLIMIT_INIT);
/* END ANNECY MT }*/
SCR_M_RdL0_SetSectionLong(C_ThisSection,0,h_StdGame);
}
else if (M_IsEntry)
{
tdxHandleToObjectsTablesList h_ObjectsTablesListElement;
SCR_M_RdL0_GetSectionLong(C_ThisSection,0,MS_tdxHandleToStandardGame,h_StdGame);
if (M_ActionIs(C_EntryStdGameType))
{
tdxHandleToState h_InitialState=NULL;
SCR_tdst_Link_Value *p_xIndex;
// Shaitan => module list in the level
SCR_tdst_Cxt_Values *p_stVal;
char * p_szInitialObjectTable;
// End Shaitan => module list in the level
M_CheckScriptParamNumber(3);
fn_vStandardGameSetPersonalType(h_StdGame,fn_otFindOrAddPersonalTypeOfPersonalTypeName(_ap_szParams[0]));
fn_vStandardGameSetFamilyType(h_StdGame,fn_otFindOrAddFamilyTypeOfFamilyTypeName(_ap_szParams[2]));
fn_vStandardGameSetModelType(h_StdGame,fn_otFindOrAddModelTypeOfModelTypeName(_ap_szParams[1]));
fn_v3dDataSetFamily(p_stEngineObject->h_3dData,fn_hFindOrAddFAmily(fn_otStandardGameGetFamilyType(h_StdGame)));
// Shaitan => module list in the level
/*
SCR_M_RdL0_GetContextLong(C_ParentContext,0,tdxHandleToObjectsTablesList,h_ObjectsTablesListElement);
*/
SCR_M_RdL0_GetContextLong(C_ParentContext,0, char*, p_szInitialObjectTable);
if (p_szInitialObjectTable)
{
SCR_M_RdL0_SetContextLong(C_GrandChildContext, 1, (long)fn_h3dDataGetFamily(p_stEngineObject->h_3dData));
p_stVal = SCR_fnp_st_RdL0_AnalyseSection(p_szInitialObjectTable, SCR_CDF_uw_Anl_Normal);
h_ObjectsTablesListElement = (tdxHandleToObjectsTablesList) SCR_M_ul_RdL0_ExtractLongValue(p_stVal,0);
// free(p_szInitialObjectTable);
}
else
h_ObjectsTablesListElement = NULL;
// End Shaitan => module list in the level
if(h_ObjectsTablesListElement!=NULL)
{
fn_v3dDataSetCurrentObjectsTable(p_stEngineObject->h_3dData,h_ObjectsTablesListElement);
fn_v3dDataSetInitialObjectsTable(p_stEngineObject->h_3dData,h_ObjectsTablesListElement);
fn_vAddAnObjectsTablesInList(fn_h3dDataGetFamily(p_stEngineObject->h_3dData),h_ObjectsTablesListElement);
}
else
{
fn_v3dDataSetCurrentObjectsTable(p_stEngineObject->h_3dData,fn_vGetDefaultObjectsTableOfFamily(fn_h3dDataGetFamily(p_stEngineObject->h_3dData)));
fn_v3dDataSetInitialObjectsTable(p_stEngineObject->h_3dData,fn_vGetDefaultObjectsTableOfFamily(fn_h3dDataGetFamily(p_stEngineObject->h_3dData)));
}
fn_vCheckObjectsTables(p_stEngineObject); /*Gizmo do nothing in release*/
h_InitialState = fn_h3dDataGetInitialState(p_stEngineObject->h_3dData);
if(h_InitialState)
{
p_xIndex = SCR_fnp_st_Link_SearchKey(&g_st3DOSLinkTable.stState,(char *)h_InitialState);
if (p_xIndex!=NULL&&p_xIndex->eState==SCR_ELS_Link_Initialized)
{
MMG_fn_vAddMemoryInfo( MMG_C_lTypeMiniStructure , MMG_C_lSubType3dData , p_stEngineObject);
TMP_M_Free(h_InitialState);
fn_v3dDataSetInitialState(p_stEngineObject->h_3dData,(tdxHandleToState)(p_xIndex->ulValue));
}
else
{
fn_v3dDataSetInitialState(p_stEngineObject->h_3dData,NULL);
M_GameWarningError(E_uwGamePLA_BadInitialState);
}
}
}
else if (M_ActionIs(C_EntryStdGameHitPointInit))
{
fn_vStandardGameSetHitPoints(h_StdGame,(unsigned char)fn_lAToI(_ap_szParams[0]));
}
else if (M_ActionIs(C_EntryStdGameHitPointMaxInit))
{
fn_vStandardGameSetHitPointsMax(h_StdGame,(unsigned char)fn_lAToI(_ap_szParams[0]));
}
else if (M_ActionIs(C_EntryStdGameHitPointMaxMax))
{
fn_vStandardGameSetHitPointsMaxMax(h_StdGame,(unsigned char)fn_lAToI(_ap_szParams[0]));
}
else if (M_ActionIs(C_EntryStdInitFlag))
{
M_CheckScriptParamNumber(2);
if (!stricmp(_ap_szParams[0],C_ValueStdInitFlagNeverBack))
fn_vStandardGameSetInitFlagWhenOutOfZone(h_StdGame,OI_NeverBackWhenTaken);
else if (!stricmp(_ap_szParams[0],C_ValueStdInitFlagGoOutOfZone))
fn_vStandardGameSetInitFlagWhenOutOfZone(h_StdGame,OI_WhenPlayerGoOutOfActionZone);
if (!stricmp(_ap_szParams[1],C_ValueStdInitFlagNeverBack))
fn_vStandardGameSetInitFlagWhenDeadOrTaken(h_StdGame,OI_NeverBackWhenTaken);
else if (!stricmp(_ap_szParams[1],C_ValueStdInitFlagAlways))
fn_vStandardGameSetInitFlagWhenDeadOrTaken(h_StdGame,OI_Always);
else if (!stricmp(_ap_szParams[1],C_ValueStdInitFlagGoOutOfZone))
fn_vStandardGameSetInitFlagWhenDeadOrTaken(h_StdGame,OI_WhenPlayerGoOutOfActionZone);
else if (!stricmp(_ap_szParams[1],C_ValueStdInitFlagPlayerDead))
fn_vStandardGameSetInitFlagWhenDeadOrTaken(h_StdGame,OI_WhenPlayerIsDead);
else if (!stricmp(_ap_szParams[1],C_ValueStdInitFlagMapLoaded))
fn_vStandardGameSetInitFlagWhenDeadOrTaken(h_StdGame,OI_WhenMapJustLoaded);
else if (!stricmp(_ap_szParams[1],C_ValueStdInitFlagSavedGameLoaded))
fn_vStandardGameSetInitFlagWhenDeadOrTaken(h_StdGame,OI_WhenSavedGameJustLoaded);
}
else if( M_ActionIs(C_EntryStdGamePlatFormType) )
{
M_CheckScriptParamNumber(1);
fn_ucStandardGameSetPlatFormType(h_StdGame,(unsigned char)fn_lAToI(_ap_szParams[0]));
}
else if( M_ActionIs(C_EntryStdGameCustomBitsInit) )
{
unsigned long ulCustBits;
M_CheckScriptParamNumber(1);
ulCustBits = (unsigned long)fn_lAToI(_ap_szParams[0]);
#ifndef ACTIVE_EDITOR
// GuS : If CB 32 is on a char from level, remove it.
if( (ulCustBits & GAM_C_CustBitRayman) && ! GAM_fn_bIsEngineInFixMode() )
ulCustBits &= ~GAM_C_CustBitRayman;
#endif
fn_vStandardGameSetCustomBits(h_StdGame,ulCustBits);
}
else if( M_ActionIs(C_EntryStdGameCapabilities) )
{
unsigned long ulReturn;
char* dummy;
/*ANNECY Bart#01 14/02/98*/
ulReturn = strtoul(_ap_szParams[0], &dummy, 2);
fn_vStandardGameSetCapabilities(h_StdGame, ulReturn);
}
else if( M_ActionIs(C_EntryStdGameTractionFactor) )
{
fn_vStandardGameSetTractionFactor(h_StdGame, (unsigned char)fn_lAToI(_ap_szParams[0]));
}
else if( M_ActionIs(C_EntryStdGameTransparencyZone) )
{
M_CheckScriptParamNumber(2);
fn_vStandardGameSetTransparencyZoneMin(h_StdGame,(unsigned char)fn_lAToI(_ap_szParams[0]));
fn_vStandardGameSetTransparencyZoneMax(h_StdGame,(unsigned char)fn_lAToI(_ap_szParams[1]));
}
/* ANNECY MT - 22/10/98 {*/
else if( M_ActionIs(C_EntryStdGameTooFarLimit))
{
M_CheckScriptParamNumber(1);
fn_vStandardGameSetTooFarLimit(h_StdGame,(unsigned char)fn_lAToI(_ap_szParams[0]));
}
/* END ANNECY MT }*/
}
return(eReturnValue);
}
#endif /* GAM_USE_SCRIPT */
/*-----------------------------------------------------------------------------
* Description : StdGame's mini-structure sizeof
*-----------------------------------------------------------------------------
* Input : None
* Output : Size of
*-----------------------------------------------------------------------------
* Creation date : 14/10/96 Author : Francois
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
unsigned long fn_ulStdGameSizeOf()
{
return(sizeof(struct tdstStandardGame_));
}
/*-----------------------------------------------------------------------------
* Description : StdGame object action allocation
*-----------------------------------------------------------------------------
* Input : Object pointer
* Output : None
*-----------------------------------------------------------------------------
* Creation date : 01/10/96 Author : Francois
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
void fn_vStdGameAlloc(struct tdstEngineObject_ *p_stObject)
{
if (p_stObject==NULL)
M_GameFatalError(E_uwGameMiniStructObjectNull);
if (p_stObject->h_StandardGame!=NULL)
M_GameFatalError(E_uwGameMiniStructAllocAlreadyAlloc);
MMG_fn_vBeginMemoryInfo (MMG_C_lTypeMiniStructure , MMG_C_lSubTypeStdGame , p_stObject);
p_stObject->h_StandardGame = fn_h_StdGameRealAlloc();
MMG_fn_vEndMemoryInfo ();
fn_vStdGameInitValueSAI(p_stObject->h_StandardGame);
}
MS_tdxHandleToStandardGame fn_h_StdGameRealAlloc()
{
MS_tdxHandleToStandardGame h_StdGame;
h_StdGame = (MS_tdxHandleToStandardGame)M_p_GameMallocInHLM(fn_ulStdGameSizeOf());
fn_vStandardGameSetCustomBits(h_StdGame,(unsigned long)GAM_C_CustBitUsesTransparencyZone);
fn_vStandardGameSetTransparencyZoneMin(h_StdGame,C_TRANSPARENCY_ZONE_MIN);
fn_vStandardGameSetTransparencyZoneMax(h_StdGame,C_TRANSPARENCY_ZONE_MAX);
fn_vStandardGameSetIsDesactivateAtAll(h_StdGame,0);
fn_vStandardGameSetIsActivable(h_StdGame,1);
fn_vStandardGameSetHitPoints(h_StdGame,0);
fn_vStandardGameSetHitPointsMax(h_StdGame,0);
fn_vStandardGameSetTooFarLimit(h_StdGame,C_TOOFARLIMIT_INIT);
/* ANNECY MT - 19/11/98 {*/
#if defined(ACTIVE_EDITOR)
fn_vStdGameSetInAllSubMaps(h_StdGame,FALSE);
#endif
/* END ANNECY MT }*/
return(h_StdGame);
}
/*-----------------------------------------------------------------------------
* Description : StdGame object action free
*-----------------------------------------------------------------------------
* Input : Object pointer
* Output : None
*-----------------------------------------------------------------------------
* Creation date : 01/10/96 Author : Francois
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
void fn_vStdGameFree(struct tdstEngineObject_ *p_stObject)
{
if (p_stObject==NULL)
M_GameFatalError(E_uwGameMiniStructObjectNull);
if (p_stObject->h_StandardGame==NULL)
M_GameFatalError(E_uwGameMiniStructNull);
fn_vStdGameFreeInitValueSAI(p_stObject->h_StandardGame);
MMG_fn_vAddMemoryInfo( MMG_C_lTypeMiniStructure , MMG_C_lSubTypeStdGame , p_stObject );
if( p_stObject == HIE_fn_hGetSuperObjectObject( MC_fn_hGetCharacterInMainCharacterNode( MC_fn_hGetFirstMainCharNode() ) ) )
fn_vStdGamePlayerFreeInitValueSAI(p_stObject->h_StandardGame);
M_GameFreeInHLM(p_stObject->h_StandardGame);
}
/*-----------------------------------------------------------------------------
* Description : StdGame object action initialisation
*-----------------------------------------------------------------------------
* Input : When this function's called (see ObjInit.h)
* Output : None
*-----------------------------------------------------------------------------
* Creation date : 01/10/96 Author : Francois
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
void fn_vStdGameInit(struct tdstEngineObject_ *p_stObject,enum tdeObjectTreeInit_ eObjectInit)
{
struct MTH3D_tdstVector_ hPosition;
POS_tdstCompletePosition *hMatrix;
ACP_tdxBool bIsAnAlways;
if (p_stObject==NULL)
M_GameFatalError(E_uwGameMiniStructObjectNull);
if (p_stObject->h_StandardGame==NULL)
M_GameFatalError(E_uwGameMiniStructNull);
fn_vStandardGameSetLastTrame(p_stObject->h_StandardGame,0);
bIsAnAlways = (ACP_tdxBool)fn_ucIsAnAlwaysObject(p_stObject);
if (eObjectInit == OTI_ReinitTheMap || eObjectInit == OTI_PlayerDead || (eObjectInit == OTI_MapLoaded && fn_bIsInFix(p_stObject)))
p_stObject -> h_StandardGame -> ulCustomBits = p_stObject -> h_StandardGame -> ulSaveCustomBits;
switch(eObjectInit)
{
/* ANNECY MT - 28/08/98 {*/
case OTI_ReinitTheMap:
if(!fn_ucIsAnAlwaysModel(p_stObject))
{
fn_vStandardGameSetIsDesactivateAtAll(p_stObject->h_StandardGame,0);
fn_vStandardGameSetIsActivable(p_stObject->h_StandardGame,1);
hMatrix = fn_p_st3dDataGetAbsoluteMatrix(p_stObject->h_3dData);
POS_fn_vGetTranslationVector(hMatrix,&hPosition);
fn_vSectInfoInitForSingleCharacter(M_GetSuperObject(p_stObject),&hPosition);
}
break;
case OTI_AlwaysCreated:
if(!fn_ucIsAnAlwaysModel(p_stObject))
{
fn_vStandardGameSetIsActivable(p_stObject->h_StandardGame,1);
hMatrix = fn_p_st3dDataGetAbsoluteMatrix(p_stObject->h_3dData);
POS_fn_vGetTranslationVector(hMatrix,&hPosition);
fn_vSectInfoInitForSingleCharacter(M_GetSuperObject(p_stObject),&hPosition);
}
break;
case OTI_PlayerDead:
if( !fn_ucIsAnAlwaysModel(p_stObject) &&
( !fn_bf1StandardGameGetIsDesactivateAtAll(p_stObject->h_StandardGame) || fn_bf1StandardGameGetIsActivable(p_stObject->h_StandardGame) )
)
{
fn_vStandardGameSetIsDesactivateAtAll(p_stObject->h_StandardGame,0);
fn_vStandardGameSetIsActivable(p_stObject->h_StandardGame,1);
hMatrix = fn_p_st3dDataGetAbsoluteMatrix(p_stObject->h_3dData);
POS_fn_vGetTranslationVector(hMatrix,&hPosition);
fn_vSectInfoInitForSingleCharacter(M_GetSuperObject(p_stObject),&hPosition);
}
break;
case OTI_LoadSavedGame:
if(!fn_ucIsAnAlwaysModel(p_stObject))
{
if (fn_eStandardGameGetInitFlagWhenDeadOrTaken(p_stObject->h_StandardGame) == OI_NeverBackWhenTaken)
{
fn_vStandardGameSetIsActivable(p_stObject->h_StandardGame,(unsigned char)(!fn_bf1StandardGameGetIsDesactivateAtAll(p_stObject->h_StandardGame)));
}
hMatrix = fn_p_st3dDataGetAbsoluteMatrix(p_stObject->h_3dData);
POS_fn_vGetTranslationVector(hMatrix,&hPosition);
fn_vSectInfoInitForSingleCharacter(M_GetSuperObject(p_stObject),&hPosition);
}
break;
/* END ANNECY MT }*/
case OTI_MapLoaded:
fn_vStdGameSavedValueSAI(p_stObject->h_StandardGame);
fn_vStandardGameSetIsActivable(p_stObject->h_StandardGame,1);
/* We save current hit points and max hit points for rayman only */
/* GuS if( p_stObject == HIE_fn_hGetSuperObjectObject( MC_fn_hGetCharacterInMainCharacterNode( MC_fn_hGetFirstMainCharNode() ) ) )*/
if (fn_ulStandardGameGetCustomBits(p_stObject -> h_StandardGame) & GAM_C_CustBitRayman)
fn_vStdGamePlayerSavedValueSAI(p_stObject->h_StandardGame);
case OTI_WhenGameStart:
if (!fn_bIsAllSecondPassDone(p_stObject->h_StandardGame))
fn_vStdGameInitValueSAI(p_stObject->h_StandardGame);
break;
}
{
MS_tdxHandleToStandardGame h_StdGame = p_stObject -> h_StandardGame;
/* ANNECY YLT - 25/11/98 {*/
if (fn_ulStandardGameGetCustomBits(h_StdGame) & GAM_C_CustBitRayman)
{
/* for main actor only: we dont itialise the number of hitpoints except at the beginning of the game*/
if (/*eObjectInit == OTI_ReinitTheMap || eObjectInit == OTI_PlayerDead ||*/ eObjectInit == OTI_WhenGameStart)
{
h_StdGame -> ucHitPoints = h_StdGame -> ucSaveHitPoints;
/*h_StdGame -> ucHitPointsMax = h_StdGame -> ucSaveHitPointsMax;*/
}
}
else
/* END ANNECY YLT }*/
{
if (eObjectInit == OTI_ReinitTheMap || eObjectInit == OTI_PlayerDead || eObjectInit == OTI_WhenGameStart)
h_StdGame -> ucHitPoints = h_StdGame -> ucSaveHitPoints;
/*
if (eObjectInit == OTI_ReinitTheMap || eObjectInit == OTI_MapLoaded || eObjectInit == OTI_WhenGameStart)
h_StdGame -> ucHitPointsMax = h_StdGame -> ucSaveHitPointsMax;
*/
}
if (eObjectInit == OTI_ReinitTheMap || eObjectInit == OTI_MapLoaded)
{
h_StdGame -> ucMiscFlags = (unsigned char ) ( (h_StdGame->ucMiscFlags & ~GAM_C_SavedMiscFlags) | h_StdGame->ucSaveMiscFlags );
}
/*if (eObjectInit == OTI_PlayerDead && bIsAnAlways)*/
/*h_StdGame -> ulCustomBits |= GAM_C_CustBitAlways;*/
}
}
/*-----------------------------------------------------------------------------
* Description : StdGame object action desinitialisation
*-----------------------------------------------------------------------------
* Input : When this function's called (see ObjInit.h)
* Output : None
*-----------------------------------------------------------------------------
* Creation date : 01/10/96 Author : Francois
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
void fn_vStdGameDesinit(struct tdstEngineObject_ *p_stObject,enum tdeObjectTreeInit_ eObjectInit)
{
if (p_stObject==NULL)
M_GameFatalError(E_uwGameMiniStructObjectNull);
if (p_stObject->h_StandardGame==NULL)
M_GameFatalError(E_uwGameMiniStructNull);
switch(eObjectInit)
{
case OTI_AlwaysCreated:
case OTI_ReinitTheMap:
case OTI_MapLoaded:
case OTI_PlayerDead:
case OTI_LoadSavedGame:
fn_vStandardGameSetIsActivable(p_stObject->h_StandardGame,0);
break;
default:
break;
}
}
/*************************************************************************/
void fn_vStdGameInitValueSAI(MS_tdxHandleToStandardGame h_StdGame)
{
/* ANNECY AV {*/
/*
SAI_fn_bInsertCharInTable((void*)&h_StdGame->ucHitPoints, SAI_eInitWhenPlayerDead|SAI_eInitWhenReinitTheMap|SAI_eInitWhenNewGameStart);
SAI_fn_bInsertCharInTable((void*)&h_StdGame->ucHitPointsMax, SAI_eInitWhenReinitTheMap|SAI_eInitWhenMapLoaded|SAI_eInitWhenNewGameStart);
SAI_fn_bInsertCharInTable((void*)&h_StdGame->ucMiscFlags, SAI_eInitWhenReinitTheMap|SAI_eInitWhenMapLoaded);
SAI_fn_bInsertLongInTable((void*)&h_StdGame->ulCustomBits, SAI_eInitWhenPlayerDead|SAI_eInitWhenReinitTheMap|SAI_eInitWhenMapLoaded|SAI_eInitWhenNewGameStart);
*/
h_StdGame -> ucSaveHitPoints = h_StdGame -> ucHitPoints;
h_StdGame -> ucSaveHitPointsMax = h_StdGame -> ucHitPointsMax;
/* ANNECY MT - 09/10/98 {*/
h_StdGame -> ucSaveMiscFlags = (unsigned char)(h_StdGame -> ucMiscFlags & GAM_C_SavedMiscFlags);
/* END ANNECY MT }*/
h_StdGame -> ulSaveCustomBits = h_StdGame -> ulCustomBits;
/* END ANNECY AV }*/
}
/*************************************************************************/
void fn_vStdGameSavedValueSAI(MS_tdxHandleToStandardGame h_StdGame)
{
#ifndef U64
if( fn_eStandardGameGetInitFlagWhenDeadOrTaken(h_StdGame) == OI_NeverBackWhenTaken )
SAI_fn_bInsertBoolInTable((void*)&h_StdGame->ucMiscFlags,GAM_C_DesactivateAtAll,SAI_eLevelSaveCurrentValue);
#endif
}
/*************************************************************************/
void fn_vStdGamePlayerSavedValueSAI(MS_tdxHandleToStandardGame h_StdGame)
{
SAI_fn_bInsertCharInTable((void*)&h_StdGame->ucHitPoints,SAI_ePlayerSaveCurrentValue);
SAI_fn_bInsertCharInTable((void*)&h_StdGame->ucHitPointsMax,SAI_ePlayerSaveCurrentValue);
SAI_fn_bInsertCharInTable((void*)&h_StdGame->ucHitPointsMaxMax,SAI_ePlayerSaveCurrentValue);
}
/*************************************************************************/
void fn_vStdGameFreeInitValueSAI(MS_tdxHandleToStandardGame h_StdGame)
{
/* ANNECY AV {*/
/*
SAI_fn_bRemoveValueFromTable((void*)&h_StdGame->ucHitPoints, SAI_eInitWhenPlayerDead|SAI_eInitWhenReinitTheMap|SAI_eInitWhenNewGameStart);
SAI_fn_bRemoveValueFromTable((void*)&h_StdGame->ucHitPointsMax, SAI_eInitWhenReinitTheMap|SAI_eInitWhenMapLoaded|SAI_eInitWhenNewGameStart);
SAI_fn_bRemoveValueFromTable((void*)&h_StdGame->ucMiscFlags, SAI_eInitWhenReinitTheMap|SAI_eInitWhenMapLoaded);
SAI_fn_bRemoveValueFromTable((void*)&h_StdGame->ulCustomBits, SAI_eInitWhenPlayerDead|SAI_eInitWhenReinitTheMap|SAI_eInitWhenMapLoaded|SAI_eInitWhenNewGameStart);
*/
/* END ANNECY AV }*/
#ifndef U64
if( fn_eStandardGameGetInitFlagWhenDeadOrTaken(h_StdGame) == OI_NeverBackWhenTaken )
SAI_fn_bRemoveValueFromTable((void*)&h_StdGame->ucMiscFlags,SAI_eLevelSaveCurrentValue);
#endif
}
/*************************************************************************/
void fn_vStdGamePlayerFreeInitValueSAI(MS_tdxHandleToStandardGame h_StdGame)
{
SAI_fn_bRemoveValueFromTable((void*)&h_StdGame->ucHitPoints,SAI_ePlayerSaveCurrentValue);
SAI_fn_bRemoveValueFromTable((void*)&h_StdGame->ucHitPointsMax,SAI_ePlayerSaveCurrentValue);
SAI_fn_bRemoveValueFromTable((void*)&h_StdGame->ucHitPointsMaxMax,SAI_ePlayerSaveCurrentValue);
}
/**************************************************************************/
void fn_vSetHitPointsToInitValue(struct tdstEngineObject_ *_p_stObject)
{
/* ANNECY AV {*/
/* SAI_fn_bInitOneValueWhen((void*)&_p_stObject->h_StandardGame->ucHitPoints,SAI_eInitWhenPlayerDead|SAI_eInitWhenReinitTheMap|SAI_eInitWhenNewGameStart);*/
_p_stObject -> h_StandardGame -> ucHitPoints = _p_stObject -> h_StandardGame -> ucSaveHitPoints;
/* END ANNECY AV }*/
}
/**************************************************************************/
void fn_vSetHitPointsMaxToInitValue(struct tdstEngineObject_ *_p_stObject)
{
/* ANNECY AV {*/
/* SAI_fn_bInitOneValueWhen((void*)&_p_stObject->h_StandardGame->ucHitPointsMax,SAI_eInitWhenReinitTheMap|SAI_eInitWhenMapLoaded|SAI_eInitWhenNewGameStart);*/
_p_stObject -> h_StandardGame -> ucHitPointsMax = _p_stObject -> h_StandardGame -> ucSaveHitPointsMax;
/* END ANNECY AV }*/
}
/**************************************************************************/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void fn_vSetCustomBitsToInitValue(struct tdstEngineObject_ *_p_stObject)
{
/* ANNECY AV {*/
/* SAI_fn_bInitOneValueWhen((void*)&_p_stObject->h_StandardGame->ulCustomBits,SAI_eInitWhenPlayerDead|SAI_eInitWhenReinitTheMap|SAI_eInitWhenMapLoaded|SAI_eInitWhenNewGameStart);*/
_p_stObject -> h_StandardGame -> ulCustomBits = _p_stObject -> h_StandardGame -> ulSaveCustomBits;
/* END ANNECY AV }*/
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
/*ENDANNECY BBB 20/11/97 }*/
/*************************************************************************/
/*-----------------------------------------------------------------------------
* Description : StdGame's object copy clone action
*-----------------------------------------------------------------------------
* Input : Handle to destination, handle to source
* Output : None
*-----------------------------------------------------------------------------
* Creation date : 30/06/97 Author : Olivier Jourdan
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
void fn_vStdGameCopyClone(struct tdstEngineObject_ * _p_stObjectDest,struct tdstEngineObject_ * _p_stObjectSrc)
{
/* If StdGame doesn't contains pointers to structure that may be*/
/* changed during the game, this function must only be a :*/
memcpy(_p_stObjectDest->h_StandardGame,_p_stObjectSrc->h_StandardGame,fn_ulStdGameSizeOf());
}
/*-----------------------------------------------------------------------------
* Description : StandardGame access functions
*-----------------------------------------------------------------------------
* Input : MS_tdxHandleToStandardGame + (value)
* Output : (value or pointer)
*-----------------------------------------------------------------------------
* Creation date : 30/01/97 Author : Francois
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
HIE_tdxHandleToSuperObject fn_h_StandardGameGetSuperObject(MS_tdxHandleToStandardGame h_StdGame)
{
SAF_M_AssertWithMsg((h_StdGame != NULL),"StdGame est NULL")
return h_StdGame ? h_StdGame->h_SuperObject : NULL;
}
void fn_vStandardGameSetSuperObject(MS_tdxHandleToStandardGame h_StdGame,HIE_tdxHandleToSuperObject h_SuperObject)
{
h_StdGame->h_SuperObject=h_SuperObject;
/**** We put the absolute matrix in 3dData structure ****/
/*RB to avoid NULL pointer access*/
if( h_SuperObject )
{
fn_v3dDataSetAbsoluteMatrix(
M_GetMSHandle(h_SuperObject,3dData),
HIE_fn_hGetSuperObjectGlobalMatrix(h_SuperObject) );
}
}
unsigned long fn_ulStandardGameGetCustomBitsSO (HIE_tdxHandleToSuperObject hSupObj)
{
return fn_ulStandardGameGetCustomBits (M_GetMSHandle(hSupObj,StandardGame));
}
void fn_vStandardGameSetCustomBitsSO(HIE_tdxHandleToSuperObject hSupObj,unsigned long ulCustomBits)
{
fn_vStandardGameSetCustomBits(M_GetMSHandle(hSupObj,StandardGame),ulCustomBits);
}
ACP_tdxBool fn_bStandardGameIsAPlatform (HIE_tdxHandleToSuperObject hSupObj)
{
return (ACP_tdxBool) (fn_ucStandardGameGetPlatFormType(M_GetMSHandle(hSupObj,StandardGame))==C_ucPlatFormType_StandardPlatForm);
}
unsigned char fn_ucStandardGameGetTransparencyZoneMinSO(HIE_tdxHandleToSuperObject hSupObj)
{
register MS_tdxHandleToStandardGame hStdGame = M_GetMSHandle(hSupObj,StandardGame);
return (unsigned char)(hStdGame ? fn_ucStandardGameGetTransparencyZoneMin(hStdGame) : C_TRANSPARENCY_ZONE_MIN);
}
unsigned char fn_ucStandardGameGetTransparencyZoneMaxSO(HIE_tdxHandleToSuperObject hSupObj)
{
register MS_tdxHandleToStandardGame hStdGame = M_GetMSHandle(hSupObj,StandardGame);
return (unsigned char)(hStdGame ? fn_ucStandardGameGetTransparencyZoneMax(hStdGame) : C_TRANSPARENCY_ZONE_MAX);
}
/* ANNECY MT - 22/10/98 {*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC 04/06/99 */
unsigned char fn_ucStandardGameGetTooFarLimitSO(HIE_tdxHandleToSuperObject hSupObj)
{
register MS_tdxHandleToStandardGame hStdGame = M_GetMSHandle(hSupObj,StandardGame);
return (unsigned char)(hStdGame ? fn_ucStandardGameGetTooFarLimit(hStdGame) : C_TOOFARLIMIT_INIT);
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC 04/06/99 */
/* END ANNECY MT }*/
/*************************************/
/**** Access functions for Editor ****/
/*************************************/
#if defined(ACTIVE_EDITOR)
/*************************************************************************/
unsigned char *fn_p_ucStdGameGetHitPointsInit(MS_tdxHandleToStandardGame h_StdGame)
{
/* ANNECY AV {*/
/* return (unsigned char *)SAI_fn_p_vGetTableValuePointerOf((void*)&h_StdGame->ucHitPoints,SAI_eInitWhenPlayerDead|SAI_eInitWhenReinitTheMap|SAI_eInitWhenNewGameStart);*/
return & h_StdGame -> ucSaveHitPoints;
/* END ANNECY AV }*/
}
/*************************************************************************/
unsigned char *fn_p_ucStdGameGetHitPointsMaxInit(MS_tdxHandleToStandardGame h_StdGame)
{
/* ANNECY AV {*/
/* return (unsigned char *)SAI_fn_p_vGetTableValuePointerOf((void*)&h_StdGame->ucHitPointsMax,SAI_eInitWhenReinitTheMap|SAI_eInitWhenMapLoaded|SAI_eInitWhenNewGameStart);*/
return & h_StdGame -> ucSaveHitPointsMax;
/* END ANNECY AV }*/
}
/*************************************************************************/
unsigned long *fn_p_ulStdGameGetCustomBitsInit(MS_tdxHandleToStandardGame _hStdGame)
{
/* ANNECY AV {*/
/* return (unsigned long *)SAI_fn_p_vGetTableValuePointerOf((void*)&_hStdGame->ulCustomBits,SAI_eInitWhenPlayerDead|SAI_eInitWhenReinitTheMap|SAI_eInitWhenMapLoaded|SAI_eInitWhenNewGameStart);*/
return & _hStdGame -> ulSaveCustomBits;
/* END ANNECY AV }*/
}
/*************************************************************************/
void fn_vStdGameSetLoadedInFix(MS_tdxHandleToStandardGame h_StdGame,unsigned char bValue)
{
h_StdGame->bIsLoadedInFix = bValue;
}
/*************************************************************************/
unsigned char fn_bStdGameIsLoadedInFix(MS_tdxHandleToStandardGame h_StdGame)
{
return(h_StdGame->bIsLoadedInFix);
}
/*************************************************************************/
/* ANNECY MT - 19/11/98 {*/
void fn_vStdGameSetInAllSubMaps(MS_tdxHandleToStandardGame h_StdGame,unsigned char bValue)
{
h_StdGame->bIsInAllSubMaps = bValue;
}
/*************************************************************************/
unsigned char fn_bStdGameIsInAllSubMaps(MS_tdxHandleToStandardGame h_StdGame)
{
return(h_StdGame->bIsInAllSubMaps);
}
/* END ANNECY MT }*/
/*************************************************************************/
#endif /* ACTIVE_EDITOR */
unsigned char fn_ucStdGameCheckValidity(HIE_tdxHandleToSuperObject _h_SprObj) {
if ( M_GetMSHandle(_h_SprObj, StandardGame ))
return (TRUE) ;
return (FALSE) ;
}