reman3/Rayman_X/cpa/tempgrp/GAM/specif/SubMapPs.c

191 lines
5.8 KiB
C

/*=========================================================================
* SubMapPs.c : This module contain all submap positions functions
* This is a part of the Game project.
*
* Version 1.0
* Creation date 08/09/98
* Revision date
*
*
* (c) Ubi Studios 1998
*=======================================================================*/
/*******************************************************/
/**** For the structures and variables declarations ****/
/*******************************************************/
#include "Options/Options.h"
#include "GAM/Header.h"
#include "ToolsCPA.h"
#include "ZeMem.h"
#include "GAM\Options\Specif\SubMapPs.h"
#include "Macros.h"
/*******************************************************/
/**** For the structures and variables declarations ****/
/*******************************************************/
tdstSubMapPosition *gs_hFirstSubMapPosition;
/*******************************************************/
extern long fn_lAToI(char *szString);
SCR_tde_Anl_ReturnValue GAM_fn_eCallBackLoadSubMapPosition(SCR_tdst_File_Description *p_fFile, char *szAction, char *szParams[], SCR_tde_Anl_Action cType);
SCR_tde_Anl_ReturnValue GAM_fn_eCallBackLoadSuperObject(SCR_tdst_File_Description *p_fFile, char *szAction, char *szParams[], SCR_tde_Anl_Action cType);
/*******************************************************/
/*****/
/*******************************************************/
void GAM_fn_vAddSubMapPosition(long _lSubMapNumber , long _lEntryNumber , POS_tdxHandleToPosition _hPosition)
{
tdstSubMapPosition *hSubMapPosition;
hSubMapPosition = (tdstSubMapPosition *)M_p_GameMallocInHLM(sizeof(struct tdstSubMapPosition_));
hSubMapPosition -> lSubMap = GAM_M_MakeSubMapNumber(_lSubMapNumber,_lEntryNumber);
hSubMapPosition -> hPosition = _hPosition;
if(gs_hFirstSubMapPosition == NULL)
{
hSubMapPosition -> p_stNextPosition = NULL;
}
else
{
hSubMapPosition -> p_stNextPosition = gs_hFirstSubMapPosition;
}
gs_hFirstSubMapPosition = hSubMapPosition;
}
/*******************************************************/
/*****/
/*******************************************************/
POS_tdxHandleToPosition GAM_fn_hGetSubMapPosition(long _lSubMapNumber , long _lEntryNumber)
{
tdstSubMapPosition *hSubMapPosition;
long lAbsolute;
lAbsolute = GAM_M_MakeSubMapNumber(_lSubMapNumber,_lEntryNumber);
hSubMapPosition = gs_hFirstSubMapPosition;
while(hSubMapPosition)
{
if(hSubMapPosition -> lSubMap == lAbsolute)
return hSubMapPosition -> hPosition;
hSubMapPosition = hSubMapPosition -> p_stNextPosition;
}
return NULL;
}
/*******************************************************/
/*****/
/*******************************************************/
void GAM_fn_vInitSubMapPositionList()
{
gs_hFirstSubMapPosition = NULL;
}
/*******************************************************/
/*****/
/*******************************************************/
void GAM_fn_vClearSubMapPositionList()
{
tdstSubMapPosition *hSubMapPosition,*hNextSubMapPosition;
hSubMapPosition = gs_hFirstSubMapPosition;
while(hSubMapPosition)
{
hNextSubMapPosition = hSubMapPosition -> p_stNextPosition;
POS_M_GameFree(hSubMapPosition -> hPosition);
M_GameFreeInHLM(hSubMapPosition);
hSubMapPosition = hNextSubMapPosition;
}
gs_hFirstSubMapPosition = NULL;
}
/*******************************************************/
/*****/
/*******************************************************/
void GAM_fn_vLoadSubMapPositions(char *_szFileName)
{
SCR_tdst_Anl_Callback *p_stCallBackSuperObject;
SCR_tdpfn_Anl_Callback pfn_CallBackSuperObject;
SCR_tdst_Anl_Callback *p_stCallBackSubMapSection;
SCR_tdpfn_Anl_Callback pfn_CallBackSubMapSection;
if(SCR_fn_c_RdL0_IsSectionExists(_szFileName))
{
/* unregister callback*/
p_stCallBackSuperObject = SCR_fnp_st_RdL0_GetRegisterCallback( "SuperObject", SCR_CRC_c_RdL0_ForSection );
pfn_CallBackSuperObject = p_stCallBackSuperObject -> pfn_eCallback;
/**/
p_stCallBackSubMapSection = SCR_fnp_st_RdL0_GetRegisterCallback( "CreateSubMaps", SCR_CRC_c_RdL0_ForSection );
pfn_CallBackSubMapSection = p_stCallBackSubMapSection -> pfn_eCallback;
/* register new callback*/
p_stCallBackSuperObject -> pfn_eCallback = GAM_fn_eCallBackLoadSuperObject;
p_stCallBackSubMapSection -> pfn_eCallback = GAM_fn_eCallBackLoadSubMapPosition;
/**/
SCR_fnp_st_RdL0_AnalyseSection( _szFileName, SCR_CDF_uw_Anl_Normal);
SCR_fn_v_RdL0_DeleteOpenSection( _szFileName, SCR_CDR_c_RdL0_Contains ); /* ???*/
/* restore callback*/
p_stCallBackSuperObject -> pfn_eCallback = pfn_CallBackSuperObject;
p_stCallBackSubMapSection -> pfn_eCallback = pfn_CallBackSubMapSection;
}
}
/*******************************************************/
/*****/
/*******************************************************/
SCR_tde_Anl_ReturnValue GAM_fn_eCallBackLoadSubMapPosition(SCR_tdst_File_Description *p_fFile, char *szAction, char *szParams[], SCR_tde_Anl_Action cType)
{
POS_tdstCompletePosition *p_stMatrix;
long lSubMapNumber,lEntryNumber;
switch (cType)
{
case SCR_EA_Anl_BeginSection:
break;
case SCR_EA_Anl_Entry:
break;
case SCR_EA_Anl_BeginSubSection:
break;
case SCR_EA_Anl_EndSubSection:
if(strcmpi(szParams[0],"Matrix")==0)
{
/* get matrix*/
SCR_M_RdL0_GetContextLong(1,0,POS_tdstCompletePosition *,p_stMatrix);
/* get SubMap Number*/
lSubMapNumber = fn_lAToI(szAction + strlen("submap"));
/* get Entry Number*/
lEntryNumber = fn_lAToI(szParams[1] + strlen("Position"));
/* add position*/
GAM_fn_vAddSubMapPosition( lSubMapNumber , lEntryNumber , p_stMatrix );
}
break;
case C_SCRIPT_EndSection:
break;
}
return R_SCRIPT_NormalReturn;
}
SCR_tde_Anl_ReturnValue GAM_fn_eCallBackLoadSuperObject(SCR_tdst_File_Description *p_fFile, char *szAction, char *szParams[], SCR_tde_Anl_Action cType)
{
return R_SCRIPT_NormalReturn;
}