191 lines
5.8 KiB
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;
|
|
}
|