Cleanup load savegame from original interpreter
svn-id: r29453
This commit is contained in:
parent
c2594cb3f2
commit
783a0bf67d
12 changed files with 331 additions and 256 deletions
|
@ -135,45 +135,46 @@ backgroundIncrustStruct *addBackgroundIncrust(int16 overlayIdx, int16 objectIdx,
|
|||
return newElement;
|
||||
}
|
||||
|
||||
void loadBackgroundIncrustFromSave(FILE *fileHandle) {
|
||||
void loadBackgroundIncrustFromSave(Common::File& currentSaveFile) {
|
||||
int16 numEntry;
|
||||
backgroundIncrustStruct *ptr1;
|
||||
backgroundIncrustStruct *ptr2;
|
||||
int32 i;
|
||||
|
||||
fread(&numEntry, 2, 1, fileHandle);
|
||||
numEntry = currentSaveFile.readSint16LE();
|
||||
|
||||
ptr1 = &backgroundIncrustHead;
|
||||
ptr2 = &backgroundIncrustHead;
|
||||
|
||||
for (i = 0; i < numEntry; i++) {
|
||||
backgroundIncrustStruct *current =
|
||||
(backgroundIncrustStruct *)
|
||||
mallocAndZero(sizeof(backgroundIncrustStruct));
|
||||
backgroundIncrustStruct *current = (backgroundIncrustStruct *)mallocAndZero(sizeof(backgroundIncrustStruct));
|
||||
|
||||
fseek(fileHandle, 4, SEEK_CUR);
|
||||
currentSaveFile.skip(2);
|
||||
currentSaveFile.skip(2);
|
||||
|
||||
fread(¤t->objectIdx, 2, 1, fileHandle);
|
||||
fread(¤t->type, 2, 1, fileHandle);
|
||||
fread(¤t->overlayIdx, 2, 1, fileHandle);
|
||||
fread(¤t->X, 2, 1, fileHandle);
|
||||
fread(¤t->Y, 2, 1, fileHandle);
|
||||
fread(¤t->field_E, 2, 1, fileHandle);
|
||||
fread(¤t->scale, 2, 1, fileHandle);
|
||||
fread(¤t->backgroundIdx, 2, 1, fileHandle);
|
||||
fread(¤t->scriptNumber, 2, 1, fileHandle);
|
||||
fread(¤t->scriptOverlayIdx, 2, 1, fileHandle);
|
||||
fread(¤t->ptr, 4, 1, fileHandle);
|
||||
fread(¤t->field_1C, 4, 1, fileHandle);
|
||||
fread(¤t->size, 2, 1, fileHandle);
|
||||
fread(¤t->field_22, 2, 1, fileHandle);
|
||||
fread(¤t->field_24, 2, 1, fileHandle);
|
||||
fread(current->name, 14, 1, fileHandle);
|
||||
fread(¤t->aniX, 2, 1, fileHandle);
|
||||
current->objectIdx = currentSaveFile.readSint16LE();
|
||||
current->type = currentSaveFile.readSint16LE();
|
||||
current->overlayIdx = currentSaveFile.readSint16LE();
|
||||
current->X = currentSaveFile.readSint16LE();
|
||||
current->Y = currentSaveFile.readSint16LE();
|
||||
current->field_E = currentSaveFile.readSint16LE();
|
||||
current->scale = currentSaveFile.readSint16LE();
|
||||
current->backgroundIdx = currentSaveFile.readSint16LE();
|
||||
current->scriptNumber = currentSaveFile.readSint16LE();
|
||||
current->scriptOverlayIdx = currentSaveFile.readSint16LE();
|
||||
currentSaveFile.skip(4);
|
||||
current->field_1C = currentSaveFile.readSint32LE();
|
||||
current->size = currentSaveFile.readSint16LE();
|
||||
current->field_22 = currentSaveFile.readSint16LE();
|
||||
current->field_24 = currentSaveFile.readSint16LE();
|
||||
currentSaveFile.read(current->name, 13);
|
||||
currentSaveFile.skip(1);
|
||||
current->aniX = currentSaveFile.readSint16LE();
|
||||
currentSaveFile.skip(2);
|
||||
|
||||
if (current->size) {
|
||||
current->ptr = (uint8 *) mallocAndZero(current->size);
|
||||
fread(current->ptr, current->size, 1, fileHandle);
|
||||
currentSaveFile.read(current->ptr, current->size);
|
||||
}
|
||||
|
||||
current->next = NULL;
|
||||
|
|
|
@ -47,7 +47,7 @@ struct backgroundIncrustStruct {
|
|||
int16 size;
|
||||
uint16 field_22;
|
||||
uint16 field_24;
|
||||
char name[14];
|
||||
char name[13];
|
||||
uint16 aniX;
|
||||
};
|
||||
|
||||
|
@ -57,7 +57,7 @@ void resetBackgroundIncrustList(backgroundIncrustStruct * pHead);
|
|||
backgroundIncrustStruct *addBackgroundIncrust(int16 overlayIdx, int16 param2,
|
||||
backgroundIncrustStruct * pHead, int16 scriptNumber, int16 scriptOverlay,
|
||||
int16 backgroundIdx, int16 param4);
|
||||
void loadBackgroundIncrustFromSave(FILE * fileHandle);
|
||||
void loadBackgroundIncrustFromSave(Common::File& currentSaveFile);
|
||||
void regenerateBackgroundIncrust(backgroundIncrustStruct * pHead);
|
||||
void freeBackgroundIncrustList(backgroundIncrustStruct * pHead);
|
||||
void removeBackgroundIncrust(int overlay, int idx, backgroundIncrustStruct * pHead);
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
* $Id$
|
||||
*
|
||||
*/
|
||||
|
||||
#include "common/file.h"
|
||||
#include "cruise/cell.h"
|
||||
#include "cruise/cruise_main.h"
|
||||
|
||||
|
@ -44,7 +44,7 @@ void freeMessageList(cellStruct *objPtr) {
|
|||
} */
|
||||
}
|
||||
|
||||
void loadSavegameDataSub2(FILE *f) {
|
||||
void loadSavegameDataSub2(Common::File& currentSaveFile) {
|
||||
unsigned short int n_chunks;
|
||||
int i;
|
||||
cellStruct *p;
|
||||
|
@ -53,16 +53,40 @@ void loadSavegameDataSub2(FILE *f) {
|
|||
cellHead.next = NULL; // Not in ASM code, but I guess the variable is defaulted
|
||||
// to this value in the .exe
|
||||
|
||||
fread(&n_chunks, 2, 1, f);
|
||||
// BIG ENDIAN MACHINES, PLEASE SWAP IT
|
||||
n_chunks = currentSaveFile.readSint16LE();
|
||||
|
||||
p = &cellHead;
|
||||
|
||||
for (i = 0; i < n_chunks; i++) {
|
||||
t = (cellStruct *) mallocAndZero(sizeof(cellStruct));
|
||||
|
||||
fseek(f, 4, SEEK_CUR);
|
||||
fread(&t->idx, 1, 0x30, f);
|
||||
currentSaveFile.skip(2);
|
||||
currentSaveFile.skip(2);
|
||||
|
||||
t->idx = currentSaveFile.readSint16LE();
|
||||
t->type = currentSaveFile.readSint16LE();
|
||||
t->overlay = currentSaveFile.readSint16LE();
|
||||
t->x = currentSaveFile.readSint16LE();
|
||||
t->field_C = currentSaveFile.readSint16LE();
|
||||
t->spriteIdx = currentSaveFile.readSint16LE();
|
||||
t->color = currentSaveFile.readSint16LE();
|
||||
t->backgroundPlane = currentSaveFile.readSint16LE();
|
||||
t->freeze = currentSaveFile.readSint16LE();
|
||||
t->parent = currentSaveFile.readSint16LE();
|
||||
t->parentOverlay = currentSaveFile.readSint16LE();
|
||||
t->parentType = currentSaveFile.readSint16LE();
|
||||
t->followObjectOverlayIdx = currentSaveFile.readSint16LE();
|
||||
t->followObjectIdx = currentSaveFile.readSint16LE();
|
||||
t->animStart = currentSaveFile.readSint16LE();
|
||||
t->animEnd = currentSaveFile.readSint16LE();
|
||||
t->animWait = currentSaveFile.readSint16LE();
|
||||
t->animStep = currentSaveFile.readSint16LE();
|
||||
t->animChange = currentSaveFile.readSint16LE();
|
||||
t->animType = currentSaveFile.readSint16LE();
|
||||
t->animSignal = currentSaveFile.readSint16LE();
|
||||
t->animCounter = currentSaveFile.readSint16LE();
|
||||
t->animLoop = currentSaveFile.readSint16LE();
|
||||
currentSaveFile.skip(2);
|
||||
|
||||
t->next = NULL;
|
||||
p->next = t;
|
||||
|
|
|
@ -65,7 +65,7 @@ struct cellStruct {
|
|||
extern cellStruct cellHead;
|
||||
|
||||
void resetPtr(cellStruct * ptr);
|
||||
void loadSavegameDataSub2(FILE * f);
|
||||
void loadSavegameDataSub2(Common::File& currentSaveFile);
|
||||
cellStruct *addCell(cellStruct *pHead, int16 overlayIdx, int16 objIdx, int16 type, int16 backgroundPlane, int16 scriptOverlay, int16 scriptNumber, int16 scriptType);
|
||||
void createTextObject(cellStruct *pObject, int overlayIdx, int messageIdx, int x, int y, int width, int16 color, int backgroundPlane, int parentOvl, int parentIdx);
|
||||
void removeCell(cellStruct *objPtr, int ovlNumber, int objectIdx, int objType, int backgroundPlane );
|
||||
|
|
|
@ -425,7 +425,7 @@ void resetFileEntry(int32 entryNumber) {
|
|||
filesDatabase[entryNumber].height = 0;
|
||||
filesDatabase[entryNumber].subData.index = -1;
|
||||
filesDatabase[entryNumber].subData.resourceType = 0;
|
||||
filesDatabase[entryNumber].subData.field_1C = 0;
|
||||
filesDatabase[entryNumber].subData.compression = 0;
|
||||
filesDatabase[entryNumber].subData.name[0] = 0;
|
||||
|
||||
}
|
||||
|
@ -859,12 +859,10 @@ menuElementSubStruct *getSelectedEntryInMenu(menuStruct *pMenu) {
|
|||
bool findRelation(int objOvl, int objIdx, int x, int y) {
|
||||
bool found = false;
|
||||
bool first = true;
|
||||
int testState;
|
||||
int testState = -1;
|
||||
int j;
|
||||
int16 objectState;
|
||||
|
||||
testState = -1;
|
||||
|
||||
getSingleObjectParam(objOvl, objIdx, 5, &objectState);
|
||||
|
||||
for (j = 1; j < numOfLoadedOverlay; j++) {
|
||||
|
@ -919,7 +917,7 @@ bool findRelation(int objOvl, int objIdx, int x, int y) {
|
|||
ovl4 = overlayTable[obj2Ovl].ovlData;
|
||||
|
||||
if ((ovl3) && (ptrHead->obj1Number >= 0)) {
|
||||
testState = ptrHead->field_1A;
|
||||
testState = ptrHead->obj1OldState;
|
||||
|
||||
if ((first) && (ovl3->arrayNameObj) && ((testState ==-1) || (testState == objectState))) {
|
||||
char *ptrName = getObjectName(ptrHead->obj1Number, ovl3->arrayNameObj);
|
||||
|
@ -1006,7 +1004,7 @@ void callSubRelation(menuElementSubStruct *pMenuElement, int nOvl, int nObj) {
|
|||
getMultipleObjectParam(obj2Ovl, pHeader->obj2Number, ¶ms);
|
||||
}
|
||||
|
||||
if ((pHeader->field_1C != -1) || (params.scale == pHeader->field_1C)) {
|
||||
if ((pHeader->obj2OldState != -1) || (params.scale == pHeader->obj2OldState)) {
|
||||
if (pHeader->type == 30) {
|
||||
ASSERT(0);
|
||||
} else if (pHeader->type == 50) {
|
||||
|
@ -1041,24 +1039,24 @@ void callRelation(menuElementSubStruct *pMenuElement, int nObj2) {
|
|||
if (pHeader->type == 30) {
|
||||
attacheNewScriptToTail(&relHead, ovlIdx, pHeader->id, 30, currentScriptPtr->scriptNumber, currentScriptPtr->overlayNumber, scriptType_REL);
|
||||
|
||||
if ((narratorOvl > 0) && (pHeader->field_12 != -1) && (pHeader->field_14 != -1)) {
|
||||
if ((narratorOvl > 0) && (pHeader->trackX != -1) && (pHeader->trackY != -1)) {
|
||||
actorStruct* pTrack = findActor(&actorHead, narratorOvl, narratorIdx, 0);
|
||||
|
||||
if (pTrack) {
|
||||
animationStart = false;
|
||||
|
||||
if (pHeader->field_1E == 9999) {
|
||||
if (pHeader->trackDirection == 9999) {
|
||||
ASSERT(0);
|
||||
} else if ((pHeader->field_12 == 9999) && (pHeader->field_14 == 9999)) {
|
||||
} else if ((pHeader->trackX == 9999) && (pHeader->trackY == 9999)) {
|
||||
objectParamsQuery naratorParams;
|
||||
getMultipleObjectParam(narratorOvl, narratorIdx, &naratorParams);
|
||||
pTrack->x_dest = naratorParams.X;
|
||||
pTrack->y_dest = naratorParams.Y;
|
||||
pTrack->endDirection = pHeader->field_1E;
|
||||
pTrack->endDirection = pHeader->trackDirection;
|
||||
} else {
|
||||
pTrack->x_dest = pHeader->field_12;
|
||||
pTrack->y_dest = pHeader->field_14;
|
||||
pTrack->endDirection = pHeader->field_1E;
|
||||
pTrack->x_dest = pHeader->trackX;
|
||||
pTrack->y_dest = pHeader->trackY;
|
||||
pTrack->endDirection = pHeader->trackDirection;
|
||||
}
|
||||
|
||||
pTrack->flag = 1;
|
||||
|
@ -1081,9 +1079,9 @@ void callRelation(menuElementSubStruct *pMenuElement, int nObj2) {
|
|||
getMultipleObjectParam(obj1Ovl, pHeader->obj1Number, ¶ms);
|
||||
|
||||
if (narratorOvl > 0) {
|
||||
if ((pHeader->field_12 !=-1) && (pHeader->field_14 != -1) && (pHeader->field_12 != 9999) && (pHeader->field_14 != 9999)) {
|
||||
x = pHeader->field_12 - 100;
|
||||
y = pHeader->field_14 - 150;
|
||||
if ((pHeader->trackX !=-1) && (pHeader->trackY != -1) && (pHeader->trackX != 9999) && (pHeader->trackY != 9999)) {
|
||||
x = pHeader->trackX - 100;
|
||||
y = pHeader->trackY - 150;
|
||||
} else {
|
||||
getMultipleObjectParam(narratorOvl, narratorIdx, ¶ms);
|
||||
x = params.X - 100;
|
||||
|
@ -1094,7 +1092,7 @@ void callRelation(menuElementSubStruct *pMenuElement, int nObj2) {
|
|||
y = params.Y - 40;
|
||||
}
|
||||
|
||||
if (pHeader->field_16 != -1) {
|
||||
if (pHeader->obj1NewState != -1) {
|
||||
ASSERT(0);
|
||||
}
|
||||
}
|
||||
|
@ -1105,24 +1103,24 @@ void callRelation(menuElementSubStruct *pMenuElement, int nObj2) {
|
|||
autoOvl = ovlIdx;
|
||||
autoMsg = pHeader->id;
|
||||
|
||||
if ((narratorOvl > 0) && (pHeader->field_12 != -1) && (pHeader->field_14 != -1)) {
|
||||
if ((narratorOvl > 0) && (pHeader->trackX != -1) && (pHeader->trackY != -1)) {
|
||||
actorStruct* pTrack = findActor(&actorHead, narratorOvl, narratorIdx, 0);
|
||||
|
||||
if (pTrack) {
|
||||
animationStart = false;
|
||||
|
||||
if (pHeader->field_1E == 9999) {
|
||||
if (pHeader->trackDirection == 9999) {
|
||||
ASSERT(0);
|
||||
} else if ((pHeader->field_12 == 9999) && (pHeader->field_14 == 9999)) {
|
||||
} else if ((pHeader->trackX == 9999) && (pHeader->trackY == 9999)) {
|
||||
objectParamsQuery naratorParams;
|
||||
getMultipleObjectParam(narratorOvl, narratorIdx, &naratorParams);
|
||||
pTrack->x_dest = naratorParams.X;
|
||||
pTrack->y_dest = naratorParams.Y;
|
||||
pTrack->endDirection = pHeader->field_1E;
|
||||
pTrack->endDirection = pHeader->trackDirection;
|
||||
} else {
|
||||
pTrack->x_dest = pHeader->field_12;
|
||||
pTrack->y_dest = pHeader->field_14;
|
||||
pTrack->endDirection = pHeader->field_1E;
|
||||
pTrack->x_dest = pHeader->trackX;
|
||||
pTrack->y_dest = pHeader->trackY;
|
||||
pTrack->endDirection = pHeader->trackDirection;
|
||||
}
|
||||
|
||||
pTrack->flag = 1;
|
||||
|
@ -1492,7 +1490,12 @@ void mainLoop(void) {
|
|||
autoTrack = 0;
|
||||
autoTrack = 0;
|
||||
|
||||
if (initAllData()) {
|
||||
initAllData();
|
||||
|
||||
// debug code: automaticaly load savegame 0 at startup
|
||||
loadSavegameData(0);
|
||||
|
||||
{
|
||||
int playerDontAskQuit = 1;
|
||||
int quitValue2 = 1;
|
||||
int quitValue = 0;
|
||||
|
|
|
@ -161,7 +161,7 @@ int updateResFileEntry(int height, int width, int entryNumber, int resType) {
|
|||
|
||||
resetFileEntry(entryNumber);
|
||||
|
||||
filesDatabase[entryNumber].subData.field_1C = 0;
|
||||
filesDatabase[entryNumber].subData.compression = 0;
|
||||
|
||||
int maskSize = height * width; // for sprites: width * height
|
||||
|
||||
|
@ -206,7 +206,7 @@ int createResFileEntry(int width, int height, int resType) {
|
|||
|
||||
entryNumber = i;
|
||||
|
||||
filesDatabase[entryNumber].subData.field_1C = 0;
|
||||
filesDatabase[entryNumber].subData.compression = 0;
|
||||
|
||||
size = width * height; // for sprites: width * height
|
||||
|
||||
|
|
|
@ -174,8 +174,8 @@ void loadSystemFont(void) {
|
|||
colorOfSelectedSaveDrive = 10;
|
||||
|
||||
for (i = 0; i < 64; i++) {
|
||||
mediumVar[i].ptr = 0;
|
||||
mediumVar[i].field_1C = 0;
|
||||
mediumVar[i].ptr = NULL;
|
||||
mediumVar[i].nofree = 0;
|
||||
}
|
||||
|
||||
initVar1 = 0;
|
||||
|
|
|
@ -72,18 +72,22 @@ struct linkDataStruct {
|
|||
int16 offsetVerbeName;
|
||||
int16 verbOverlay;
|
||||
int16 verbNumber;
|
||||
|
||||
int16 obj1Overlay;
|
||||
int16 obj1Number;
|
||||
int16 obj2Overlay;
|
||||
int16 obj2Number;
|
||||
|
||||
int16 field_12;
|
||||
int16 field_14;
|
||||
int16 field_16;
|
||||
int16 field_18;
|
||||
int16 field_1A;
|
||||
int16 field_1C;
|
||||
int16 field_1E;
|
||||
int16 trackX;
|
||||
int16 trackY;
|
||||
|
||||
int16 obj1NewState;
|
||||
int16 obj2NewState;
|
||||
|
||||
int16 obj1OldState;
|
||||
int16 obj2OldState;
|
||||
|
||||
int16 trackDirection;
|
||||
int16 field_20;
|
||||
};
|
||||
|
||||
|
@ -135,8 +139,10 @@ struct ovlDataStruct {
|
|||
uint8 *arrayNameObj;
|
||||
uint8 *arrayNameRelocGlob;
|
||||
uint8 *arrayNameSymbGlob;
|
||||
|
||||
uint8 *data4Ptr;
|
||||
uint8 *ptr8;
|
||||
|
||||
unsigned short int numProc;
|
||||
unsigned short int numRel;
|
||||
unsigned short int numSymbGlob;
|
||||
|
@ -146,6 +152,7 @@ struct ovlDataStruct {
|
|||
unsigned short int numStrings;
|
||||
unsigned short int size8;
|
||||
unsigned short int size9;
|
||||
|
||||
unsigned short int nameExportSize;
|
||||
unsigned short int exportNamesSize;
|
||||
unsigned short int specialString2Length;
|
||||
|
@ -156,27 +163,14 @@ struct ovlDataStruct {
|
|||
};
|
||||
|
||||
struct overlayStruct {
|
||||
char overlayName[14];
|
||||
char overlayName[13];
|
||||
ovlDataStruct *ovlData;
|
||||
short int alreadyLoaded;
|
||||
char state;
|
||||
char field_15;
|
||||
char field_16;
|
||||
char field_17;
|
||||
char field_18;
|
||||
char field_19;
|
||||
char field_1A;
|
||||
char field_1B;
|
||||
char field_1C;
|
||||
char field_1D;
|
||||
char field_1E;
|
||||
char field_1F;
|
||||
char field_20;
|
||||
char field_21;
|
||||
char field_22;
|
||||
char field_23;
|
||||
char field_24;
|
||||
char field_25;
|
||||
short int state;
|
||||
char* pDebug;
|
||||
long int debugSize;
|
||||
char* pSource;
|
||||
long int sourceSize;
|
||||
short int executeScripts;
|
||||
};
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
namespace Cruise {
|
||||
|
||||
void loadSavegameDataSub1(FILE *fileHandle) {
|
||||
void loadSavegameDataSub1(Common::File& currentSaveFile) {
|
||||
int i;
|
||||
|
||||
for (i = 1; i < numOfLoadedOverlay; i++) {
|
||||
|
@ -36,58 +36,58 @@ void loadSavegameDataSub1(FILE *fileHandle) {
|
|||
filesData2[i].field_0 = 0;
|
||||
|
||||
if (overlayTable[i].alreadyLoaded) {
|
||||
fread(&filesData2[i].field_0, 2, 1, fileHandle);
|
||||
filesData2[i].field_0 = currentSaveFile.readSint16LE();
|
||||
|
||||
if (filesData2[i].field_0) {
|
||||
filesData[i].field_0 =
|
||||
(uint8 *) mallocAndZero(filesData2[i].
|
||||
field_0);
|
||||
filesData[i].field_0 = (uint8 *) mallocAndZero(filesData2[i].field_0);
|
||||
if (filesData[i].field_0) {
|
||||
fread(filesData[i].field_0,
|
||||
filesData2[i].field_0, 1,
|
||||
fileHandle);
|
||||
currentSaveFile.read(filesData[i].field_0, filesData2[i].field_0);
|
||||
}
|
||||
}
|
||||
|
||||
fread(&filesData2[i].field_2, 2, 1, fileHandle);
|
||||
filesData2[i].field_2 = currentSaveFile.readSint16LE();
|
||||
|
||||
if (filesData2[i].field_2) {
|
||||
filesData[i].field_4 =
|
||||
(uint8 *) mallocAndZero(filesData2[i].
|
||||
field_2 * 12);
|
||||
filesData[i].field_4 = (uint8 *) mallocAndZero(filesData2[i].field_2 * 12);
|
||||
if (filesData[i].field_4) {
|
||||
fread(filesData[i].field_4,
|
||||
filesData2[i].field_2 * 12, 1,
|
||||
fileHandle);
|
||||
currentSaveFile.read(filesData[i].field_4, filesData2[i].field_2 * 12);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void loadScriptsFromSave(FILE *fileHandle, scriptInstanceStruct *entry) {
|
||||
void loadScriptsFromSave(Common::File& currentSaveFile, scriptInstanceStruct *entry) {
|
||||
short int numScripts;
|
||||
int i;
|
||||
|
||||
fread(&numScripts, 2, 1, fileHandle);
|
||||
numScripts = currentSaveFile.readSint16LE();
|
||||
|
||||
for (i = 0; i < numScripts; i++) {
|
||||
scriptInstanceStruct *ptr =
|
||||
(scriptInstanceStruct *)
|
||||
mallocAndZero(sizeof(scriptInstanceStruct));
|
||||
scriptInstanceStruct *ptr = (scriptInstanceStruct *)mallocAndZero(sizeof(scriptInstanceStruct));
|
||||
|
||||
fread(ptr, 0x1C, 1, fileHandle); // use 0x1C as our scriptInstanceStruct is bigger than in original because of cross platform problems
|
||||
currentSaveFile.skip(2);
|
||||
|
||||
fread(&ptr->varA, 2, 1, fileHandle);
|
||||
ptr->ccr = currentSaveFile.readSint16LE();
|
||||
ptr->var4 = currentSaveFile.readSint16LE();
|
||||
currentSaveFile.skip(4);
|
||||
ptr->varA = currentSaveFile.readSint16LE();
|
||||
ptr->scriptNumber = currentSaveFile.readSint16LE();
|
||||
ptr->overlayNumber = currentSaveFile.readSint16LE();
|
||||
ptr->sysKey = currentSaveFile.readSint16LE();
|
||||
ptr->freeze = currentSaveFile.readSint16LE();
|
||||
ptr->type = (scriptTypeEnum)currentSaveFile.readSint16LE();
|
||||
ptr->var16 = currentSaveFile.readSint16LE();
|
||||
ptr->var18 = currentSaveFile.readSint16LE();
|
||||
ptr->var1A = currentSaveFile.readSint16LE();
|
||||
|
||||
ptr->varA = currentSaveFile.readUint16LE();
|
||||
|
||||
if (ptr->varA) {
|
||||
ptr->var6 = (uint8 *) mallocAndZero(ptr->varA);
|
||||
|
||||
fread(ptr->var6, ptr->varA, 1, fileHandle);
|
||||
currentSaveFile.read(ptr->var6, ptr->varA);
|
||||
}
|
||||
/////////
|
||||
ptr->bitMask = *((int16 *) ptr + 1);
|
||||
/////////
|
||||
|
||||
ptr->nextScriptPtr = 0;
|
||||
|
||||
|
@ -96,20 +96,39 @@ void loadScriptsFromSave(FILE *fileHandle, scriptInstanceStruct *entry) {
|
|||
}
|
||||
}
|
||||
|
||||
void loadSavegameActor(FILE *fileHandle) {
|
||||
void loadSavegameActor(Common::File& currentSaveFile) {
|
||||
short int numEntry;
|
||||
actorStruct *ptr;
|
||||
int i;
|
||||
|
||||
fread(&numEntry, 2, 1, fileHandle);
|
||||
numEntry = currentSaveFile.readSint16LE();
|
||||
|
||||
ptr = &actorHead;
|
||||
|
||||
for (i = 0; i < numEntry; i++) {
|
||||
actorStruct *current =
|
||||
(actorStruct *) mallocAndZero(sizeof(actorStruct));
|
||||
fseek(fileHandle, 4, SEEK_CUR);
|
||||
fread(current, 0x26, 1, fileHandle);
|
||||
actorStruct *current = (actorStruct *) mallocAndZero(sizeof(actorStruct));
|
||||
currentSaveFile.skip(2);
|
||||
currentSaveFile.skip(2);
|
||||
|
||||
current->idx = currentSaveFile.readSint16LE();
|
||||
current->type = currentSaveFile.readSint16LE();
|
||||
current->overlayNumber = currentSaveFile.readSint16LE();
|
||||
current->x_dest = currentSaveFile.readSint16LE();
|
||||
current->y_dest = currentSaveFile.readSint16LE();
|
||||
current->x = currentSaveFile.readSint16LE();
|
||||
current->y = currentSaveFile.readSint16LE();
|
||||
current->startDirection = currentSaveFile.readSint16LE();
|
||||
current->nextDirection = currentSaveFile.readSint16LE();
|
||||
current->endDirection = currentSaveFile.readSint16LE();
|
||||
current->stepX = currentSaveFile.readSint16LE();
|
||||
current->stepY = currentSaveFile.readSint16LE();
|
||||
current->pathId = currentSaveFile.readSint16LE();
|
||||
current->phase = (animPhase)currentSaveFile.readSint16LE();
|
||||
current->counter = currentSaveFile.readSint16LE();
|
||||
current->poly = currentSaveFile.readSint16LE();
|
||||
current->flag = currentSaveFile.readSint16LE();
|
||||
current->start = currentSaveFile.readSint16LE();
|
||||
current->freeze = currentSaveFile.readSint16LE();
|
||||
|
||||
current->next = NULL;
|
||||
ptr->next = current;
|
||||
|
@ -119,46 +138,42 @@ void loadSavegameActor(FILE *fileHandle) {
|
|||
}
|
||||
}
|
||||
|
||||
void loadSavegameDataSub5(FILE *fileHandle) {
|
||||
void loadSavegameDataSub5(Common::File& currentSaveFile) {
|
||||
if (var1) {
|
||||
fread(&saveVar1, 1, 1, fileHandle);
|
||||
saveVar1 = currentSaveFile.readByte();
|
||||
|
||||
if (saveVar1) {
|
||||
fread(saveVar2, saveVar1, 1, fileHandle);
|
||||
currentSaveFile.read(saveVar2, saveVar1);
|
||||
}
|
||||
} else {
|
||||
fread(&saveVar1, 1, 1, fileHandle);
|
||||
saveVar1 = currentSaveFile.readByte();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void loadSavegameDataSub6(FILE *fileHandle) {
|
||||
void loadSavegameDataSub6(Common::File& currentSaveFile) {
|
||||
int32 var;
|
||||
|
||||
fread(&var, 4, 1, fileHandle);
|
||||
var = currentSaveFile.readUint32LE();
|
||||
flipLong(&var);
|
||||
|
||||
if (var) {
|
||||
int i;
|
||||
|
||||
fread(&numberOfWalkboxes, 2, 1, fileHandle);
|
||||
numberOfWalkboxes = currentSaveFile.readUint16LE();
|
||||
|
||||
if (numberOfWalkboxes) {
|
||||
fread(walkboxType, numberOfWalkboxes * 2, 1,
|
||||
fileHandle);
|
||||
fread(walkboxType, numberOfWalkboxes * 2, 1,
|
||||
fileHandle);
|
||||
currentSaveFile.read(walkboxType, numberOfWalkboxes * 2);
|
||||
currentSaveFile.read(walkboxChange, numberOfWalkboxes * 2);
|
||||
}
|
||||
|
||||
for (i = 0; i < 10; i++) {
|
||||
fread(&persoTable[i], 4, 1, fileHandle);
|
||||
persoTable[i] = (persoStruct*)currentSaveFile.readSint32LE();
|
||||
|
||||
if (persoTable[i]) {
|
||||
assert(sizeof(persoStruct) == 0x6AA);
|
||||
persoTable[i] =
|
||||
(persoStruct *)
|
||||
mallocAndZero(sizeof(persoStruct));
|
||||
fread(persoTable[i], 0x6AA, 1, fileHandle);
|
||||
persoTable[i] = (persoStruct *)mallocAndZero(sizeof(persoStruct));
|
||||
currentSaveFile.read(persoTable[i], 0x6AA);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -166,17 +181,16 @@ void loadSavegameDataSub6(FILE *fileHandle) {
|
|||
|
||||
int loadSavegameData(int saveGameIdx) {
|
||||
char buffer[256];
|
||||
FILE *fileHandle;
|
||||
char saveIdentBuffer[6];
|
||||
int j;
|
||||
int initVar1Save;
|
||||
cellStruct *currentcellHead;
|
||||
|
||||
sprintf(buffer, "CR.%d", saveGameIdx);
|
||||
|
||||
fileHandle = fopen(buffer, "rb");
|
||||
Common::File currentSaveFile;
|
||||
currentSaveFile.open(buffer);
|
||||
|
||||
if (!fileHandle) {
|
||||
if (!currentSaveFile.isOpen()) {
|
||||
printInfoBlackBox("Savegame not found...");
|
||||
waitForPlayerInput();
|
||||
return (-1);
|
||||
|
@ -184,126 +198,175 @@ int loadSavegameData(int saveGameIdx) {
|
|||
|
||||
printInfoBlackBox("Loading in progress...");
|
||||
|
||||
fread(saveIdentBuffer, 6, 1, fileHandle);
|
||||
currentSaveFile.read(saveIdentBuffer, 6);
|
||||
|
||||
if (strcmp(saveIdentBuffer, "SAVPC")) {
|
||||
fclose(fileHandle);
|
||||
currentSaveFile.close();
|
||||
return (-1);
|
||||
}
|
||||
//initVars();
|
||||
|
||||
fread(&var1, 2, 1, fileHandle);
|
||||
fread(&var2, 2, 1, fileHandle);
|
||||
fread(&var3, 2, 1, fileHandle);
|
||||
fread(&var4, 2, 1, fileHandle);
|
||||
fread(&userEnabled, 2, 1, fileHandle);
|
||||
fread(&dialogueEnabled, 2, 1, fileHandle);
|
||||
fread(&var7, 2, 1, fileHandle);
|
||||
fread(&var8, 2, 1, fileHandle);
|
||||
fread(&userDelay, 2, 1, fileHandle);
|
||||
fread(&sysKey, 2, 1, fileHandle);
|
||||
fread(&sysX, 2, 1, fileHandle);
|
||||
fread(&sysY, 2, 1, fileHandle);
|
||||
fread(&var13, 2, 1, fileHandle);
|
||||
fread(&var14, 2, 1, fileHandle);
|
||||
fread(&affichePasMenuJoueur, 2, 1, fileHandle);
|
||||
fread(&var20, 2, 1, fileHandle);
|
||||
fread(&var22, 2, 1, fileHandle);
|
||||
fread(&var23, 2, 1, fileHandle);
|
||||
fread(&var24, 2, 1, fileHandle);
|
||||
fread(&automaticMode, 2, 1, fileHandle);
|
||||
var1 = currentSaveFile.readSint16LE();
|
||||
var2 = currentSaveFile.readSint16LE();
|
||||
var3 = currentSaveFile.readSint16LE();
|
||||
var4 = currentSaveFile.readSint16LE();
|
||||
userEnabled = currentSaveFile.readSint16LE();
|
||||
dialogueEnabled = currentSaveFile.readSint16LE();
|
||||
|
||||
var7 = currentSaveFile.readSint16LE();
|
||||
var8 = currentSaveFile.readSint16LE();
|
||||
userDelay = currentSaveFile.readSint16LE();
|
||||
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();
|
||||
automaticMode = currentSaveFile.readSint16LE();
|
||||
|
||||
// video param (not loaded in EGA mode)
|
||||
|
||||
fread(&video4, 2, 1, fileHandle);
|
||||
fread(&video2, 2, 1, fileHandle);
|
||||
fread(&video3, 2, 1, fileHandle);
|
||||
fread(&colorOfSelectedSaveDrive, 2, 1, fileHandle);
|
||||
video4 = currentSaveFile.readSint16LE();
|
||||
video2 = currentSaveFile.readSint16LE();
|
||||
video3 = currentSaveFile.readSint16LE();
|
||||
colorOfSelectedSaveDrive = currentSaveFile.readSint16LE();
|
||||
|
||||
//
|
||||
|
||||
fread(&narratorOvl, 2, 1, fileHandle);
|
||||
fread(&narratorIdx, 2, 1, fileHandle);
|
||||
fread(&aniX, 2, 1, fileHandle);
|
||||
fread(&aniY, 2, 1, fileHandle);
|
||||
int16 bTemp;
|
||||
fread(&bTemp, 2, 1, fileHandle);
|
||||
animationStart = bTemp != 0;
|
||||
fread(¤tActiveBackgroundPlane, 2, 1, fileHandle);
|
||||
fread(&initVar3, 2, 1, fileHandle);
|
||||
fread(&initVar2, 2, 1, fileHandle);
|
||||
fread(&var22, 2, 1, fileHandle);
|
||||
fread(&main5, 2, 1, fileHandle);
|
||||
fread(&numOfLoadedOverlay, 2, 1, fileHandle);
|
||||
fread(&setup1, 2, 1, fileHandle);
|
||||
fread(&fontFileIndex, 2, 1, fileHandle);
|
||||
fread(¤tActiveMenu, 2, 1, fileHandle);
|
||||
fread(&userWait, 2, 1, fileHandle); // ok
|
||||
fread(&autoOvl, 2, 1, fileHandle);
|
||||
fread(&autoMsg, 2, 1, fileHandle);
|
||||
fread(&autoTrack, 2, 1, fileHandle);
|
||||
fread(&var39, 2, 1, fileHandle);
|
||||
fread(&var42, 2, 1, fileHandle);
|
||||
fread(&var45, 2, 1, fileHandle);
|
||||
fread(&var46, 2, 1, fileHandle);
|
||||
fread(&var47, 2, 1, fileHandle);
|
||||
fread(&var48, 2, 1, fileHandle);
|
||||
fread(&flagCt, 2, 1, fileHandle);
|
||||
fread(&var41, 2, 1, fileHandle);
|
||||
fread(&entrerMenuJoueur, 2, 1, fileHandle);
|
||||
narratorOvl = currentSaveFile.readSint16LE();
|
||||
narratorIdx = currentSaveFile.readSint16LE();
|
||||
aniX = currentSaveFile.readSint16LE();
|
||||
aniY = currentSaveFile.readSint16LE();
|
||||
|
||||
fread(var50, 64, 1, fileHandle);
|
||||
fread(var50, 64, 1, fileHandle); // Hu ? why 2 times ?
|
||||
fread(&systemStrings, sizeof(systemStrings), 1, fileHandle); // ok
|
||||
fread(currentCtpName, 40, 1, fileHandle);
|
||||
fread(backgroundTable, 120, 1, fileHandle);
|
||||
fread(palette, 256, 2, fileHandle); // ok
|
||||
fread(initVar5, 24, 1, fileHandle);
|
||||
fread(globalVars, setup1 * 2, 1, fileHandle);
|
||||
fread(filesDatabase, 9766, 1, fileHandle);
|
||||
fread(overlayTable, 40 * numOfLoadedOverlay, 1, fileHandle); // ok
|
||||
fread(mediumVar, 0x880, 1, fileHandle);
|
||||
if(currentSaveFile.readSint16LE()) // cast to bool
|
||||
animationStart = true;
|
||||
else
|
||||
animationStart = false;
|
||||
|
||||
loadSavegameDataSub1(fileHandle);
|
||||
loadScriptsFromSave(fileHandle, &procHead);
|
||||
loadScriptsFromSave(fileHandle, &relHead);
|
||||
currentActiveBackgroundPlane = currentSaveFile.readSint16LE();
|
||||
initVar3 = currentSaveFile.readSint16LE();
|
||||
initVar2 = currentSaveFile.readSint16LE();
|
||||
var22 = currentSaveFile.readSint16LE();
|
||||
main5 = currentSaveFile.readSint16LE();
|
||||
numOfLoadedOverlay = currentSaveFile.readSint16LE();
|
||||
setup1 = currentSaveFile.readSint16LE();
|
||||
fontFileIndex = currentSaveFile.readSint16LE();
|
||||
currentActiveMenu = currentSaveFile.readSint16LE();
|
||||
userWait = currentSaveFile.readSint16LE();
|
||||
autoOvl = currentSaveFile.readSint16LE();
|
||||
autoMsg = currentSaveFile.readSint16LE();
|
||||
autoTrack = currentSaveFile.readSint16LE();
|
||||
var39 = currentSaveFile.readSint16LE();
|
||||
var42 = currentSaveFile.readSint16LE();
|
||||
var45 = currentSaveFile.readSint16LE();
|
||||
var46 = currentSaveFile.readSint16LE();
|
||||
var47 = currentSaveFile.readSint16LE();
|
||||
var48 = currentSaveFile.readSint16LE();
|
||||
flagCt = currentSaveFile.readSint16LE();
|
||||
var41 = currentSaveFile.readSint16LE();
|
||||
entrerMenuJoueur = currentSaveFile.readSint16LE();
|
||||
|
||||
loadSavegameDataSub2(fileHandle);
|
||||
loadBackgroundIncrustFromSave(fileHandle);
|
||||
loadSavegameActor(fileHandle);
|
||||
loadSavegameDataSub5(fileHandle);
|
||||
loadSavegameDataSub6(fileHandle);
|
||||
currentSaveFile.read(var50, 64);
|
||||
currentSaveFile.read(var50, 64); // Hu ? why 2 times ?
|
||||
|
||||
fclose(fileHandle); // finished with loading !!!!! Yatta !
|
||||
// here code seems bogus... this should read music name and it may be a buffer overrun
|
||||
currentSaveFile.skip(21);
|
||||
|
||||
for (j = 0; j < 64; j++) {
|
||||
currentSaveFile.read(currentCtpName, 40);
|
||||
|
||||
// restore backgroundTable
|
||||
for(int i=0; i<8; i++)
|
||||
{
|
||||
currentSaveFile.read(backgroundTable[i].name, 9);
|
||||
currentSaveFile.read(backgroundTable[i].extention, 6);
|
||||
}
|
||||
|
||||
currentSaveFile.read(palette, 256*2);
|
||||
currentSaveFile.read(initVar5, 24);
|
||||
currentSaveFile.read(globalVars, setup1 * 2); // ok
|
||||
for(int i=0; i<257; i++)
|
||||
{
|
||||
filesDatabase[i].widthInColumn = currentSaveFile.readUint16LE();
|
||||
filesDatabase[i].width = currentSaveFile.readUint16LE();
|
||||
filesDatabase[i].resType = currentSaveFile.readUint16LE();
|
||||
filesDatabase[i].height = currentSaveFile.readUint16LE();
|
||||
filesDatabase[i].subData.ptr = (uint8*)currentSaveFile.readSint32LE();
|
||||
filesDatabase[i].subData.index = currentSaveFile.readSint16LE();
|
||||
currentSaveFile.read(filesDatabase[i].subData.name, 13);
|
||||
currentSaveFile.skip(1);
|
||||
filesDatabase[i].subData.transparency = currentSaveFile.readSint16LE();
|
||||
filesDatabase[i].subData.ptrMask = (uint8*)currentSaveFile.readSint32LE();
|
||||
filesDatabase[i].subData.resourceType = currentSaveFile.readByte();
|
||||
currentSaveFile.skip(1);
|
||||
filesDatabase[i].subData.compression = currentSaveFile.readSint16LE();
|
||||
}
|
||||
|
||||
for(int i=0; i<numOfLoadedOverlay; i++)
|
||||
{
|
||||
currentSaveFile.read(overlayTable[i].overlayName, 13);
|
||||
currentSaveFile.skip(1);
|
||||
currentSaveFile.skip(4);
|
||||
overlayTable[i].alreadyLoaded = currentSaveFile.readSint16LE();
|
||||
overlayTable[i].state = currentSaveFile.readSint16LE();
|
||||
currentSaveFile.skip(4);
|
||||
currentSaveFile.skip(4);
|
||||
currentSaveFile.skip(4);
|
||||
currentSaveFile.skip(4);
|
||||
overlayTable[i].executeScripts = currentSaveFile.readSint16LE();
|
||||
}
|
||||
|
||||
for(int i=0; i<64; i++)
|
||||
{
|
||||
currentSaveFile.read(mediumVar[i].name, 15);
|
||||
currentSaveFile.skip(1);
|
||||
mediumVar[i].size = currentSaveFile.readSint32LE();
|
||||
mediumVar[i].sourceSize = currentSaveFile.readSint32LE();
|
||||
currentSaveFile.skip(4);
|
||||
mediumVar[i].nofree = currentSaveFile.readSint16LE();
|
||||
mediumVar[i].protect = currentSaveFile.readSint16LE();
|
||||
mediumVar[i].ovl = currentSaveFile.readSint16LE();
|
||||
}
|
||||
|
||||
loadSavegameDataSub1(currentSaveFile);
|
||||
loadScriptsFromSave(currentSaveFile, &procHead);
|
||||
loadScriptsFromSave(currentSaveFile, &relHead);
|
||||
|
||||
loadSavegameDataSub2(currentSaveFile);
|
||||
loadBackgroundIncrustFromSave(currentSaveFile);
|
||||
loadSavegameActor(currentSaveFile);
|
||||
loadSavegameDataSub5(currentSaveFile);
|
||||
loadSavegameDataSub6(currentSaveFile);
|
||||
|
||||
currentSaveFile.close();
|
||||
|
||||
for (int j = 0; j < 64; j++) {
|
||||
mediumVar[j].ptr = NULL;
|
||||
}
|
||||
|
||||
for (j = 1; j < numOfLoadedOverlay; j++) {
|
||||
for (int j = 1; j < numOfLoadedOverlay; j++) {
|
||||
if (overlayTable[j].alreadyLoaded) {
|
||||
overlayTable[j].alreadyLoaded = 0;
|
||||
loadOverlay((uint8 *) overlayTable[j].overlayName);
|
||||
|
||||
if (overlayTable[j].alreadyLoaded) {
|
||||
ovlDataStruct *ovlData =
|
||||
overlayTable[j].ovlData;
|
||||
ovlDataStruct *ovlData = overlayTable[j].ovlData;
|
||||
|
||||
if (filesData[j].field_0) {
|
||||
if (ovlData->data4Ptr) {
|
||||
free(ovlData->data4Ptr);
|
||||
}
|
||||
|
||||
ovlData->data4Ptr =
|
||||
(uint8 *) filesData[j].field_0;
|
||||
ovlData->sizeOfData4 =
|
||||
filesData2[j].field_0;
|
||||
ovlData->data4Ptr = (uint8 *) filesData[j].field_0;
|
||||
ovlData->sizeOfData4 = filesData2[j].field_0;
|
||||
}
|
||||
|
||||
if (filesData[j].field_4) {
|
||||
if (ovlData->arrayObjVar) {
|
||||
free(ovlData->
|
||||
arrayObjVar);
|
||||
free(ovlData->arrayObjVar);
|
||||
}
|
||||
|
||||
ovlData->arrayObjVar = (objectParams *) filesData[j].field_4; // TODO: fix !
|
||||
|
@ -320,17 +383,14 @@ int loadSavegameData(int saveGameIdx) {
|
|||
|
||||
initVar1Save = initVar1;
|
||||
|
||||
for (j = 0; j < 257; j++) {
|
||||
for (int j = 0; j < 257; j++) {
|
||||
if (filesDatabase[j].subData.ptr) {
|
||||
int i;
|
||||
int k;
|
||||
|
||||
for (i = j + 1; i < 257; i++) {
|
||||
if (filesDatabase[i].subData.ptr) {
|
||||
if (strcmpuint8(filesDatabase[j].
|
||||
subData.name,
|
||||
filesDatabase[i].subData.
|
||||
name)) {
|
||||
if (strcmpuint8(filesDatabase[j].subData.name, filesDatabase[i].subData.name)) {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
|
@ -351,9 +411,7 @@ int loadSavegameData(int saveGameIdx) {
|
|||
exit(1);
|
||||
//loadFileMode1(filesDatabase[j].subData.name,filesDatabase[j].subData.var4);
|
||||
} else {
|
||||
loadFileMode2((uint8 *) filesDatabase[j].
|
||||
subData.name,
|
||||
filesDatabase[j].subData.index, j, i - j);
|
||||
loadFileMode2((uint8 *) filesDatabase[j].subData.name, filesDatabase[j].subData.index, j, i - j);
|
||||
j = i - 1;
|
||||
}
|
||||
|
||||
|
@ -367,8 +425,7 @@ int loadSavegameData(int saveGameIdx) {
|
|||
|
||||
while (currentcellHead) {
|
||||
if (currentcellHead->type == 5) {
|
||||
uint8 *ptr =
|
||||
mainProc14(currentcellHead->overlay,
|
||||
uint8 *ptr = mainProc14(currentcellHead->overlay,
|
||||
currentcellHead->idx);
|
||||
|
||||
ASSERT(0);
|
||||
|
@ -394,7 +451,7 @@ int loadSavegameData(int saveGameIdx) {
|
|||
//prepareFadeOut();
|
||||
//gfxModuleData.gfxFunction8();
|
||||
|
||||
for (j = 0; j < 8; j++) {
|
||||
for (int j = 0; j < 8; j++) {
|
||||
if (strlen((char *)backgroundTable[j].name)) {
|
||||
loadBackground(backgroundTable[j].name, j);
|
||||
}
|
||||
|
|
|
@ -425,7 +425,7 @@ int32 opcodeType6(void) {
|
|||
si |= 2;
|
||||
}
|
||||
|
||||
currentScriptPtr->bitMask = si;
|
||||
currentScriptPtr->ccr = si;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
@ -444,7 +444,7 @@ int32 opcodeType5(void) {
|
|||
int offset = currentScriptPtr->var4;
|
||||
int short1 = getShortFromScript();
|
||||
int newSi = short1 + offset;
|
||||
int bitMask = currentScriptPtr->bitMask;
|
||||
int bitMask = currentScriptPtr->ccr;
|
||||
|
||||
switch (currentScriptOpcodeType) {
|
||||
case 0:
|
||||
|
|
|
@ -37,6 +37,7 @@ enum scriptTypeEnum {
|
|||
|
||||
struct scriptInstanceStruct {
|
||||
struct scriptInstanceStruct *nextScriptPtr;
|
||||
int16 ccr;
|
||||
int16 var4;
|
||||
uint8 *var6;
|
||||
int16 varA;
|
||||
|
@ -48,8 +49,6 @@ struct scriptInstanceStruct {
|
|||
int16 var16;
|
||||
int16 var18;
|
||||
int16 var1A;
|
||||
////// EXTRA ! not in original code. Needed for cross platform.
|
||||
int16 bitMask;
|
||||
};
|
||||
|
||||
extern scriptInstanceStruct relHead;
|
||||
|
|
|
@ -69,15 +69,13 @@ extern int16 main5;
|
|||
extern int16 var22;
|
||||
|
||||
struct mediumVarStruct {
|
||||
uint8 name[16];
|
||||
int16 field_10;
|
||||
int16 field_12;
|
||||
int16 field_14;
|
||||
int16 field_16;
|
||||
uint8 name[15];
|
||||
int32 size;
|
||||
int32 sourceSize;
|
||||
uint8 *ptr;
|
||||
int16 field_1C;
|
||||
int16 field_1E;
|
||||
int16 field_20;
|
||||
int16 nofree;
|
||||
int16 protect;
|
||||
int16 ovl;
|
||||
};
|
||||
|
||||
struct filesDataStruct {
|
||||
|
@ -123,19 +121,18 @@ struct fileEntry {
|
|||
struct dataFileEntrySub {
|
||||
uint8 *ptr;
|
||||
int16 index; // sprite index
|
||||
char name[14];
|
||||
char name[13];
|
||||
int16 transparency; // sprite transparency
|
||||
uint8 *ptrMask;
|
||||
uint8 resourceType; // sprite and image type 2,4,8 , fnt = 7, spl = 6
|
||||
uint8 field_1B;
|
||||
int16 field_1C;
|
||||
int16 compression;
|
||||
};
|
||||
|
||||
struct dataFileEntry {
|
||||
int16 widthInColumn;
|
||||
int16 width;
|
||||
int16 resType;
|
||||
int16 height;
|
||||
uint16 widthInColumn;
|
||||
uint16 width;
|
||||
uint16 resType;
|
||||
uint16 height;
|
||||
dataFileEntrySub subData;
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue