[Scummvm-git-logs] scummvm master -> a1236d57820e53b07180adcf78ba7af844ca51b1

waltervn walter at vanniftrik-it.nl
Thu Dec 22 16:53:20 CET 2016


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
d658f0c0b6 ADL: Add region support to script dumper
a1236d5782 ADL: Add 'region' debug command


Commit: d658f0c0b636e1253ee6d66661c332b43a020cbf
    https://github.com/scummvm/scummvm/commit/d658f0c0b636e1253ee6d66661c332b43a020cbf
Author: Walter van Niftrik (walter at scummvm.org)
Date: 2016-12-22T16:42:04+01:00

Commit Message:
ADL: Add region support to script dumper

Changed paths:
    engines/adl/adl.h
    engines/adl/adl_v4.h
    engines/adl/console.cpp
    engines/adl/console.h


diff --git a/engines/adl/adl.h b/engines/adl/adl.h
index 87e99a5..67d9a73 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 1bc7664..0ddd1b9 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 &sector, 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 c35e8b0..0ac3cb8 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 a8c6adc..8b3ab6b 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;
 };


Commit: a1236d57820e53b07180adcf78ba7af844ca51b1
    https://github.com/scummvm/scummvm/commit/a1236d57820e53b07180adcf78ba7af844ca51b1
Author: Walter van Niftrik (walter at scummvm.org)
Date: 2016-12-22T16:42:04+01:00

Commit Message:
ADL: Add 'region' debug command

Changed paths:
    engines/adl/console.cpp
    engines/adl/console.h


diff --git a/engines/adl/console.cpp b/engines/adl/console.cpp
index 0ac3cb8..e761141 100644
--- a/engines/adl/console.cpp
+++ b/engines/adl/console.cpp
@@ -35,6 +35,7 @@ Console::Console(AdlEngine *engine) : GUI::Debugger() {
 	registerCmd("verbs", WRAP_METHOD(Console, Cmd_Verbs));
 	registerCmd("dump_scripts", WRAP_METHOD(Console, Cmd_DumpScripts));
 	registerCmd("valid_cmds", WRAP_METHOD(Console, Cmd_ValidCommands));
+	registerCmd("region", WRAP_METHOD(Console, Cmd_Region));
 	registerCmd("room", WRAP_METHOD(Console, Cmd_Room));
 	registerCmd("items", WRAP_METHOD(Console, Cmd_Items));
 	registerCmd("give_item", WRAP_METHOD(Console, Cmd_GiveItem));
@@ -171,6 +172,42 @@ bool Console::Cmd_DumpScripts(int argc, const char **argv) {
 	return true;
 }
 
+void Console::prepareGame() {
+	_engine->clearScreen();
+	_engine->loadRoom(_engine->_state.room);
+	_engine->showRoom();
+	_engine->_display->updateTextScreen();
+	_engine->_display->updateHiResScreen();
+}
+
+bool Console::Cmd_Region(int argc, const char **argv) {
+	if (argc > 2) {
+		debugPrintf("Usage: %s [<new_region>]\n", argv[0]);
+		return true;
+	}
+
+	if (argc == 2) {
+		if (!_engine->_canRestoreNow) {
+			debugPrintf("Cannot change regions right now\n");
+			return true;
+		}
+
+		uint regionCount = _engine->_state.regions.size();
+		uint region = strtoul(argv[1], NULL, 0);
+		if (region < 1 || region > regionCount) {
+			debugPrintf("Region %u out of valid range [1, %u]\n", region, regionCount);
+			return true;
+		}
+
+		_engine->switchRegion(region);
+		prepareGame();
+	}
+
+	debugPrintf("Current region: %u\n", _engine->_state.region);
+
+	return true;
+}
+
 bool Console::Cmd_Room(int argc, const char **argv) {
 	if (argc > 2) {
 		debugPrintf("Usage: %s [<new_room>]\n", argv[0]);
@@ -191,11 +228,7 @@ bool Console::Cmd_Room(int argc, const char **argv) {
 		}
 
 		_engine->_state.room = room;
-		_engine->clearScreen();
-		_engine->loadRoom(_engine->_state.room);
-		_engine->showRoom();
-		_engine->_display->updateTextScreen();
-		_engine->_display->updateHiResScreen();
+		prepareGame();
 	}
 
 	debugPrintf("Current room: %u\n", _engine->_state.room);
diff --git a/engines/adl/console.h b/engines/adl/console.h
index 8b3ab6b..68787e1 100644
--- a/engines/adl/console.h
+++ b/engines/adl/console.h
@@ -48,6 +48,7 @@ private:
 	bool Cmd_Verbs(int argc, const char **argv);
 	bool Cmd_DumpScripts(int argc, const char **argv);
 	bool Cmd_ValidCommands(int argc, const char **argv);
+	bool Cmd_Region(int argc, const char **argv);
 	bool Cmd_Room(int argc, const char **argv);
 	bool Cmd_Items(int argc, const char **argv);
 	bool Cmd_GiveItem(int argc, const char **argv);
@@ -57,6 +58,7 @@ private:
 	void printItem(const Item &item);
 	void printWordMap(const Common::HashMap<Common::String, uint> &wordMap);
 	void dumpScripts(const Common::String &prefix = Common::String());
+	void prepareGame();
 
 	AdlEngine *_engine;
 };





More information about the Scummvm-git-logs mailing list