diff options
| author | Walter van Niftrik | 2016-12-22 15:36:59 +0100 | 
|---|---|---|
| committer | Walter van Niftrik | 2016-12-22 16:42:04 +0100 | 
| commit | d658f0c0b636e1253ee6d66661c332b43a020cbf (patch) | |
| tree | c43453422b2936d11905f490efe259f3d9cd9c18 | |
| parent | 2d7e9f4eac286aabe2e5be86a9cd1aeb14ffcf37 (diff) | |
| download | scummvm-rg350-d658f0c0b636e1253ee6d66661c332b43a020cbf.tar.gz scummvm-rg350-d658f0c0b636e1253ee6d66661c332b43a020cbf.tar.bz2 scummvm-rg350-d658f0c0b636e1253ee6d66661c332b43a020cbf.zip | |
ADL: Add region support to script dumper
| -rw-r--r-- | engines/adl/adl.h | 1 | ||||
| -rw-r--r-- | engines/adl/adl_v4.h | 2 | ||||
| -rw-r--r-- | engines/adl/console.cpp | 50 | ||||
| -rw-r--r-- | engines/adl/console.h | 1 | 
4 files changed, 38 insertions, 16 deletions
| diff --git a/engines/adl/adl.h b/engines/adl/adl.h index 87e99a5537..67d9a73cdf 100644 --- a/engines/adl/adl.h +++ b/engines/adl/adl.h @@ -393,6 +393,7 @@ private:  	virtual void drawItem(Item &item, const Common::Point &pos) = 0;  	virtual void loadRoom(byte roomNr) = 0;  	virtual void showRoom() = 0; +	virtual void switchRegion(byte region) { }  	// Engine  	Common::Error run(); diff --git a/engines/adl/adl_v4.h b/engines/adl/adl_v4.h index 1bc7664d58..0ddd1b9b7e 100644 --- a/engines/adl/adl_v4.h +++ b/engines/adl/adl_v4.h @@ -51,6 +51,7 @@ protected:  	// AdlEngine  	virtual Common::String loadMessage(uint idx) const;  	virtual Common::String getItemDescription(const Item &item) const; +	virtual void switchRegion(byte region);  	// AdlEngine_v2  	virtual void adjustDataBlockPtr(byte &track, byte §or, byte &offset, byte &size) const; @@ -67,7 +68,6 @@ protected:  	void restoreRoomState(byte room);  	void backupVars();  	void restoreVars(); -	void switchRegion(byte region);  	int o4_isItemInRoom(ScriptEnv &e);  	int o4_isVarGT(ScriptEnv &e); diff --git a/engines/adl/console.cpp b/engines/adl/console.cpp index c35e8b02aa..0ac3cb8df4 100644 --- a/engines/adl/console.cpp +++ b/engines/adl/console.cpp @@ -112,35 +112,55 @@ bool Console::Cmd_ValidCommands(int argc, const char **argv) {  	return true;  } -bool Console::Cmd_DumpScripts(int argc, const char **argv) { -	if (argc != 1) { -		debugPrintf("Usage: %s\n", argv[0]); -		return true; -	} - -	bool oldFlag = DebugMan.isDebugChannelEnabled(kDebugChannelScript); - -	DebugMan.enableDebugChannel("Script"); - -	_engine->_dumpFile = new Common::DumpFile(); - +void Console::dumpScripts(const Common::String &prefix) {  	for (byte roomNr = 1; roomNr <= _engine->_state.rooms.size(); ++roomNr) {  		_engine->loadRoom(roomNr);  		if (_engine->_roomData.commands.size() != 0) { -			_engine->_dumpFile->open(Common::String::format("%03d.ADL", roomNr).c_str()); +			_engine->_dumpFile->open(prefix + Common::String::format("%03d.ADL", roomNr).c_str());  			_engine->doAllCommands(_engine->_roomData.commands, IDI_ANY, IDI_ANY);  			_engine->_dumpFile->close();  		}  	}  	_engine->loadRoom(_engine->_state.room); -	_engine->_dumpFile->open("GLOBAL.ADL"); +	_engine->_dumpFile->open(prefix + "GLOBAL.ADL");  	_engine->doAllCommands(_engine->_globalCommands, IDI_ANY, IDI_ANY);  	_engine->_dumpFile->close(); -	_engine->_dumpFile->open("RESPONSE.ADL"); +	_engine->_dumpFile->open(prefix + "RESPONSE.ADL");  	_engine->doAllCommands(_engine->_roomCommands, IDI_ANY, IDI_ANY);  	_engine->_dumpFile->close(); +} + +bool Console::Cmd_DumpScripts(int argc, const char **argv) { +	if (argc != 1) { +		debugPrintf("Usage: %s\n", argv[0]); +		return true; +	} + +	bool oldFlag = DebugMan.isDebugChannelEnabled(kDebugChannelScript); + +	DebugMan.enableDebugChannel("Script"); + +	_engine->_dumpFile = new Common::DumpFile(); + +	if (_engine->_state.regions.empty()) { +		dumpScripts(); +	} else { +		const byte oldRegion = _engine->_state.region; +		const byte oldPrevRegion = _engine->_state.prevRegion; +		const byte oldRoom = _engine->_state.room; + +		for (byte regionNr = 1; regionNr <= _engine->_state.regions.size(); ++regionNr) { +			_engine->switchRegion(regionNr); +			dumpScripts(Common::String::format("%03d-", regionNr)); +		} + +		_engine->switchRegion(oldRegion); +		_engine->_state.prevRegion = oldPrevRegion; +		_engine->_state.room = oldRoom; +		_engine->loadRoom(oldRoom); +	}  	delete _engine->_dumpFile;  	_engine->_dumpFile = nullptr; diff --git a/engines/adl/console.h b/engines/adl/console.h index a8c6adc1cc..8b3ab6b3cf 100644 --- a/engines/adl/console.h +++ b/engines/adl/console.h @@ -56,6 +56,7 @@ private:  	void printItem(const Item &item);  	void printWordMap(const Common::HashMap<Common::String, uint> &wordMap); +	void dumpScripts(const Common::String &prefix = Common::String());  	AdlEngine *_engine;  }; | 
