diff options
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | gfx.cpp | 2 | ||||
| -rw-r--r-- | resource.cpp | 125 | ||||
| -rw-r--r-- | v3/resource.cpp | 127 | 
4 files changed, 129 insertions, 127 deletions
| @@ -15,7 +15,7 @@ OBJS	= actor.o boxes.o costume.o gfx.o object.o resource.o \  	saveload.o script.o scummvm.o sound.o string.o \  	sys.o verbs.o sdl.o script_v1.o script_v2.o debug.o gui.o \  	sound/imuse.o sound/fmopl.o sound/adlib.o sound/gmidi.o debugrl.o \ -	akos.o vars.o insane.o gameDetecter.o +	akos.o vars.o insane.o gameDetecter.o v3/resource.o  DISTFILES=$(OBJS:.o=.cpp) Makefile scumm.h scummsys.h stdafx.h stdafx.cpp \  	windows.cpp debugrl.h whatsnew.txt readme.txt copying.txt \ @@ -348,7 +348,7 @@ void Scumm::initBGBuffers() {                  ptr = findResource(MKID('RMIH'), findResource(MKID('RMIM'), room));                  gdi._numZBuffer = READ_LE_UINT16(ptr+8) + 1;          } -	assert(gdi._numZBuffer>=1 && gdi._numZBuffer<=4); +	assert(gdi._numZBuffer>=1 && gdi._numZBuffer<=5);  	itemsize = (_scrHeight + 4) * 40;  	size = itemsize * gdi._numZBuffer; diff --git a/resource.cpp b/resource.cpp index 96799d7e06..45f747e32e 100644 --- a/resource.cpp +++ b/resource.cpp @@ -322,131 +322,6 @@ void Scumm::readIndexFile() {  	openRoom(-1);  } -void Scumm_v3::readIndexFile() { -       uint16 blocktype; -       uint32 itemsize; -       int numblock = 0; -       int num, i; -       byte* _oldClass; - -       debug(9, "readIndexFile()"); - -       openRoom(-1); -       openRoom(0); - -       if (!(_features & GF_AFTER_V6)) { -               while (!fileEof(_fileHandle)) { -                       itemsize = fileReadDwordLE(); -                       blocktype = fileReadWordLE(); -                       if (fileReadFailed(_fileHandle)) -                               break; - -                       switch(blocktype) { -                       case 0x4E52: -                               fileReadWordLE(); -                               break; -                       case 0x5230: -                               _numRooms = fileReadWordLE(); -                               break; -                       case 0x5330: -                               _numScripts = fileReadWordLE(); -                               break; -                       case 0x4E30: -                               _numSounds = fileReadWordLE(); -                               break; -                       case 0x4330: -                               _numCostumes = fileReadWordLE(); -                               break; -                       case 0x4F30: -                               _numGlobalObjects = fileReadWordLE(); -                               break; -                       } -                       fileSeek(_fileHandle, itemsize-8,SEEK_CUR); -               } -               clearFileReadFailed(_fileHandle); -               fileSeek(_fileHandle, 0, SEEK_SET); -       } - -       /* I'm not sure for those values yet, they will have to be rechecked */ - -       _numVariables = 800; /* 800 */ -       _numBitVariables = 4096; /* 2048 */ -       _numLocalObjects = 200; /* 200 */ -       _numArray = 50; -       _numVerbs = 100; -       _numNewNames = 0; -       _objectRoomTable = NULL; -       _numCharsets = 9; /* 9 */ -       _numInventory = 80; /* 80 */ -       _numGlobalScripts = 200; - -       _shadowPaletteSize = 256; -       _shadowPalette = (byte*)alloc(_shadowPaletteSize); // stupid for now. Need to be removed later -       _numFlObject = 50; - -       allocateArrays(); - -       while (1) { -               itemsize = fileReadDwordLE(); - -               if (fileReadFailed(_fileHandle)) -                       break; - -               blocktype = fileReadWordLE(); - -               numblock++; - -               switch(blocktype) { - -               case 0x4E52: -                       fileSeek(_fileHandle, itemsize-6,SEEK_CUR); -                       break; - -               case 0x5230: -                       readResTypeList(rtRoom,MKID('ROOM'),"room"); -                       break; - -               case 0x5330: -                       readResTypeList(rtScript,MKID('SCRP'),"script"); -                       break; - -               case 0x4E30: -                       readResTypeList(rtSound,MKID('SOUN'),"sound"); -                       break; - -               case 0x4330: -                       readResTypeList(rtCostume,MKID('COST'),"costume"); -                       break; - -               case 0x4F30: -                       num = fileReadWordLE(); -                       assert(num == _numGlobalObjects); -                       for (i=0; i<num; i++) { /* not too sure about all that */ -				_oldClass=(byte*)&_classData[i];			        -				_oldClass[0]=fileReadByte(); -				_oldClass[1]=fileReadByte(); -				_oldClass[2]=fileReadByte(); -				_objectOwnerTable[i] = fileReadByte(); -                            //   _objectStateTable[i] = fileReadByte(); -                               _objectOwnerTable[i] &= OF_OWNER_MASK; -                       } -                -#if defined(SCUMM_BIG_ENDIAN) -                       for (i=0; i<num; i++) { -                               _classData[i] = FROM_LE_32(_classData[i]); -                       } -#endif -                       break; - -               default: -                       error("Bad ID %c%c found in directory!", blocktype&0xFF, blocktype>>8); -                       return; -               } -       } - -       openRoom(-1); -} -  void Scumm::readArrayFromIndexFile() {  	int num;  	int a,b,c; diff --git a/v3/resource.cpp b/v3/resource.cpp new file mode 100644 index 0000000000..28a2787269 --- /dev/null +++ b/v3/resource.cpp @@ -0,0 +1,127 @@ +#include"../stdafx.h" +#include"../scumm.h" + + +void Scumm_v3::readIndexFile() { +       uint16 blocktype; +       uint32 itemsize; +       int numblock = 0; +       int num, i; +       byte* _oldClass;  + +       debug(9, "readIndexFile()"); + +       openRoom(-1); +       openRoom(0); + +       if (!(_features & GF_AFTER_V6)) { +               while (!fileEof(_fileHandle)) { +                       itemsize = fileReadDwordLE(); +                       blocktype = fileReadWordLE(); +                       if (fileReadFailed(_fileHandle)) +                               break; + +                       switch(blocktype) { +                       case 0x4E52: +                               fileReadWordLE(); +                               break; +                       case 0x5230: +                               _numRooms = fileReadWordLE(); +                               break; +                       case 0x5330: +                               _numScripts = fileReadWordLE(); +                               break; +                       case 0x4E30: +                               _numSounds = fileReadWordLE(); +                               break; +                       case 0x4330: +                               _numCostumes = fileReadWordLE(); +                               break; +                       case 0x4F30: +                               _numGlobalObjects = fileReadWordLE(); +                               break; +                       } +                       fileSeek(_fileHandle, itemsize-8,SEEK_CUR); +               } +               clearFileReadFailed(_fileHandle); +               fileSeek(_fileHandle, 0, SEEK_SET); +       } + +       /* I'm not sure for those values yet, they will have to be rechecked */ + +       _numVariables = 800; /* 800 */ +       _numBitVariables = 4096; /* 2048 */ +       _numLocalObjects = 200; /* 200 */ +       _numArray = 50; +       _numVerbs = 100; +       _numNewNames = 0; +       _objectRoomTable = NULL; +       _numCharsets = 9; /* 9 */ +       _numInventory = 80; /* 80 */ +       _numGlobalScripts = 200; + +       _shadowPaletteSize = 256; +       _shadowPalette = (byte*)alloc(_shadowPaletteSize); // stupid for now. Need to be removed later +       _numFlObject = 50; +       allocateArrays(); + +       while (1) { +               itemsize = fileReadDwordLE(); + +               if (fileReadFailed(_fileHandle)) +                       break; + +               blocktype = fileReadWordLE(); + +               numblock++; + +               switch(blocktype) { + +               case 0x4E52: +                       fileSeek(_fileHandle, itemsize-6,SEEK_CUR); +                       break; + +               case 0x5230: +                       readResTypeList(rtRoom,MKID('ROOM'),"room"); +                       break; + +               case 0x5330: +                       readResTypeList(rtScript,MKID('SCRP'),"script"); +                       break; + +               case 0x4E30: +                       readResTypeList(rtSound,MKID('SOUN'),"sound"); +                       break; + +               case 0x4330: +                       readResTypeList(rtCostume,MKID('COST'),"costume"); +                       break; + +               case 0x4F30: +                       num = fileReadWordLE(); +                       assert(num == _numGlobalObjects); +                       for (i=0; i<num; i++) { /* not too sure about all that */ +                                _oldClass=(byte*)&_classData[i]; +                                _oldClass[0]=fileReadByte(); +                                _oldClass[1]=fileReadByte(); +                                _oldClass[2]=fileReadByte(); +                                _objectOwnerTable[i] = fileReadByte(); +                            //   _objectStateTable[i] = fileReadByte(); +                               _objectOwnerTable[i] &= OF_OWNER_MASK; +                       } + +#if defined(SCUMM_BIG_ENDIAN) +                       for (i=0; i<num; i++) { +                               _classData[i] = FROM_LE_32(_classData[i]); +                       } +#endif +                       break; + +               default: +                       error("Bad ID %c%c found in directory!", blocktype&0xFF, blocktype>>8); +                       return; +               } +       } + +       openRoom(-1); +} | 
