#include "common.h" unsigned int currentSaveEntrySize; void* getSaveEntry(int index) { currentSaveEntrySize = saveTable[index].size; return(saveTable[index].ptr); } void loadInterpolatedValue(RealValue* pRotateStruct, FILE* fHandle) { ASSERT(sizeof(pRotateStruct->startValue) == 2); fread(&pRotateStruct->startValue,2,1,fHandle); ASSERT(sizeof(pRotateStruct->endValue) == 2); fread(&pRotateStruct->endValue,2,1,fHandle); ASSERT(sizeof(pRotateStruct->numSteps) == 2); fread(&pRotateStruct->numSteps,2,1,fHandle); ASSERT(sizeof(pRotateStruct->memoTicks) == 4); fread(&pRotateStruct->memoTicks,2,1,fHandle); } void saveInterpolatedValue(RealValue* pRotateStruct, FILE* fHandle) { ASSERT(sizeof(pRotateStruct->startValue) == 2); fwrite(&pRotateStruct->startValue,2,1,fHandle); ASSERT(sizeof(pRotateStruct->endValue) == 2); fwrite(&pRotateStruct->endValue,2,1,fHandle); ASSERT(sizeof(pRotateStruct->numSteps) == 2); fwrite(&pRotateStruct->numSteps,2,1,fHandle); ASSERT(sizeof(pRotateStruct->memoTicks) == 4); fwrite(&pRotateStruct->memoTicks,2,1,fHandle); } int loadSave(int saveNumber) { char buffer[256]; FILE* fHandle; unsigned int var28; int var_E; int var_16; unsigned int offsetToVars; u16 tempVarSize; unsigned int offsetToActors; int i; int oldNumMaxObj; sprintf(buffer,"SAVE%d.ITD",saveNumber); fHandle = fopen(buffer,"rb"); if(!fHandle) { return(0); } LoadWorld(); initVars(); fseek(fHandle,8,SEEK_SET); fread(&var28,4,1,fHandle); var28 = ((var28 & 0xFF) << 24) | ((var28 & 0xFF00) << 8) | (( var28 & 0xFF0000) >> 8) | ((var28 & 0xFF000000) >> 24); fseek(fHandle,var28,SEEK_SET); ASSERT(sizeof(currentRoom) == 2); fread(¤tRoom,2,1,fHandle); ASSERT(sizeof(g_currentFloor) == 2); fread(&g_currentFloor,2,1,fHandle); ASSERT(sizeof(NumCamera) == 2); fread(&NumCamera,2,1,fHandle); ASSERT(sizeof(currentWorldTarget) == 2); fread(¤tWorldTarget,2,1,fHandle); ASSERT(sizeof(currentCameraTargetActor) == 2); fread(¤tCameraTargetActor,2,1,fHandle); ASSERT(sizeof(maxObjects) == 2); fread(&maxObjects,2,1,fHandle); if(g_gameId == AITD1) { oldNumMaxObj = maxObjects; maxObjects = 300; // fix for save engine.. } for(i=0;i> 8) | ((offsetToVars & 0xFF000000) >> 24); fseek(fHandle,offsetToVars,SEEK_SET); fread(&tempVarSize,2,1,fHandle); varSize = tempVarSize; fread(vars,varSize,1,fHandle); if(g_gameId == AITD1) { configureHqrHero(HQ_Bodys,listBodySelect[CVars[getCVarsIdx(CHOOSE_PERSO)]]); configureHqrHero(HQ_Anims,listAnimSelect[CVars[getCVarsIdx(CHOOSE_PERSO)]]); } else { /* configureHqrHero(listBody,0); configureHqrHero(listAnim,0); */ } fseek(fHandle,16,SEEK_SET); fread(&offsetToActors,4,1,fHandle); offsetToVars = ((offsetToActors & 0xFF) << 24) | ((offsetToActors & 0xFF00) << 8) | (( offsetToActors & 0xFF0000) >> 8) | ((offsetToActors & 0xFF000000) >> 24); fseek(fHandle,offsetToVars,SEEK_SET); for(i=0;i> 8) | ((var28 & 0xFF000000) >> 24); fwrite(&var28,4,1,fHandle); fwrite(&var28,4,1,fHandle); fwrite(&var28,4,1,fHandle); ASSERT(sizeof(currentRoom) == 2); fwrite(¤tRoom,2,1,fHandle); ASSERT(sizeof(g_currentFloor) == 2); fwrite(&g_currentFloor,2,1,fHandle); ASSERT(sizeof(NumCamera) == 2); fwrite(&NumCamera,2,1,fHandle); ASSERT(sizeof(currentWorldTarget) == 2); fwrite(¤tWorldTarget,2,1,fHandle); ASSERT(sizeof(currentCameraTargetActor) == 2); fwrite(¤tCameraTargetActor,2,1,fHandle); ASSERT(sizeof(maxObjects) == 2); fwrite(&maxObjects,2,1,fHandle); if(g_gameId == AITD1) { oldNumMaxObj = maxObjects; maxObjects = 300; // fix for save engine.. } for(i=0;i> 8) | ((var28 & 0xFF000000) >> 24); fwrite(&var28,4,1,fHandle); fseek(fHandle,temp,SEEK_SET); fwrite(&varSize,2,1,fHandle); fwrite(vars,varSize,1,fHandle); var28 = ftell(fHandle); temp = var28; fseek(fHandle,16,SEEK_SET); var28 = ((var28 & 0xFF) << 24) | ((var28 & 0xFF00) << 8) | (( var28 & 0xFF0000) >> 8) | ((var28 & 0xFF000000) >> 24); fwrite(&var28,4,1,fHandle); fseek(fHandle,temp,SEEK_SET); for(i=0;i