From b3676907c5acd43e0cf7667e168809514e54498e Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Sun, 19 Jun 2016 07:02:39 +0200 Subject: [PATCH] DIRECTOR: Lingo: Implemented script execution --- engines/director/lingo/lingo.cpp | 13 +++++++++++++ engines/director/lingo/lingo.h | 1 + 2 files changed, 14 insertions(+) diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp index 4ac9c12ed331..fc79167373c5 100644 --- a/engines/director/lingo/lingo.cpp +++ b/engines/director/lingo/lingo.cpp @@ -100,6 +100,8 @@ int Lingo::codeString(const char *str) { } void Lingo::addCode(Common::String code, ScriptType type, uint16 id) { + code += '\n'; + debug(2, "Add code \"%s\" for type %d with id %d", code.c_str(), type, id); if (_scripts[type].contains(id)) { @@ -114,6 +116,17 @@ void Lingo::addCode(Common::String code, ScriptType type, uint16 id) { Common::hexdump((byte *)&_currentScript->front(), _currentScript->size() * sizeof(inst)); } +void Lingo::executeScript(ScriptType type, uint16 id) { + if (!_scripts[type].contains(id)) { + warning("Request to execute non-existant script type %d id %d", type, id); + return; + } + + for(_pc = &_scripts[type][id]->front(); *_pc != STOP;) { + (*((++_pc)[-1]))(); + } +} + void Lingo::processEvent(LEvent event, int entityId) { if (!_eventHandlerTypes.contains(event)) error("processEvent: Unknown event %d for entity %d", event, entityId); diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h index c00d239a6725..fba82a26d743 100644 --- a/engines/director/lingo/lingo.h +++ b/engines/director/lingo/lingo.h @@ -99,6 +99,7 @@ class Lingo { ~Lingo(); void addCode(Common::String code, ScriptType type, uint16 id); + void executeScript(ScriptType type, uint16 id); void processEvent(LEvent event, int entityId);