diff options
| author | Willem Jan Palenstijn | 2015-07-22 22:37:40 +0200 | 
|---|---|---|
| committer | Willem Jan Palenstijn | 2015-07-22 22:43:42 +0200 | 
| commit | 6ec9c81b575f13b2c4b30aeac592ebf2557b5890 (patch) | |
| tree | 503d50902bad2d800165593039d08d5ccf0c98ab /engines/zvision/core/console.cpp | |
| parent | 5ec05f6b647c5ea41418be7ed19ad381f97cabd8 (diff) | |
| parent | 4e5c8d35f7e133e2e72a846fdbd54900c91eeb73 (diff) | |
| download | scummvm-rg350-6ec9c81b575f13b2c4b30aeac592ebf2557b5890.tar.gz scummvm-rg350-6ec9c81b575f13b2c4b30aeac592ebf2557b5890.tar.bz2 scummvm-rg350-6ec9c81b575f13b2c4b30aeac592ebf2557b5890.zip  | |
Merge branch 'master' into mm
Conflicts:
	engines/access/access.cpp
	engines/access/asurface.h
	engines/access/bubble_box.cpp
	engines/access/bubble_box.h
	engines/access/martian/martian_game.cpp
	engines/access/player.cpp
	engines/access/player.h
	engines/access/resources.cpp
	engines/access/screen.cpp
	engines/access/screen.h
	engines/access/sound.cpp
	engines/access/sound.h
Diffstat (limited to 'engines/zvision/core/console.cpp')
| -rw-r--r-- | engines/zvision/core/console.cpp | 159 | 
1 files changed, 147 insertions, 12 deletions
diff --git a/engines/zvision/core/console.cpp b/engines/zvision/core/console.cpp index 4dd10d6f40..336541d82a 100644 --- a/engines/zvision/core/console.cpp +++ b/engines/zvision/core/console.cpp @@ -52,6 +52,10 @@ Console::Console(ZVision *engine) : GUI::Debugger(), _engine(engine) {  	registerCmd("setpanoramascale", WRAP_METHOD(Console, cmdSetPanoramaScale));  	registerCmd("location", WRAP_METHOD(Console, cmdLocation));  	registerCmd("dumpfile", WRAP_METHOD(Console, cmdDumpFile)); +	registerCmd("dumpfiles", WRAP_METHOD(Console, cmdDumpFiles)); +	registerCmd("dumpimage", WRAP_METHOD(Console, cmdDumpImage)); +	registerCmd("statevalue", WRAP_METHOD(Console, cmdStateValue)); +	registerCmd("stateflag", WRAP_METHOD(Console, cmdStateFlag));  }  bool Console::cmdLoadVideo(int argc, const char **argv) { @@ -78,12 +82,14 @@ bool Console::cmdLoadSound(int argc, const char **argv) {  		Audio::AudioStream *soundStream = makeRawZorkStream(argv[1], _engine);  		Audio::SoundHandle handle;  		_engine->_mixer->playStream(Audio::Mixer::kPlainSoundType, &handle, soundStream, -1, 100, 0, DisposeAfterUse::YES, false, false); -  	} else if (argc == 4) {  		int isStereo = atoi(argv[3]);  		Common::File *file = new Common::File(); -		file->open(argv[1]); +		if (!_engine->getSearchManager()->openFile(*file, argv[1])) { +			warning("File not found: %s", argv[1]); +			return true; +		}  		Audio::AudioStream *soundStream = makeRawZorkStream(file, atoi(argv[2]), isStereo == 0 ? false : true);  		Audio::SoundHandle handle; @@ -103,8 +109,10 @@ bool Console::cmdRawToWav(int argc, const char **argv) {  	}  	Common::File file; -	if (!file.open(argv[1])) +	if (!_engine->getSearchManager()->openFile(file, argv[1])) { +		warning("File not found: %s", argv[1]);  		return true; +	}  	Audio::AudioStream *audioStream = makeRawZorkStream(argv[1], _engine); @@ -133,6 +141,10 @@ bool Console::cmdRawToWav(int argc, const char **argv) {  	output.writeUint32LE(file.size() * 2);  	int16 *buffer = new int16[file.size()];  	audioStream->readBuffer(buffer, file.size()); +#ifndef SCUMM_LITTLE_ENDIAN +	for (int i = 0; i < file.size(); ++i) +		buffer[i] = TO_LE_16(buffer[i]); +#endif  	output.write(buffer, file.size() * 2);  	delete[] buffer; @@ -194,7 +206,7 @@ bool Console::cmdLocation(int argc, const char **argv) {  	Common::String scrFile = Common::String::format("%c%c%c%c.scr", curLocation.world, curLocation.room, curLocation.node, curLocation.view);  	debugPrintf("Current location: world '%c', room '%c', node '%c', view '%c', offset %d, script %s\n",  				curLocation.world, curLocation.room, curLocation.node, curLocation.view, curLocation.offset, scrFile.c_str()); -	 +  	if (argc != 6) {  		debugPrintf("Use %s <char: world> <char: room> <char:node> <char:view> <int: x offset> to change your location\n", argv[0]);  		return true; @@ -205,6 +217,20 @@ bool Console::cmdLocation(int argc, const char **argv) {  	return true;  } +void dumpFile(Common::SeekableReadStream *s, const char *outName) { +	byte *buffer = new byte[s->size()]; +	s->read(buffer, s->size()); + +	Common::DumpFile dumpFile; +	dumpFile.open(outName); + +	dumpFile.write(buffer, s->size()); +	dumpFile.flush(); +	dumpFile.close(); + +	delete[] buffer; +} +  bool Console::cmdDumpFile(int argc, const char **argv) {  	if (argc != 2) {  		debugPrintf("Use %s <fileName> to dump a file\n", argv[0]); @@ -217,17 +243,126 @@ bool Console::cmdDumpFile(int argc, const char **argv) {  		return true;  	} -	byte *buffer = new byte[f.size()]; -	f.read(buffer, f.size()); +	dumpFile(&f, argv[1]); -	Common::DumpFile dumpFile; -	dumpFile.open(argv[1]); +	return true; +} -	dumpFile.write(buffer, f.size()); -	dumpFile.flush(); -	dumpFile.close(); +bool Console::cmdDumpFiles(int argc, const char **argv) { +	Common::String fileName; +	Common::SeekableReadStream *in; -	delete[] buffer; +	if (argc != 2) { +		debugPrintf("Use %s <file extension> to dump all files with a specific extension\n", argv[0]); +		return true; +	} + +	SearchManager::MatchList fileList; +	_engine->getSearchManager()->listMembersWithExtension(fileList, argv[1]); + +	for (SearchManager::MatchList::iterator iter = fileList.begin(); iter != fileList.end(); ++iter) { +		fileName = iter->_value.name; +		debugPrintf("Dumping %s\n", fileName.c_str()); + +		in = iter->_value.arch->createReadStreamForMember(iter->_value.name); +		if (in) +			dumpFile(in, fileName.c_str()); +		delete in; +	} + +	return true; +} + +bool Console::cmdDumpImage(int argc, const char **argv) { +	if (argc != 2) { +		debugPrintf("Use %s <TGA/TGZ name> to dump a Z-Vision TGA/TGZ image into a regular BMP image\n", argv[0]); +		return true; +	} + +	Common::String fileName = argv[1]; +	if (!fileName.hasSuffix(".tga")) { +		debugPrintf("%s is not an image file", argv[1]); +	} + +	Common::File f; +	if (!_engine->getSearchManager()->openFile(f, argv[1])) { +		warning("File not found: %s", argv[1]); +		return true; +	} + +	Graphics::Surface surface; +	_engine->getRenderManager()->readImageToSurface(argv[1], surface, false); + +	// Open file +	Common::DumpFile out; + +	fileName.setChar('b', fileName.size() - 3); +	fileName.setChar('m', fileName.size() - 2); +	fileName.setChar('p', fileName.size() - 1); + +	out.open(fileName); + +	// Write BMP header +	out.writeByte('B'); +	out.writeByte('M'); +	out.writeUint32LE(surface.h * surface.pitch + 54); +	out.writeUint32LE(0); +	out.writeUint32LE(54); +	out.writeUint32LE(40); +	out.writeUint32LE(surface.w); +	out.writeUint32LE(surface.h); +	out.writeUint16LE(1); +	out.writeUint16LE(16); +	out.writeUint32LE(0); +	out.writeUint32LE(0); +	out.writeUint32LE(0); +	out.writeUint32LE(0); +	out.writeUint32LE(0); +	out.writeUint32LE(0); + +	// Write pixel data to BMP +	out.write(surface.getPixels(), surface.pitch * surface.h); + +	out.flush(); +	out.close(); + +	surface.free(); + +	return true; +} + +bool Console::cmdStateValue(int argc, const char **argv) { +	if (argc < 2) { +		debugPrintf("Use %s <valuenum> to show the value of a state variable\n", argv[0]); +		debugPrintf("Use %s <valuenum> <newvalue> to set the value of a state variable\n", argv[0]); +		return true; +	} + +	int valueNum = atoi(argv[1]); +	int newValue = (argc > 2) ? atoi(argv[2]) : -1; + +	if (argc == 2) +		debugPrintf("[%d] = %d\n", valueNum, _engine->getScriptManager()->getStateValue(valueNum)); +	else if (argc == 3) +		_engine->getScriptManager()->setStateValue(valueNum, newValue); + +	return true; +} + +bool Console::cmdStateFlag(int argc, const char **argv) { +	if (argc < 2) { +		debugPrintf("Use %s <flagnum> to show the value of a state flag\n", argv[0]); +		debugPrintf("Use %s <flagnum> <newvalue> to set the value of a state flag\n", argv[0]); +		return true; +	} + +	int valueNum = atoi(argv[1]); +	int newValue = (argc > 2) ? atoi(argv[2]) : -1; + +	if (argc == 2) +		debugPrintf("[%d] = %d\n", valueNum, _engine->getScriptManager()->getStateFlag(valueNum)); +	else if (argc == 3) +		_engine->getScriptManager()->setStateFlag(valueNum, newValue);  	return true;  }  | 
