Endianness fixes for saved games

git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@649 4a71c877-e1ca-e34f-864e-861f7616d084
master
Ari Johnson 2006-08-26 18:36:19 +00:00
parent c3eae9e73f
commit 9e2d33420f
2 changed files with 85 additions and 0 deletions

View File

@ -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);
}
}

View File

@ -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 */