[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