diff options
Diffstat (limited to 'engines/hugo/parser_v2d.cpp')
-rw-r--r-- | engines/hugo/parser_v2d.cpp | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/engines/hugo/parser_v2d.cpp b/engines/hugo/parser_v2d.cpp index adaf5e9f9f..802f69056b 100644 --- a/engines/hugo/parser_v2d.cpp +++ b/engines/hugo/parser_v2d.cpp @@ -36,30 +36,35 @@ #include "hugo/hugo.h" #include "hugo/parser.h" +#include "hugo/file.h" +#include "hugo/schedule.h" #include "hugo/util.h" +#include "hugo/object.h" namespace Hugo { -Parser_v2d::Parser_v2d(HugoEngine &vm) : Parser_v1d(vm) { +Parser_v2d::Parser_v2d(HugoEngine *vm) : Parser_v1d(vm) { } Parser_v2d::~Parser_v2d() { } -// Parse the user's line of text input. Generate events as necessary +/** +* Parse the user's line of text input. Generate events as necessary +*/ void Parser_v2d::lineHandler() { debugC(1, kDebugParser, "lineHandler()"); object_t *obj; - status_t &gameStatus = _vm.getGameStatus(); + status_t &gameStatus = _vm->getGameStatus(); char farComment[XBYTES * 5] = ""; // hold 5 line comment if object not nearby // Reset_prompt_line (); Utils::strlwr(_line); // Convert to lower case if (!strcmp("exit", _line) || strstr(_line, "quit")) { - if (Utils::Box(BOX_YESNO, "%s", _vm._textParser[kTBExit_1d]) != 0) - _vm.endGame(); + if (Utils::Box(BOX_YESNO, "%s", _vm->_textParser[kTBExit_1d]) != 0) + _vm->endGame(); else return; } @@ -70,15 +75,21 @@ void Parser_v2d::lineHandler() { if (gameStatus.gameOverFl) Utils::gameOverMsg(); else -// _vm.file().saveOrRestore(true); +// _vm->_file->saveOrRestore(true); warning("STUB: saveOrRestore()"); + // HACK: Currently use Win code + _vm->_file->saveGame(gameStatus.saveSlot, "Current game"); return; } if (!strcmp("restore", _line)) { _config.soundFl = false; -// _vm.file().saveOrRestore(false); +// _vm->_file->saveOrRestore(false); warning("STUB: saveOrRestore()"); + // HACK: Currently use Win code + _vm->_file->restoreGame(gameStatus.saveSlot); + _vm->_scheduler->restoreScreen(*_vm->_screen_p); + gameStatus.viewState = V_PLAY; return; } @@ -101,35 +112,35 @@ void Parser_v2d::lineHandler() { do { noun = findNextNoun(noun); // Find a noun in the line // Must try at least once for objects allowing verb-context - for (int i = 0; i < _vm._numObj; i++) { - obj = &_vm._objects[i]; + for (int i = 0; i < _vm->_object->_numObj; i++) { + obj = &_vm->_object->_objects[i]; if (isNear(verb, noun, obj, farComment)) { if (isObjectVerb(verb, obj) // Foreground object || isGenericVerb(verb, obj)) // Common action type return; } } - if ((*farComment != '\0') && isBackgroundWord(noun, verb, _vm._backgroundObjects[*_vm._screen_p])) + if ((*farComment != '\0') && isBackgroundWord(noun, verb, _vm->_backgroundObjects[*_vm->_screen_p])) return; } while (noun); } noun = findNextNoun(noun); - if ( !isCatchallVerb(true, noun, verb, _vm._backgroundObjects[*_vm._screen_p]) - && !isCatchallVerb(true, noun, verb, _vm._catchallList) - && !isCatchallVerb(false, noun, verb, _vm._backgroundObjects[*_vm._screen_p]) - && !isCatchallVerb(false, noun, verb, _vm._catchallList)) { + if ( !isCatchallVerb(true, noun, verb, _vm->_backgroundObjects[*_vm->_screen_p]) + && !isCatchallVerb(true, noun, verb, _vm->_catchallList) + && !isCatchallVerb(false, noun, verb, _vm->_backgroundObjects[*_vm->_screen_p]) + && !isCatchallVerb(false, noun, verb, _vm->_catchallList)) { if (*farComment != '\0') { // An object matched but not near enough Utils::Box(BOX_ANY, "%s", farComment); - } else if (_maze.enabledFl && (verb == _vm._arrayVerbs[_vm._look][0])) { - Utils::Box(BOX_ANY, "%s", _vm._textParser[kTBMaze]); - showTakeables(); + } else if (_maze.enabledFl && (verb == _vm->_arrayVerbs[_vm->_look][0])) { + Utils::Box(BOX_ANY, "%s", _vm->_textParser[kTBMaze]); + _vm->_object->showTakeables(); } else if (verb && noun) { // A combination I didn't think of - Utils::Box(BOX_ANY, "%s", _vm._textParser[kTBNoUse_2d]); + Utils::Box(BOX_ANY, "%s", _vm->_textParser[kTBNoUse_2d]); } else if (verb || noun) { - Utils::Box(BOX_ANY, "%s", _vm._textParser[kTBNoun]); + Utils::Box(BOX_ANY, "%s", _vm->_textParser[kTBNoun]); } else { - Utils::Box(BOX_ANY, "%s", _vm._textParser[kTBEh_2d]); + Utils::Box(BOX_ANY, "%s", _vm->_textParser[kTBEh_2d]); } } } |