Endianness fixes for saved games
git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@649 4a71c877-e1ca-e34f-864e-861f7616d084master
parent
c3eae9e73f
commit
9e2d33420f
|
@ -2947,6 +2947,10 @@ iIMDShape *psOrig;
|
|||
/* Write out the version number - unlikely to change for FX data */
|
||||
psHeader->version = CURRENT_VERSION_NUM;
|
||||
|
||||
/* FX_SAVEHEADER */
|
||||
endian_udword(&psHeader->version);
|
||||
endian_udword(&psHeader->entries);
|
||||
|
||||
/* Skip past the header to the raw data area */
|
||||
pFXData = (EFFECT*)(pFileData + sizeof(struct _fx_save_header));
|
||||
|
||||
|
@ -2976,9 +2980,30 @@ iIMDShape *psOrig;
|
|||
{
|
||||
psOrig = asEffectsList[i].imd;
|
||||
resGetHashfromData("IMD",psOrig,&imdHashedNumber);
|
||||
endian_udword(&imdHashedNumber);
|
||||
pFXData->imd = (iIMDShape*)imdHashedNumber;
|
||||
}
|
||||
|
||||
/* EFFECT */
|
||||
endian_uword(&pFXData->size);
|
||||
endian_fract(&pFXData->position.x);
|
||||
endian_fract(&pFXData->position.y);
|
||||
endian_fract(&pFXData->position.z);
|
||||
endian_fract(&pFXData->velocity.x);
|
||||
endian_fract(&pFXData->velocity.y);
|
||||
endian_fract(&pFXData->velocity.z);
|
||||
endian_sdword(&pFXData->rotation.x);
|
||||
endian_sdword(&pFXData->rotation.y);
|
||||
endian_sdword(&pFXData->rotation.z);
|
||||
endian_sdword(&pFXData->spin.x);
|
||||
endian_sdword(&pFXData->spin.y);
|
||||
endian_sdword(&pFXData->spin.z);
|
||||
endian_udword(&pFXData->birthTime);
|
||||
endian_udword(&pFXData->lastFrame);
|
||||
endian_uword(&pFXData->frameDelay);
|
||||
endian_uword(&pFXData->lifeSpan);
|
||||
endian_uword(&pFXData->radius);
|
||||
|
||||
pFXData++;
|
||||
}
|
||||
}
|
||||
|
@ -3017,6 +3042,10 @@ EFFECT *pFXData;
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
/* FX_SAVEHEADER */
|
||||
endian_udword(&psHeader->version);
|
||||
endian_udword(&psHeader->entries);
|
||||
|
||||
/* How much data are we expecting? */
|
||||
expectedFileSize = (sizeof(struct _fx_save_header) + (psHeader->entries*sizeof(struct _effect_def)) );
|
||||
|
||||
|
@ -3038,10 +3067,31 @@ EFFECT *pFXData;
|
|||
/* For every FX... */
|
||||
for(i=0; i<psHeader->entries; i++)
|
||||
{
|
||||
/* EFFECT */
|
||||
endian_uword(&pFXData->size);
|
||||
endian_fract(&pFXData->position.x);
|
||||
endian_fract(&pFXData->position.y);
|
||||
endian_fract(&pFXData->position.z);
|
||||
endian_fract(&pFXData->velocity.x);
|
||||
endian_fract(&pFXData->velocity.y);
|
||||
endian_fract(&pFXData->velocity.z);
|
||||
endian_sdword(&pFXData->rotation.x);
|
||||
endian_sdword(&pFXData->rotation.y);
|
||||
endian_sdword(&pFXData->rotation.z);
|
||||
endian_sdword(&pFXData->spin.x);
|
||||
endian_sdword(&pFXData->spin.y);
|
||||
endian_sdword(&pFXData->spin.z);
|
||||
endian_udword(&pFXData->birthTime);
|
||||
endian_udword(&pFXData->lastFrame);
|
||||
endian_uword(&pFXData->frameDelay);
|
||||
endian_uword(&pFXData->lifeSpan);
|
||||
endian_uword(&pFXData->radius);
|
||||
|
||||
memcpy(&asEffectsList[i],pFXData++,sizeof(struct _effect_def));
|
||||
if(asEffectsList[i].imd)
|
||||
{
|
||||
/* Restore the pointer from the hashed ID */
|
||||
endian_udword(&((UDWORD)asEffectsList[i].imd));
|
||||
asEffectsList[i].imd = (iIMDShape*)resGetDataFromHash("IMD",(UDWORD)asEffectsList[i].imd);
|
||||
}
|
||||
}
|
||||
|
|
35
src/scores.c
35
src/scores.c
|
@ -489,9 +489,27 @@ SCORE_SAVEHEADER *psHeader; // Pointer to the header part of the file
|
|||
/* Write out the version number - unlikely to change for FX data */
|
||||
psHeader->version = CURRENT_VERSION_NUM;
|
||||
|
||||
/* SCORE_SAVEHEADER */
|
||||
endian_udword(&psHeader->version);
|
||||
endian_udword(&psHeader->entries);
|
||||
|
||||
/* Skip past the header to the raw data area */
|
||||
pScoreData = (MISSION_DATA*)(pFileData + sizeof(struct _score_save_header));
|
||||
|
||||
/* MISSION_DATA */
|
||||
endian_udword(&pScoreData->unitsBuilt);
|
||||
endian_udword(&pScoreData->unitsKilled);
|
||||
endian_udword(&pScoreData->unitsLost);
|
||||
endian_udword(&pScoreData->strBuilt);
|
||||
endian_udword(&pScoreData->strKilled);
|
||||
endian_udword(&pScoreData->strLost);
|
||||
endian_udword(&pScoreData->artefactsFound);
|
||||
endian_udword(&pScoreData->missionStarted);
|
||||
endian_udword(&pScoreData->shotsOnTarget);
|
||||
endian_udword(&pScoreData->shotsOffTarget);
|
||||
endian_udword(&pScoreData->babasMowedDown);
|
||||
|
||||
|
||||
/* copy over the score data */
|
||||
memcpy(pScoreData,&missionData,sizeof(struct mission_data));
|
||||
|
||||
|
@ -523,6 +541,10 @@ MISSION_DATA *pScoreData;
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
/* SCORE_SAVEHEADER */
|
||||
endian_udword(&psHeader->version);
|
||||
endian_udword(&psHeader->entries);
|
||||
|
||||
/* How much data are we expecting? */
|
||||
expectedFileSize = (sizeof(struct _score_save_header) + (psHeader->entries*sizeof(struct mission_data)) );
|
||||
|
||||
|
@ -538,6 +560,19 @@ MISSION_DATA *pScoreData;
|
|||
/* Skip past the header gubbins - can check version number here too */
|
||||
pScoreData = (MISSION_DATA*)(pFileData + sizeof(struct _score_save_header));
|
||||
|
||||
/* MISSION_DATA */
|
||||
endian_udword(&pScoreData->unitsBuilt);
|
||||
endian_udword(&pScoreData->unitsKilled);
|
||||
endian_udword(&pScoreData->unitsLost);
|
||||
endian_udword(&pScoreData->strBuilt);
|
||||
endian_udword(&pScoreData->strKilled);
|
||||
endian_udword(&pScoreData->strLost);
|
||||
endian_udword(&pScoreData->artefactsFound);
|
||||
endian_udword(&pScoreData->missionStarted);
|
||||
endian_udword(&pScoreData->shotsOnTarget);
|
||||
endian_udword(&pScoreData->shotsOffTarget);
|
||||
endian_udword(&pScoreData->babasMowedDown);
|
||||
|
||||
memcpy(&missionData,pScoreData,sizeof(struct mission_data));
|
||||
|
||||
/* Hopefully everything's just fine by now */
|
||||
|
|
Loading…
Reference in New Issue