Exemple #1
0
bool ScummEngine_v0::checkSentenceComplete() {
	if (_activeVerb && _activeVerb != kVerbWalkTo && _activeVerb != kVerbWhatIs) {
		if (_activeObject && (!activeVerbPrep() || _activeObject2))
			return true;
	}
	return false;
}
Exemple #2
0
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();
}
Exemple #3
0
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) ||