/*========================================================================= * State.c : This module contain all models functions * This is a part of the Game project. * * Version 1.0 * Creation date 04/02/97 * Revision date * * That file needs to be compatible for all platforms. * * (c) Ubi Studios 1997 *=======================================================================*/ /*******************************************************/ /**** For the structures and variables declarations ****/ /*******************************************************/ #define D_State_Define #include "ToolsCPA.h" #include "Options/Options.h" #include "Macros.h" #include "Actions/AllActs.h" #include "Structur/MemGame.h" #include "Structur/ErrGame.h" #include "Structur/Objects.h" #include "Structur/GameScpt.h" #include "Structur/MemGame.h" #include "Structur/StdObjSt.h" #include "Structur/EngMode.h" #include "Structur/3DOSLkTb.h" #include "PlayAnim/PLA_dbg.h" #include "Structur/State.h" #include "ZeMem.h" #define MAX_STATE_SIZE 64*1024 /*----------------------------------------------------------------------------- * Description : State's mini-structure sizeof *----------------------------------------------------------------------------- * Input : None * Output : Size of *----------------------------------------------------------------------------- * Creation date : 04/02/97 Author : DAVID Sebastien (Gizmo) *----------------------------------------------------------------------------- * Modification date : Modification Author : * Modifications : *---------------------------------------------------------------------------*/ /* ************* STATE *************/ unsigned long fn_ulStateSizeOf() { return(sizeof(struct tdstState_)); } #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ tdxHandleToState fn_h_StateAlloc() { tdxHandleToState h_State; h_State = (tdxHandleToState)M_p_GameMallocInHLM(fn_ulStateSizeOf()); /* init the State structure*/ h_State->p_stAnim = NULL; LST2_M_StaticInitAnchor(&h_State->hForTransitionArray); LST2_M_StaticInitAnchor(&h_State->hForProhibitArray); h_State->h_NextState = NULL; h_State->ucRepeatAnimation = 0; h_State->ucTransitionStatusFlag = C_ucProhibitedState; h_State->scSpeedAnim = 1; h_State->h_LinkedMechanicsIdCard = NULL; h_State->ucCustomBits = 0; return(h_State); } void fn_h_StateFree(tdxHandleToState h_State) { M_GameFreeInHLM(h_State); } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */ /* ************ Transitional State ************** */ unsigned long fn_ulTransitionSizeOf() { return(sizeof(struct tdstTransition_)); } #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ tdxHandleToTransition fn_h_TransitionAlloc() { tdxHandleToTransition h_Transition; h_Transition = (tdxHandleToTransition)M_p_GameMallocInHLM(fn_ulTransitionSizeOf()); return(h_Transition); } void fn_h_TransitionFree(tdxHandleToTransition h_Transition) { M_GameFreeInHLM(h_Transition); } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */ /* ************ Prohibited State ************** */ unsigned long fn_ulProhibitSizeOf() { return(sizeof(struct tdstProhibit_)); } tdxHandleToProhibit fn_h_ProhibitAlloc() { tdxHandleToProhibit h_Prohibit; h_Prohibit = (tdxHandleToProhibit)M_p_GameMallocInHLM(fn_ulProhibitSizeOf()); return(h_Prohibit); } #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ void fn_h_ProhibitFree(tdxHandleToProhibit h_Prohibit) { M_GameFreeInHLM(h_Prohibit); } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */ /*----------------------------------------------------------------------------- * Description : State access functions *----------------------------------------------------------------------------- * Input : tdxHandleToState + (value) * Output : (value or pointer) *----------------------------------------------------------------------------- * Creation date : 07/02/97 Author : DAVID Sebastien (Gizmo) *----------------------------------------------------------------------------- * Modification date : Modification Author : * Modifications : *---------------------------------------------------------------------------*/ /********** Debug name ********************/ #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ char* fn_p_szGetStateName(tdxHandleToState h_State) { #ifdef _DEBUG_STRING_FOR_PLA_ return (h_State->szStateName); #else return NULL; #endif } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */ /********** Anim ********************/ struct tdstAnim3d_* fn_p_stGetAnimInState(tdxHandleToState h_State) { return(h_State->p_stAnim); } void fn_vSetAnimInState(tdxHandleToState h_State,struct tdstAnim3d_ *p_stAnim) { h_State->p_stAnim = p_stAnim; } /*************** NextState *******************/ tdxHandleToState fn_hGetNextStateInState(tdxHandleToState h_State) { return(h_State->h_NextState); } void fn_vSetNextStateInState(tdxHandleToState h_State,tdxHandleToState h_NextState) { h_State->h_NextState = h_NextState; } /*********** RepeatAnimation *******************/ #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ unsigned char fn_ucGetRepeatAnimationInState(tdxHandleToState h_State) { return(h_State->ucRepeatAnimation); } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */ void fn_vSetRepeatAnimationInState(tdxHandleToState h_State,unsigned char ucRepeatAnimation) { h_State->ucRepeatAnimation = ucRepeatAnimation; } /*********** TransitionStatusFlag *******************/ #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ unsigned char fn_ucGetTransitionStatusFlagInState(tdxHandleToState h_State) { return(h_State->ucTransitionStatusFlag); } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */ void fn_vSetTransitionStatusFlagInState(tdxHandleToState h_State,unsigned char ucTransitionStatusFlag) { h_State->ucTransitionStatusFlag = ucTransitionStatusFlag; } /*********** SpeedAnim *******************/ signed char fn_scGetSpeedInState(tdxHandleToState h_State) { return(h_State->scSpeedAnim); } void fn_vSetSpeedInState(tdxHandleToState h_State,signed char scSpeedAnim) { h_State->scSpeedAnim = scSpeedAnim; } /* ************* MechanicsIdCard *************/ DNM_tdxHandleToMecIdentityCard fn_hGetStateMechanicsIdCard(tdxHandleToState h_State) { return(h_State->h_LinkedMechanicsIdCard); } #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ void fn_vSetStateMechanicsIdCard(tdxHandleToState h_State,DNM_tdxHandleToMecIdentityCard h_LinkedMechanicsIdCard) { h_State->h_LinkedMechanicsIdCard = h_LinkedMechanicsIdCard; } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */ /* ANNECY MT - 24/11/98 {*/ /* ******* CustomBits *******/ unsigned char fn_ucGetStateCustomBits(tdxHandleToState h_State) { return(h_State->ucCustomBits); } void fn_vSetStateCustomBits(tdxHandleToState h_State,unsigned char ucCustomBits) { h_State->ucCustomBits = ucCustomBits; } /* END ANNECY MT }*/ /*----------------------------------------------------------------------------- * Description : Transition access functions *----------------------------------------------------------------------------- * Input : tdxHandleToTransition + (value) * Output : (value or pointer) *----------------------------------------------------------------------------- * Creation date : 07/02/97 Author : DAVID Sebastien (Gizmo) *----------------------------------------------------------------------------- * Modification date : Modification Author : * Modifications : *---------------------------------------------------------------------------*/ /*************** TargetState *******************/ tdxHandleToState fn_hGetTargetStateInTransition(tdxHandleToTransition h_Transition) { return(h_Transition->h_TargetState); } #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ void fn_vSetTargetStateInTransition(tdxHandleToTransition h_Transition,tdxHandleToState h_TargetState) { h_Transition->h_TargetState = h_TargetState; } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */ /*************** StateToGo *******************/ tdxHandleToState fn_hGetStateToGoInTransition(tdxHandleToTransition h_Transition) { return(h_Transition->h_StateToGo); } #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ void fn_vSetStateToGoInTransition(tdxHandleToTransition h_Transition,tdxHandleToState h_StateToGo) { h_Transition->h_StateToGo = h_StateToGo; } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */ /*ANNECY CT 11/02/98{*/ /*************** LinkingType *******************/ unsigned char fn_ucGetLinkingTypeInTransition(tdxHandleToTransition h_Transition) { return(h_Transition->ucLinkingType); } #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ void fn_vSetLinkingTypeInTransition(tdxHandleToTransition h_Transition,unsigned char ucLinkingType) { h_Transition->ucLinkingType = ucLinkingType; } #endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */ /*ENDANNECY CT}*/ /*************** TEST StateToGo *******************/ /*ANNECY CT 11/02/98{*/ /*tdxHandleToState fn_hIfExistTransitionalWithTargetState(tdxHandleToState h_State, tdxHandleToState h_TargetState)*/ tdxHandleToTransition fn_hIfExistTransitionalWithTargetState(tdxHandleToState h_State, tdxHandleToState h_TargetState) /*ENDANNECY CT}*/ /* AR9808 Function changed to be compatible with optimized static lists*/ { int i; struct tdstTransition_ *p_stTransition; LST2_M_StaticForEachElementOf(&h_State->hForTransitionArray, p_stTransition, i) { if (fn_hGetTargetStateInTransition(p_stTransition) == h_TargetState) { return p_stTransition; } } return NULL; } #ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */ tdxHandleToState fn_hGetProhibitedStateInProhibit( tdxHandleToProhibit _hProhibit ) { return ( _hProhibit ? _hProhibit -> h_ProhibitedState : NULL ); } void fn_vSetProhibitedStateInProhibit( tdxHandleToProhibit _hProhibit, tdxHandleToState _hState ) { _hProhibit -> h_ProhibitedState = _hState; } /*************** GET for EDITOR *******************/ /* AR9808 : Modif for optimized lists compatibility*/ tdxHandleToTransition fn_hGetTransitionalWithTargetState( tdxHandleToState _hState, tdxHandleToState _hTargetState ) { tdxHandleToTransition hTransition; int i,max; hTransition = LST2_M_StaticGetFirstElement( & _hState -> hForTransitionArray ); max=LST2_M_StaticGetNumberOfElements(& _hState -> hForTransitionArray); i=0; while( hTransition && (ihForProhibitArray); max=LST2_M_StaticGetNumberOfElements(&h_State->hForProhibitArray); i=0; while((p_stProhibit != NULL)&&(ih_ProhibitedState == h_TargetState) { return(1); } p_stProhibit = (struct tdstProhibit_ *) LST2_M_StaticGetNextElement(p_stProhibit); ++i; } return(0); } /*------------------------------------------------------------------- * End Of file *-----------------------------------------------------------------*/