Skip to content

Commit

Permalink
DIRECTOR: Add parsing support for v7
Browse files Browse the repository at this point in the history
  • Loading branch information
Matthew Hoops authored and sev- committed Aug 3, 2016
1 parent b4cf464 commit c607b85
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
21 changes: 20 additions & 1 deletion engines/director/director.cpp
Expand Up @@ -80,6 +80,11 @@ void DirectorEngine::loadEXE() {
case 5:
loadEXEv5(exeStream);
break;
case 7:
loadEXEv7(exeStream);
break;
default:
error("Unhandled Windows EXE version %d", getVersion());
}
}

Expand Down Expand Up @@ -138,6 +143,20 @@ void DirectorEngine::loadEXEv5(Common::SeekableReadStream *stream) {
loadEXERIFX(stream, rifxOffset);
}

void DirectorEngine::loadEXEv7(Common::SeekableReadStream *stream) {
if (stream->readUint32LE() != MKTAG('P', 'J', '0', '0'))
error("Invalid projector tag found in v5 EXE");

uint32 rifxOffset = stream->readUint32LE();
stream->readUint32LE(); // unknown
stream->readUint32LE(); // unknown
stream->readUint32LE(); // unknown
stream->readUint32LE(); // unknown
stream->readUint32LE(); // some DLL offset

loadEXERIFX(stream, rifxOffset);
}

void DirectorEngine::loadEXERIFX(Common::SeekableReadStream *stream, uint32 offset) {
stream->seek(offset);

Expand Down Expand Up @@ -168,7 +187,7 @@ void DirectorEngine::loadMac() {

uint32 tag = dataFork->readUint32BE();

if (SWAP_BYTES_32(tag) == MKTAG('P', 'J', '9', '3') || tag == MKTAG('P', 'J', '9', '5')) {
if (SWAP_BYTES_32(tag) == MKTAG('P', 'J', '9', '3') || tag == MKTAG('P', 'J', '9', '5') || tag == MKTAG('P', 'J', '0', '0')) {
// PPC: The RIFX shares the data fork with the binary
dataFork->seek(dataFork->readUint32BE());
} else {
Expand Down
1 change: 1 addition & 0 deletions engines/director/director.h
Expand Up @@ -67,6 +67,7 @@ class DirectorEngine : public ::Engine {
void loadEXEv3(Common::SeekableReadStream *stream);
void loadEXEv4(Common::SeekableReadStream *stream);
void loadEXEv5(Common::SeekableReadStream *stream);
void loadEXEv7(Common::SeekableReadStream *stream);
void loadEXERIFX(Common::SeekableReadStream *stream, uint32 offset);

void loadMac();
Expand Down

0 comments on commit c607b85

Please sign in to comment.