reman3/Rayman_X/cpa/Appli/Max23Dos/src/PhySave.c

516 lines
20 KiB
C

/*=========================================================================
*
* PhySave.h - Saving functions for PHY file
*
* Version 1.0
* Revision date
*
*=======================================================================*/
#include "PhySave.h"
#include "conventi.h"
#include "system.h"
#include "geoobj.h"
//--- Global statics --------------------------------------------------------
// retrieve the maximum index in Tbl file
long gs_lMaximumIndex;
//--------------------------------------------------------------------
/****************************************************************************
* Description: init maximum index before saving
*
* Parameters:
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vInitSaveTbl()
{
gs_lMaximumIndex = 0;
}
/****************************************************************************
* Description: Save TBL file header
*
* Parameters: p_stFile : script file pointer
* sFileName : file name
* p_vPtr : data pointer
* xAction : script action
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vSaveTblFile(SCR_tdst_File_Description *p_stFile, char *sFileName, void *p_vPtr, SCR_tde_Ntfy_Action xAction)
{
xString mes;
if(p_vPtr != NULL)
SCR_fn_v_SvL1_DeleteSection(p_stFile);
sprintf(mes, "%s%s", M_TBL_HEADER, SCR_CC_sz_Cfg_SectionIdMark);
SCR_M_SvL0_SaveBeginSection(p_stFile, mes, SCR_CC_C_Cfg_EOL);
SCR_M_SvL0_SaveEntry(p_stFile, M_VersionNumber, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, "1");
SCR_M_SvL0_SaveEntry(p_stFile, M_OBJActionMaximumIndex, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 2, "%d", gs_lMaximumIndex);
SCR_M_SvL0_SaveEndSection(p_stFile, SCR_CC_C_Cfg_EOL);
}
/****************************************************************************
* Description: Save PHY file header
*
* Parameters: p_stFile : script file pointer
* sFileName : file name
* p_vPtr : data pointer
* xAction : script action
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vSavePhyFile(SCR_tdst_File_Description *p_stFile, char *sFileName, void *p_vPtr, SCR_tde_Ntfy_Action xAction)
{
xString mes;
SCR_fn_v_SvL1_DeleteSection(p_stFile);
sprintf(mes, "%s%s", M_PHY_HEADER, SCR_CC_sz_Cfg_SectionIdMark);
SCR_M_SvL0_SaveBeginSection(p_stFile, mes, SCR_CC_C_Cfg_EOL);
SCR_M_SvL0_SaveEntry(p_stFile, M_VersionNumber, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 2, "%d", 1);
SCR_M_SvL0_SaveEndSection(p_stFile, SCR_CC_C_Cfg_EOL);
}
/****************************************************************************
* Description: Save TBL section
*
* Parameters: p_stFile : script file pointer
* sFileName : file name
* p_vPtr : data pointer
* xAction : script action
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vSaveTbl(SCR_tdst_File_Description *p_stFile, char *sFileName, void *p_vPtr, SCR_tde_Ntfy_Action xAction)
{
xString mes, sFile, sAction, sIdent, sSection, sIdent2;
MLT_tdstGeometricObject *p_stGeometric;
p_stGeometric = (MLT_tdstGeometricObject *)p_vPtr;
if(xAction == SCR_EA_Ntfy_AddSection)
{
SCR_fn_v_SvL1_ToEndSection(p_stFile);
}
else
return;
sprintf(sFile, "%s.tbl", g_sFileIn);
gs_lMaximumIndex = (gs_lMaximumIndex<p_stGeometric->lNumberInTable ? p_stGeometric->lNumberInTable:gs_lMaximumIndex);
sprintf(mes, "%d", p_stGeometric->lNumberInTable);
SCR_fn_v_RdL0_ComputeSectionName(sSection, sFile, M_Tbl, mes);
SCR_M_SvL0_SaveBeginSection(p_stFile, MLT_p_cGetSectionName(sSection), SCR_CC_C_Cfg_EOL);
SCR_fn_v_RdL0_SplitSectionName(p_stGeometric->sPhysicalSection, sFile, sAction, sIdent);
sprintf(sFile, "%s%s.phy", g_sDirectorySave, g_sFileIn);
sprintf(sIdent2, "PO_%s", sIdent);
SCR_fn_v_RdL0_ComputeSectionName(sSection, sFile, sAction, sIdent2);
SCR_M_SvL0_SaveEntry(p_stFile, M_Phy, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, sSection);
SCR_M_SvL0_SaveEndSection(p_stFile, SCR_CC_C_Cfg_EOL);
}
/****************************************************************************
* Description: Save PHY section
*
* Parameters: p_stFile : script file pointer
* sFileName : file name
* p_vPtr : data pointer
* xAction : script action
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vSavePhy(SCR_tdst_File_Description *p_stFile, char *sFileName, void *p_vPtr, SCR_tde_Ntfy_Action xAction)
{
xString mes, sFile, sAction, sIdent, sIdent2;
xString sForme, sHabillage, sName, sSection;
long lNoPhy, lNoLod;
MLT_tdstGeometricObject *p_stObj;
p_stObj = (MLT_tdstGeometricObject *)p_vPtr;
if(xAction == SCR_EA_Ntfy_AddSection)
{
SCR_fn_v_SvL1_ToEndSection(p_stFile);
}
else
return;
SCR_fn_v_RdL0_SplitSectionName(p_stObj->sPhysicalSection, sFile, sAction, sIdent);
sprintf(sFile, "%s%s.phy", g_sDirectorySave, g_sFileIn);
sprintf(sIdent2, "PO_%s", sIdent);
SCR_fn_v_RdL0_ComputeSectionName(mes, sFile, sAction, sIdent2);
SCR_M_SvL0_SaveBeginSection(p_stFile, MLT_p_cGetSectionName(mes), SCR_CC_C_Cfg_EOL);
SCR_fn_v_RdL0_SplitSectionName(p_stObj->sPhysicalSection, sFile, sAction, sIdent);
sprintf(sFile, "%s%s.vse", g_sDirectorySave, g_sFileIn);
MLT_vSplitModuleSectionName(sIdent, sForme, sHabillage, &lNoPhy, &lNoLod, sName);
MLT_vComputeVisualSetSectionName(sIdent, sForme, sHabillage, sName);
sprintf(sIdent2, "VSE_%s", sIdent);
SCR_fn_v_RdL0_ComputeSectionName(sSection, sFile, M_VS, sIdent2);
SCR_M_SvL0_SaveEntry(p_stFile, M_VS, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, sSection);
if (!strstr(p_stObj->sName, "!nocol") && !strstr(p_stObj->sName, "!NOCOL"))
{
SCR_fn_v_RdL0_SplitSectionName(p_stObj->sPhysicalSection, sFile, sAction, sIdent);
sprintf(sFile, "%s%s.zoo", g_sDirectorySave, g_sFileIn);
sprintf(sIdent2, "CS_%s", sIdent);
SCR_fn_v_RdL0_ComputeSectionName(sSection, sFile, M_CS, sIdent2);
SCR_M_SvL0_SaveEntry(p_stFile, M_CS, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, sSection);
}
SCR_M_SvL0_SaveEndSection(p_stFile, SCR_CC_C_Cfg_EOL);
}
/****************************************************************************
* Description: Save TBL section from OBJ file
*
* Parameters: p_stFile : script file pointer
* sFileName : file name
* p_vPtr : data pointer
* xAction : script action
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vSaveTblFromObj(SCR_tdst_File_Description *p_stFile, char *sFileName, void *p_vPtr, SCR_tde_Ntfy_Action xAction)
{
xString mes, sFile, sSection;
MLT_tdstObjElement *p_stGeometric;
p_stGeometric = (MLT_tdstObjElement *)p_vPtr;
if(xAction == SCR_EA_Ntfy_AddSection)
{
SCR_fn_v_SvL1_ToEndSection(p_stFile);
}
else
SCR_fn_v_SvL1_DeleteSection(p_stFile);
sprintf(mes, "%d()", p_stGeometric->lNumberInTable);
sprintf(sFile, "%s.tbl", g_sFileIn);
gs_lMaximumIndex = (gs_lMaximumIndex<p_stGeometric->lNumberInTable?p_stGeometric->lNumberInTable:gs_lMaximumIndex);
sprintf(mes, "%d()", p_stGeometric->lNumberInTable);
if ((p_stGeometric->iType!=0) && (p_stGeometric->iType!=6))
{
SCR_fn_v_RdL0_ComputeSectionName(sSection, sFile, M_Evt, mes);
SCR_M_SvL0_SaveBeginSection(p_stFile, MLT_p_cGetSectionName(sSection), SCR_CC_C_Cfg_EOL);
}
else
{
SCR_fn_v_RdL0_ComputeSectionName(sSection, sFile, M_Tbl, mes);
SCR_M_SvL0_SaveBeginSection(p_stFile, MLT_p_cGetSectionName(sSection), SCR_CC_C_Cfg_EOL);
}
switch(p_stGeometric->iType)
{
case 0: //a3dobject
MLT_vSaveA3dObj(p_stFile, p_stGeometric);
//save the ObjectType
break;
case 1: //SoundEvent
SCR_M_SvL0_SaveEntry(p_stFile, M_OBJActionObjectType, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 2, "%s",
M_SoundEvent);
MLT_vSaveSoundEvent(p_stFile, p_stGeometric);
break;
case 2: //MechanicEvent
SCR_M_SvL0_SaveEntry(p_stFile, M_OBJActionObjectType, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 2, "%s",
M_MechanicEvent);
MLT_vSaveMechanicEvent(p_stFile, p_stGeometric);
break;
case 3: //GenericEvent
SCR_M_SvL0_SaveEntry(p_stFile, M_OBJActionObjectType, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 2, "%s",
M_GenericEvent);
MLT_vSaveGenericEvent(p_stFile, p_stGeometric);
break;
case 4: //GenerateEvent
SCR_M_SvL0_SaveEntry(p_stFile, M_OBJActionObjectType, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 2, "%s",
M_GenerateEvent);
MLT_vSaveGenerateEvent(p_stFile, p_stGeometric);
break;
case 5: //CameraEvent
SCR_M_SvL0_SaveEntry(p_stFile, M_OBJActionObjectType, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 2, "%s",
M_CameraEvent);
MLT_vSaveCameraEvent(p_stFile, p_stGeometric);
break;
case 6: //FakeEvent
break;
}
SCR_M_SvL0_SaveEndSection(p_stFile, SCR_CC_C_Cfg_EOL);
}
/****************************************************************************
* Description: Save PHY section from OBJ file
*
* Parameters: p_stFile : script file pointer
* sFileName : file name
* p_vPtr : data pointer
* xAction : script action
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vSavePhyFromObj(SCR_tdst_File_Description *p_stFile, char *sFileName, void *p_vPtr, SCR_tde_Ntfy_Action xAction)
{
xString mes, sFile, sAction, sIdent, sSection, sIdent2;
MLT_tdstObjElement *p_stObj;
p_stObj = (MLT_tdstObjElement *)p_vPtr;
if(xAction == SCR_EA_Ntfy_AddSection)
{
SCR_fn_v_SvL1_ToEndSection(p_stFile);
}
else
return;
SCR_fn_v_RdL0_SplitSectionName(p_stObj->sSectionObj, sFile, sAction, sIdent);
sprintf(sFile, "%s%s.phy", g_sDirectorySave, g_sFileIn);
sprintf(sIdent2, "PO_%s", sIdent);
SCR_fn_v_RdL0_ComputeSectionName(mes, sFile, M_Phy, sIdent2);
SCR_M_SvL0_SaveBeginSection(p_stFile, MLT_p_cGetSectionName(mes), SCR_CC_C_Cfg_EOL);
SCR_fn_v_RdL0_SplitSectionName(p_stObj->sSectionMod, sFile, sAction, sIdent);
sprintf(sFile, "%s\\%s.vse", MLT_p_cGetFileNameWithoutExt(sFile), MLT_p_cGetFileNameWithoutExt(sFile));
sprintf(sIdent2, "VSE_%s", sIdent);
SCR_fn_v_RdL0_ComputeSectionName(sSection, sFile, M_VS, sIdent2);
SCR_M_SvL0_SaveEntry(p_stFile, M_VS, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, sSection);
if (!p_stObj->bFlag)
{
SCR_fn_v_RdL0_SplitSectionName(p_stObj->sSectionObj, sFile, sAction, sIdent);
sprintf(sFile, "%s%s.zoo", g_sDirectorySave, g_sFileIn);
sprintf(sIdent2, "CS_%s", sIdent);
SCR_fn_v_RdL0_ComputeSectionName(sSection, sFile, M_CS, sIdent2);
SCR_M_SvL0_SaveEntry(p_stFile, M_CS, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, sSection);
}
SCR_M_SvL0_SaveEndSection(p_stFile, SCR_CC_C_Cfg_EOL);
}
/****************************************************************************
* Description: save LipsSynchro and CustomZoom for a3dobject
*
* Parameters: p_stFile : script file pointer
* p_stGeometric : geometric object
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vSaveAditional(SCR_tdst_File_Description *p_stFile, MLT_tdstObjElement *p_stGeometric)
{
if(strlen(p_stGeometric->sTete))
{
SCR_M_SvL0_SaveEntry(p_stFile, M_OBJActionLipsSynchro, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 5, "%s,%s,%d,%s",
p_stGeometric->sTete,
p_stGeometric->sLetter,
p_stGeometric->lValue,
p_stGeometric->sNeutral);
}
if(p_stGeometric->bCustomZoom)
{
SCR_M_SvL0_SaveEntry(p_stFile, M_OBJActionCustomZoom, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 10, "%f,%f,%f,%f,%f,%f,%f,%f,%f",
p_stGeometric->a9_dCustomZoom[0],
p_stGeometric->a9_dCustomZoom[1],
p_stGeometric->a9_dCustomZoom[2],
p_stGeometric->a9_dCustomZoom[3],
p_stGeometric->a9_dCustomZoom[4],
p_stGeometric->a9_dCustomZoom[5],
p_stGeometric->a9_dCustomZoom[6],
p_stGeometric->a9_dCustomZoom[7],
p_stGeometric->a9_dCustomZoom[8]);
}
}
/****************************************************************************
* Description: save the a3dobject
*
* Parameters: p_stFile : script file pointer
* p_stGeometric : geometric object
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vSaveA3dObj(SCR_tdst_File_Description *p_stFile, MLT_tdstObjElement *p_stGeometric)
{
xString sFile, sAction, sIdent, sSection, sIdent2;
sprintf(sFile, "%s.tbl", g_sFileIn);
SCR_fn_v_RdL0_SplitSectionName(p_stGeometric->sSectionObj, sFile, sAction, sIdent);
sprintf(sFile, "%s%s.phy", g_sDirectorySave, g_sFileIn);
sprintf(sIdent2, "PO_%s", sIdent);
SCR_fn_v_RdL0_ComputeSectionName(sSection, sFile, M_Phy, sIdent2);
SCR_M_SvL0_SaveEntry(p_stFile, M_Phy, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Normal, 1, sSection);
MLT_vSaveAditional(p_stFile, p_stGeometric);
}
/****************************************************************************
* Description: save the common fields for the events
*
* Parameters: p_stFile : script file pointer
* p_stGeometric : geometric object
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vSaveCommunEvents(SCR_tdst_File_Description *p_stFile, MLT_tdstObjElement *p_stGeometric)
{
//save the FirstCall entry
SCR_M_SvL0_SaveEntry(p_stFile, M_OBJActionFirstCall, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 2, "%d",
p_stGeometric->lFirstCall);
//save the Period entry
SCR_M_SvL0_SaveEntry(p_stFile, M_OBJActionPeriod, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 2, "%d",
p_stGeometric->lPeriod);
//save the Priority entry
SCR_M_SvL0_SaveEntry(p_stFile, M_OBJActionPriority, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 2, "%d",
p_stGeometric->lPriority);
}
/****************************************************************************
* Description: save the SoundEvent
*
* Parameters: p_stFile : script file pointer
* p_stGeometric : geometric object
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vSaveSoundEvent(SCR_tdst_File_Description *p_stFile, MLT_tdstObjElement *p_stGeometric)
{
xString sFile, sAction, sIdent;
//save the SoundEvent with the parameters
SCR_M_SvL0_SaveEntry(p_stFile, M_SoundEvent, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_RdL0_SplitSectionName(p_stGeometric->sSectionMod, sFile, sAction, sIdent);
strcat(sFile, "^SndEventM:");
sprintf(sFile, "%s%d", sFile, p_stGeometric->lSoundReference);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 2, "%s",
sFile);
MLT_vSaveCommunEvents(p_stFile, p_stGeometric);
}
/****************************************************************************
* Description: save the MechanicEvent
*
* Parameters: p_stFile : script file pointer
* p_stGeometric : geometric object
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vSaveMechanicEvent(SCR_tdst_File_Description *p_stFile, MLT_tdstObjElement *p_stGeometric)
{
//save the second parameter from Object to MechanicEvent
SCR_M_SvL0_SaveEntry(p_stFile, M_MechanicEvent, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 2, "%s",
p_stGeometric->sObject);
MLT_vSaveCommunEvents(p_stFile, p_stGeometric);
}
/****************************************************************************
* Description: save the GenericEvent
*
* Parameters: p_stFile : script file pointer
* p_stGeometric : geometric object
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vSaveGenericEvent(SCR_tdst_File_Description *p_stFile, MLT_tdstObjElement *p_stGeometric)
{
//save the parameter of Data to GenericEvent
SCR_M_SvL0_SaveEntry(p_stFile, M_GenericEvent, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 2, "%s",
p_stGeometric->sData);
MLT_vSaveCommunEvents(p_stFile, p_stGeometric);
}
/****************************************************************************
* Description: save the GenerateEvent
*
* Parameters: p_stFile : script file pointer
* p_stGeometric : geometric object
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vSaveGenerateEvent(SCR_tdst_File_Description *p_stFile, MLT_tdstObjElement *p_stGeometric)
{
//save the parameter of Data to GenerateEvent
SCR_M_SvL0_SaveEntry(p_stFile, M_GenerateEvent, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 2, "%s",
p_stGeometric->sData);
MLT_vSaveCommunEvents(p_stFile, p_stGeometric);
}
/****************************************************************************
* Description: save the CameraEvent
*
* Parameters: p_stFile : script file pointer
* p_stGeometric : geometric object
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vSaveCameraEvent(SCR_tdst_File_Description *p_stFile, MLT_tdstObjElement *p_stGeometric)
{
//save the parameter of Data to CameraEvent
SCR_M_SvL0_SaveEntry(p_stFile, M_CameraEvent, SCR_CC_C_Cfg_NoChar);
SCR_fn_v_SvL0_SaveParameters_MP(p_stFile, SCR_EF_SvL0_Scanf, 2, "\"%s\"",
p_stGeometric->sData);
MLT_vSaveCommunEvents(p_stFile, p_stGeometric);
}