[Scummvm-git-logs] scummvm master -> 6ce4f58f891b25f266143176ab4d252bb2e650f8

sev- sev at scummvm.org
Tue Mar 14 09:26:40 CET 2017


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:
f981e228c1 DIRECTOR: Detect immediate Lingo actions
6ce4f58f89 DIRECTOR: Execute immediate scripts on frame load


Commit: f981e228c15e88a0be1d9f4df068be6de5fde43c
    https://github.com/scummvm/scummvm/commit/f981e228c15e88a0be1d9f4df068be6de5fde43c
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-03-14T09:26:20+01:00

Commit Message:
DIRECTOR: Detect immediate Lingo actions

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


diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index c92c0d0..4fc946d 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -693,8 +693,22 @@ void Score::loadActions(Common::SeekableSubReadStreamEndian &stream) {
 		}
 
 	for (j = _actions.begin(); j != _actions.end(); ++j)
-		if (!j->_value.empty())
+		if (!j->_value.empty()) {
 			_lingo->addCode(j->_value.c_str(), kFrameScript, j->_key);
+
+			processImmediateFrameScript(j->_value, j->_key);
+		}
+}
+
+bool Score::processImmediateFrameScript(Common::String s, int id) {
+	s.trim();
+
+	// In D2/D3 this specifies immediately the sprite/field properties
+	if (!s.compareToIgnoreCase("moveableSprite") || !s.compareToIgnoreCase("editableText")) {
+		_immediateActions[id] = true;
+	}
+
+	return false;
 }
 
 void Score::loadScriptText(Common::SeekableSubReadStreamEndian &stream) {
diff --git a/engines/director/score.h b/engines/director/score.h
index 83ffecd..021dcb5 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -106,6 +106,8 @@ private:
 	Common::String getString(Common::String str);
 	Common::Array<Common::String> loadStrings(Common::SeekableSubReadStreamEndian &stream, uint32 &entryType, bool hasHeader = true);
 
+	bool processImmediateFrameScript(Common::String s, int id);
+
 public:
 	Common::Array<Frame *> _frames;
 	Common::HashMap<int, CastType> _castTypes;
@@ -113,6 +115,7 @@ public:
 	Common::HashMap<Common::String, int> _castsNames;
 	Common::SortedArray<Label *> *_labels;
 	Common::HashMap<uint16, Common::String> _actions;
+	Common::HashMap<uint16, bool> _immediateActions;
 	Common::HashMap<uint16, Common::String> _fontMap;
 	Graphics::ManagedSurface *_surface;
 	Graphics::ManagedSurface *_trailSurface;


Commit: 6ce4f58f891b25f266143176ab4d252bb2e650f8
    https://github.com/scummvm/scummvm/commit/6ce4f58f891b25f266143176ab4d252bb2e650f8
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-03-14T09:26:20+01:00

Commit Message:
DIRECTOR: Execute immediate scripts on frame load

Changed paths:
    engines/director/events.cpp
    engines/director/frame.cpp
    engines/director/frame.h
    engines/director/score.cpp


diff --git a/engines/director/events.cpp b/engines/director/events.cpp
index 9030fee..32fe588 100644
--- a/engines/director/events.cpp
+++ b/engines/director/events.cpp
@@ -75,6 +75,10 @@ void DirectorEngine::processEvents() {
 					_lingo->processEvent(kEventMouseDown, kCastScript, currentFrame->_sprites[spriteId]->_castId);
 					_lingo->processEvent(kEventMouseDown, kSpriteScript, currentFrame->_sprites[spriteId]->_scriptId);
 				}
+
+				if (currentFrame->_sprites[spriteId]->_moveable) {
+					warning("Moveable");
+				}
 				break;
 
 			case Common::EVENT_LBUTTONUP:
diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp
index f19c322..cceecdd 100644
--- a/engines/director/frame.cpp
+++ b/engines/director/frame.cpp
@@ -36,6 +36,7 @@
 #include "director/score.h"
 #include "director/sprite.h"
 #include "director/util.h"
+#include "director/lingo/lingo.h"
 
 namespace Director {
 
@@ -539,6 +540,14 @@ void Frame::playTransition(Score *score) {
 	}
 }
 
+void Frame::executeImmediateScripts() {
+	for (uint16 i = 0; i < CHANNEL_COUNT; i++) {
+		if (_vm->getCurrentScore()->_immediateActions.contains(_sprites[i]->_scriptId)) {
+			g_lingo->processEvent(kEventMouseUp, kFrameScript, _sprites[i]->_scriptId);
+		}
+	}
+}
+
 void Frame::renderSprites(Graphics::ManagedSurface &surface, bool renderTrail) {
 	for (uint16 i = 0; i < CHANNEL_COUNT; i++) {
 		if (_sprites[i]->_enabled) {
diff --git a/engines/director/frame.h b/engines/director/frame.h
index 575d6fd..e2a4a1f 100644
--- a/engines/director/frame.h
+++ b/engines/director/frame.h
@@ -121,6 +121,7 @@ public:
 	uint16 getSpriteIDFromPos(Common::Point pos);
 	bool checkSpriteIntersection(uint16 spriteId, Common::Point pos);
 
+	void executeImmediateScripts();
 
 private:
 	void playTransition(Score *score);
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 4fc946d..97152f8 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -1061,6 +1061,8 @@ void Score::update() {
 	_surface->clear();
 	_surface->copyFrom(*_trailSurface);
 
+	_frames[_currentFrame]->executeImmediateScripts();
+
 	// Enter and exit from previous frame (Director 4)
 	_lingo->processEvent(kEventEnterFrame, kFrameScript, _frames[_currentFrame]->_actionId);
 	_lingo->processEvent(kEventExitFrame, kFrameScript, _frames[_currentFrame]->_actionId);





More information about the Scummvm-git-logs mailing list