void AGOSEngine::handleVerbClicked(uint verb) { Subroutine *sub; int result; if (shouldQuit()) return; _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 || getGameType() == GType_PP) _runScriptReturn1 = false; permitInput(); }
Common::Error AGOSEngine::go() { #ifdef ENABLE_AGOS2 loadArchives(); #endif loadGamePcFile(); addTimeEvent(0, 1); if (getFileName(GAME_GMEFILE) != NULL) { openGameFile(); } if (getGameType() == GType_FF) { loadIconData(); } else if (getFileName(GAME_ICONFILE) != NULL) { loadIconFile(); } if (getFileName(GAME_MENUFILE) != NULL) { loadMenuFile(); } vc34_setMouseOff(); if (getGameType() != GType_PP && getGameType() != GType_FF) { uint16 count = (getGameType() == GType_SIMON2) ? 5 : _frameCount; addVgaEvent(count, ANIMATE_INT, NULL, 0, 0); } if (getGameType() == GType_ELVIRA1 && getPlatform() == Common::kPlatformAtariST && (getFeatures() & GF_DEMO)) { setWindowImage(3, 9900); while (!shouldQuit()) delay(0); } if (getGameType() == GType_ELVIRA1 && getPlatform() == Common::kPlatformAmiga && (getFeatures() & GF_DEMO)) { playMusic(0, 0); } runSubroutine101(); permitInput(); while (!shouldQuit()) { waitForInput(); handleVerbClicked(_verbHitArea); delay(100); } return Common::kNoError; }