bool ScummEngine_v0::checkSentenceComplete() { if (_activeVerb && _activeVerb != kVerbWalkTo && _activeVerb != kVerbWhatIs) { if (_activeObject && (!activeVerbPrep() || _activeObject2)) return true; } return false; }
void ScummEngine_v0::drawSentenceLine() { _redrawSentenceLine = false; if (!(_userState & USERSTATE_IFACE_SENTENCE)) return; clearSentenceLine(); if (_activeVerb == kVerbNewKid) { _sentenceBuf = ""; for (int i = 0; i < 3; ++i) { const char *actorName; int actorId = VAR(97 + i); if (actorId == 0) { // after usage of the radiation suit, kid vars are set to 0 actorName = " "; } else { Actor *a = derefActor(actorId, "drawSentenceLine"); actorName = (const char *)a->getActorName(); } _sentenceBuf += Common::String::format("%-13s", actorName); } flushSentenceLine(); return; } // Current Verb if (_activeVerb == kVerbNone) _activeVerb = kVerbWalkTo; char *verbName = (char *)getResourceAddress(rtVerb, _activeVerb); assert(verbName); _sentenceBuf = verbName; if (_activeObject) { // Draw the 1st active object drawSentenceObject(_activeObject); // Append verb preposition int sentencePrep = activeVerbPrep(); if (sentencePrep) { drawPreposition(sentencePrep); // Draw the 2nd active object if (_activeObject2) drawSentenceObject(_activeObject2); } } flushSentenceLine(); }
void ScummEngine_v0::checkExecVerbs() { Actor_v0 *a = (Actor_v0 *)derefActor(VAR(VAR_EGO), "checkExecVerbs"); VirtScreen *zone = findVirtScreen(_mouse.y); bool execute = false; if (_mouseAndKeyboardStat & MBS_MOUSE_MASK) { int over = findVerbAtPos(_mouse.x, _mouse.y); // click region: verbs if (over) { if (_activeVerb != over) { // new verb // keep first object if no preposition is used yet if (activeVerbPrep()) _activeObject = 0; _activeObject2 = 0; _activeVerb = over; _redrawSentenceLine = true; } else { // execute sentence if complete if (checkSentenceComplete()) execute = true; } } } if (a->_miscflags & kActorMiscFlagHide) { if (_activeVerb != kVerbNewKid) { _activeVerb = kVerbNone; } } if (_currentMode != kModeCutscene) { if (_currentMode == kModeKeypad) { _activeVerb = kVerbPush; } if (_mouseAndKeyboardStat > 0 && _mouseAndKeyboardStat < MBS_MAX_KEY) { // keys already checked by input handler } else if ((_mouseAndKeyboardStat & MBS_MOUSE_MASK) || _activeVerb == kVerbWhatIs) { // click region: sentence line if (zone->number == kVerbVirtScreen && _mouse.y <= zone->topline + 8) { if (_activeVerb == kVerbNewKid) { if (_currentMode == kModeNormal) { int kid; int lineX = _mouse.x >> V12_X_SHIFT; if (lineX < 11) kid = 0; else if (lineX < 25) kid = 1; else kid = 2; _activeVerb = kVerbWalkTo; _redrawSentenceLine = true; drawSentenceLine(); switchActor(kid); } _activeVerb = kVerbWalkTo; _redrawSentenceLine = true; return; } else { // execute sentence if complete if (checkSentenceComplete()) execute = true; } // click region: inventory or main screen } else if ((zone->number == kVerbVirtScreen && _mouse.y > zone->topline + 32) ||