aboutsummaryrefslogtreecommitdiff
path: root/engines/cruise/saveload.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/cruise/saveload.cpp')
-rw-r--r--engines/cruise/saveload.cpp214
1 files changed, 183 insertions, 31 deletions
diff --git a/engines/cruise/saveload.cpp b/engines/cruise/saveload.cpp
index 310545e02f..9160fb1024 100644
--- a/engines/cruise/saveload.cpp
+++ b/engines/cruise/saveload.cpp
@@ -36,6 +36,154 @@ struct overlayRestoreTemporary {
overlayRestoreTemporary ovlRestoreData[90];
+void resetPreload()
+{
+ for(unsigned long int i=0; i<64; i++)
+ {
+ if(strlen(preloadData[i].name))
+ {
+ if(preloadData[i].ptr)
+ {
+ free(preloadData[i].ptr);
+ preloadData[i].ptr = NULL;
+ }
+ strcpy(preloadData[i].name, "");
+ preloadData[i].nofree = 0;
+ }
+ }
+}
+
+void unloadOverlay(const char*name, int overlayNumber)
+{
+ releaseOverlay(name);
+
+ strcpy(overlayTable[overlayNumber].overlayName, "");
+ overlayTable[overlayNumber].ovlData = NULL;
+ overlayTable[overlayNumber].alreadyLoaded = 0;
+}
+
+void initVars(void)
+{
+ closeAllMenu();
+ resetFileEntryRange( 0, 257 );
+
+ resetPreload();
+ freeCTP();
+
+ freezeCell(&cellHead, -1, -1, -1, -1, -1, 0);
+ // TODO: unfreeze anims
+
+ freeObjectList(&cellHead);
+ removeAnimation(&actorHead, -1, -1, -1);
+
+ changeScriptParamInList(-1, -1, &procHead, -1, 0);
+ removeFinishedScripts(&procHead);
+
+ changeScriptParamInList(-1, -1, &relHead, -1, 0);
+ removeFinishedScripts(&relHead);
+
+ for(unsigned long int i=0; i<90; i++)
+ {
+ if(strlen(overlayTable[i].overlayName) && overlayTable[i].alreadyLoaded)
+ {
+ unloadOverlay(overlayTable[i].overlayName, i);
+ }
+ }
+
+ // TODO:
+ // stopSound();
+ // removeSound();
+
+ closeBase();
+ closeCnf();
+
+ initOverlayTable();
+
+ stateID = 0;
+ currentActiveBackgroundPlane = 0;
+
+ freeDisk();
+
+ initVar5[0] = -1;
+ initVar5[3] = -1;
+ initVar5[6] = -1;
+ initVar5[9] = -1;
+
+ for (unsigned long int i = 0; i < 8; i++) {
+ menuTable[i] = NULL;
+ }
+
+ for (unsigned long int i = 0; i < 2000; i++) {
+ globalVars[i] = 0;
+ }
+
+ for (unsigned long int i = 0; i < 8; i++) {
+ backgroundTable[i].name[0] = 0;
+ }
+
+ for (unsigned long int i = 0; i < 257; i++) {
+ filesDatabase[i].subData.ptr = NULL;
+ filesDatabase[i].subData.ptrMask = NULL;
+ }
+
+ initBigVar3();
+
+ resetPtr2(&procHead);
+ resetPtr2(&relHead);
+
+ resetPtr(&cellHead);
+
+ resetActorPtr(&actorHead);
+ resetBackgroundIncrustList(&backgroundIncrustHead);
+
+ vblLimit = 0;
+ remdo = 0;
+ songLoaded = 0;
+ songPlayed = 0;
+ songLoop = 1;
+ activeMouse = 0;
+ userEnabled = 1;
+ dialogueEnabled = 0;
+ dialogueOvl = 0;
+ dialogueObj = 0;
+ userDelay = 0;
+ sysKey = -1;
+ sysX = 0;
+ sysY = 0;
+ automoveInc = 0;
+ automoveMax = 0;
+ displayOn = true;
+
+ // here used to init clip
+
+ isMessage = 0;
+ fadeFlag = 0;
+ playMusic = 0;
+ playMusic2 = 0;
+ automaticMode = 0;
+
+ // video param (vga and mcga mode)
+
+ titleColor = 2;
+ itemColor = 1;
+ selectColor = 3;
+ subColor = 5;
+
+ //
+
+ narratorOvl = 0;
+ narratorIdx = 0;
+ aniX = 0;
+ aniY = 0;
+ animationStart = false;
+ selectDown = 0;
+ menuDown = 0;
+ buttonDown = 0;
+ var41 = 0;
+ entrerMenuJoueur = 0;
+ fadeVar = 0;
+}
+
void loadSavegameDataSub1(Common::File& currentSaveFile) {
int i;
@@ -156,7 +304,7 @@ void loadSavegameActor(Common::File& currentSaveFile) {
}
void loadSavegameDataSub5(Common::File& currentSaveFile) {
- if (var1) {
+ if (songLoaded) {
saveVar1 = currentSaveFile.readByte();
if (saveVar1) {
@@ -196,10 +344,14 @@ void loadSavegameDataSub6(Common::File& currentSaveFile) {
}
}
+int saveSavegameData(int saveGameIdx) {
+ return 0;
+}
+
int loadSavegameData(int saveGameIdx) {
char buffer[256];
char saveIdentBuffer[6];
- int initVar1Save;
+ int lowMemorySave;
cellStruct *currentcellHead;
sprintf(buffer, "CR.%d", saveGameIdx);
@@ -221,12 +373,12 @@ int loadSavegameData(int saveGameIdx) {
currentSaveFile.close();
return (-1);
}
- //initVars();
+ initVars();
- var1 = currentSaveFile.readSint16LE();
- var2 = currentSaveFile.readSint16LE();
- var3 = currentSaveFile.readSint16LE();
- var4 = currentSaveFile.readSint16LE();
+ songLoaded = currentSaveFile.readSint16LE();
+ songPlayed = currentSaveFile.readSint16LE();
+ songLoop = currentSaveFile.readSint16LE();
+ activeMouse = currentSaveFile.readSint16LE();
userEnabled = currentSaveFile.readSint16LE();
dialogueEnabled = currentSaveFile.readSint16LE();
@@ -236,21 +388,21 @@ int loadSavegameData(int saveGameIdx) {
sysKey = currentSaveFile.readSint16LE();
sysX = currentSaveFile.readSint16LE();
sysY = currentSaveFile.readSint16LE();
- var13 = currentSaveFile.readSint16LE();
- var14 = currentSaveFile.readSint16LE();
- affichePasMenuJoueur = currentSaveFile.readSint16LE();
- var20 = currentSaveFile.readSint16LE();
- var22 = currentSaveFile.readSint16LE();
- var23 = currentSaveFile.readSint16LE();
- var24 = currentSaveFile.readSint16LE();
+ automoveInc = currentSaveFile.readSint16LE();
+ automoveMax = currentSaveFile.readSint16LE();
+ displayOn = currentSaveFile.readSint16LE();
+ isMessage = currentSaveFile.readSint16LE();
+ fadeFlag = currentSaveFile.readSint16LE();
+ playMusic = currentSaveFile.readSint16LE();
+ playMusic2 = currentSaveFile.readSint16LE();
automaticMode = currentSaveFile.readSint16LE();
// video param (not loaded in EGA mode)
- video4 = currentSaveFile.readSint16LE();
- video2 = currentSaveFile.readSint16LE();
- video3 = currentSaveFile.readSint16LE();
- colorOfSelectedSaveDrive = currentSaveFile.readSint16LE();
+ titleColor = currentSaveFile.readSint16LE();
+ itemColor = currentSaveFile.readSint16LE();
+ selectColor = currentSaveFile.readSint16LE();
+ subColor = currentSaveFile.readSint16LE();
//
@@ -266,9 +418,9 @@ int loadSavegameData(int saveGameIdx) {
currentActiveBackgroundPlane = currentSaveFile.readSint16LE();
switchPal = currentSaveFile.readSint16LE();
- initVar2 = currentSaveFile.readSint16LE();
- var22 = currentSaveFile.readSint16LE();
- main5 = currentSaveFile.readSint16LE();
+ scroll = currentSaveFile.readSint16LE();
+ fadeFlag = currentSaveFile.readSint16LE();
+ doFade = currentSaveFile.readSint16LE();
numOfLoadedOverlay = currentSaveFile.readSint16LE();
stateID = currentSaveFile.readSint16LE();
fontFileIndex = currentSaveFile.readSint16LE();
@@ -338,14 +490,14 @@ int loadSavegameData(int saveGameIdx) {
for(int i=0; i<64; i++)
{
- currentSaveFile.read(mediumVar[i].name, 15);
+ currentSaveFile.read(preloadData[i].name, 15);
currentSaveFile.skip(1);
- mediumVar[i].size = currentSaveFile.readSint32LE();
- mediumVar[i].sourceSize = currentSaveFile.readSint32LE();
+ preloadData[i].size = currentSaveFile.readSint32LE();
+ preloadData[i].sourceSize = currentSaveFile.readSint32LE();
currentSaveFile.skip(4);
- mediumVar[i].nofree = currentSaveFile.readSint16LE();
- mediumVar[i].protect = currentSaveFile.readSint16LE();
- mediumVar[i].ovl = currentSaveFile.readSint16LE();
+ preloadData[i].nofree = currentSaveFile.readSint16LE();
+ preloadData[i].protect = currentSaveFile.readSint16LE();
+ preloadData[i].ovl = currentSaveFile.readSint16LE();
}
loadSavegameDataSub1(currentSaveFile);
@@ -361,7 +513,7 @@ int loadSavegameData(int saveGameIdx) {
currentSaveFile.close();
for (int j = 0; j < 64; j++) {
- mediumVar[j].ptr = NULL;
+ preloadData[j].ptr = NULL;
}
for (int j = 1; j < numOfLoadedOverlay; j++) {
@@ -402,7 +554,7 @@ int loadSavegameData(int saveGameIdx) {
lastAni[0] = 0;
- initVar1Save = initVar1;
+ lowMemorySave = lowMemory;
for (int i = 0; i < 257; i++) {
if (filesDatabase[i].subData.ptr) {
@@ -413,7 +565,7 @@ int loadSavegameData(int saveGameIdx) {
for (k = i; k < j; k++) {
if (filesDatabase[k].subData.ptrMask)
- initVar1 = 0;
+ lowMemory = 0;
filesDatabase[k].subData.ptr = NULL;
filesDatabase[k].subData.ptrMask = NULL;
@@ -428,7 +580,7 @@ int loadSavegameData(int saveGameIdx) {
i = j - 1;
}
- initVar1 = initVar1Save;
+ lowMemory = lowMemorySave;
}
}