[Scummvm-cvs-logs] CVS: scummvm/scumm scumm.h,1.195,1.196 resource.cpp,1.77,1.78

Jonathan Gray khalek at users.sourceforge.net
Fri May 16 09:10:06 CEST 2003


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv7203

Modified Files:
	scumm.h resource.cpp 
Log Message:
some updates that get us up to the bootscripts of he v7 games before erroring out on unimplemented opcodes

Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.195
retrieving revision 1.196
diff -u -d -r1.195 -r1.196
--- scumm.h	16 May 2003 02:16:59 -0000	1.195
+++ scumm.h	16 May 2003 16:09:16 -0000	1.196
@@ -556,6 +556,7 @@
 	byte _resourceMapper[128];
 	uint32 _allocatedSize;
 	byte _expire_counter;
+	byte *_HEV7RoomOffsets;
 
 	void allocateArrays();
 	void openRoom(int room);

Index: resource.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/resource.cpp,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -d -r1.77 -r1.78
--- resource.cpp	13 May 2003 23:42:39 -0000	1.77
+++ resource.cpp	16 May 2003 16:09:16 -0000	1.78
@@ -81,6 +81,8 @@
 					VAR(VAR_CURRENTDISK) = res.roomno[rtRoom][room];
 				sprintf(buf, "%s.la%d", _exe_name, room == 0 ? 0 : res.roomno[rtRoom][room]);
 				sprintf(buf2, "%s.%.3d", _exe_name, room == 0 ? 0 : res.roomno[rtRoom][room]);
+			} else if (_features & GF_AFTER_HEV7) {
+				sprintf(buf, "%s.he%.1d", _exe_name, room == 0 ? 0 : 1);
 			} else if (_features & GF_HUMONGOUS)
 				sprintf(buf, "%s.he%.1d", _exe_name, room == 0 ? 0 : res.roomno[rtRoom][room]);
 			else {
@@ -163,7 +165,8 @@
 
 /* Read room offsets */
 void Scumm::readRoomsOffsets() {
-	int num, room;
+	int num, room, i;
+	byte *ptr;
 
 	debug(9, "readRoomOffsets()");
 
@@ -171,6 +174,16 @@
 	if (_features & GF_SMALL_NAMES)
 		return;
 
+	if (_features & GF_AFTER_HEV7) {
+		num = READ_LE_UINT16(_HEV7RoomOffsets);
+		ptr = _HEV7RoomOffsets + 2;
+		for (i = 0; i < num; i++) {
+			_roomFileOffsets[i] = READ_LE_UINT32(ptr);	
+			ptr += 4;
+		}
+		return;
+	}
+	
 	if (!(_features & GF_SMALL_HEADER)) {
 		if (!_dynamicRoomOffsets)
 			return;
@@ -289,11 +302,8 @@
 
 		switch (blocktype) {
 		case MKID('DCHR'):
-			readResTypeList(rtCharset, MKID('CHAR'), "charset");
-			break;
-		
 		case MKID('DIRF'):
-			readResTypeList(rtCharset, MKID('DIRF'), "charset");
+			readResTypeList(rtCharset, MKID('CHAR'), "charset");
 			break;
 		
 		case MKID('DOBJ'):
@@ -302,6 +312,7 @@
 			else
 				num = _fileHandle.readUint16LE();
 			assert(num == _numGlobalObjects);
+			
 
 			if (_features & GF_AFTER_V8) {	/* FIXME: Not sure.. */
 				char buffer[40];
@@ -326,6 +337,10 @@
 					_objectStateTable[i] = _objectOwnerTable[i] >> OF_STATE_SHL;
 					_objectOwnerTable[i] &= OF_OWNER_MASK;
 				}
+				if (_features & GF_AFTER_HEV7) {
+					// FIXME nasty nasty hack handle properly...
+					_fileHandle.seek(num * 6000, SEEK_CUR);
+				}
 			}
 			
 			if (!(_features & GF_AFTER_V8)) {
@@ -340,13 +355,17 @@
 			break;
 
 		case MKID('RNAM'):
-		case MKID('DIRI'):
-		case MKID('DLFL'):
 			_fileHandle.seek(itemsize - 8, SEEK_CUR);
 			break;
+		
+		case MKID('DLFL'):
+			_HEV7RoomOffsets = (byte *)calloc(itemsize - 8, 1);
+			_fileHandle.read(_HEV7RoomOffsets, itemsize - 8);
+			break;
 
-		case 0xFFFFFFFF:
-			stop = true;
+		case MKID('DIRI'):
+			num = _fileHandle.readUint16LE();
+			_fileHandle.seek(num + (8 * num), SEEK_CUR);
 			break;
 
 		case MKID('ANAM'):
@@ -360,7 +379,7 @@
 			break;
 
 		case MKID('DIRR'):
-			readResTypeList(rtRoom, MKID('DIRR'), "room");
+			readResTypeList(rtRoom, MKID('RMDA'), "room");
 			break;
 
 		case MKID('DRSC'):					// FIXME: Verify
@@ -368,19 +387,13 @@
 			break;
 
 		case MKID('DSCR'):
-			readResTypeList(rtScript, MKID('SCRP'), "script");
-			break;
-
 		case MKID('DIRS'):
-			readResTypeList(rtScript, MKID('DIRS'), "script");
+			readResTypeList(rtScript, MKID('SCRP'), "script");
 			break;
 
 		case MKID('DCOS'):
-			readResTypeList(rtCostume, MKID('COST'), "costume");
-			break;
-
 		case MKID('DIRC'):
-			readResTypeList(rtCostume, MKID('DIRC'), "costume");
+			readResTypeList(rtCostume, MKID('COST'), "costume");
 			break;
 
 		case MKID('MAXS'):
@@ -500,6 +513,9 @@
 		}
 		for (i = 0; i < num; i++) {
 			res.roomoffs[id][i] = _fileHandle.readUint32LE();
+		}
+		if (_features & GF_AFTER_HEV7) {
+			_fileHandle.seek(4 * num, SEEK_CUR); // FIXME what are these additional offsets
 		}
 	}
 }





More information about the Scummvm-git-logs mailing list