From ec57d4bca7660552d2974d88b34ec3d22b456025 Mon Sep 17 00:00:00 2001 From: Julien Templier Date: Mon, 13 Dec 2010 02:23:44 +0000 Subject: [PATCH] ASYLUM: Implement parts of Fisherman puzzle git-svn-id: http://asylumengine.googlecode.com/svn/trunk@723 0bfb4aae-4ea4-11de-8d8d-752d95cf3e3c --- engines/asylum/puzzles/fisherman.cpp | 85 +++++++++++++++++++++++++++- engines/asylum/puzzles/fisherman.h | 11 ++++ engines/asylum/shared.h | 2 + 3 files changed, 96 insertions(+), 2 deletions(-) diff --git a/engines/asylum/puzzles/fisherman.cpp b/engines/asylum/puzzles/fisherman.cpp index ff9ff92a3c5..3422741be17 100644 --- a/engines/asylum/puzzles/fisherman.cpp +++ b/engines/asylum/puzzles/fisherman.cpp @@ -25,27 +25,108 @@ #include "asylum/puzzles/fisherman.h" +#include "asylum/resources/worldstats.h" + +#include "asylum/system/cursor.h" +#include "asylum/system/screen.h" + +#include "asylum/views/scene.h" + +#include "asylum/asylum.h" + namespace Asylum { PuzzleFisherman::PuzzleFisherman(AsylumEngine *engine) : Puzzle(engine) { + memset(&_state, 0, sizeof(_state)); + + _dword_45AAD4 = false; + _counter = 0; + + _dword_45A130 = false; + } PuzzleFisherman::~PuzzleFisherman() { } +////////////////////////////////////////////////////////////////////////// +// Reset +////////////////////////////////////////////////////////////////////////// +void PuzzleFisherman::reset() { + memset(&_state, 0, sizeof(_state)); + _dword_45AAD4 = false; + + // Original setups polygons here + + _dword_45A130 = false; + _counter = 0; + + // TODO update scene fields +} + ////////////////////////////////////////////////////////////////////////// // Event Handling ////////////////////////////////////////////////////////////////////////// bool PuzzleFisherman::init() { - error("[PuzzleFisherman::init] Not implemented!"); + getCursor()->set(getWorld()->graphicResourceIds[47], -1, kCursorAnimationMirror, 7); + + for (uint32 i = 0; i < ARRAYSIZE(_state); i++) + if (_vm->isGameFlagNotSet((GameFlag)(kGameFlag801 + i))) + _state[i] = 0; + + if (_counter == 6) { + _vm->clearGameFlag(kGameFlag619); + _counter = 0; + } + + _dword_45A130 = false; + getScreen()->setPalette(getWorld()->graphicResourceIds[39]); + getScreen()->setGammaLevel(getWorld()->graphicResourceIds[39], 0); + + return mouseDown(); } bool PuzzleFisherman::update() { error("[PuzzleFisherman::update] Not implemented!"); } +bool PuzzleFisherman::key(const AsylumEvent &evt) { + switch (evt.kbd.keycode) { + default: + _vm->switchEventHandler(getScene()); + break; + + case Common::KEYCODE_TAB: + getScreen()->takeScreenshot(); + break; + } + + return false; +} + bool PuzzleFisherman::mouse(const AsylumEvent &evt) { - error("[PuzzleFisherman::mouse] Not implemented!"); + switch (evt.type) { + case Common::EVENT_LBUTTONDOWN: + return mouseDown(); + break; + + case Common::EVENT_RBUTTONDOWN: + getCursor()->hide(); + getSharedData()->setFlag(kFlag1, true); + getScreen()->setupPaletteAndStartFade(0, 0, 0); + + _vm->switchEventHandler(getScene()); + break; + } + + return false; +} + +bool PuzzleFisherman::mouseDown() { + if (!_dword_45A130) + return false; + + error("[PuzzleFisherman::mouseDown] Not implemented!"); } } // End of namespace Asylum diff --git a/engines/asylum/puzzles/fisherman.h b/engines/asylum/puzzles/fisherman.h index a753711b150..fc6488d288d 100644 --- a/engines/asylum/puzzles/fisherman.h +++ b/engines/asylum/puzzles/fisherman.h @@ -37,13 +37,24 @@ public: PuzzleFisherman(AsylumEngine *engine); ~PuzzleFisherman(); + void reset(); + private: + uint32 _state[6]; + int32 _counter; + + bool _dword_45A130; + bool _dword_45AAD4; + ////////////////////////////////////////////////////////////////////////// // Event Handling ////////////////////////////////////////////////////////////////////////// bool init(); bool update(); + bool key(const AsylumEvent &evt); bool mouse(const AsylumEvent &evt); + + bool mouseDown(); }; } // End of namespace Asylum diff --git a/engines/asylum/shared.h b/engines/asylum/shared.h index 5b03cc6b197..50269b5af90 100644 --- a/engines/asylum/shared.h +++ b/engines/asylum/shared.h @@ -100,10 +100,12 @@ enum GameFlag { kGameFlag556 = 556, kGameFlag560 = 560, kGameFlag570 = 570, + kGameFlag619 = 619, kGameFlag635 = 635, kGameFlag636 = 636, kGameFlag637 = 637, kGameFlag776 = 776, + kGameFlag801 = 801, kGameFlag815 = 815, kGameFlag816 = 816, kGameFlag817 = 817,