mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-15 06:08:35 +00:00
MOHAWK: Move Riven inventory code to a new class
This commit is contained in:
parent
22926a1835
commit
0ba035eea6
@ -55,6 +55,7 @@ MODULE_OBJS += \
|
||||
riven.o \
|
||||
riven_card.o \
|
||||
riven_graphics.o \
|
||||
riven_inventory.o \
|
||||
riven_saveload.o \
|
||||
riven_scripts.o \
|
||||
riven_sound.o \
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "mohawk/riven.h"
|
||||
#include "mohawk/riven_card.h"
|
||||
#include "mohawk/riven_graphics.h"
|
||||
#include "mohawk/riven_inventory.h"
|
||||
#include "mohawk/riven_saveload.h"
|
||||
#include "mohawk/riven_sound.h"
|
||||
#include "mohawk/riven_stack.h"
|
||||
@ -50,18 +51,9 @@
|
||||
|
||||
namespace Mohawk {
|
||||
|
||||
Common::Rect *g_atrusJournalRect1;
|
||||
Common::Rect *g_atrusJournalRect2;
|
||||
Common::Rect *g_cathJournalRect2;
|
||||
Common::Rect *g_atrusJournalRect3;
|
||||
Common::Rect *g_cathJournalRect3;
|
||||
Common::Rect *g_trapBookRect3;
|
||||
Common::Rect *g_demoExitRect;
|
||||
|
||||
MohawkEngine_Riven::MohawkEngine_Riven(OSystem *syst, const MohawkGameDescription *gamedesc) :
|
||||
MohawkEngine(syst, gamedesc) {
|
||||
_showHotspots = false;
|
||||
_gameOver = false;
|
||||
_activatedPLST = false;
|
||||
_activatedSLST = false;
|
||||
_extrasFile = nullptr;
|
||||
@ -74,6 +66,7 @@ MohawkEngine_Riven::MohawkEngine_Riven(OSystem *syst, const MohawkGameDescriptio
|
||||
_saveLoad = nullptr;
|
||||
_optionsDialog = nullptr;
|
||||
_card = nullptr;
|
||||
_inventory = nullptr;
|
||||
removeTimer();
|
||||
|
||||
// NOTE: We can never really support CD swapping. All of the music files
|
||||
@ -88,14 +81,6 @@ MohawkEngine_Riven::MohawkEngine_Riven(OSystem *syst, const MohawkGameDescriptio
|
||||
SearchMan.addSubDirectoryMatching(gameDataDir, "exe");
|
||||
SearchMan.addSubDirectoryMatching(gameDataDir, "assets1");
|
||||
SearchMan.addSubDirectoryMatching(gameDataDir, "program");
|
||||
|
||||
g_atrusJournalRect1 = new Common::Rect(295, 402, 313, 426);
|
||||
g_atrusJournalRect2 = new Common::Rect(259, 402, 278, 426);
|
||||
g_cathJournalRect2 = new Common::Rect(328, 408, 348, 419);
|
||||
g_atrusJournalRect3 = new Common::Rect(222, 402, 240, 426);
|
||||
g_cathJournalRect3 = new Common::Rect(291, 408, 311, 419);
|
||||
g_trapBookRect3 = new Common::Rect(363, 396, 386, 432);
|
||||
g_demoExitRect = new Common::Rect(291, 408, 317, 419);
|
||||
}
|
||||
|
||||
MohawkEngine_Riven::~MohawkEngine_Riven() {
|
||||
@ -108,14 +93,8 @@ MohawkEngine_Riven::~MohawkEngine_Riven() {
|
||||
delete _saveLoad;
|
||||
delete _scriptMan;
|
||||
delete _optionsDialog;
|
||||
delete _inventory;
|
||||
delete _rnd;
|
||||
delete g_atrusJournalRect1;
|
||||
delete g_atrusJournalRect2;
|
||||
delete g_cathJournalRect2;
|
||||
delete g_atrusJournalRect3;
|
||||
delete g_cathJournalRect3;
|
||||
delete g_trapBookRect3;
|
||||
delete g_demoExitRect;
|
||||
}
|
||||
|
||||
GUI::Debugger *MohawkEngine_Riven::getDebugger() {
|
||||
@ -136,6 +115,7 @@ Common::Error MohawkEngine_Riven::run() {
|
||||
_saveLoad = new RivenSaveLoad(this, _saveFileMan);
|
||||
_optionsDialog = new RivenOptionsDialog(this);
|
||||
_scriptMan = new RivenScriptManager(this);
|
||||
_inventory = new RivenInventory(this);
|
||||
|
||||
_rnd = new Common::RandomSource("riven");
|
||||
|
||||
@ -198,7 +178,7 @@ Common::Error MohawkEngine_Riven::run() {
|
||||
}
|
||||
|
||||
|
||||
while (!_gameOver && !shouldQuit())
|
||||
while (!shouldQuit())
|
||||
handleEvents();
|
||||
|
||||
return Common::kNoError;
|
||||
@ -222,9 +202,9 @@ void MohawkEngine_Riven::handleEvents() {
|
||||
if (!(getFeatures() & GF_DEMO)) {
|
||||
// Check to show the inventory, but it is always "showing" in the demo
|
||||
if (_eventMan->getMousePos().y >= 392)
|
||||
_gfx->showInventory();
|
||||
_inventory->show();
|
||||
else
|
||||
_gfx->hideInventory();
|
||||
_inventory->hide();
|
||||
}
|
||||
|
||||
needsUpdate = true;
|
||||
@ -237,7 +217,7 @@ void MohawkEngine_Riven::handleEvents() {
|
||||
break;
|
||||
case Common::EVENT_LBUTTONUP:
|
||||
_card->onMouseUp(_eventMan->getMousePos());
|
||||
checkInventoryClick();
|
||||
_inventory->checkClick(_eventMan->getMousePos());
|
||||
break;
|
||||
case Common::EVENT_KEYDOWN:
|
||||
switch (event.kbd.keycode) {
|
||||
@ -441,79 +421,6 @@ void MohawkEngine_Riven::updateCurrentHotspot() {
|
||||
_card->onMouseMove(_eventMan->getMousePos());
|
||||
}
|
||||
|
||||
void MohawkEngine_Riven::checkInventoryClick() {
|
||||
Common::Point mousePos = _eventMan->getMousePos();
|
||||
|
||||
// Don't even bother. We're not in the inventory portion of the screen.
|
||||
if (mousePos.y < 392)
|
||||
return;
|
||||
|
||||
// In the demo, check if we've clicked the exit button
|
||||
if (getFeatures() & GF_DEMO) {
|
||||
if (g_demoExitRect->contains(mousePos)) {
|
||||
if (_stack->getId() == kStackAspit && _card->getId() == 1) {
|
||||
// From the main menu, go to the "quit" screen
|
||||
changeToCard(12);
|
||||
} else if (_stack->getId() == kStackAspit && _card->getId() == 12) {
|
||||
// From the "quit" screen, just quit
|
||||
_gameOver = true;
|
||||
} else {
|
||||
// Otherwise, return to the main menu
|
||||
if (_stack->getId() != kStackAspit)
|
||||
changeToStack(kStackAspit);
|
||||
changeToCard(1);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// No inventory shown on aspit
|
||||
if (_stack->getId() == kStackAspit)
|
||||
return;
|
||||
|
||||
// Set the return stack/card id's.
|
||||
_vars["returnstackid"] = _stack->getId();
|
||||
_vars["returncardid"] = _stack->getCardGlobalId(_card->getId());
|
||||
|
||||
// See RivenGraphics::showInventory() for an explanation
|
||||
// of the variables' meanings.
|
||||
bool hasCathBook = _vars["acathbook"] != 0;
|
||||
bool hasTrapBook = _vars["atrapbook"] != 0;
|
||||
|
||||
// Go to the book if a hotspot contains the mouse
|
||||
if (!hasCathBook) {
|
||||
if (g_atrusJournalRect1->contains(mousePos)) {
|
||||
_gfx->hideInventory();
|
||||
changeToStack(kStackAspit);
|
||||
changeToCard(5);
|
||||
}
|
||||
} else if (!hasTrapBook) {
|
||||
if (g_atrusJournalRect2->contains(mousePos)) {
|
||||
_gfx->hideInventory();
|
||||
changeToStack(kStackAspit);
|
||||
changeToCard(5);
|
||||
} else if (g_cathJournalRect2->contains(mousePos)) {
|
||||
_gfx->hideInventory();
|
||||
changeToStack(kStackAspit);
|
||||
changeToCard(6);
|
||||
}
|
||||
} else {
|
||||
if (g_atrusJournalRect3->contains(mousePos)) {
|
||||
_gfx->hideInventory();
|
||||
changeToStack(kStackAspit);
|
||||
changeToCard(5);
|
||||
} else if (g_cathJournalRect3->contains(mousePos)) {
|
||||
_gfx->hideInventory();
|
||||
changeToStack(kStackAspit);
|
||||
changeToCard(6);
|
||||
} else if (g_trapBookRect3->contains(mousePos)) {
|
||||
_gfx->hideInventory();
|
||||
changeToStack(kStackAspit);
|
||||
changeToCard(7);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Common::SeekableReadStream *MohawkEngine_Riven::getExtrasResource(uint32 tag, uint16 id) {
|
||||
return _extrasFile->getResource(tag, id);
|
||||
}
|
||||
|
@ -44,6 +44,7 @@ class RivenStack;
|
||||
class RivenCard;
|
||||
class RivenHotspot;
|
||||
class RivenSoundManager;
|
||||
class RivenInventory;
|
||||
|
||||
// Riven Stack Types
|
||||
enum {
|
||||
@ -68,16 +69,6 @@ enum RivenTransitionSpeed {
|
||||
kRivenTransitionSpeedBest = 5003
|
||||
};
|
||||
|
||||
// Rects for the inventory object positions (initialized in
|
||||
// MohawkEngine_Riven's constructor).
|
||||
extern Common::Rect *g_atrusJournalRect1;
|
||||
extern Common::Rect *g_atrusJournalRect2;
|
||||
extern Common::Rect *g_cathJournalRect2;
|
||||
extern Common::Rect *g_atrusJournalRect3;
|
||||
extern Common::Rect *g_cathJournalRect3;
|
||||
extern Common::Rect *g_trapBookRect3;
|
||||
extern Common::Rect *g_demoExitRect;
|
||||
|
||||
struct ZipMode {
|
||||
Common::String name;
|
||||
uint16 id;
|
||||
@ -98,6 +89,7 @@ public:
|
||||
RivenGraphics *_gfx;
|
||||
Common::RandomSource *_rnd;
|
||||
RivenScriptManager *_scriptMan;
|
||||
RivenInventory *_inventory;
|
||||
|
||||
GUI::Debugger *getDebugger();
|
||||
|
||||
@ -127,7 +119,6 @@ private:
|
||||
void handleEvents();
|
||||
|
||||
// Hotspot related functions and variables
|
||||
void checkInventoryClick();
|
||||
bool _showHotspots;
|
||||
|
||||
// Variables
|
||||
@ -138,7 +129,6 @@ private:
|
||||
uint32 _timerTime;
|
||||
|
||||
// Miscellaneous
|
||||
bool _gameOver;
|
||||
void checkSunnerAlertClick();
|
||||
|
||||
public:
|
||||
@ -160,7 +150,6 @@ public:
|
||||
uint32 &getStackVar(uint32 index);
|
||||
|
||||
// Miscellaneous
|
||||
void setGameOver() { _gameOver = true; }
|
||||
Common::SeekableReadStream *getExtrasResource(uint32 tag, uint16 id);
|
||||
bool _activatedPLST;
|
||||
bool _activatedSLST;
|
||||
|
@ -51,7 +51,6 @@ RivenGraphics::RivenGraphics(MohawkEngine_Riven* vm) : GraphicsManager(), _vm(vm
|
||||
_screenUpdateRunning = false;
|
||||
_scheduledTransition = -1; // no transition
|
||||
_dirtyScreen = false;
|
||||
_inventoryDrawn = false;
|
||||
|
||||
_creditsImage = 302;
|
||||
_creditsPos = 0;
|
||||
@ -256,79 +255,12 @@ void RivenGraphics::fadeToBlack() {
|
||||
runScheduledTransition();
|
||||
}
|
||||
|
||||
void RivenGraphics::showInventory() {
|
||||
// Don't redraw the inventory
|
||||
if (_inventoryDrawn)
|
||||
return;
|
||||
|
||||
// Clear the inventory area
|
||||
clearInventoryArea();
|
||||
|
||||
// Draw the demo's exit button
|
||||
if (_vm->getFeatures() & GF_DEMO) {
|
||||
// extras.mhk tBMP 101 contains "EXIT" instead of Atrus' journal in the demo!
|
||||
// The demo's extras.mhk contains all the other inventory/marble/credits image
|
||||
// but has hacked tBMP 101 with "EXIT". *sigh*
|
||||
drawInventoryImage(101, g_demoExitRect);
|
||||
} else {
|
||||
// We don't want to show the inventory on setup screens or in other journals.
|
||||
if (_vm->getStack()->getId() == kStackAspit)
|
||||
return;
|
||||
|
||||
// There are three books and three vars. We have three different
|
||||
// combinations. At the start you have just Atrus' journal. Later,
|
||||
// you get Catherine's journal and the trap book. Near the end,
|
||||
// you lose the trap book and have just the two journals.
|
||||
|
||||
bool hasCathBook = _vm->_vars["acathbook"] != 0;
|
||||
bool hasTrapBook = _vm->_vars["atrapbook"] != 0;
|
||||
|
||||
if (!hasCathBook) {
|
||||
drawInventoryImage(101, g_atrusJournalRect1);
|
||||
} else if (!hasTrapBook) {
|
||||
drawInventoryImage(101, g_atrusJournalRect2);
|
||||
drawInventoryImage(102, g_cathJournalRect2);
|
||||
} else {
|
||||
drawInventoryImage(101, g_atrusJournalRect3);
|
||||
drawInventoryImage(102, g_cathJournalRect3);
|
||||
drawInventoryImage(100, g_trapBookRect3);
|
||||
}
|
||||
}
|
||||
|
||||
_vm->_system->updateScreen();
|
||||
_inventoryDrawn = true;
|
||||
}
|
||||
|
||||
void RivenGraphics::hideInventory() {
|
||||
// Don't hide the inventory twice
|
||||
if (!_inventoryDrawn)
|
||||
return;
|
||||
|
||||
// Clear the area
|
||||
clearInventoryArea();
|
||||
|
||||
_inventoryDrawn = false;
|
||||
}
|
||||
|
||||
void RivenGraphics::clearInventoryArea() {
|
||||
// Clear the inventory area
|
||||
static const Common::Rect inventoryRect = Common::Rect(0, 392, 608, 436);
|
||||
|
||||
// Lock the screen
|
||||
Graphics::Surface *screen = _vm->_system->lockScreen();
|
||||
|
||||
// Fill the inventory area with black
|
||||
screen->fillRect(inventoryRect, _pixelFormat.RGBToColor(0, 0, 0));
|
||||
|
||||
_vm->_system->unlockScreen();
|
||||
}
|
||||
|
||||
void RivenGraphics::drawInventoryImage(uint16 id, const Common::Rect *rect) {
|
||||
void RivenGraphics::drawExtrasImageToScreen(uint16 id, const Common::Rect &rect) {
|
||||
MohawkSurface *mhkSurface = _bitmapDecoder->decodeImage(_vm->getExtrasResource(ID_TBMP, id));
|
||||
mhkSurface->convertToTrueColor();
|
||||
Graphics::Surface *surface = mhkSurface->getSurface();
|
||||
|
||||
_vm->_system->copyRectToScreen(surface->getPixels(), surface->pitch, rect->left, rect->top, surface->w, surface->h);
|
||||
_vm->_system->copyRectToScreen(surface->getPixels(), surface->pitch, rect.left, rect.top, surface->w, surface->h);
|
||||
|
||||
delete mhkSurface;
|
||||
}
|
||||
|
@ -44,6 +44,7 @@ public:
|
||||
void drawRect(Common::Rect rect, bool active);
|
||||
void drawImageRect(uint16 id, Common::Rect srcRect, Common::Rect dstRect);
|
||||
void drawExtrasImage(uint16 id, Common::Rect dstRect);
|
||||
void drawExtrasImageToScreen(uint16 id, const Common::Rect &rect);
|
||||
|
||||
Graphics::Surface *getEffectScreen();
|
||||
Graphics::Surface *getBackScreen();
|
||||
@ -64,10 +65,6 @@ public:
|
||||
void fadeToBlack();
|
||||
void setTransitionSpeed(uint32 speed) { _transitionSpeed = speed; }
|
||||
|
||||
// Inventory
|
||||
void showInventory();
|
||||
void hideInventory();
|
||||
|
||||
// Credits
|
||||
void beginCredits();
|
||||
void updateCredits();
|
||||
@ -105,11 +102,6 @@ private:
|
||||
Common::Rect _transitionRect;
|
||||
uint32 _transitionSpeed;
|
||||
|
||||
// Inventory
|
||||
void clearInventoryArea();
|
||||
void drawInventoryImage(uint16 id, const Common::Rect *rect);
|
||||
bool _inventoryDrawn;
|
||||
|
||||
// Screen Related
|
||||
Graphics::Surface *_mainScreen;
|
||||
Graphics::Surface *_effectScreen;
|
||||
|
202
engines/mohawk/riven_inventory.cpp
Normal file
202
engines/mohawk/riven_inventory.cpp
Normal file
@ -0,0 +1,202 @@
|
||||
/* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "mohawk/riven_inventory.h"
|
||||
|
||||
#include "mohawk/resource.h"
|
||||
#include "mohawk/riven.h"
|
||||
#include "mohawk/riven_card.h"
|
||||
#include "mohawk/riven_graphics.h"
|
||||
#include "mohawk/riven_stack.h"
|
||||
|
||||
namespace Mohawk {
|
||||
|
||||
RivenInventory::RivenInventory(MohawkEngine_Riven *vm) :
|
||||
_vm(vm) {
|
||||
|
||||
_inventoryDrawn = false;
|
||||
|
||||
_atrusJournalRect1 = Common::Rect(295, 402, 313, 426);
|
||||
_atrusJournalRect2 = Common::Rect(259, 402, 278, 426);
|
||||
_cathJournalRect2 = Common::Rect(328, 408, 348, 419);
|
||||
_atrusJournalRect3 = Common::Rect(222, 402, 240, 426);
|
||||
_cathJournalRect3 = Common::Rect(291, 408, 311, 419);
|
||||
_trapBookRect3 = Common::Rect(363, 396, 386, 432);
|
||||
_demoExitRect = Common::Rect(291, 408, 317, 419);
|
||||
}
|
||||
|
||||
RivenInventory::~RivenInventory() {
|
||||
|
||||
}
|
||||
|
||||
void RivenInventory::show() {
|
||||
// Don't redraw the inventory
|
||||
if (_inventoryDrawn)
|
||||
return;
|
||||
|
||||
// Clear the inventory area
|
||||
clearArea();
|
||||
|
||||
// Draw the demo's exit button
|
||||
if (_vm->getFeatures() & GF_DEMO) {
|
||||
// extras.mhk tBMP 101 contains "EXIT" instead of Atrus' journal in the demo!
|
||||
// The demo's extras.mhk contains all the other inventory/marble/credits image
|
||||
// but has hacked tBMP 101 with "EXIT". *sigh*
|
||||
_vm->_gfx->drawExtrasImageToScreen(101, _demoExitRect);
|
||||
} else {
|
||||
// We don't want to show the inventory on setup screens or in other journals.
|
||||
if (_vm->getStack()->getId() == kStackAspit)
|
||||
return;
|
||||
|
||||
// There are three books and three vars. We have three different
|
||||
// combinations. At the start you have just Atrus' journal. Later,
|
||||
// you get Catherine's journal and the trap book. Near the end,
|
||||
// you lose the trap book and have just the two journals.
|
||||
|
||||
bool hasCathBook = _vm->_vars["acathbook"] != 0;
|
||||
bool hasTrapBook = _vm->_vars["atrapbook"] != 0;
|
||||
|
||||
if (!hasCathBook) {
|
||||
_vm->_gfx->drawExtrasImageToScreen(101, _atrusJournalRect1);
|
||||
} else if (!hasTrapBook) {
|
||||
_vm->_gfx->drawExtrasImageToScreen(101, _atrusJournalRect2);
|
||||
_vm->_gfx->drawExtrasImageToScreen(102, _cathJournalRect2);
|
||||
} else {
|
||||
_vm->_gfx->drawExtrasImageToScreen(101, _atrusJournalRect3);
|
||||
_vm->_gfx->drawExtrasImageToScreen(102, _cathJournalRect3);
|
||||
_vm->_gfx->drawExtrasImageToScreen(100, _trapBookRect3);
|
||||
}
|
||||
}
|
||||
|
||||
_vm->_system->updateScreen();
|
||||
_inventoryDrawn = true;
|
||||
}
|
||||
|
||||
void RivenInventory::hide() {
|
||||
// Don't hide the inventory twice
|
||||
if (!_inventoryDrawn)
|
||||
return;
|
||||
|
||||
// Clear the area
|
||||
clearArea();
|
||||
|
||||
_inventoryDrawn = false;
|
||||
}
|
||||
|
||||
void RivenInventory::clearArea() {
|
||||
// Clear the inventory area
|
||||
static const Common::Rect inventoryRect = Common::Rect(0, 392, 608, 436);
|
||||
|
||||
// Lock the screen
|
||||
Graphics::Surface *screen = _vm->_system->lockScreen();
|
||||
|
||||
// Fill the inventory area with black
|
||||
screen->fillRect(inventoryRect, screen->format.RGBToColor(0, 0, 0));
|
||||
|
||||
_vm->_system->unlockScreen();
|
||||
}
|
||||
|
||||
void RivenInventory::checkClick(const Common::Point &mousePos) {
|
||||
// Don't even bother. We're not in the inventory portion of the screen.
|
||||
if (mousePos.y < 392)
|
||||
return;
|
||||
|
||||
// In the demo, check if we've clicked the exit button
|
||||
if (_vm->getFeatures() & GF_DEMO) {
|
||||
if (_demoExitRect.contains(mousePos)) {
|
||||
if (_vm->getStack()->getId() == kStackAspit && _vm->getCard()->getId() == 1) {
|
||||
// From the main menu, go to the "quit" screen
|
||||
_vm->changeToCard(12);
|
||||
} else if (_vm->getStack()->getId() == kStackAspit && _vm->getCard()->getId() == 12) {
|
||||
// From the "quit" screen, just quit
|
||||
_vm->quitGame();
|
||||
} else {
|
||||
// Otherwise, return to the main menu
|
||||
if (_vm->getStack()->getId() != kStackAspit)
|
||||
_vm->changeToStack(kStackAspit);
|
||||
_vm->changeToCard(1);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// No inventory shown on aspit
|
||||
if (_vm->getStack()->getId() == kStackAspit)
|
||||
return;
|
||||
|
||||
// Set the return stack/card id's.
|
||||
_vm->_vars["returnstackid"] = _vm->getStack()->getId();
|
||||
_vm->_vars["returncardid"] = _vm->getStack()->getCardGlobalId(_vm->getCard()->getId());
|
||||
|
||||
// See RivenGraphics::show() for an explanation
|
||||
// of the variables' meanings.
|
||||
bool hasCathBook = _vm->_vars["acathbook"] != 0;
|
||||
bool hasTrapBook = _vm->_vars["atrapbook"] != 0;
|
||||
|
||||
// Go to the book if a hotspot contains the mouse
|
||||
if (!hasCathBook) {
|
||||
if (_atrusJournalRect1.contains(mousePos)) {
|
||||
hide();
|
||||
_vm->changeToStack(kStackAspit);
|
||||
_vm->changeToCard(5);
|
||||
}
|
||||
} else if (!hasTrapBook) {
|
||||
if (_atrusJournalRect2.contains(mousePos)) {
|
||||
hide();
|
||||
_vm->changeToStack(kStackAspit);
|
||||
_vm->changeToCard(5);
|
||||
} else if (_cathJournalRect2.contains(mousePos)) {
|
||||
hide();
|
||||
_vm->changeToStack(kStackAspit);
|
||||
_vm->changeToCard(6);
|
||||
}
|
||||
} else {
|
||||
if (_atrusJournalRect3.contains(mousePos)) {
|
||||
hide();
|
||||
_vm->changeToStack(kStackAspit);
|
||||
_vm->changeToCard(5);
|
||||
} else if (_cathJournalRect3.contains(mousePos)) {
|
||||
hide();
|
||||
_vm->changeToStack(kStackAspit);
|
||||
_vm->changeToCard(6);
|
||||
} else if (_trapBookRect3.contains(mousePos)) {
|
||||
hide();
|
||||
_vm->changeToStack(kStackAspit);
|
||||
_vm->changeToCard(7);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RivenInventory::backFromItemScript() const {
|
||||
RivenScriptPtr stopSoundScript = _vm->_scriptMan->createScriptFromData(1, 12, 1, 1);
|
||||
_vm->_scriptMan->runScript(stopSoundScript, false);
|
||||
|
||||
uint16 backStackId = _vm->_vars["returnstackid"];
|
||||
uint32 backCardId = _vm->_vars["returncardid"];
|
||||
|
||||
// Return to where we were before entering the book
|
||||
RivenCommand *back = new RivenStackChangeCommand(_vm, backStackId, backCardId, true);
|
||||
RivenScriptPtr backScript = _vm->_scriptMan->createScriptWithCommand(back);
|
||||
_vm->_scriptMan->runScript(backScript, false);
|
||||
}
|
||||
|
||||
} // End of namespace Mohawk
|
73
engines/mohawk/riven_inventory.h
Normal file
73
engines/mohawk/riven_inventory.h
Normal file
@ -0,0 +1,73 @@
|
||||
/* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef RIVEN_INVENTORY_H
|
||||
#define RIVEN_INVENTORY_H
|
||||
|
||||
#include "common/rect.h"
|
||||
|
||||
namespace Mohawk {
|
||||
|
||||
class MohawkEngine_Riven;
|
||||
|
||||
/**
|
||||
* The player's inventory
|
||||
*
|
||||
* Is responsible for drawing the bottom part of the screen.
|
||||
*/
|
||||
class RivenInventory {
|
||||
public:
|
||||
RivenInventory(MohawkEngine_Riven *vm);
|
||||
virtual ~RivenInventory();
|
||||
|
||||
/** Make the inventory visible */
|
||||
void show();
|
||||
|
||||
/** Make the inventory invisible */
|
||||
void hide();
|
||||
|
||||
/** Handle a click event in the inventory area */
|
||||
void checkClick(const Common::Point &mousePos);
|
||||
|
||||
/** Go back to the game from an inventory item detail view */
|
||||
void backFromItemScript() const;
|
||||
|
||||
private:
|
||||
void clearArea();
|
||||
|
||||
MohawkEngine_Riven *_vm;
|
||||
|
||||
bool _inventoryDrawn;
|
||||
|
||||
// Rects for the inventory object positions
|
||||
Common::Rect _atrusJournalRect1;
|
||||
Common::Rect _atrusJournalRect2;
|
||||
Common::Rect _cathJournalRect2;
|
||||
Common::Rect _atrusJournalRect3;
|
||||
Common::Rect _cathJournalRect3;
|
||||
Common::Rect _trapBookRect3;
|
||||
Common::Rect _demoExitRect;
|
||||
};
|
||||
|
||||
} // End of namespace Mohawk
|
||||
|
||||
#endif
|
@ -216,7 +216,7 @@ void RivenStack::runCredits(uint16 video, uint32 delay) {
|
||||
_vm->_system->delayMillis(10);
|
||||
}
|
||||
|
||||
_vm->setGameOver();
|
||||
_vm->quitGame();
|
||||
}
|
||||
|
||||
void RivenStack::installCardTimer() {
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "mohawk/riven.h"
|
||||
#include "mohawk/riven_card.h"
|
||||
#include "mohawk/riven_graphics.h"
|
||||
#include "mohawk/riven_inventory.h"
|
||||
#include "mohawk/riven_sound.h"
|
||||
|
||||
#include "common/translation.h"
|
||||
@ -95,20 +96,7 @@ void ASpit::xaatrusopenbook(uint16 argc, uint16 *argv) {
|
||||
}
|
||||
|
||||
void ASpit::xaatrusbookback(uint16 argc, uint16 *argv) {
|
||||
inventoryBackFromItemScript();
|
||||
}
|
||||
|
||||
void ASpit::inventoryBackFromItemScript() const {
|
||||
RivenScriptPtr stopSoundScript = _vm->_scriptMan->createScriptFromData(1, 12, 1, 1);
|
||||
_vm->_scriptMan->runScript(stopSoundScript, false);
|
||||
|
||||
uint16 backStackId = _vm->_vars["returnstackid"];
|
||||
uint32 backCardId = _vm->_vars["returncardid"];
|
||||
|
||||
// Return to where we were before entering the book
|
||||
RivenCommand *back = new RivenStackChangeCommand(_vm, backStackId, backCardId, true);
|
||||
RivenScriptPtr backScript = _vm->_scriptMan->createScriptWithCommand(back);
|
||||
_vm->_scriptMan->runScript(backScript, false);
|
||||
_vm->_inventory->backFromItemScript();
|
||||
}
|
||||
|
||||
void ASpit::xaatrusbookprevpage(uint16 argc, uint16 *argv) {
|
||||
@ -198,7 +186,7 @@ void ASpit::xacathopenbook(uint16 argc, uint16 *argv) {
|
||||
}
|
||||
|
||||
void ASpit::xacathbookback(uint16 argc, uint16 *argv) {
|
||||
inventoryBackFromItemScript();
|
||||
_vm->_inventory->backFromItemScript();
|
||||
}
|
||||
|
||||
void ASpit::xacathbookprevpage(uint16 argc, uint16 *argv) {
|
||||
@ -238,7 +226,7 @@ void ASpit::xacathbooknextpage(uint16 argc, uint16 *argv) {
|
||||
void ASpit::xtrapbookback(uint16 argc, uint16 *argv) {
|
||||
// Return to where we were before entering the book
|
||||
_vm->_vars["atrap"] = 0;
|
||||
inventoryBackFromItemScript();
|
||||
_vm->_inventory->backFromItemScript();
|
||||
}
|
||||
|
||||
void ASpit::xatrapbookclose(uint16 argc, uint16 *argv) {
|
||||
@ -309,7 +297,7 @@ void ASpit::xadisablemenuintro(uint16 argc, uint16 *argv) {
|
||||
// The original also had this shortcut.
|
||||
|
||||
// Hide the "exit" button here
|
||||
_vm->_gfx->hideInventory();
|
||||
_vm->_inventory->hide();
|
||||
}
|
||||
|
||||
void ASpit::xaenablemenuintro(uint16 argc, uint16 *argv) {
|
||||
@ -318,12 +306,12 @@ void ASpit::xaenablemenuintro(uint16 argc, uint16 *argv) {
|
||||
// The original also had this shortcut.
|
||||
|
||||
// Show the "exit" button here
|
||||
_vm->_gfx->showInventory();
|
||||
_vm->_inventory->show();
|
||||
}
|
||||
|
||||
void ASpit::xademoquit(uint16 argc, uint16 *argv) {
|
||||
// Exactly as it says on the tin. In the demo, this function quits.
|
||||
_vm->setGameOver();
|
||||
_vm->quitGame();
|
||||
}
|
||||
|
||||
void ASpit::xaexittomain(uint16 argc, uint16 *argv) {
|
||||
|
@ -67,8 +67,6 @@ public:
|
||||
void xaenablemenuintro(uint16 argc, uint16 *argv);
|
||||
void xademoquit(uint16 argc, uint16 *argv);
|
||||
void xaexittomain(uint16 argc, uint16 *argv);
|
||||
|
||||
void inventoryBackFromItemScript() const;
|
||||
};
|
||||
|
||||
} // End of namespace RivenStacks
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "mohawk/riven.h"
|
||||
#include "mohawk/riven_card.h"
|
||||
#include "mohawk/riven_graphics.h"
|
||||
#include "mohawk/riven_inventory.h"
|
||||
|
||||
namespace Mohawk {
|
||||
namespace RivenStacks {
|
||||
@ -53,11 +54,11 @@ void RSpit::xrshowinventory(uint16 argc, uint16 *argv) {
|
||||
// Give the trap book and Catherine's journal to the player
|
||||
_vm->_vars["atrapbook"] = 1;
|
||||
_vm->_vars["acathbook"] = 1;
|
||||
_vm->_gfx->showInventory();
|
||||
_vm->_inventory->show();
|
||||
}
|
||||
|
||||
void RSpit::xrhideinventory(uint16 argc, uint16 *argv) {
|
||||
_vm->_gfx->hideInventory();
|
||||
_vm->_inventory->hide();
|
||||
}
|
||||
|
||||
void RSpit::rebelPrisonWindowTimer() {
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "mohawk/riven.h"
|
||||
#include "mohawk/riven_card.h"
|
||||
#include "mohawk/riven_graphics.h"
|
||||
#include "mohawk/riven_inventory.h"
|
||||
|
||||
#include "common/events.h"
|
||||
|
||||
@ -181,7 +182,7 @@ void TSpit::xtchotakesbook(uint16 argc, uint16 *argv) {
|
||||
}
|
||||
|
||||
void TSpit::xthideinventory(uint16 argc, uint16 *argv) {
|
||||
_vm->_gfx->hideInventory();
|
||||
_vm->_inventory->hide();
|
||||
}
|
||||
|
||||
// Marble Puzzle related constants
|
||||
|
Loading…
Reference in New Issue
Block a user