diff --git a/engines/glk/advsys/advsys.cpp b/engines/glk/advsys/advsys.cpp index 3f50d842373..26f298dd00c 100644 --- a/engines/glk/advsys/advsys.cpp +++ b/engines/glk/advsys/advsys.cpp @@ -26,12 +26,6 @@ namespace Glk { namespace AdvSys { -bool singleAction() { - // TODO: Stub - return false; -} - - void AdvSys::runGame() { if (!initialize()) { GUIErrorMessage(_("Could not start AdvSys game")); @@ -75,6 +69,28 @@ bool AdvSys::initialize() { void AdvSys::deinitialize() { } +bool AdvSys::singleAction() { + // Do the before code + switch (execute(_beforeOffset)) { + case ABORT: + // Script aborted + return false; + case CHAIN: + // Execute the action handler + if (execute(getActionField(getVariable(V_ACTION), A_CODE)) == ABORT) + return false; + + // fall through + case FINISH: + // Do the after code + if (execute(_afterOffset) == ABORT) + return false; + break; + } + + return true; +} + Common::Error AdvSys::loadGameData(strid_t save) { return Common::kNoError; } diff --git a/engines/glk/advsys/advsys.h b/engines/glk/advsys/advsys.h index 50977a6a3a1..688a8fe0946 100644 --- a/engines/glk/advsys/advsys.h +++ b/engines/glk/advsys/advsys.h @@ -43,6 +43,11 @@ private: * Engine cleanup */ void deinitialize(); + + /** + * Handle a single action + */ + bool singleAction(); public: /** * Constructor