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

sev- sev at scummvm.org
Fri Sep 2 09:51:20 CEST 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:
18af5ea5da DIRECTOR: Initial code for Lingo keyboard handling
bb2168fe9c DIRECTOR: Lingo: Fixed c_whencode and added debug output


Commit: 18af5ea5da5b37375dec1efa51e42e81115dc99a
    https://github.com/scummvm/scummvm/commit/18af5ea5da5b37375dec1efa51e42e81115dc99a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-09-02T09:51:12+02:00

Commit Message:
DIRECTOR: Initial code for Lingo keyboard handling

Changed paths:
    engines/director/director.cpp
    engines/director/director.h
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-the.cpp
    engines/director/lingo/lingo.cpp
    engines/director/lingo/lingo.h
    engines/director/score.cpp



diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index d921e11..c6b51bc 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -72,6 +72,7 @@ DirectorEngine::DirectorEngine(OSystem *syst, const DirectorGameDescription *gam
 	SearchMan.addSubDirectoryMatching(gameDataDir, "install");
 
 	_colorDepth = 8;	// FIXME. Check if it is 8-bit
+	_keyCode = 0;
 }
 
 DirectorEngine::~DirectorEngine() {
diff --git a/engines/director/director.h b/engines/director/director.h
index d319f47..5a28a9e 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -98,6 +98,7 @@ public:
 
 public:
 	int _colorDepth;
+	int _keyCode;
 
 protected:
 	virtual Common::Error run();
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index d7b91d2..91ab21f 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -756,14 +756,14 @@ void Lingo::c_whencode() {
 	Datum d;
 	int start = g_lingo->_pc;
 	int end = READ_UINT32(&(*g_lingo->_currentScript)[start]);
-	Common::String eventname((char *)&(*g_lingo->_currentScript)[start]);
+	Common::String eventname((char *)&(*g_lingo->_currentScript)[start + 1]);
 
 	start += g_lingo->calcStringAlignment(eventname.c_str());
 
-	g_lingo->define(eventname, start, 0, NULL, end);
-
 	debugC(3, kDebugLingoExec, "c_whencode([%5d][%5d], %s)", start, end, eventname.c_str());
 
+	g_lingo->define(eventname, start, 0, NULL, end);
+
 	g_lingo->_pc = end;
 }
 
@@ -833,7 +833,7 @@ void Lingo::c_call() {
 	g_lingo->call(name, nargs);
 }
 
-void Lingo::call(Common::String &name, int nargs) {
+void Lingo::call(Common::String name, int nargs) {
 	bool drop = false;
 
 	Symbol *sym;
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 7fb0551..9751d06 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -365,6 +365,10 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
 		d.type = FLOAT;
 		d.u.f = sqrt(id.u.f);
 		break;
+	case kTheKeyCode:
+		d.type = INT;
+		d.u.i = _vm->_keyCode;
+		break;
 	case kTheColorQD:
 		d.type = INT;
 		d.u.i = 1;
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index dbc0227..8a084c7 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -273,10 +273,14 @@ void Lingo::processEvent(LEvent event, int entityId) {
 
 	ScriptType st = event2script(event);
 
-	if (st != kNoneScript)
+	if (st != kNoneScript) {
 		executeScript(st, entityId + 1);
-	else
+	} else if (_handlers.contains(_eventHandlerTypes[event])) {
+		call(_eventHandlerTypes[event], 0);
+	} else {
+		warning("---- Handler %s is not set", _eventHandlerTypes[event]);
 		debugC(8, kDebugLingoExec, "STUB: processEvent(%s) for %d", _eventHandlerTypes[event], entityId);
+	}
 }
 
 int Lingo::alignTypes(Datum &d1, Datum &d2) {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 464e4ee..05c73f9 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -275,7 +275,7 @@ public:
 	static void c_le();
 	static void c_call();
 
-	void call(Common::String &name, int nargs);
+	void call(Common::String name, int nargs);
 
 	static void c_procret();
 
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 2d3ae79..69d974a 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -839,6 +839,11 @@ void Score::processEvents() {
 
 				_lingo->processEvent(kEventMouseUp, _frames[_currentFrame]->getSpriteIDFromPos(pos));
 			}
+
+			if (event.type == Common::EVENT_KEYDOWN) {
+				_vm->_keyCode = event.kbd.keycode;
+				_lingo->processEvent(kEventKeyDown, 0);
+			}
 		}
 
 		g_system->updateScreen();


Commit: bb2168fe9cc195ec51c2566ce537f2d1c83af17d
    https://github.com/scummvm/scummvm/commit/bb2168fe9cc195ec51c2566ce537f2d1c83af17d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-09-02T09:51:12+02:00

Commit Message:
DIRECTOR: Lingo: Fixed c_whencode and added debug output

Changed paths:
    engines/director/lingo/lingo-code.cpp



diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 91ab21f..405489b 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -758,12 +758,20 @@ void Lingo::c_whencode() {
 	int end = READ_UINT32(&(*g_lingo->_currentScript)[start]);
 	Common::String eventname((char *)&(*g_lingo->_currentScript)[start + 1]);
 
-	start += g_lingo->calcStringAlignment(eventname.c_str());
+	start += g_lingo->calcStringAlignment(eventname.c_str()) + 1;
 
 	debugC(3, kDebugLingoExec, "c_whencode([%5d][%5d], %s)", start, end, eventname.c_str());
 
 	g_lingo->define(eventname, start, 0, NULL, end);
 
+	if (debugChannelSet(3, kDebugLingoExec)) {
+		int pc = start;
+		while (pc <= end) {
+			Common::String instr = g_lingo->decodeInstruction(pc, &pc);
+			debugC(3, kDebugLingoExec, "[%5d] %s", pc, instr.c_str());
+		}
+	}
+
 	g_lingo->_pc = end;
 }
 





More information about the Scummvm-git-logs mailing list