[Scummvm-git-logs] scummvm master -> 2622a4628fcab0727be8169a16d7233fb952cd1f

npjg nathanael.gentrydb8 at gmail.com
Mon Jul 20 18:18:49 UTC 2020


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

Summary:
0058822e6e DIRECTOR: Implement opening resource files
f903822f8d DIRECTOR: Read cursors from external resources
2622a4628f DIRECTOR: Reset cursors properly


Commit: 0058822e6ef557a9e155e9177d1b15ca050812fb
    https://github.com/scummvm/scummvm/commit/0058822e6ef557a9e155e9177d1b15ca050812fb
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-07-20T14:17:24-04:00

Commit Message:
DIRECTOR: Implement opening resource files

Changed paths:
    engines/director/director.cpp
    engines/director/director.h
    engines/director/lingo/lingo-builtins.cpp


diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index 10bf010a2e..5bd03eeb36 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -118,6 +118,10 @@ DirectorEngine::~DirectorEngine() {
 	delete _lingo;
 	delete _wm;
 	delete _surface;
+
+	for (Common::HashMap<Common::String, Archive *, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>::iterator it = _openResFiles.begin(); it != _openResFiles.end(); ++it) {
+		delete it->_value;
+	}
 }
 
 Archive *DirectorEngine::getMainArchive() const { return _currentStage->getMainArchive(); }
diff --git a/engines/director/director.h b/engines/director/director.h
index 768019ba94..1bfdc1d0a9 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -29,6 +29,9 @@
 #include "common/hashmap.h"
 #include "engines/engine.h"
 
+#include "common/hash-ptr.h"
+#include "common/hash-str.h"
+
 #include "director/types.h"
 #include "director/util.h"
 
@@ -208,6 +211,7 @@ public:
 	bool _playbackPaused;
 	bool _skipFrameAdvance;
 
+	Common::HashMap<Common::String, Archive *, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> _openResFiles;
 	Common::String _sharedCastFile;
 
 protected:
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 8ed8ff1715..8dd0093aac 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1037,8 +1037,9 @@ void LB::b_closeDA(int nargs) {
 
 void LB::b_closeResFile(int nargs) {
 	Datum d = g_lingo->pop();
+	Common::String resFileName = g_director->getCurrentStage()->getCurrentPath() + d.asString();
 
-	warning("STUB: b_closeResFile(%s)", d.asString().c_str());
+	g_director->_openResFiles.erase(resFileName);
 }
 
 void LB::b_closeXlib(int nargs) {
@@ -1069,8 +1070,15 @@ void LB::b_openDA(int nargs) {
 
 void LB::b_openResFile(int nargs) {
 	Datum d = g_lingo->pop();
+	Common::String resPath = g_director->getCurrentStage()->getCurrentPath() + d.asString();
 
-	warning("STUB: BUILDBOT: b_openResFile(%s)", d.asString().c_str());
+	if (!g_director->_openResFiles.contains(resPath)) {
+		MacArchive *resFile = new MacArchive();
+
+		if (resFile->openFile(resPath)) {
+			g_director->_openResFiles.setVal(resPath, resFile);
+		}
+	}
 }
 
 void LB::b_openXlib(int nargs) {


Commit: f903822f8d024c95ad61779bf665c574e058a45e
    https://github.com/scummvm/scummvm/commit/f903822f8d024c95ad61779bf665c574e058a45e
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-07-20T14:17:24-04:00

Commit Message:
DIRECTOR: Read cursors from external resources

Changed paths:
    engines/director/cursor.cpp


diff --git a/engines/director/cursor.cpp b/engines/director/cursor.cpp
index 9ae302bd90..6e3bb5318a 100644
--- a/engines/director/cursor.cpp
+++ b/engines/director/cursor.cpp
@@ -129,7 +129,18 @@ void Cursor::readFromResource(int resourceId) {
 	default:
 		_cursorType = Graphics::kMacCursorCustom;
 
-		// TODO: Load custom cursors from resource
+		for (Common::HashMap<Common::String, Archive *, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>::iterator it = g_director->_openResFiles.begin(); it != g_director->_openResFiles.end(); ++it) {
+			Common::SeekableSubReadStreamEndian *cursorStream;
+
+			cursorStream = ((MacArchive *)it->_value)->getResource(MKTAG('C', 'U', 'R', 'S'), resourceId);
+			if (!cursorStream)
+				cursorStream = ((MacArchive *)it->_value)->getResource(MKTAG('C', 'R', 'S', 'R'), resourceId);
+
+			if (cursorStream) {
+				readFromStream(*((Common::SeekableReadStream *)cursorStream), false, 0);
+				break;
+			}
+		}
 	}
 
 }


Commit: 2622a4628fcab0727be8169a16d7233fb952cd1f
    https://github.com/scummvm/scummvm/commit/2622a4628fcab0727be8169a16d7233fb952cd1f
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-07-20T14:18:15-04:00

Commit Message:
DIRECTOR: Reset cursors properly

This also handles cases when there is an error loading.

Changed paths:
    engines/director/cursor.cpp
    engines/director/cursor.h


diff --git a/engines/director/cursor.cpp b/engines/director/cursor.cpp
index 6e3bb5318a..16ba2a3bcf 100644
--- a/engines/director/cursor.cpp
+++ b/engines/director/cursor.cpp
@@ -56,12 +56,8 @@ void Cursor::readFromCast(uint cursorId, uint maskId) {
 		return;
 	}
 
-	_cursorType = Graphics::kMacCursorCustom;
-	_cursorResId = 0;
-	_cursorCastId = cursorId;
-	_cursorMaskId = maskId;
+	resetCursor(Graphics::kMacCursorCustom, 0, cursorId, maskId);
 
-	clear();
 	_surface = new byte[getWidth() * getHeight()];
 	byte *dst = _surface;
 
@@ -100,35 +96,26 @@ void Cursor::readFromResource(int resourceId) {
 	if (resourceId == _cursorResId)
 		return;
 
-	clear();
-
-	_cursorCastId = 0;
-	_cursorMaskId = 0;
-
-	_cursorResId = resourceId;
-
 	switch(resourceId) {
 	case -1:
-		_cursorType = Graphics::kMacCursorArrow;
+		resetCursor(Graphics::kMacCursorArrow, true, resourceId);
 		break;
 	case 1:
-		_cursorType = Graphics::kMacCursorBeam;
+		resetCursor(Graphics::kMacCursorBeam, true, resourceId);
 		break;
 	case 2:
-		_cursorType = Graphics::kMacCursorCrossHair;
+		resetCursor(Graphics::kMacCursorCrossHair, true, resourceId);
 		break;
 	case 3:
-		_cursorType = Graphics::kMacCursorCrossBar;
+		resetCursor(Graphics::kMacCursorCrossBar, true, resourceId);
 		break;
 	case 4:
-		_cursorType = Graphics::kMacCursorWatch;
+		resetCursor(Graphics::kMacCursorWatch, true, resourceId);
 		break;
 	case 200:
-		_cursorType = Graphics::kMacCursorOff;
+		resetCursor(Graphics::kMacCursorOff, true, resourceId);
 		break;
 	default:
-		_cursorType = Graphics::kMacCursorCustom;
-
 		for (Common::HashMap<Common::String, Archive *, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>::iterator it = g_director->_openResFiles.begin(); it != g_director->_openResFiles.end(); ++it) {
 			Common::SeekableSubReadStreamEndian *cursorStream;
 
@@ -136,13 +123,23 @@ void Cursor::readFromResource(int resourceId) {
 			if (!cursorStream)
 				cursorStream = ((MacArchive *)it->_value)->getResource(MKTAG('C', 'R', 'S', 'R'), resourceId);
 
-			if (cursorStream) {
-				readFromStream(*((Common::SeekableReadStream *)cursorStream), false, 0);
+			if (cursorStream && readFromStream(*((Common::SeekableReadStream *)cursorStream), false, 0)) {
+				resetCursor(Graphics::kMacCursorCustom, false, resourceId);
 				break;
 			}
 		}
 	}
+}
 
+void Cursor::resetCursor(Graphics::MacCursorType type, bool shouldClear, int resId, uint castId, uint maskId) {
+	if (shouldClear)
+		clear();
+
+	_cursorType = type;
+	_cursorResId = resId;
+
+	_cursorCastId = castId;
+	_cursorMaskId = maskId;
 }
 
 } // end of namespace Director
diff --git a/engines/director/cursor.h b/engines/director/cursor.h
index 259413c4d7..cf1c13f44b 100644
--- a/engines/director/cursor.h
+++ b/engines/director/cursor.h
@@ -49,6 +49,9 @@ class Cursor : public Graphics::MacCursor {
 
 	uint _cursorCastId;
 	uint _cursorMaskId;
+
+private:
+	void resetCursor(Graphics::MacCursorType type, bool shouldClear = false, int resId = 0, uint castId = 0, uint maskId = 0);
 };
 
 } // end of namespace Director




More information about the Scummvm-git-logs mailing list