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(); }
void AGOSEngine::o_process() { // 71: start subroutine uint16 id = getVarOrWord(); if (!_copyProtection && getGameType() == GType_WW && id == 71) { // Copy protection was disabled in Good Old Games release return; } Subroutine *sub = getSubroutineByID(id); if (sub != NULL) { #ifdef __DS__ // HACK: Skip scene of Simon reading letter from Calypso // due to speech segment been too large to fit into memory if (getGameType() == GType_SIMON1 && (getFeatures() & GF_TALKIE) && getPlatform() == Common::kPlatformWindows && sub->id == 2922) { // set parent special _noParentNotify = true; setItemParent(derefItem(16), me()); _noParentNotify = false; // set parent special _noParentNotify = true; setItemParent(derefItem(14), me()); _noParentNotify = false; // set item parent setItemParent(derefItem(12), me()); return; } #endif startSubroutine(sub); } }
void AGOSEngine_Elvira2::oe2_doTable() { // 143: start item sub Item *i = getNextItemPtr(); SubRoom *r = (SubRoom *)findChildOfType(i, kRoomType); if (r != NULL) { Subroutine *sub = getSubroutineByID(r->subroutine_id); if (sub) { startSubroutine(sub); return; } } if (getGameType() == GType_ELVIRA2) { SubSuperRoom *sr = (SubSuperRoom *)findChildOfType(i, kSuperRoomType); if (sr != NULL) { Subroutine *sub = getSubroutineByID(sr->subroutine_id); if (sub) { startSubroutine(sub); return; } } } }