aboutsummaryrefslogtreecommitdiff
path: root/engines/simon/verb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/simon/verb.cpp')
-rw-r--r--engines/simon/verb.cpp63
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)