aboutsummaryrefslogtreecommitdiff
path: root/engines/hugo
diff options
context:
space:
mode:
authorArnaud Boutonné2011-01-04 08:36:03 +0000
committerArnaud Boutonné2011-01-04 08:36:03 +0000
commit9ee74fee8a8cc296ccd4a22bc34900afefc7438e (patch)
tree9213bbf7a94ebfd8b09016fdec7776db2e7273c0 /engines/hugo
parente59eb31ba94cf80cd905fe954970c1b926d1c3a4 (diff)
downloadscummvm-rg350-9ee74fee8a8cc296ccd4a22bc34900afefc7438e.tar.gz
scummvm-rg350-9ee74fee8a8cc296ccd4a22bc34900afefc7438e.tar.bz2
scummvm-rg350-9ee74fee8a8cc296ccd4a22bc34900afefc7438e.zip
HUGO: Implement menu commands
Also did some cleanup, and had to comment out handleMouseUp() as it's currently not working really well svn-id: r55114
Diffstat (limited to 'engines/hugo')
-rw-r--r--engines/hugo/file.cpp28
-rw-r--r--engines/hugo/file.h35
-rw-r--r--engines/hugo/file_v1d.cpp28
-rw-r--r--engines/hugo/file_v1w.cpp2
-rw-r--r--engines/hugo/file_v2d.cpp2
-rw-r--r--engines/hugo/file_v2w.cpp55
-rw-r--r--engines/hugo/hugo.cpp4
-rw-r--r--engines/hugo/menu.cpp30
-rw-r--r--engines/hugo/menu.h2
-rw-r--r--engines/hugo/module.mk1
-rw-r--r--engines/hugo/parser.cpp147
-rw-r--r--engines/hugo/parser.h9
-rw-r--r--engines/hugo/parser_v1d.cpp157
-rw-r--r--engines/hugo/parser_v1w.cpp161
14 files changed, 312 insertions, 349 deletions
diff --git a/engines/hugo/file.cpp b/engines/hugo/file.cpp
index e168fb70b1..31b786c9fe 100644
--- a/engines/hugo/file.cpp
+++ b/engines/hugo/file.cpp
@@ -653,34 +653,6 @@ void FileManager::readUIFItem(int16 id, byte *buf) {
}
/**
-* Simple instructions given when F1 pressed twice in a row
-* Only in DOS versions
-*/
-void FileManager::instructions() {
- Common::File f;
- if (!f.open(HELPFILE)) {
- warning("help.dat not found");
- return;
- }
-
- char readBuf[2];
- while (f.read(readBuf, 1)) {
- char line[1024], *wrkLine;
- wrkLine = line;
- wrkLine[0] = readBuf[0];
- wrkLine++;
- do {
- f.read(wrkLine, 1);
- } while (*wrkLine++ != EOP);
- wrkLine[-2] = '\0'; // Remove EOP and previous CR
- Utils::Box(BOX_ANY, "%s", line);
- wrkLine = line;
- f.read(readBuf, 2); // Remove CRLF after EOP
- }
- f.close();
-}
-
-/**
* Read the uif image file (inventory icons)
*/
void FileManager::readUIFImages() {
diff --git a/engines/hugo/file.h b/engines/hugo/file.h
index 4dfd7167c0..e288b27a02 100644
--- a/engines/hugo/file.h
+++ b/engines/hugo/file.h
@@ -58,7 +58,6 @@ public:
bool fileExists(char *filename);
sound_pt getSound(int16 sound, uint16 *size);
- void instructions();
void readBootFile();
void readImage(int objNum, object_t *objPtr);
void readUIFImages();
@@ -68,6 +67,7 @@ public:
virtual void openDatabaseFiles() = 0;
virtual void closeDatabaseFiles() = 0;
+ virtual void instructions() = 0;
virtual void readBackground(int screenIndex) = 0;
virtual void readOverlay(int screenNum, image_pt image, ovl_t overlayType) = 0;
@@ -96,22 +96,23 @@ public:
FileManager_v1d(HugoEngine *vm);
~FileManager_v1d();
- void openDatabaseFiles();
- void closeDatabaseFiles();
- void readBackground(int screenIndex);
- void readOverlay(int screenNum, image_pt image, ovl_t overlayType);
- char *fetchString(int index);
+ virtual void closeDatabaseFiles();
+ virtual void instructions();
+ virtual void openDatabaseFiles();
+ virtual void readBackground(int screenIndex);
+ virtual void readOverlay(int screenNum, image_pt image, ovl_t overlayType);
+ virtual char *fetchString(int index);
};
-class FileManager_v2d : public FileManager {
+class FileManager_v2d : public FileManager_v1d {
public:
FileManager_v2d(HugoEngine *vm);
~FileManager_v2d();
- void openDatabaseFiles();
- void closeDatabaseFiles();
- void readBackground(int screenIndex);
- void readOverlay(int screenNum, image_pt image, ovl_t overlayType);
+ virtual void closeDatabaseFiles();
+ virtual void openDatabaseFiles();
+ virtual void readBackground(int screenIndex);
+ virtual void readOverlay(int screenNum, image_pt image, ovl_t overlayType);
char *fetchString(int index);
};
@@ -120,15 +121,23 @@ public:
FileManager_v3d(HugoEngine *vm);
~FileManager_v3d();
- void openDatabaseFiles();
void closeDatabaseFiles();
+ void openDatabaseFiles();
void readBackground(int screenIndex);
void readOverlay(int screenNum, image_pt image, ovl_t overlayType);
private:
Common::File _sceneryArchive2; // Handle for scenery file
};
-class FileManager_v1w : public FileManager_v2d {
+class FileManager_v2w : public FileManager_v2d {
+public:
+ FileManager_v2w(HugoEngine *vm);
+ ~FileManager_v2w();
+
+ void instructions();
+};
+
+class FileManager_v1w : public FileManager_v2w {
public:
FileManager_v1w(HugoEngine *vm);
~FileManager_v1w();
diff --git a/engines/hugo/file_v1d.cpp b/engines/hugo/file_v1d.cpp
index b92474ea67..9d764df1f4 100644
--- a/engines/hugo/file_v1d.cpp
+++ b/engines/hugo/file_v1d.cpp
@@ -104,5 +104,33 @@ char *FileManager_v1d::fetchString(int index) {
return _vm->_stringtData[index];
}
+/**
+* Simple instructions given when F1 pressed twice in a row
+* Only in DOS versions
+*/
+void FileManager_v1d::instructions() {
+ Common::File f;
+ if (!f.open(HELPFILE)) {
+ warning("help.dat not found");
+ return;
+ }
+
+ char readBuf[2];
+ while (f.read(readBuf, 1)) {
+ char line[1024], *wrkLine;
+ wrkLine = line;
+ wrkLine[0] = readBuf[0];
+ wrkLine++;
+ do {
+ f.read(wrkLine, 1);
+ } while (*wrkLine++ != EOP);
+ wrkLine[-2] = '\0'; // Remove EOP and previous CR
+ Utils::Box(BOX_ANY, "%s", line);
+ wrkLine = line;
+ f.read(readBuf, 2); // Remove CRLF after EOP
+ }
+ f.close();
+}
+
} // End of namespace Hugo
diff --git a/engines/hugo/file_v1w.cpp b/engines/hugo/file_v1w.cpp
index e4f97a917d..2033f17620 100644
--- a/engines/hugo/file_v1w.cpp
+++ b/engines/hugo/file_v1w.cpp
@@ -37,7 +37,7 @@
#include "hugo/util.h"
namespace Hugo {
-FileManager_v1w::FileManager_v1w(HugoEngine *vm) : FileManager_v2d(vm) {
+FileManager_v1w::FileManager_v1w(HugoEngine *vm) : FileManager_v2w(vm) {
}
FileManager_v1w::~FileManager_v1w() {
diff --git a/engines/hugo/file_v2d.cpp b/engines/hugo/file_v2d.cpp
index c868f99e3c..d7d4593945 100644
--- a/engines/hugo/file_v2d.cpp
+++ b/engines/hugo/file_v2d.cpp
@@ -40,7 +40,7 @@
#include "hugo/util.h"
namespace Hugo {
-FileManager_v2d::FileManager_v2d(HugoEngine *vm) : FileManager(vm) {
+FileManager_v2d::FileManager_v2d(HugoEngine *vm) : FileManager_v1d(vm) {
}
FileManager_v2d::~FileManager_v2d() {
diff --git a/engines/hugo/file_v2w.cpp b/engines/hugo/file_v2w.cpp
new file mode 100644
index 0000000000..2c910a41c4
--- /dev/null
+++ b/engines/hugo/file_v2w.cpp
@@ -0,0 +1,55 @@
+/* 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$
+ *
+ */
+
+/*
+ * This code is based on original Hugo Trilogy source code
+ *
+ * Copyright (c) 1989-1995 David P. Gray
+ *
+ */
+
+#include "common/system.h"
+
+#include "hugo/hugo.h"
+#include "hugo/file.h"
+#include "hugo/util.h"
+
+namespace Hugo {
+FileManager_v2w::FileManager_v2w(HugoEngine *vm) : FileManager_v2d(vm) {
+}
+
+FileManager_v2w::~FileManager_v2w() {
+}
+
+/**
+* Display a Windows help file
+* Dame comment than in SCI: maybe in the future we can implement this, but for now this message should suffice
+*/
+void FileManager_v2w::instructions() {
+ Utils::Box(BOX_ANY, "Please use an external viewer to open the game''s help file: HUGOWIN%d.HLP", _vm->_gameVariant + 1);
+}
+
+} // End of namespace Hugo
+
diff --git a/engines/hugo/hugo.cpp b/engines/hugo/hugo.cpp
index 5d86bc3872..2b010737cb 100644
--- a/engines/hugo/hugo.cpp
+++ b/engines/hugo/hugo.cpp
@@ -211,7 +211,7 @@ Common::Error HugoEngine::run() {
_normalTPS = 9;
break;
case 1:
- _file = new FileManager_v2d(this);
+ _file = new FileManager_v2w(this);
_scheduler = new Scheduler_v1w(this);
_intro = new intro_v2w(this);
_screen = new Screen_v1w(this);
@@ -220,7 +220,7 @@ Common::Error HugoEngine::run() {
_normalTPS = 9;
break;
case 2:
- _file = new FileManager_v2d(this);
+ _file = new FileManager_v2w(this);
_scheduler = new Scheduler_v1w(this);
_intro = new intro_v3w(this);
_screen = new Screen_v1w(this);
diff --git a/engines/hugo/menu.cpp b/engines/hugo/menu.cpp
index 98d62b37e7..26e0e0cbdb 100644
--- a/engines/hugo/menu.cpp
+++ b/engines/hugo/menu.cpp
@@ -24,6 +24,11 @@
*/
#include "hugo/hugo.h"
+#include "hugo/display.h"
+#include "hugo/parser.h"
+#include "hugo/schedule.h"
+#include "hugo/sound.h"
+#include "hugo/util.h"
#include "graphics/imagedec.h"
#include "common/substream.h"
@@ -170,39 +175,56 @@ void TopMenu::handleCommand(GUI::CommandSender *sender, uint32 command, uint32 d
switch (command) {
case kCmdWhat:
close();
+ _vm->_file->instructions();
break;
case kCmdMusic:
close();
+ _vm->_sound->toggleMusic();
break;
case kCmdSoundFX:
close();
+ _vm->_sound->toggleSound();
break;
case kCmdLoad:
close();
+ _vm->_file->restoreGame(-1);
+ _vm->_scheduler->restoreScreen(*_vm->_screen_p);
+ _vm->getGameStatus().viewState = V_PLAY;
break;
case kCmdSave:
close();
+ if (_vm->getGameStatus().viewState == V_PLAY) {
+ if (_vm->getGameStatus().gameOverFl)
+ Utils::gameOverMsg();
+ else
+ _vm->_file->saveGame(-1, Common::String());
+ }
break;
case kCmdRecall:
+
close();
+ _vm->getGameStatus().recallFl = true;
break;
case kCmdTurbo:
close();
+ _vm->_parser->switchTurbo();
break;
case kCmdLook:
close();
+ _vm->_parser->command("look around");
break;
case kCmdInvent:
close();
+ _vm->_parser->showInventory();
break;
default:
Dialog::handleCommand(sender, command, data);
}
}
-void TopMenu::handleMouseUp(int x, int y, int button, int clickCount) {
- if (y > _h)
- close();
-}
+//void TopMenu::handleMouseUp(int x, int y, int button, int clickCount) {
+// if (y > _h)
+// close();
+//}
} // End of namespace Hugo
diff --git a/engines/hugo/menu.h b/engines/hugo/menu.h
index 33d5db7b79..a68ad2514f 100644
--- a/engines/hugo/menu.h
+++ b/engines/hugo/menu.h
@@ -48,7 +48,7 @@ public:
void reflowLayout();
void handleCommand(GUI::CommandSender *sender, uint32 command, uint32 data);
- void handleMouseUp(int x, int y, int button, int clickCount);
+// void handleMouseUp(int x, int y, int button, int clickCount);
void loadBmpArr(Common::File &in);
diff --git a/engines/hugo/module.mk b/engines/hugo/module.mk
index 0cfe19a680..5b6610075f 100644
--- a/engines/hugo/module.mk
+++ b/engines/hugo/module.mk
@@ -11,6 +11,7 @@ MODULE_OBJS := \
file_v2d.o \
file_v3d.o \
file_v1w.o \
+ file_v2w.o \
hugo.o \
intro.o \
intro_v1d.o \
diff --git a/engines/hugo/parser.cpp b/engines/hugo/parser.cpp
index 9836861bca..8db43e7ef3 100644
--- a/engines/hugo/parser.cpp
+++ b/engines/hugo/parser.cpp
@@ -31,12 +31,15 @@
*/
#include "common/system.h"
+#include "common/events.h"
#include "hugo/hugo.h"
+#include "hugo/display.h"
#include "hugo/parser.h"
#include "hugo/file.h"
#include "hugo/schedule.h"
#include "hugo/util.h"
+#include "hugo/route.h"
#include "hugo/sound.h"
#include "hugo/object.h"
@@ -53,6 +56,10 @@ Parser::Parser(HugoEngine *vm) :
Parser::~Parser() {
}
+void Parser::switchTurbo() {
+ _config.turboFl = !_config.turboFl;
+}
+
/**
* Add any new chars to line buffer and display them.
* If CR pressed, pass line to LineHandler()
@@ -121,6 +128,146 @@ void Parser::charHandler() {
}
}
+void Parser::keyHandler(Common::Event event) {
+ debugC(1, kDebugParser, "keyHandler(%d)", event.kbd.keycode);
+
+ status_t &gameStatus = _vm->getGameStatus();
+ uint16 nChar = event.kbd.keycode;
+
+ // Process key down event - called from OnKeyDown()
+ switch (nChar) { // Set various toggle states
+ case Common::KEYCODE_ESCAPE: // Escape key, may want to QUIT
+ if (gameStatus.inventoryState == I_ACTIVE) // Remove inventory, if displayed
+ gameStatus.inventoryState = I_UP;
+ gameStatus.inventoryObjId = -1; // Deselect any dragged icon
+ break;
+ case Common::KEYCODE_END:
+ case Common::KEYCODE_HOME:
+ case Common::KEYCODE_PAGEUP:
+ case Common::KEYCODE_PAGEDOWN:
+ case Common::KEYCODE_KP1:
+ case Common::KEYCODE_KP7:
+ case Common::KEYCODE_KP9:
+ case Common::KEYCODE_KP3:
+ case Common::KEYCODE_LEFT:
+ case Common::KEYCODE_RIGHT:
+ case Common::KEYCODE_UP:
+ case Common::KEYCODE_DOWN:
+ case Common::KEYCODE_KP4:
+ case Common::KEYCODE_KP6:
+ case Common::KEYCODE_KP8:
+ case Common::KEYCODE_KP2:
+ gameStatus.routeIndex = -1; // Stop any automatic route
+ _vm->_route->setWalk(nChar); // Direction of hero travel
+ break;
+ case Common::KEYCODE_F1: // User Help (DOS)
+ if (_checkDoubleF1Fl)
+ _vm->_file->instructions();
+ else
+ _vm->_screen->userHelp();
+ _checkDoubleF1Fl = !_checkDoubleF1Fl;
+ break;
+ case Common::KEYCODE_F2: // Toggle sound
+ _vm->_sound->toggleSound();
+ _vm->_sound->toggleMusic();
+ break;
+ case Common::KEYCODE_F3: // Repeat last line
+ gameStatus.recallFl = true;
+ break;
+ case Common::KEYCODE_F4: // Save game
+ if (gameStatus.viewState == V_PLAY) {
+ if (gameStatus.gameOverFl)
+ Utils::gameOverMsg();
+ else
+ _vm->_file->saveGame(-1, Common::String());
+ }
+ break;
+ case Common::KEYCODE_F5: // Restore game
+ _vm->_file->restoreGame(-1);
+ _vm->_scheduler->restoreScreen(*_vm->_screen_p);
+ gameStatus.viewState = V_PLAY;
+ break;
+ case Common::KEYCODE_F6: // Inventory
+ showInventory();
+ break;
+ case Common::KEYCODE_F8: // Turbo mode
+ switchTurbo();
+ break;
+ case Common::KEYCODE_F9: // Boss button
+ warning("STUB: F9 (DOS) - BossKey");
+ break;
+ case Common::KEYCODE_l:
+ if (event.kbd.hasFlags(Common::KBD_CTRL)) {
+ _vm->_file->restoreGame(-1);
+ _vm->_scheduler->restoreScreen(*_vm->_screen_p);
+ gameStatus.viewState = V_PLAY;
+ } else {
+ if (!gameStatus.storyModeFl) { // Keyboard disabled
+ // Add printable keys to ring buffer
+ uint16 bnext = _putIndex + 1;
+ if (bnext >= sizeof(_ringBuffer))
+ bnext = 0;
+ if (bnext != _getIndex) {
+ _ringBuffer[_putIndex] = event.kbd.ascii;
+ _putIndex = bnext;
+ }
+ }
+ }
+ break;
+ case Common::KEYCODE_n:
+ if (event.kbd.hasFlags(Common::KBD_CTRL)) {
+ warning("STUB: CTRL-N (WIN) - New Game");
+ } else {
+ if (!gameStatus.storyModeFl) { // Keyboard disabled
+ // Add printable keys to ring buffer
+ uint16 bnext = _putIndex + 1;
+ if (bnext >= sizeof(_ringBuffer))
+ bnext = 0;
+ if (bnext != _getIndex) {
+ _ringBuffer[_putIndex] = event.kbd.ascii;
+ _putIndex = bnext;
+ }
+ }
+ }
+ break;
+ case Common::KEYCODE_s:
+ if (event.kbd.hasFlags(Common::KBD_CTRL)) {
+ if (gameStatus.viewState == V_PLAY) {
+ if (gameStatus.gameOverFl)
+ Utils::gameOverMsg();
+ else
+ _vm->_file->saveGame(-1, Common::String());
+ }
+ } else {
+ if (!gameStatus.storyModeFl) { // Keyboard disabled
+ // Add printable keys to ring buffer
+ uint16 bnext = _putIndex + 1;
+ if (bnext >= sizeof(_ringBuffer))
+ bnext = 0;
+ if (bnext != _getIndex) {
+ _ringBuffer[_putIndex] = event.kbd.ascii;
+ _putIndex = bnext;
+ }
+ }
+ }
+ break;
+ default: // Any other key
+ if (!gameStatus.storyModeFl) { // Keyboard disabled
+ // Add printable keys to ring buffer
+ uint16 bnext = _putIndex + 1;
+ if (bnext >= sizeof(_ringBuffer))
+ bnext = 0;
+ if (bnext != _getIndex) {
+ _ringBuffer[_putIndex] = event.kbd.ascii;
+ _putIndex = bnext;
+ }
+ }
+ break;
+ }
+ if (_checkDoubleF1Fl && (nChar != Common::KEYCODE_F1))
+ _checkDoubleF1Fl = false;
+}
+
/**
* Perform an immediate command. Takes parameters a la sprintf
* Assumes final string will not overrun line[] length
diff --git a/engines/hugo/parser.h b/engines/hugo/parser.h
index c0184dc600..b227f2ab4f 100644
--- a/engines/hugo/parser.h
+++ b/engines/hugo/parser.h
@@ -51,9 +51,11 @@ public:
void charHandler();
void command(const char *format, ...);
+ void keyHandler(Common::Event event);
+ void switchTurbo();
- virtual void keyHandler(Common::Event event) = 0;
virtual void lineHandler() = 0;
+ virtual void showInventory() = 0;
protected:
HugoEngine *_vm;
@@ -74,8 +76,8 @@ public:
Parser_v1d(HugoEngine *vm);
~Parser_v1d();
- virtual void keyHandler(Common::Event event);
virtual void lineHandler();
+ virtual void showInventory();
protected:
virtual void dropObject(object_t *obj);
@@ -118,7 +120,8 @@ public:
Parser_v1w(HugoEngine *vm);
~Parser_v1w();
- void keyHandler(Common::Event event);
+ virtual void showInventory();
+
void lineHandler();
};
diff --git a/engines/hugo/parser_v1d.cpp b/engines/hugo/parser_v1d.cpp
index 405dd55c13..1539dfb4c0 100644
--- a/engines/hugo/parser_v1d.cpp
+++ b/engines/hugo/parser_v1d.cpp
@@ -33,15 +33,12 @@
// parser.c - handles all keyboard/command input
#include "common/system.h"
-#include "common/events.h"
#include "hugo/hugo.h"
#include "hugo/parser.h"
#include "hugo/file.h"
#include "hugo/schedule.h"
-#include "hugo/display.h"
#include "hugo/util.h"
-#include "hugo/route.h"
#include "hugo/sound.h"
#include "hugo/object.h"
@@ -300,151 +297,6 @@ bool Parser_v1d::isCatchallVerb(bool testNounFl, char *noun, char *verb, objectL
return false;
}
-void Parser_v1d::keyHandler(Common::Event event) {
- debugC(1, kDebugParser, "keyHandler(%d)", event.kbd.keycode);
-
- status_t &gameStatus = _vm->getGameStatus();
- uint16 nChar = event.kbd.keycode;
-
- // Process key down event - called from OnKeyDown()
- switch (nChar) { // Set various toggle states
- case Common::KEYCODE_ESCAPE: // Escape key, may want to QUIT
- if (gameStatus.inventoryState == I_ACTIVE) // Remove inventory, if displayed
- gameStatus.inventoryState = I_UP;
- gameStatus.inventoryObjId = -1; // Deselect any dragged icon
- break;
- case Common::KEYCODE_END:
- case Common::KEYCODE_HOME:
- case Common::KEYCODE_PAGEUP:
- case Common::KEYCODE_PAGEDOWN:
- case Common::KEYCODE_KP1:
- case Common::KEYCODE_KP7:
- case Common::KEYCODE_KP9:
- case Common::KEYCODE_KP3:
- case Common::KEYCODE_LEFT:
- case Common::KEYCODE_RIGHT:
- case Common::KEYCODE_UP:
- case Common::KEYCODE_DOWN:
- case Common::KEYCODE_KP4:
- case Common::KEYCODE_KP6:
- case Common::KEYCODE_KP8:
- case Common::KEYCODE_KP2:
- gameStatus.routeIndex = -1; // Stop any automatic route
- _vm->_route->setWalk(nChar); // Direction of hero travel
- break;
- case Common::KEYCODE_F1: // User Help (DOS)
- if (_checkDoubleF1Fl)
- _vm->_file->instructions();
- else
- _vm->_screen->userHelp();
- _checkDoubleF1Fl = !_checkDoubleF1Fl;
- break;
- case Common::KEYCODE_F2: // Toggle sound
- _vm->_sound->toggleSound();
- _vm->_sound->toggleMusic();
- break;
- case Common::KEYCODE_F3: // Repeat last line
- gameStatus.recallFl = true;
- break;
- case Common::KEYCODE_F4: // Save game
- if (gameStatus.viewState == V_PLAY) {
- if (gameStatus.gameOverFl)
- Utils::gameOverMsg();
- else
- _vm->_file->saveGame(-1, Common::String());
- }
- break;
- case Common::KEYCODE_F5: // Restore game
- _vm->_file->restoreGame(-1);
- _vm->_scheduler->restoreScreen(*_vm->_screen_p);
- gameStatus.viewState = V_PLAY;
- break;
- case Common::KEYCODE_F6: // Inventory
- if (gameStatus.viewState == V_PLAY) {
- if (gameStatus.gameOverFl)
- Utils::gameOverMsg();
- else
- showDosInventory();
- }
- break;
- case Common::KEYCODE_F8: // Turbo mode
- _config.turboFl = !_config.turboFl;
- break;
- case Common::KEYCODE_F9: // Boss button
- warning("STUB: F9 (DOS) - BossKey");
- break;
- case Common::KEYCODE_l:
- if (event.kbd.hasFlags(Common::KBD_CTRL)) {
- _vm->_file->restoreGame(-1);
- _vm->_scheduler->restoreScreen(*_vm->_screen_p);
- gameStatus.viewState = V_PLAY;
- } else {
- if (!gameStatus.storyModeFl) { // Keyboard disabled
- // Add printable keys to ring buffer
- uint16 bnext = _putIndex + 1;
- if (bnext >= sizeof(_ringBuffer))
- bnext = 0;
- if (bnext != _getIndex) {
- _ringBuffer[_putIndex] = event.kbd.ascii;
- _putIndex = bnext;
- }
- }
- }
- break;
- case Common::KEYCODE_n:
- if (event.kbd.hasFlags(Common::KBD_CTRL)) {
- warning("STUB: CTRL-N (WIN) - New Game");
- } else {
- if (!gameStatus.storyModeFl) { // Keyboard disabled
- // Add printable keys to ring buffer
- uint16 bnext = _putIndex + 1;
- if (bnext >= sizeof(_ringBuffer))
- bnext = 0;
- if (bnext != _getIndex) {
- _ringBuffer[_putIndex] = event.kbd.ascii;
- _putIndex = bnext;
- }
- }
- }
- break;
- case Common::KEYCODE_s:
- if (event.kbd.hasFlags(Common::KBD_CTRL)) {
- if (gameStatus.viewState == V_PLAY) {
- if (gameStatus.gameOverFl)
- Utils::gameOverMsg();
- else
- _vm->_file->saveGame(-1, Common::String());
- }
- } else {
- if (!gameStatus.storyModeFl) { // Keyboard disabled
- // Add printable keys to ring buffer
- uint16 bnext = _putIndex + 1;
- if (bnext >= sizeof(_ringBuffer))
- bnext = 0;
- if (bnext != _getIndex) {
- _ringBuffer[_putIndex] = event.kbd.ascii;
- _putIndex = bnext;
- }
- }
- }
- break;
- default: // Any other key
- if (!gameStatus.storyModeFl) { // Keyboard disabled
- // Add printable keys to ring buffer
- uint16 bnext = _putIndex + 1;
- if (bnext >= sizeof(_ringBuffer))
- bnext = 0;
- if (bnext != _getIndex) {
- _ringBuffer[_putIndex] = event.kbd.ascii;
- _putIndex = bnext;
- }
- }
- break;
- }
- if (_checkDoubleF1Fl && (nChar != Common::KEYCODE_F1))
- _checkDoubleF1Fl = false;
-}
-
/**
* Parse the user's line of text input. Generate events as necessary
*/
@@ -570,4 +422,13 @@ void Parser_v1d::lineHandler() {
Utils::Box(BOX_ANY, "%s", _vm->_textParser[kTBEh_1d]);
}
+void Parser_v1d::showInventory() {
+ status_t &gameStatus = _vm->getGameStatus();
+ if (gameStatus.viewState == V_PLAY) {
+ if (gameStatus.gameOverFl)
+ Utils::gameOverMsg();
+ else
+ showDosInventory();
+ }
+}
} // End of namespace Hugo
diff --git a/engines/hugo/parser_v1w.cpp b/engines/hugo/parser_v1w.cpp
index 27eb7093ad..6bca77560d 100644
--- a/engines/hugo/parser_v1w.cpp
+++ b/engines/hugo/parser_v1w.cpp
@@ -52,154 +52,6 @@ Parser_v1w::Parser_v1w(HugoEngine *vm) : Parser_v3d(vm) {
Parser_v1w::~Parser_v1w() {
}
-void Parser_v1w::keyHandler(Common::Event event) {
- debugC(1, kDebugParser, "keyHandler(%d)", event.kbd.keycode);
-
- status_t &gameStatus = _vm->getGameStatus();
- uint16 nChar = event.kbd.keycode;
-
- // Process key down event - called from OnKeyDown()
- switch (nChar) { // Set various toggle states
- case Common::KEYCODE_ESCAPE: // Escape key, may want to QUIT
- if (gameStatus.inventoryState == I_ACTIVE) // Remove inventory, if displayed
- gameStatus.inventoryState = I_UP;
- gameStatus.inventoryObjId = -1; // Deselect any dragged icon
- break;
- case Common::KEYCODE_END:
- case Common::KEYCODE_HOME:
- case Common::KEYCODE_PAGEUP:
- case Common::KEYCODE_PAGEDOWN:
- case Common::KEYCODE_KP1:
- case Common::KEYCODE_KP7:
- case Common::KEYCODE_KP9:
- case Common::KEYCODE_KP3:
- case Common::KEYCODE_LEFT:
- case Common::KEYCODE_RIGHT:
- case Common::KEYCODE_UP:
- case Common::KEYCODE_DOWN:
- case Common::KEYCODE_KP4:
- case Common::KEYCODE_KP6:
- case Common::KEYCODE_KP8:
- case Common::KEYCODE_KP2:
- gameStatus.routeIndex = -1; // Stop any automatic route
- _vm->_route->setWalk(nChar); // Direction of hero travel
- break;
- case Common::KEYCODE_F1: // User Help (DOS)
- if (_checkDoubleF1Fl)
- _vm->_file->instructions();
- else
- _vm->_screen->userHelp();
- _checkDoubleF1Fl = !_checkDoubleF1Fl;
- break;
- case Common::KEYCODE_F2: // Toggle sound
- _vm->_sound->toggleSound();
- _vm->_sound->toggleMusic();
- break;
- case Common::KEYCODE_F3: // Repeat last line
- gameStatus.recallFl = true;
- break;
- case Common::KEYCODE_F4: // Save game
- if (gameStatus.viewState == V_PLAY) {
- if (gameStatus.gameOverFl)
- Utils::gameOverMsg();
- else
- _vm->_file->saveGame(-1, Common::String());
- }
- break;
- case Common::KEYCODE_F5: // Restore game
- _vm->_file->restoreGame(-1);
- _vm->_scheduler->restoreScreen(*_vm->_screen_p);
- gameStatus.viewState = V_PLAY;
- break;
- case Common::KEYCODE_F6: // Inventory
- if (gameStatus.gameOverFl) {
- Utils::gameOverMsg();
- } else if ((gameStatus.inventoryState == I_OFF) && (gameStatus.viewState == V_PLAY)) {
- gameStatus.inventoryState = I_DOWN;
- gameStatus.viewState = V_INVENT;
- } else if (gameStatus.inventoryState == I_ACTIVE) {
- gameStatus.inventoryState = I_UP;
- gameStatus.viewState = V_INVENT;
- }
- break;
- case Common::KEYCODE_F8: // Turbo mode
- _config.turboFl = !_config.turboFl;
- break;
- case Common::KEYCODE_F9: // Boss button
- warning("STUB: F9 (DOS) - BossKey");
- break;
- case Common::KEYCODE_l:
- if (event.kbd.hasFlags(Common::KBD_CTRL)) {
- _vm->_file->restoreGame(-1);
- _vm->_scheduler->restoreScreen(*_vm->_screen_p);
- gameStatus.viewState = V_PLAY;
- } else {
- if (!gameStatus.storyModeFl) { // Keyboard disabled
- // Add printable keys to ring buffer
- uint16 bnext = _putIndex + 1;
- if (bnext >= sizeof(_ringBuffer))
- bnext = 0;
- if (bnext != _getIndex) {
- _ringBuffer[_putIndex] = event.kbd.ascii;
- _putIndex = bnext;
- }
- }
- }
- break;
- case Common::KEYCODE_n:
- if (event.kbd.hasFlags(Common::KBD_CTRL)) {
- warning("STUB: CTRL-N (WIN) - New Game");
- } else {
- if (!gameStatus.storyModeFl) { // Keyboard disabled
- // Add printable keys to ring buffer
- uint16 bnext = _putIndex + 1;
- if (bnext >= sizeof(_ringBuffer))
- bnext = 0;
- if (bnext != _getIndex) {
- _ringBuffer[_putIndex] = event.kbd.ascii;
- _putIndex = bnext;
- }
- }
- }
- break;
- case Common::KEYCODE_s:
- if (event.kbd.hasFlags(Common::KBD_CTRL)) {
- if (gameStatus.viewState == V_PLAY) {
- if (gameStatus.gameOverFl)
- Utils::gameOverMsg();
- else
- _vm->_file->saveGame(-1, Common::String());
- }
- } else {
- if (!gameStatus.storyModeFl) { // Keyboard disabled
- // Add printable keys to ring buffer
- uint16 bnext = _putIndex + 1;
- if (bnext >= sizeof(_ringBuffer))
- bnext = 0;
- if (bnext != _getIndex) {
- _ringBuffer[_putIndex] = event.kbd.ascii;
- _putIndex = bnext;
- }
- }
- }
- break;
- default: // Any other key
- if (!gameStatus.storyModeFl) { // Keyboard disabled
- // Add printable keys to ring buffer
- uint16 bnext = _putIndex + 1;
- if (bnext >= sizeof(_ringBuffer))
- bnext = 0;
- if (bnext != _getIndex) {
- _ringBuffer[_putIndex] = event.kbd.ascii;
- _putIndex = bnext;
- }
- }
- break;
- }
- if (_checkDoubleF1Fl && (nChar != Common::KEYCODE_F1))
- _checkDoubleF1Fl = false;
-}
-
/**
* Parse the user's line of text input. Generate events as necessary
*/
@@ -349,4 +201,17 @@ void Parser_v1w::lineHandler() {
}
}
+void Parser_v1w::showInventory() {
+ status_t &gameStatus = _vm->getGameStatus();
+ if (gameStatus.gameOverFl) {
+ Utils::gameOverMsg();
+ } else if ((gameStatus.inventoryState == I_OFF) && (gameStatus.viewState == V_PLAY)) {
+ gameStatus.inventoryState = I_DOWN;
+ gameStatus.viewState = V_INVENT;
+ } else if (gameStatus.inventoryState == I_ACTIVE) {
+ gameStatus.inventoryState = I_UP;
+ gameStatus.viewState = V_INVENT;
+ }
+}
+
} // End of namespace Hugo