some updates that get us up to the bootscripts of he v7 games before erroring out on unimplemented opcodes
svn-id: r7576
This commit is contained in:
parent
e503df12a6
commit
52832cc954
2 changed files with 35 additions and 18 deletions
|
@ -81,6 +81,8 @@ void Scumm::openRoom(int room) {
|
||||||
VAR(VAR_CURRENTDISK) = res.roomno[rtRoom][room];
|
VAR(VAR_CURRENTDISK) = res.roomno[rtRoom][room];
|
||||||
sprintf(buf, "%s.la%d", _exe_name, room == 0 ? 0 : 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]);
|
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)
|
} else if (_features & GF_HUMONGOUS)
|
||||||
sprintf(buf, "%s.he%.1d", _exe_name, room == 0 ? 0 : res.roomno[rtRoom][room]);
|
sprintf(buf, "%s.he%.1d", _exe_name, room == 0 ? 0 : res.roomno[rtRoom][room]);
|
||||||
else {
|
else {
|
||||||
|
@ -163,7 +165,8 @@ void Scumm::deleteRoomOffsets() {
|
||||||
|
|
||||||
/* Read room offsets */
|
/* Read room offsets */
|
||||||
void Scumm::readRoomsOffsets() {
|
void Scumm::readRoomsOffsets() {
|
||||||
int num, room;
|
int num, room, i;
|
||||||
|
byte *ptr;
|
||||||
|
|
||||||
debug(9, "readRoomOffsets()");
|
debug(9, "readRoomOffsets()");
|
||||||
|
|
||||||
|
@ -171,6 +174,16 @@ void Scumm::readRoomsOffsets() {
|
||||||
if (_features & GF_SMALL_NAMES)
|
if (_features & GF_SMALL_NAMES)
|
||||||
return;
|
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 (!(_features & GF_SMALL_HEADER)) {
|
||||||
if (!_dynamicRoomOffsets)
|
if (!_dynamicRoomOffsets)
|
||||||
return;
|
return;
|
||||||
|
@ -289,11 +302,8 @@ void Scumm::readIndexFile() {
|
||||||
|
|
||||||
switch (blocktype) {
|
switch (blocktype) {
|
||||||
case MKID('DCHR'):
|
case MKID('DCHR'):
|
||||||
readResTypeList(rtCharset, MKID('CHAR'), "charset");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MKID('DIRF'):
|
case MKID('DIRF'):
|
||||||
readResTypeList(rtCharset, MKID('DIRF'), "charset");
|
readResTypeList(rtCharset, MKID('CHAR'), "charset");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MKID('DOBJ'):
|
case MKID('DOBJ'):
|
||||||
|
@ -302,6 +312,7 @@ void Scumm::readIndexFile() {
|
||||||
else
|
else
|
||||||
num = _fileHandle.readUint16LE();
|
num = _fileHandle.readUint16LE();
|
||||||
assert(num == _numGlobalObjects);
|
assert(num == _numGlobalObjects);
|
||||||
|
|
||||||
|
|
||||||
if (_features & GF_AFTER_V8) { /* FIXME: Not sure.. */
|
if (_features & GF_AFTER_V8) { /* FIXME: Not sure.. */
|
||||||
char buffer[40];
|
char buffer[40];
|
||||||
|
@ -326,6 +337,10 @@ void Scumm::readIndexFile() {
|
||||||
_objectStateTable[i] = _objectOwnerTable[i] >> OF_STATE_SHL;
|
_objectStateTable[i] = _objectOwnerTable[i] >> OF_STATE_SHL;
|
||||||
_objectOwnerTable[i] &= OF_OWNER_MASK;
|
_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)) {
|
if (!(_features & GF_AFTER_V8)) {
|
||||||
|
@ -340,13 +355,17 @@ void Scumm::readIndexFile() {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MKID('RNAM'):
|
case MKID('RNAM'):
|
||||||
case MKID('DIRI'):
|
|
||||||
case MKID('DLFL'):
|
|
||||||
_fileHandle.seek(itemsize - 8, SEEK_CUR);
|
_fileHandle.seek(itemsize - 8, SEEK_CUR);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MKID('DLFL'):
|
||||||
|
_HEV7RoomOffsets = (byte *)calloc(itemsize - 8, 1);
|
||||||
|
_fileHandle.read(_HEV7RoomOffsets, itemsize - 8);
|
||||||
|
break;
|
||||||
|
|
||||||
case 0xFFFFFFFF:
|
case MKID('DIRI'):
|
||||||
stop = true;
|
num = _fileHandle.readUint16LE();
|
||||||
|
_fileHandle.seek(num + (8 * num), SEEK_CUR);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MKID('ANAM'):
|
case MKID('ANAM'):
|
||||||
|
@ -360,7 +379,7 @@ void Scumm::readIndexFile() {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MKID('DIRR'):
|
case MKID('DIRR'):
|
||||||
readResTypeList(rtRoom, MKID('DIRR'), "room");
|
readResTypeList(rtRoom, MKID('RMDA'), "room");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MKID('DRSC'): // FIXME: Verify
|
case MKID('DRSC'): // FIXME: Verify
|
||||||
|
@ -368,19 +387,13 @@ void Scumm::readIndexFile() {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MKID('DSCR'):
|
case MKID('DSCR'):
|
||||||
|
case MKID('DIRS'):
|
||||||
readResTypeList(rtScript, MKID('SCRP'), "script");
|
readResTypeList(rtScript, MKID('SCRP'), "script");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MKID('DIRS'):
|
|
||||||
readResTypeList(rtScript, MKID('DIRS'), "script");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MKID('DCOS'):
|
case MKID('DCOS'):
|
||||||
readResTypeList(rtCostume, MKID('COST'), "costume");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MKID('DIRC'):
|
case MKID('DIRC'):
|
||||||
readResTypeList(rtCostume, MKID('DIRC'), "costume");
|
readResTypeList(rtCostume, MKID('COST'), "costume");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MKID('MAXS'):
|
case MKID('MAXS'):
|
||||||
|
@ -501,6 +514,9 @@ void Scumm::readResTypeList(int id, uint32 tag, const char *name) {
|
||||||
for (i = 0; i < num; i++) {
|
for (i = 0; i < num; i++) {
|
||||||
res.roomoffs[id][i] = _fileHandle.readUint32LE();
|
res.roomoffs[id][i] = _fileHandle.readUint32LE();
|
||||||
}
|
}
|
||||||
|
if (_features & GF_AFTER_HEV7) {
|
||||||
|
_fileHandle.seek(4 * num, SEEK_CUR); // FIXME what are these additional offsets
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -556,6 +556,7 @@ protected:
|
||||||
byte _resourceMapper[128];
|
byte _resourceMapper[128];
|
||||||
uint32 _allocatedSize;
|
uint32 _allocatedSize;
|
||||||
byte _expire_counter;
|
byte _expire_counter;
|
||||||
|
byte *_HEV7RoomOffsets;
|
||||||
|
|
||||||
void allocateArrays();
|
void allocateArrays();
|
||||||
void openRoom(int room);
|
void openRoom(int room);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue