diff options
Diffstat (limited to 'engines/simon/verb.cpp')
-rw-r--r-- | engines/simon/verb.cpp | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/engines/simon/verb.cpp b/engines/simon/verb.cpp index b42b743188..ca3e63e25b 100644 --- a/engines/simon/verb.cpp +++ b/engines/simon/verb.cpp @@ -304,6 +304,64 @@ void SimonEngine::showActionString(const byte *string) { windowPutChar(window, *string); } +void SimonEngine::handleVerbClicked(uint verb) { + Subroutine *sub; + int result; + + _objectItem = _hitAreaObjectItem; + if (_objectItem == _dummyItem2) { + _objectItem = me(); + } + if (_objectItem == _dummyItem3) { + _objectItem = derefItem(me()->parent); + } + + _subjectItem = _hitAreaSubjectItem; + if (_subjectItem == _dummyItem2) { + _subjectItem = me(); + } + if (_subjectItem == _dummyItem3) { + _subjectItem = derefItem(me()->parent); + } + + if (_subjectItem) { + _scriptNoun1 = _subjectItem->noun; + _scriptAdj1 = _subjectItem->adjective; + } else { + _scriptNoun1 = -1; + _scriptAdj1 = -1; + } + + if (_objectItem) { + _scriptNoun2 = _objectItem->noun; + _scriptAdj2 = _objectItem->adjective; + } else { + _scriptNoun2 = -1; + _scriptAdj2 = -1; + } + + _scriptVerb = _verbHitArea; + + sub = getSubroutineByID(0); + if (sub == NULL) + return; + + result = startSubroutine(sub); + if (result == -1) + showMessageFormat("I don't understand"); + + _runScriptReturn1 = false; + + sub = getSubroutineByID(100); + if (sub) + startSubroutine(sub); + + if (getGameType() == GType_SIMON2 || getGameType() == GType_FF) + _runScriptReturn1 = false; + + permitInput(); +} + void SimonEngine::resetNameWindow() { WindowBlock *window; @@ -340,6 +398,11 @@ HitArea *SimonEngine::findEmptyHitArea() { return NULL; } +void SimonEngine::delete_hitarea_by_index(uint index) { + CHECK_BOUNDS(index, _hitAreas); + _hitAreas[index].flags = 0; +} + void SimonEngine::enableBox(uint hitarea) { HitArea *ha = findBox(hitarea); if (ha != NULL) |