[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