aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Hamm2002-03-25 01:20:05 +0000
committerVincent Hamm2002-03-25 01:20:05 +0000
commit29f2188c2d625e90a47ea3aac1a5a553f4e1a460 (patch)
tree8cfc667f2614ea363dff2a5f3cd7329e2a395dd6
parent29e08ae6ed450eb317f01e3b303fcdab436f053c (diff)
downloadscummvm-rg350-29f2188c2d625e90a47ea3aac1a5a553f4e1a460.tar.gz
scummvm-rg350-29f2188c2d625e90a47ea3aac1a5a553f4e1a460.tar.bz2
scummvm-rg350-29f2188c2d625e90a47ea3aac1a5a553f4e1a460.zip
Moved the v3 specific version of readIndex
svn-id: r3817
-rw-r--r--Makefile2
-rw-r--r--gfx.cpp2
-rw-r--r--resource.cpp125
-rw-r--r--v3/resource.cpp127
4 files changed, 129 insertions, 127 deletions
diff --git a/Makefile b/Makefile
index e7a0c3fd0d..5a2d6d487b 100644
--- a/Makefile
+++ b/Makefile
@@ -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 \
diff --git a/gfx.cpp b/gfx.cpp
index f72959d0e9..c961fbb280 100644
--- a/gfx.cpp
+++ b/gfx.cpp
@@ -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);
+}