aboutsummaryrefslogtreecommitdiff
path: root/engines/drascula/interface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/drascula/interface.cpp')
-rw-r--r--engines/drascula/interface.cpp209
1 files changed, 209 insertions, 0 deletions
diff --git a/engines/drascula/interface.cpp b/engines/drascula/interface.cpp
new file mode 100644
index 0000000000..6e86788007
--- /dev/null
+++ b/engines/drascula/interface.cpp
@@ -0,0 +1,209 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#include "drascula/drascula.h"
+
+namespace Drascula {
+
+void DrasculaEngine::selectVerbFromBar() {
+ for (int n = 0; n < 7; n++) {
+ if (mouseX > _verbBarX[n] && mouseX < _verbBarX[n + 1] && n > 0) {
+ selectVerb(n);
+ return;
+ }
+ }
+
+ // no verb selected
+ withoutVerb();
+}
+
+void DrasculaEngine::selectVerb(int verb) {
+ int c = (menuScreen == 1) ? 0 : 171;
+
+ if (currentChapter == 5) {
+ if (takeObject == 1 && pickedObject != 16)
+ addObject(pickedObject);
+ } else {
+ if (takeObject == 1)
+ addObject(pickedObject);
+ }
+
+ copyBackground(OBJWIDTH * verb, c, 0, 0, OBJWIDTH, OBJHEIGHT, backSurface, drawSurface3);
+
+ takeObject = 1;
+ pickedObject = verb;
+}
+
+bool DrasculaEngine::confirmExit() {
+ byte key;
+
+ color_abc(kColorRed);
+ updateRoom();
+ centerText(_textsys[_lang][1], 160, 87);
+ updateScreen();
+
+ delay(100);
+ for (;;) {
+ key = getScan();
+ if (key != 0)
+ break;
+ }
+
+ if (key == Common::KEYCODE_ESCAPE) {
+ stopMusic();
+ return false;
+ }
+
+ return true;
+}
+
+void DrasculaEngine::showMenu() {
+ int h, n, x;
+ char textIcon[13];
+ byte *srcSurface = (currentChapter == 6) ? tableSurface : frontSurface;
+ x = whichObject();
+ strcpy(textIcon, iconName[x]);
+
+ for (n = 1; n < 43; n++) {
+ h = inventoryObjects[n];
+
+ if (h != 0) {
+ copyBackground(_polX[n], _polY[n], _itemLocations[n].x, _itemLocations[n].y,
+ OBJWIDTH, OBJHEIGHT, srcSurface, screenSurface);
+ }
+ copyRect(_x1d_menu[h], _y1d_menu[h], _itemLocations[n].x, _itemLocations[n].y,
+ OBJWIDTH, OBJHEIGHT, backSurface, screenSurface);
+ }
+
+ if (x < 7)
+ print_abc(textIcon, _itemLocations[x].x - 2, _itemLocations[x].y - 7);
+}
+
+void DrasculaEngine::clearMenu() {
+ int n, verbActivated = 1;
+
+ for (n = 0; n < 7; n++) {
+ if (mouseX > _verbBarX[n] && mouseX < _verbBarX[n + 1])
+ verbActivated = 0;
+ copyRect(OBJWIDTH * n, OBJHEIGHT * verbActivated, _verbBarX[n], 2,
+ OBJWIDTH, OBJHEIGHT, backSurface, screenSurface);
+ verbActivated = 1;
+ }
+}
+
+void DrasculaEngine::enterName() {
+ Common::KeyCode key;
+ int v = 0, h = 0;
+ char select2[23];
+ strcpy(select2, " ");
+ for (;;) {
+ select2[v] = '-';
+ copyBackground(115, 14, 115, 14, 176, 9, bgSurface, screenSurface);
+ print_abc(select2, 117, 15);
+ updateScreen();
+ key = getScan();
+ delay(70);
+ if (key != 0) {
+ if (key >= 0 && key <= 0xFF && isalpha(key))
+ select2[v] = tolower(key);
+ else if ((key == Common::KEYCODE_LCTRL) || (key == Common::KEYCODE_RCTRL))
+ select2[v] = '\164';
+ else if (key >= Common::KEYCODE_0 && key <= Common::KEYCODE_9)
+ select2[v] = key;
+ else if (key == Common::KEYCODE_SPACE)
+ select2[v] = '\167';
+ else if (key == Common::KEYCODE_ESCAPE)
+ break;
+ else if (key == Common::KEYCODE_RETURN) {
+ select2[v] = '\0';
+ h = 1;
+ break;
+ } else if (key == Common::KEYCODE_BACKSPACE)
+ select2[v] = '\0';
+ else
+ v--;
+
+ if (key == Common::KEYCODE_BACKSPACE)
+ v--;
+ else
+ v++;
+ }
+ if (v == 22)
+ v = 21;
+ else if (v == -1)
+ v = 0;
+ }
+ if (h == 1) {
+ strcpy(select, select2);
+ selectionMade = 1;
+ }
+}
+
+bool DrasculaEngine::checkMenuFlags() {
+ for (int n = 0; n < 43; n++) {
+ if (whichObject() == n) {
+ if (inventoryObjects[n] != 0 && checkAction(inventoryObjects[n]))
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void DrasculaEngine::showMap() {
+ hasName = 0;
+
+ for (int l = 0; l < numRoomObjs; l++) {
+ if (mouseX > x1[l] && mouseY > y1[l]
+ && mouseX < x2[l] && mouseY < y2[l]
+ && visible[l] == 1) {
+ strcpy(textName, objName[l]);
+ hasName = 1;
+ }
+ }
+}
+
+void DrasculaEngine::grr() {
+ int length = 30;
+
+ color_abc(kColorDarkGreen);
+
+ playFile("s10.als");
+
+ updateRoom();
+ copyBackground(253, 110, 150, 65, 20, 30, drawSurface3, screenSurface);
+
+ if (withVoices == 0)
+ centerText("groaaarrrrgghhhh!", 153, 65);
+
+ updateScreen();
+
+ while (!isTalkFinished(&length));
+
+ updateRoom();
+ updateScreen();
+}
+
+} // End of namespace Drascula