diff options
| author | whitertandrek | 2018-03-22 07:47:45 +0200 | 
|---|---|---|
| committer | Eugene Sandulenko | 2018-06-28 23:51:32 +0200 | 
| commit | 467d3f1ab890bfca77629dd239b670ee4797bfe8 (patch) | |
| tree | b534737f1dbafc4ec98a044d576f2457dc919517 | |
| parent | 824b3fa38e965e425d09239f2ac81c4853eb43e8 (diff) | |
| download | scummvm-rg350-467d3f1ab890bfca77629dd239b670ee4797bfe8.tar.gz scummvm-rg350-467d3f1ab890bfca77629dd239b670ee4797bfe8.tar.bz2 scummvm-rg350-467d3f1ab890bfca77629dd239b670ee4797bfe8.zip | |
PINK: did a big file movement for better readability. Almost implemented
conditions and sideEffects. Added more classes. Now engine can play intro's sound.
76 files changed, 1293 insertions, 831 deletions
| diff --git a/engines/pink/archive.cpp b/engines/pink/archive.cpp index b03cf9148c..9e0642050e 100644 --- a/engines/pink/archive.cpp +++ b/engines/pink/archive.cpp @@ -22,20 +22,19 @@  #include <common/debug.h>  #include <common/file.h> -#include <engines/pink/actors/actor.h> -#include <engines/pink/walk/walk_location.h> -#include <engines/pink/actions/action_hide.h> -#include <engines/pink/actions/action_play.h> -#include <engines/pink/actions/action_sound.h> -#include <engines/pink/sequences/sequence.h> -#include <engines/pink/items/sequence_item_default_action.h> -#include <engines/pink/items/sequence_item_leader.h> -#include <engines/pink/handlers/handler_start_page.h> -#include <engines/pink/side_effects/side_effect_exit.h> -#include <engines/pink/side_effects/side_effect_module_variable.h> -#include "module.h" -#include "page.h" -#include "actors/lead_actor.h" +#include <engines/pink/objects/object.h> +#include <engines/pink/objects/module.h> +#include <engines/pink/objects/pages/game_page.h> +#include <engines/pink/objects/actors/lead_actor.h> +#include <engines/pink/objects/condition.h> +#include <engines/pink/objects/side_effect.h> +#include <engines/pink/objects/sequences/sequence_item.h> +#include <engines/pink/objects/sequences/sequence.h> +#include <engines/pink/objects/handlers/handler.h> +#include <engines/pink/objects/actions/action_play.h> +#include <engines/pink/objects/actions/action_sound.h> +#include <engines/pink/objects/actions/action_hide.h> +#include <engines/pink/objects/walk/walk_location.h>  namespace Pink { @@ -194,15 +193,12 @@ static Object* createObject(int objectId){  Archive::Archive(Common::File &file)      : _file(file)  { -    debug("Archive created");      _objectMap.push_back(0);      _objectIdMap.push_back(kNullObject);  }  Archive::~Archive() -{ -    debug("Archive destroyed"); -} +{}  void Archive::mapObject(Object *obj) {      _objectMap.push_back(obj); @@ -222,8 +218,9 @@ Object *Archive::readObject() {      bool isCopyReturned;      Object *res = parseObject(isCopyReturned); -    if (res && !isCopyReturned) +    if (res && !isCopyReturned) {          res->deserialize(*this); +    }      return res;  } @@ -284,7 +281,7 @@ uint Archive::findObjectId(const char *name) {      }));      if (!found) -        error("Class %s is not implemented", name); +        error("Class %s is not in class Map", name);      return found->id;  } diff --git a/engines/pink/archive.h b/engines/pink/archive.h index 57ee78dc62..906169b373 100644 --- a/engines/pink/archive.h +++ b/engines/pink/archive.h @@ -23,8 +23,8 @@  #ifndef PINK_ARCHIVE_H  #define PINK_ARCHIVE_H -#include "utils.h" -#include <engines/pink/object.h> +#include <engines/pink/objects/object.h> +#include <common/str-array.h>  namespace Common { @@ -46,7 +46,6 @@ public:      Object *readObject();      Common::String readString(); -  private:      uint findObjectId(const char *name); @@ -62,7 +61,7 @@ inline Archive &operator>>(Archive &archive, Common::Array<T> &arr){      uint size = archive.readCount();      arr.resize(size);      for (uint i = 0; i < size; ++i) { -        arr[i] = reinterpret_cast<T> (archive.readObject()); // hack; doesn't know better approach +        arr[i] = reinterpret_cast<T> (archive.readObject());      }      return archive;  } @@ -83,7 +82,7 @@ inline Archive &operator>>(Archive &archive, uint32 &num){      return archive;  } -inline Archive &operator>>(Archive &archive, StringArray &array){ +inline Archive &operator>>(Archive &archive, Common::StringArray &array){      uint32 size = archive.readCount();      array.resize(size);      for (uint i = 0; i < size; ++i) { diff --git a/engines/pink/cursor_mgr.cpp b/engines/pink/cursor_mgr.cpp index 90cbd904d5..b5f9d4c64b 100644 --- a/engines/pink/cursor_mgr.cpp +++ b/engines/pink/cursor_mgr.cpp @@ -24,6 +24,6 @@  namespace Pink { -CursorMgr::CursorMgr(GamePage *page) : page(page) {} +CursorMgr::CursorMgr(GamePage *page) : _page(page) {}  } // End of namespace Pink
\ No newline at end of file diff --git a/engines/pink/cursor_mgr.h b/engines/pink/cursor_mgr.h index cfc16ac930..fac7c2eccc 100644 --- a/engines/pink/cursor_mgr.h +++ b/engines/pink/cursor_mgr.h @@ -23,7 +23,7 @@  #ifndef PINK_CURSOR_MGR_H  #define PINK_CURSOR_MGR_H -#include "engines/pink/object.h" +#include "engines/pink/objects/object.h"  namespace Pink { @@ -35,8 +35,8 @@ public:      CursorMgr(GamePage *page);  private: -    Actor *actor; -    GamePage *page; +    Actor *_actor; +    GamePage *_page;  };  } // End of namespace Pink diff --git a/engines/pink/file.cpp b/engines/pink/file.cpp index 04e87c287b..996a13d352 100644 --- a/engines/pink/file.cpp +++ b/engines/pink/file.cpp @@ -21,7 +21,7 @@   */  #include <common/str.h> -#include "page.h" +#include "engines/pink/objects/pages/game_page.h"  #include "pink.h"  namespace Pink { @@ -167,7 +167,7 @@ void ResourceDescription::load(Common::File &file) {      uint16 temp;      file.read(&temp, sizeof(temp)); -    InBro = temp ? true : false; +    inBro = temp ? true : false;  }  } // End of namespace Pink
\ No newline at end of file diff --git a/engines/pink/file.h b/engines/pink/file.h index 2b1d7cb917..36a6af2026 100644 --- a/engines/pink/file.h +++ b/engines/pink/file.h @@ -24,7 +24,6 @@  #define PINK_FILE_H  #include <common/file.h> -#include "sound.h"  namespace Pink { @@ -44,7 +43,7 @@ struct ResourceDescription {      char name[16];      uint32 offset;      uint32 size; -    bool InBro; // in original it is short. +    bool inBro; // in original it is short.                   // Don't know what's better to use.(Perhaps no diffrence because of padding)  }; diff --git a/engines/pink/handlers/handler.cpp b/engines/pink/handlers/handler.cpp deleted file mode 100644 index d42d01510c..0000000000 --- a/engines/pink/handlers/handler.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/* 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 "handler.h" -#include "../archive.h" -#include "../side_effects/side_effect.h" - -namespace Pink { - -void Handler::deserialize(Archive &archive) { -    assert(archive.readCount() == 0); // intro has zero conditions, so skip; -    archive >> _sideEffects; -} - -bool Handler::initConditions(LeadActor *actor) { -    return true; -} - -void Handler::initSideEffects(LeadActor *actor) { -    for (int i = 0; i < _sideEffects.size(); ++i) { -        _sideEffects[i]->init(actor); -    } -} - -} // End of namespace Pink diff --git a/engines/pink/handlers/handler_sequences.cpp b/engines/pink/handlers/handler_sequences.cpp deleted file mode 100644 index c785883210..0000000000 --- a/engines/pink/handlers/handler_sequences.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/* 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 "handler_sequences.h" -#include <engines/pink/sequences/sequencer.h> -#include "../archive.h" -#include "../actors/lead_actor.h" - -namespace Pink { - -void HandlerSequences::deserialize(Archive &archive) { -    Handler::deserialize(archive); -    archive >> _sequences; -} - -void HandlerSequences::initSequence(LeadActor *actor) { -    initSideEffects(actor); - -    Sequencer *sequencer = actor->getSequencer(); -    Sequence *sequence = sequencer->findSequence(_sequences[0]); //actually we must pick random sequence -    sequencer->authorSequence(sequence, 0); -} - -} // End of namespace Pink
\ No newline at end of file diff --git a/engines/pink/handlers/handler_start_page.cpp b/engines/pink/handlers/handler_start_page.cpp deleted file mode 100644 index 8fef49eee2..0000000000 --- a/engines/pink/handlers/handler_start_page.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/* 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 "handler_start_page.h" -#include <common/debug.h> -#include "../archive.h" - -namespace Pink { - -void HandlerStartPage::deserialize(Archive &archive) { -    debug("HandlerStartPage: "); -    HandlerSequences::deserialize(archive); - -    for (uint i = 0; i < _sequences.size(); ++i) { -        debug("\t%s", _sequences[i].c_str()); -    } -} - -} // End of namespace Pink
\ No newline at end of file diff --git a/engines/pink/handlers/handler_start_page.h b/engines/pink/handlers/handler_start_page.h deleted file mode 100644 index a273e1e354..0000000000 --- a/engines/pink/handlers/handler_start_page.h +++ /dev/null @@ -1,38 +0,0 @@ -/* 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 PINK_HANDLER_START_PAGE_H -#define PINK_HANDLER_START_PAGE_H - -#include "handler.h" -#include "handler_sequences.h" - -namespace Pink { - -class HandlerStartPage : public HandlerSequences { -public: -    virtual void deserialize(Archive &archive); -}; - -} // End of namespace Pink - -#endif diff --git a/engines/pink/items/sequence_item.cpp b/engines/pink/items/sequence_item.cpp deleted file mode 100644 index ade4e40e9d..0000000000 --- a/engines/pink/items/sequence_item.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* 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 <common/debug.h> -#include <engines/pink/sequences/sequence.h> -#include <engines/pink/sequences/sequencer.h> -#include <engines/pink/actions/action.h> -#include "sequence_item.h" -#include "../archive.h" -#include "sequence_item_leader.h" -#include "sequence_item_default_action.h" -#include "../page.h" -#include "../actors/actor.h" - -namespace Pink { - -void SequenceItem::deserialize(Archive &archive) { -    archive >> _actorName >> _actionName; -    if (!dynamic_cast<SequenceItemLeader*>(this) && !dynamic_cast<SequenceItemDefaultAction*>(this)) -        debug("\t\tSequenceItem: _actor = %s, _action = %s", _actorName.c_str(), _actionName.c_str()); -} - -const Common::String &SequenceItem::getActor() const { -    return _actorName; -} - -const Common::String &SequenceItem::getAction() const { -    return _actionName; -} - -bool SequenceItem::execute(int unk, Sequence *sequence, bool unk2) { -    Actor *actor; -    Action *action; -    if (!(actor = sequence->_sequencer->_page->findActor(_actorName)) || -        !(action = actor->findAction(_actionName))) { -        return false; -    } - -    actor->setAction(action, unk2); -    Common::Array<SequenceActorState> &states = sequence->_context->_states; -    for (int i = 0; i < sequence->_context->_states.size(); ++i) { -        if (states[i]._actorName == _actorName){ -            states[i]._unk = unk; -            sequence->_context->_actor = dynamic_cast<SequenceItemLeader*>(this) ? -                                         actor : sequence->_context->_actor; -            // TODO change to virt call -        } -    } - -    return true; -} - -} // End of namespace Pink
\ No newline at end of file diff --git a/engines/pink/items/sequence_item_default_action.cpp b/engines/pink/items/sequence_item_default_action.cpp deleted file mode 100644 index 3428639f10..0000000000 --- a/engines/pink/items/sequence_item_default_action.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/* 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 <engines/pink/archive.h> -#include <common/debug.h> -#include "sequence_item_default_action.h" - -namespace Pink { - -void Pink::SequenceItemDefaultAction::deserialize(Archive &archive) { -    SequenceItem::deserialize(archive); -    debug("\t\tSequenceItemDefaultAction: _actor = %s, _action = %s", -          _actorName.c_str(), _actionName.c_str()); -} - -} // End of namespace Pink
\ No newline at end of file diff --git a/engines/pink/items/sequence_item_default_action.h b/engines/pink/items/sequence_item_default_action.h deleted file mode 100644 index 99096738b5..0000000000 --- a/engines/pink/items/sequence_item_default_action.h +++ /dev/null @@ -1,37 +0,0 @@ -/* 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 PINK_SEQUENCE_ITEM_DEFAULT_ACTION_H -#define PINK_SEQUENCE_ITEM_DEFAULT_ACTION_H - -#include "sequence_item.h" - -namespace Pink { - -class SequenceItemDefaultAction : public SequenceItem { -public: -    virtual void deserialize(Archive &archive); -}; - -} // End of namespace Pink - -#endif diff --git a/engines/pink/module.mk b/engines/pink/module.mk index b78f3f16f3..a78312ad5e 100644 --- a/engines/pink/module.mk +++ b/engines/pink/module.mk @@ -8,14 +8,30 @@ MODULE_OBJS = \  	sound.o \  	file.o \  	archive.o \ -    object.o \ -    module.o \ -    page.o \ -    inventory.o \ +	cursor_mgr.o \ +    objects/object.o \ +    objects/module.o \ +    objects/pages/page.o \ +    objects/pages/game_page.o \ +    objects/inventory.o \ +    objects/side_effect.o \ +    objects/condition.o \      resource_mgr.o \ -    actions/action.o \ -    actors/actor.o \ -    actors/lead_actor.o \ +    objects/actions/action.o \ +    objects/actions/action_cel.o \ +    objects/actions/action_hide.o \ +    objects/actions/action_play.o \ +    objects/actions/action_sound.o \ +    objects/actions/action_still.o \ +    objects/actors/actor.o \ +    objects/actors/lead_actor.o \ +    objects/walk/walk_mgr.o \ +    objects/walk/walk_location.o \ +    objects/sequences/sequence.o \ +    objects/sequences/sequence_item.o \ +    objects/sequences/sequencer.o \ +    objects/handlers/handler.o \ +    objects/handlers/handler_timer.o \  # This module can be built as a plugin diff --git a/engines/pink/actions/action.cpp b/engines/pink/objects/actions/action.cpp index dfeed6f2c7..0853e377aa 100644 --- a/engines/pink/actions/action.cpp +++ b/engines/pink/objects/actions/action.cpp @@ -21,8 +21,8 @@   */  #include "action.h" -#include "../actors/actor.h" -#include "../archive.h" +#include "engines/pink/objects/actors/actor.h" +#include "engines/pink/archive.h"  namespace Pink { diff --git a/engines/pink/actions/action.h b/engines/pink/objects/actions/action.h index 1037181f44..5b164a3052 100644 --- a/engines/pink/actions/action.h +++ b/engines/pink/objects/actions/action.h @@ -23,7 +23,7 @@  #ifndef PINK_ACTION_H  #define PINK_ACTION_H -#include "../object.h" +#include "engines/pink/objects/object.h"  namespace Pink { @@ -32,8 +32,10 @@ class Actor;  class Action : public NamedObject {  public:      virtual void deserialize(Archive &archive); -    virtual void play(bool unk_startNow) {}; //?? not sure about parameter +    virtual void start(bool unk) {};      virtual void end() {}; +    virtual void update() {}; +    virtual void toConsole() {};  protected:      Actor *_actor; diff --git a/engines/pink/actions/action_cel.cpp b/engines/pink/objects/actions/action_cel.cpp index a84ea41932..f1c350473f 100644 --- a/engines/pink/actions/action_cel.cpp +++ b/engines/pink/objects/actions/action_cel.cpp @@ -20,8 +20,9 @@   *   */ +#include <common/debug.h>  #include "action_cel.h" -#include "../archive.h" +#include "engines/pink/archive.h"  namespace Pink { diff --git a/engines/pink/actions/action_cel.h b/engines/pink/objects/actions/action_cel.h index ca481f7747..8c6a61a405 100644 --- a/engines/pink/actions/action_cel.h +++ b/engines/pink/objects/actions/action_cel.h @@ -33,7 +33,7 @@ public:  protected:      Common::String _fileName; -    uint32 _z; // Z coordinate for sprite +    uint32 _z;  };  } // End of namespace Pink diff --git a/engines/pink/actions/action_hide.cpp b/engines/pink/objects/actions/action_hide.cpp index a63cc49c25..7df43662bc 100644 --- a/engines/pink/actions/action_hide.cpp +++ b/engines/pink/objects/actions/action_hide.cpp @@ -21,7 +21,7 @@   */  #include "action_hide.h" -#include "../actors/actor.h" +#include "engines/pink/objects/actors/actor.h"  #include <engines/pink/archive.h>  #include <common/debug.h> @@ -30,7 +30,6 @@ namespace Pink {  void Pink::ActionHide::deserialize(Archive &archive) {      Action::deserialize(archive); -    debug("\tActionHide: _name = %s", _name.c_str());  }  void ActionHide::play(bool unk_startNow) { @@ -42,4 +41,8 @@ void ActionHide::end() {      debug("ActionHide %s is ended", _name.c_str());  } +void ActionHide::toConsole() { +    debug("\tActionHide: _name = %s", _name.c_str()); +} +  } //End of namespace Pink
\ No newline at end of file diff --git a/engines/pink/actions/action_hide.h b/engines/pink/objects/actions/action_hide.h index e9b3294dab..fa6e717ede 100644 --- a/engines/pink/actions/action_hide.h +++ b/engines/pink/objects/actions/action_hide.h @@ -31,6 +31,8 @@ class ActionHide : public Action {  public:      virtual void deserialize(Archive &archive); +    virtual void toConsole(); +      virtual void play(bool unk_startNow);      virtual void end();  }; diff --git a/engines/pink/actions/action_play.cpp b/engines/pink/objects/actions/action_play.cpp index 9dc2ef479a..5e6b692d30 100644 --- a/engines/pink/actions/action_play.cpp +++ b/engines/pink/objects/actions/action_play.cpp @@ -22,13 +22,16 @@  #include <common/debug.h>  #include "action_play.h" -#include "../archive.h" +#include "engines/pink/archive.h"  namespace Pink {  void ActionPlay::deserialize(Archive &archive) {      ActionStill::deserialize(archive);      archive >> _stopFrame; +} + +void ActionPlay::toConsole() {      debug("\tActionPlay: _name = %s, _fileName = %s, z = %u, _startFrame = %u,"                    " _endFrame = %u", _name.c_str(), _fileName.c_str(), _z, _startFrame, _stopFrame);  } diff --git a/engines/pink/actions/action_play.h b/engines/pink/objects/actions/action_play.h index 00360d9fc0..d53b44a1d1 100644 --- a/engines/pink/actions/action_play.h +++ b/engines/pink/objects/actions/action_play.h @@ -29,7 +29,9 @@  namespace Pink {  class ActionPlay : public ActionStill { +public:      virtual void deserialize(Archive &archive); +    virtual void toConsole();  private:      uint32 _stopFrame; diff --git a/engines/pink/actions/action_sound.cpp b/engines/pink/objects/actions/action_sound.cpp index ee85689d4f..f389f97a1a 100644 --- a/engines/pink/actions/action_sound.cpp +++ b/engines/pink/objects/actions/action_sound.cpp @@ -22,18 +22,51 @@  #include <common/debug.h>  #include "action_sound.h" -#include "../archive.h" +#include "engines/pink/archive.h" +#include <engines/pink/objects/actors/actor.h> +#include <engines/pink/objects/pages/game_page.h> +#include <engines/pink/sound.h> +  namespace Pink { +ActionSound::ActionSound() +    : _sound(nullptr), _isStopped(1) +{} +  void ActionSound::deserialize(Archive &archive) {      Action::deserialize(archive);      archive >> _fileName;      _volume = archive.readDWORD();      _isLoop = (bool) archive.readDWORD();      _isBackground = (bool) archive.readDWORD(); +} + +void ActionSound::toConsole() {      debug("\tActionSound: _name = %s, _fileName = %s, _volume = %u, _isLoop = %u,"                    " _isBackground = %u", _name.c_str(), _fileName.c_str(), _volume, _isLoop, _isBackground);  } +void ActionSound::start(bool unk) { +    assert(!_sound); +    _sound = _actor->getPage()->loadSound(_fileName); + +    Audio::Mixer::SoundType soundType =  _isBackground ? Audio::Mixer::SoundType::kMusicSoundType +                                                       : Audio::Mixer::SoundType::kSpeechSoundType; +    _sound->play(soundType, _volume, _isLoop); +    if (_isLoop) +        _actor->endAction(); +} + +void ActionSound::end() { +    _sound->stop(); +    delete _sound; +    _sound = nullptr; +} + +void ActionSound::update() { +    if (!_sound->isPlaying()) +        _actor->endAction(); +} +  } // End of namespace Pink
\ No newline at end of file diff --git a/engines/pink/actions/action_sound.h b/engines/pink/objects/actions/action_sound.h index 15b27d795b..e4bb2f1822 100644 --- a/engines/pink/actions/action_sound.h +++ b/engines/pink/objects/actions/action_sound.h @@ -31,8 +31,15 @@ class Sound;  class ActionSound : public Action {  public: +    ActionSound();      virtual void deserialize(Archive &archive); +    virtual void toConsole(); + +    virtual void start(bool unk_startNow); +    virtual void end(); +    virtual void update(); +  private:      Sound *_sound;      Common::String _fileName; diff --git a/engines/pink/actions/action_still.cpp b/engines/pink/objects/actions/action_still.cpp index b33476a034..3c6bf17cad 100644 --- a/engines/pink/actions/action_still.cpp +++ b/engines/pink/objects/actions/action_still.cpp @@ -22,18 +22,18 @@  #include <common/debug.h>  #include "action_still.h" -#include "../archive.h" -#include "action_play.h" +#include "engines/pink/archive.h"  namespace Pink {  void ActionStill::deserialize(Archive &archive) {      ActionCEL::deserialize(archive);      archive >> _startFrame; -    if (!dynamic_cast<ActionPlay*>(this)){ -        debug("\tActionStill: _name = %s, _fileName = %s, _startFrame = %u", -              _name.c_str(), _fileName.c_str(), _startFrame); -    } +} + +void ActionStill::toConsole() { +    debug("\tActionStill: _name = %s, _fileName = %s, _startFrame = %u", +          _name.c_str(), _fileName.c_str(), _startFrame);  }  } // End of namespace Pink
\ No newline at end of file diff --git a/engines/pink/actions/action_still.h b/engines/pink/objects/actions/action_still.h index 1400766a91..075371a9cc 100644 --- a/engines/pink/actions/action_still.h +++ b/engines/pink/objects/actions/action_still.h @@ -30,6 +30,7 @@ namespace Pink {  class ActionStill : public ActionCEL {  public:      virtual void deserialize(Archive &archive); +    virtual void toConsole();  protected:      uint32 _startFrame; diff --git a/engines/pink/items/sequence_item_leader.cpp b/engines/pink/objects/actions/walk_action.cpp index 5e19fb4317..39be8f4443 100644 --- a/engines/pink/items/sequence_item_leader.cpp +++ b/engines/pink/objects/actions/walk_action.cpp @@ -20,17 +20,21 @@   *   */ +#include "walk_action.h"  #include <engines/pink/archive.h>  #include <common/debug.h> -#include "sequence_item_leader.h"  namespace Pink { +void WalkAction::deserialize(Archive &archive) { +    ActionCEL::deserialize(archive); +    uint32 calcFramePositions = archive.readDWORD(); +    _toCalcFramePositions = calcFramePositions ? true : false; +} -void Pink::SequenceItemLeader::deserialize(Archive &archive) { -    SequenceItem::deserialize(archive); -    debug("\t\tSequenceItemLeader: _actor = %s, _action = %s", -          _actorName.c_str(), _actionName.c_str()); +void WalkAction::toConsole() { +    debug("\tWalkAction: _name = %s, _fileName = %s, _calcFramePositions = %u", +          _name.c_str(), _fileName.c_str(), _toCalcFramePositions);  } -} //End of namespace Pink
\ No newline at end of file +} // End of namespace Pink
\ No newline at end of file diff --git a/engines/pink/items/sequence_item_leader.h b/engines/pink/objects/actions/walk_action.h index b5506ad64d..923811fe47 100644 --- a/engines/pink/items/sequence_item_leader.h +++ b/engines/pink/objects/actions/walk_action.h @@ -20,18 +20,21 @@   *   */ -#ifndef PINK_SEQUENCE_ITEM_LEADER_H -#define PINK_SEQUENCE_ITEM_LEADER_H +#ifndef PINK_WALK_ACTION_H +#define PINK_WALK_ACTION_H -#include "sequence_item.h" +#include "action_cel.h"  namespace Pink { -class SequenceItemLeader : public SequenceItem { +class WalkAction : public ActionCEL {  public:      virtual void deserialize(Archive &archive); +    virtual void toConsole(); +  private: +    bool _toCalcFramePositions;  };  } diff --git a/engines/pink/actors/actor.cpp b/engines/pink/objects/actors/actor.cpp index c10df16919..c02cb67365 100644 --- a/engines/pink/actors/actor.cpp +++ b/engines/pink/objects/actors/actor.cpp @@ -21,22 +21,26 @@   */  #include "actor.h" -#include "../page.h" +#include "engines/pink/objects/pages/game_page.h"  #include "lead_actor.h" -#include "../actions/action.h" +#include "engines/pink/objects/actions/action.h"  namespace Pink {  void Actor::deserialize(Archive &archive) {      NamedObject::deserialize(archive);      _page = static_cast<GamePage*>(archive.readObject()); -    if (dynamic_cast<LeadActor*>(this)) -        debug("LeadActor: _name = %s", _name.c_str()); -    else debug("Actor: _name = %s", _name.c_str());      archive >> _actions;  } -Sequencer *Actor::getSequencer() { +void Actor::toConsole() { +    debug("Actor: _name = %s", _name.c_str()); +    for (int i = 0; i < _actions.size(); ++i) { +        _actions[i]->toConsole(); +    } +} + +Sequencer *Actor::getSequencer() const {      return _page->getSequencer();  } @@ -61,7 +65,7 @@ void Actor::init(bool unk) {      }      else {          _isActionEnd = 0; -        _action->play(unk); +        _action->start(unk);      }  } @@ -86,7 +90,7 @@ void Actor::setAction(Action *newAction) {      if (newAction) {          _isActionEnd = 0;          _action = newAction; -        _action->play(0); +        _action->start(0);      }  } @@ -99,4 +103,8 @@ void Actor::setAction(Action *newAction, bool unk) {      else setAction(newAction);  } +Action *Actor::getAction() const { +    return _action; +} +  } // End of namespace Pink diff --git a/engines/pink/actors/actor.h b/engines/pink/objects/actors/actor.h index 040a482606..a31f5539d3 100644 --- a/engines/pink/actors/actor.h +++ b/engines/pink/objects/actors/actor.h @@ -24,7 +24,7 @@  #define PINK_ACTOR_H  #include <common/array.h> -#include "../object.h" +#include "engines/pink/objects/object.h"  namespace Pink { @@ -40,8 +40,12 @@ public:      {};      virtual void deserialize(Archive &archive); -    Sequencer *getSequencer(); +    virtual void toConsole(); + +    Sequencer *getSequencer() const;      GamePage *getPage() const; +    Action *getAction() const; +      virtual void init(bool unk);      void hide(); diff --git a/engines/pink/actors/lead_actor.cpp b/engines/pink/objects/actors/lead_actor.cpp index 12187d61db..2c886126cd 100644 --- a/engines/pink/actors/lead_actor.cpp +++ b/engines/pink/objects/actors/lead_actor.cpp @@ -21,12 +21,13 @@   */  #include "lead_actor.h" -#include "../walk/walk_mgr.h" -#include "../cursor_mgr.h" -#include "engines/pink/sequences/sequencer.h" -#include "../archive.h" -#include "../page.h" -#include "../pink.h" +#include <engines/pink/objects/actions/action.h> +#include "engines/pink/objects/walk/walk_mgr.h" +#include "engines/pink/cursor_mgr.h" +#include "engines/pink/objects/sequences/sequencer.h" +#include "engines/pink/archive.h" +#include "engines/pink/objects/pages/game_page.h" +#include "engines/pink/pink.h"  namespace Pink { @@ -48,8 +49,15 @@ void LeadActor::init(bool unk) {      if (_state == unk_Loading){          _state = Ready;      } -    //TODO set actor ref to inv mgr +    _page->getModule()->getInventoryMgr()->setLeadActor(this);      Actor::init(unk);  } +void LeadActor::toConsole() { +    debug("LeadActor: _name = %s", _name.c_str()); +    for (int i = 0; i < _actions.size(); ++i) { +        _actions[i]->toConsole(); +    } +} +  } // End of namespace Pink diff --git a/engines/pink/actors/lead_actor.h b/engines/pink/objects/actors/lead_actor.h index 3954df1180..762facbf1e 100644 --- a/engines/pink/actors/lead_actor.h +++ b/engines/pink/objects/actors/lead_actor.h @@ -45,8 +45,10 @@ public:      };      virtual void deserialize(Archive &archive); -    void setNextExecutors (Common::String &nextModule, Common::String &nextPage); +    virtual void toConsole(); + +    void setNextExecutors (Common::String &nextModule, Common::String &nextPage);      virtual void init(bool unk);  private: diff --git a/engines/pink/objects/condition.cpp b/engines/pink/objects/condition.cpp new file mode 100644 index 0000000000..71a68d4f3a --- /dev/null +++ b/engines/pink/objects/condition.cpp @@ -0,0 +1,98 @@ +/* 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 <engines/pink/archive.h> +#include <engines/pink/objects/actors/lead_actor.h> +#include <engines/pink/objects/pages/game_page.h> +#include <engines/pink/pink.h> +#include "condition.h" + +namespace Pink { + +void Pink::ConditionVariable::deserialize(Archive &archive) { +    archive >> _name >> _value; +} + +bool Pink::ConditionGameVariable::evaluate(LeadActor *leadActor) { +    return leadActor->getPage()->getModule()->getGame()->checkValueOfVariable(_name, _value); +} + +void ConditionGameVariable::toConsole() { +    debug("\t\tConditionGameVariable: _name=%s, _value=%s", _name.c_str(), _value.c_str()); +} + +bool Pink::ConditionModuleVariable::evaluate(LeadActor *leadActor) { +    return leadActor->getPage()->getModule()->checkValueOfVariable(_name, _value); +} + +void ConditionModuleVariable::toConsole() { +    debug("\t\tConditionModuleVariable: _name=%s, _value=%s", _name.c_str(), _value.c_str()); +} + +bool Pink::ConditionNotModuleVariable::evaluate(LeadActor *leadActor) { +    return !ConditionModuleVariable::evaluate(leadActor); +} + +void ConditionNotModuleVariable::toConsole() { +    debug("\t\tConditionNotModuleVariable: _name=%s, _value=%s", _name.c_str(), _value.c_str()); +} + +bool ConditionPageVariable::evaluate(LeadActor *leadActor) { +    return leadActor->getPage()->checkValueOfVariable(_name, _value); +} + +void ConditionPageVariable::toConsole() { +    debug("\t\tConditionPageVariable: _name=%s, _value=%s", _name.c_str(), _value.c_str()); +} + +bool ConditionNotPageVariable::evaluate(LeadActor *leadActor) { +    return !ConditionPageVariable::evaluate(leadActor); +} + +void ConditionNotPageVariable::toConsole() { +    debug("\t\tConditionNotPageVariable: _name=%s, _value=%s", _name.c_str(), _value.c_str()); +} + +void ConditionInventoryItemOwner::deserialize(Archive &archive) { +    archive >> _item >> _owner; +} + +bool ConditionInventoryItemOwner::evaluate(LeadActor *leadActor) { +    InventoryMgr *mgr = leadActor->getPage()->getModule()->getInventoryMgr(); +    InventoryItem *item = mgr->findInventoryItem(_item); +    return item->getCurrentOwner() == _owner; +} + +void ConditionInventoryItemOwner::toConsole() { +    debug("\t\tConditionInventoryItemOwner: _item=%s, _owner=%s", _item.c_str(), _owner.c_str()); +} + +bool ConditionNotInventoryItemOwner::evaluate(LeadActor *leadActor) { +    return !ConditionInventoryItemOwner::evaluate(leadActor); +} + +void ConditionNotInventoryItemOwner::toConsole() { +    debug("\t\tConditionNotInventoryItemOwner: _item=%s, _owner=%s", _item.c_str(), _owner.c_str()); +} + +} // End of namespace Pink + diff --git a/engines/pink/objects/condition.h b/engines/pink/objects/condition.h new file mode 100644 index 0000000000..6df1920046 --- /dev/null +++ b/engines/pink/objects/condition.h @@ -0,0 +1,106 @@ + /* 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 PINK_CONDITION_H +#define PINK_CONDITION_H + +#include <engines/pink/objects/object.h> + +namespace Pink { + +class LeadActor; + +class Condition : public Object { +public: +    virtual void deserialize(Archive &archive) = 0; +    virtual bool evaluate(LeadActor *leadActor) = 0; +}; + +class ConditionVariable : public Condition { +public: + +    virtual void deserialize(Archive &archive); +    virtual bool evaluate(LeadActor *leadActor) = 0; + +protected: +    Common::String _name; +    Common::String _value; +}; + +class ConditionGameVariable : public ConditionVariable { +public: +    virtual void toConsole(); +    virtual bool evaluate(LeadActor *leadActor); +}; + +/* + * It is not used in games and has evaluate method with infinity recursion +class ConditionNotGameVariable : public ConditionGameVariable { +    virtual bool evaluate(LeadActor *leadActor); +}; + */ + +class ConditionModuleVariable : public ConditionVariable { +public: +    virtual void toConsole(); +    virtual bool evaluate(LeadActor *leadActor); +}; + +class ConditionNotModuleVariable : public ConditionModuleVariable { +public: +    virtual void toConsole(); +    virtual bool evaluate(LeadActor *leadActor); +}; + +class ConditionPageVariable : public ConditionVariable { +public: +    virtual void toConsole(); +    virtual bool evaluate(LeadActor *leadActor); +}; + +class ConditionNotPageVariable : public ConditionPageVariable { +public: +    virtual void toConsole(); +    virtual bool evaluate(LeadActor *leadActor); +}; + +class ConditionInventoryItemOwner : public Condition { +public: +    virtual void toConsole(); +    virtual void deserialize(Archive &archive); +    virtual bool evaluate(LeadActor *leadActor); + +protected: +    Common::String _item; +    Common::String _owner; +}; + +class ConditionNotInventoryItemOwner : public ConditionInventoryItemOwner { +public: +    virtual void toConsole(); +    virtual bool evaluate(LeadActor *leadActor); +}; + +} // End of namespace Pink + + +#endif diff --git a/engines/pink/objects/handlers/handler.cpp b/engines/pink/objects/handlers/handler.cpp new file mode 100644 index 0000000000..6a53832d4a --- /dev/null +++ b/engines/pink/objects/handlers/handler.cpp @@ -0,0 +1,89 @@ +/* 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 "handler.h" +#include "engines/pink/archive.h" +#include "engines/pink/objects/side_effect.h" +#include <engines/pink/objects/condition.h> +#include <engines/pink/objects/sequences/sequencer.h> +#include <engines/pink/objects/sequences/sequence.h> +#include <engines/pink/objects/actors/lead_actor.h> +#include <common/debug.h> + +namespace Pink { + +void Handler::deserialize(Archive &archive) { +    archive >> _conditions; +    archive >> _sideEffects; +} + +bool Handler::isSuitable(LeadActor *actor) { +    for (int i = 0; i < _conditions.size(); ++i) { +        if (_conditions[i]->evaluate(actor)){ +            return false; +        } +    } +    return true; +} + +void Handler::prepareForNextHandler(LeadActor *actor) { +    for (int i = 0; i < _sideEffects.size(); ++i) { +        _sideEffects[i]->execute(actor); +    } +} + +void HandlerSequences::deserialize(Archive &archive) { +    Handler::deserialize(archive); +    archive >> _sequences; +} + +void HandlerSequences::init(LeadActor *actor) { +    prepareForNextHandler(actor); +    Sequencer *sequencer = actor->getSequencer(); +    Sequence *sequence = sequencer->findSequence(_sequences[0]); //actually we must pick random sequence +    sequencer->authorSequence(sequence, 0); +} + +void HandlerStartPage::handle(Sequence *sequence) { +    sequence->_unk = 1; +} + +void HandlerStartPage::toConsole() { +    debug("HandlerStartPage:"); + +    debug("\tSideEffects:"); +    for (int i = 0; i < _sideEffects.size(); ++i) { +        _sideEffects[i]->toConsole(); +    } + +    debug("\tConditions:"); +    for (int i = 0; i < _conditions.size(); ++i) { +        _conditions[i]->toConsole(); +    } + +    debug("\tSequences:"); +    for (int i = 0; i < _sequences.size(); ++i) { +        debug("\t\t%s", _sequences[i].c_str()); +    } +} + +} // End of namespace Pink diff --git a/engines/pink/handlers/handler.h b/engines/pink/objects/handlers/handler.h index beca2ffa65..4f8cc28779 100644 --- a/engines/pink/handlers/handler.h +++ b/engines/pink/objects/handlers/handler.h @@ -23,25 +23,50 @@  #ifndef PINK_HANDLER_H  #define PINK_HANDLER_H -#include <engines/pink/object.h>  #include <common/array.h> +#include <common/str-array.h> +#include <engines/pink/objects/object.h> +  namespace Pink { +class Condition;  class SideEffect;  class LeadActor;  class Handler : public Object {  public:      virtual void deserialize(Archive &archive); -    bool initConditions(LeadActor *actor); -    void initSideEffects(LeadActor *actor); +    bool isSuitable(LeadActor *actor);  protected: -    //_conditions +    void prepareForNextHandler(LeadActor *actor); + +    Common::Array<Condition*> _conditions;      Common::Array<SideEffect*> _sideEffects;  }; +class Sequence; + +class HandlerSequences : public Handler { +public: +    virtual void deserialize(Archive &archive); +    void init(LeadActor *actor); +    virtual void handle(Sequence *sequence) = 0; + +protected: +    Common::StringArray _sequences; +}; + +class HandlerStartPage : public HandlerSequences { +public: +    ~HandlerStartPage() {}; + +    virtual void toConsole(); + +    virtual void handle(Sequence *sequence); +}; +  } // End of namespace Pink  #endif diff --git a/engines/pink/objects/handlers/handler_mgr.cpp b/engines/pink/objects/handlers/handler_mgr.cpp new file mode 100644 index 0000000000..9c8d43c0f7 --- /dev/null +++ b/engines/pink/objects/handlers/handler_mgr.cpp @@ -0,0 +1,5 @@ +// +// Created by andrei on 3/21/18. +// + +#include "handler_mgr.h" diff --git a/engines/pink/objects/handlers/handler_mgr.h b/engines/pink/objects/handlers/handler_mgr.h new file mode 100644 index 0000000000..978f8d91b3 --- /dev/null +++ b/engines/pink/objects/handlers/handler_mgr.h @@ -0,0 +1,14 @@ +// +// Created by andrei on 3/21/18. +// + +#ifndef SCUMMVM_HANDLER_MGR_H +#define SCUMMVM_HANDLER_MGR_H + + +class HandlerMgr { + +}; + + +#endif //SCUMMVM_HANDLER_MGR_H diff --git a/engines/pink/side_effects/side_effect.h b/engines/pink/objects/handlers/handler_timer.cpp index 45099f3126..2c6161b46f 100644 --- a/engines/pink/side_effects/side_effect.h +++ b/engines/pink/objects/handlers/handler_timer.cpp @@ -20,22 +20,25 @@   *   */ -#ifndef PINK_SIDE_EFFECT_H -#define PINK_SIDE_EFFECT_H - -#include <engines/pink/object.h> +#include "handler_timer.h"  namespace Pink { -class LeadActor; -class SideEffect : public Object { -public: -    virtual ~SideEffect() {}; -    virtual void init(LeadActor *actor) {}; +void HandlerTimerActions::deserialize(Archive &archive) { +    Handler::deserialize(archive); +} + +void HandlerTimerActions::handle(LeadActor *actor) { + +} + +void HandlerTimerSequences::deserialize(Archive &archive) { +    Handler::deserialize(archive); +} -}; +void HandlerTimerSequences::handle(LeadActor *actor) {  } -#endif +} // End of namespace Pink
\ No newline at end of file diff --git a/engines/pink/handlers/handler_sequences.h b/engines/pink/objects/handlers/handler_timer.h index b55d81ce38..21d9518e04 100644 --- a/engines/pink/handlers/handler_sequences.h +++ b/engines/pink/objects/handlers/handler_timer.h @@ -19,23 +19,39 @@   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.   *   */ -#ifndef PINK_HANDLER_SEQUENCES_H -#define PINK_HANDLER_SEQUENCES_H -#include <engines/pink/utils.h> +#ifndef PINK_HANDLER_TIMER_H +#define PINK_HANDLER_TIMER_H + +#include <common/str-array.h>  #include "handler.h"  namespace Pink { -class HandlerSequences : public Handler { -public: +class LeadActor; + +// This class has difference in games +class HandlerTimer : public Handler { +    virtual void handle(LeadActor *actor) = 0; +}; + +class HandlerTimerActions : public HandlerTimer {      virtual void deserialize(Archive &archive); -    void initSequence(LeadActor *actor); +    virtual void handle(LeadActor *actor); -protected: -    StringArray _sequences; +private: +    Common::StringArray _actions; +}; + +class HandlerTimerSequences : public HandlerTimer { +    virtual void deserialize(Archive &archive); +    virtual void handle(LeadActor *actor); + +private: +    Common::StringArray _sequences;  };  } // End of namespace Pink +  #endif diff --git a/engines/pink/inventory.cpp b/engines/pink/objects/inventory.cpp index ed2569e7c1..feed41a29b 100644 --- a/engines/pink/inventory.cpp +++ b/engines/pink/objects/inventory.cpp @@ -21,8 +21,9 @@   */ +#include <common/debug.h>  #include "inventory.h" -#include "archive.h" +#include "engines/pink/archive.h"  namespace Pink { @@ -32,14 +33,40 @@ void Pink::InventoryItem::deserialize(Archive &archive) {      _currentOwner = _initialOwner;  } +Common::String &InventoryItem::getCurrentOwner() { +    return _currentOwner; +} + +void InventoryItem::toConsole() { +    debug("\tInventoryItem: _initialOwner=%s _currentOwner=%s", _initialOwner, _currentOwner); +} +  InventoryMgr::~InventoryMgr() { -    for (uint i = 0; i < _invItems.size(); ++i) { -        delete _invItems[i]; +    for (uint i = 0; i < _items.size(); ++i) { +        delete _items[i];      }  }  void InventoryMgr::deserialize(Archive &archive) { -    archive >> _invItems; +    archive >> _items; +} + +InventoryItem *InventoryMgr::findInventoryItem(Common::String &name) { +    return *Common::find_if(_items.begin(), _items.end(), [&name] +            (InventoryItem *item) { +        return name == item->getName(); +    });; +} + +void InventoryMgr::setLeadActor(LeadActor *lead) { +    _lead = lead; +} + +void InventoryMgr::toConsole() { +    debug("InventoryMgr:"); +    for (int i = 0; i < _items.size(); ++i) { +        _items[i]->toConsole(); +    }  }  } // End of namespace Pink diff --git a/engines/pink/inventory.h b/engines/pink/objects/inventory.h index 197c226e5d..ca1ef7fb69 100644 --- a/engines/pink/inventory.h +++ b/engines/pink/objects/inventory.h @@ -25,7 +25,7 @@  #include <common/array.h> -#include "engines/pink/object.h" +#include "engines/pink/objects/object.h"  namespace Pink { @@ -34,19 +34,30 @@ class InventoryItem : public NamedObject {  public:      virtual void deserialize(Archive &archive); +    virtual void toConsole(); + +    Common::String &getCurrentOwner(); +  private:      Common::String _initialOwner;      Common::String _currentOwner;  }; +class LeadActor; +  class InventoryMgr : public Object {  public:      virtual ~InventoryMgr(); -      virtual void deserialize(Archive &archive); +    virtual void toConsole(); + +    void setLeadActor(LeadActor *lead); +    InventoryItem* findInventoryItem(Common::String &name); +  private: -    Common::Array<InventoryItem*> _invItems; +    LeadActor *_lead; +    Common::Array<InventoryItem*> _items;      // other fields. haven't RE them yet  }; diff --git a/engines/pink/module.cpp b/engines/pink/objects/module.cpp index 28ca3549b2..97f78d4637 100644 --- a/engines/pink/module.cpp +++ b/engines/pink/objects/module.cpp @@ -21,7 +21,7 @@   */  #include "module.h" -#include "page.h" +#include "engines/pink/objects/pages/game_page.h"  namespace Pink { @@ -95,8 +95,17 @@ PinkEngine *Module::getGame() const {      return _game;  } -Common::StringMap &Module::getMap() { -    return _map; +bool Module::checkValueOfVariable(Common::String &variable, Common::String &value) { +    assert(_variables.contains(variable)); +    return _variables[variable] == value; +} + +void Module::setVariable(Common::String &variable, Common::String &value) { +    _variables[variable] = value; +} + +InventoryMgr *Module::getInventoryMgr() { +    return &_invMgr;  }  } // End of namespace Pink diff --git a/engines/pink/module.h b/engines/pink/objects/module.h index abaf679f63..214ff2a473 100644 --- a/engines/pink/module.h +++ b/engines/pink/objects/module.h @@ -23,13 +23,11 @@  #ifndef PINK_MODULE_H  #define PINK_MODULE_H -#include "archive.h" -#include <common/str.h> -#include "engines/pink/object.h" +#include "engines/pink/archive.h" +#include "engines/pink/objects/object.h"  #include <common/debug.h> -#include <engines/pink/utils.h>  #include <common/hash-str.h> -#include "inventory.h" +#include "engines/pink/objects/inventory.h"  namespace Pink { @@ -40,6 +38,7 @@ public:  };  class PinkEngine; +class GamePage;  class Module : public NamedObject {  public: @@ -52,17 +51,19 @@ public:      void OnMouseMove();      void OnKeyboardButtonClick(); -    Common::StringMap &getMap();      PinkEngine *getGame() const; +    InventoryMgr *getInventoryMgr(); +    bool checkValueOfVariable(Common::String &variable, Common::String &value); +    void setVariable(Common::String &variable, Common::String &value);  private:      PinkEngine *_game;      GamePage *_page; -    PagesArray _pages; +    Common::Array<GamePage*> _pages;      InventoryMgr _invMgr; -    Common::StringMap _map; // used for saves and maybe for smth else +    Common::StringMap _variables;  }; diff --git a/engines/pink/object.cpp b/engines/pink/objects/object.cpp index 3d0a2ae0f6..eac48bdfe6 100644 --- a/engines/pink/object.cpp +++ b/engines/pink/objects/object.cpp @@ -22,7 +22,7 @@  #include <common/debug.h>  #include "object.h" -#include "archive.h" +#include "engines/pink/archive.h"  namespace Pink { diff --git a/engines/pink/object.h b/engines/pink/objects/object.h index bd058cf958..1f67c3dac7 100644 --- a/engines/pink/object.h +++ b/engines/pink/objects/object.h @@ -36,6 +36,7 @@ public:      virtual void store(Archive &){};      virtual void deserialize(Archive &){};      virtual void init() {} +    virtual void toConsole() {};  };  class NamedObject : public Object { diff --git a/engines/pink/side_effects/side_effect.cpp b/engines/pink/objects/pages/game_page.cpp index 58d8830ddc..58d8830ddc 100644 --- a/engines/pink/side_effects/side_effect.cpp +++ b/engines/pink/objects/pages/game_page.cpp diff --git a/engines/pink/page.h b/engines/pink/objects/pages/game_page.h index a2458c12ad..f92a9662cc 100644 --- a/engines/pink/page.h +++ b/engines/pink/objects/pages/game_page.h @@ -20,55 +20,37 @@   *   */ -#ifndef PINK_PAGE_H -#define PINK_PAGE_H +#ifndef PINK_GAME_PAGE_H +#define PINK_GAME_PAGE_H -#include "engines/pink/object.h" -#include "engines/pink/module.h" -#include "resource_mgr.h" +#include "page.h"  namespace Pink { -class Archive; -class Actor; -class LeadActor; - - -class Page : public NamedObject { -public: - -    void load(Archive &archive); -    Actor *findActor(Common::String &name); - -protected: -    ResourceMgr _resMgr; -    LeadActor *_leadActor; -    Common::Array<Actor*> _actors; - -    /* -        int unk_1; -        CString _str; -     */ -}; - -  class CursorMgr;  class WalkMgr;  class Sequencer;  class Handler; -class GamePage : public Page  { +class GamePage : public Page {  public:      virtual void deserialize(Archive &archive); +      virtual void load(Archive &archive); +      void loadManagers();      void init(bool isLoadingSave);      PinkEngine *getGame();      Sequencer *getSequencer(); +    WalkMgr *getWalkMgr(); +      Module *getModule() const; +    bool checkValueOfVariable(Common::String &variable, Common::String &value); +    void setVariable(Common::String &variable, Common::String &value); +    virtual void toConsole();  private:      int perhapsIsLoaded; @@ -76,17 +58,16 @@ private:      CursorMgr *_cursorMgr;      WalkMgr *_walkMgr;      Sequencer *_sequencer; -    Common::Array<Handler*> _handlers; +    Common::Array<Handler *> _handlers; +    Common::StringMap _variables;      /* -    int perhaps_notLoaded;      int cunk_1;      int memfile; -    CMapStringToString map;      int unk;      */  }; -} // End of namespace Pink +} -#endif
\ No newline at end of file +#endif //SCUMMVM_GAME_PAGE_H diff --git a/engines/pink/page.cpp b/engines/pink/objects/pages/page.cpp index 3d644db759..6eb9ff2b8b 100644 --- a/engines/pink/page.cpp +++ b/engines/pink/objects/pages/page.cpp @@ -20,13 +20,12 @@   *   */ -#include <engines/pink/walk/walk_mgr.h> -#include <engines/pink/handlers/handler.h> -#include <engines/pink/handlers/handler_sequences.h> -#include "page.h" -#include "cursor_mgr.h" -#include "actors/lead_actor.h" -#include "engines/pink/sequences/sequencer.h" +#include <engines/pink/objects/walk/walk_mgr.h> +#include <engines/pink/objects/handlers/handler.h> +#include "game_page.h" +#include "engines/pink/cursor_mgr.h" +#include "engines/pink/objects/actors/lead_actor.h" +#include "engines/pink/objects/sequences/sequencer.h"  namespace Pink { @@ -44,6 +43,16 @@ Actor *Page::findActor(Common::String &name) {      });;  } +Sound *Page::loadSound(Common::String &fileName) { +    return _resMgr.loadSound(fileName); +} + +void Page::toConsole() { +    for (int i = 0; i < _actors.size(); ++i) { +        _actors[i]->toConsole(); +    } +} +  void GamePage::deserialize(Archive &archive) {      Page::deserialize(archive); @@ -67,21 +76,24 @@ void GamePage::load(Archive &archive) {  }  void GamePage::init(bool isLoadingSave) { +      if (!isLoadingSave){          //assert(perhapsIsLoaded == 0);          loadManagers();      } +    toConsole(); +      for (int i = 0; i < _actors.size(); ++i) {          _actors[i]->init(0);      }      if (!isLoadingSave) {          for (uint i = 0; i < _handlers.size(); ++i) { -            if (_handlers[i]->initConditions(_leadActor)){ +            if (_handlers[i]->isSuitable(_leadActor)){                  HandlerSequences *handlerSequences = dynamic_cast<HandlerSequences*>(_handlers[i]);                  assert(handlerSequences); -                handlerSequences->initSequence(_leadActor); +                handlerSequences->init(_leadActor);                  break;              }          } @@ -114,5 +126,26 @@ Module *GamePage::getModule() const {      return _module;  } +bool GamePage::checkValueOfVariable(Common::String &variable, Common::String &value) { +    assert(_variables.contains(variable)); +    return _variables[variable] == value; +} + +void GamePage::setVariable(Common::String &variable, Common::String &value) { +    _variables[variable] = value; +} + +WalkMgr *GamePage::getWalkMgr() { +    return _walkMgr; +} + +void GamePage::toConsole() { +    Page::toConsole(); +    _walkMgr->toConsole(); +    _sequencer->toConsole(); +    for (int i = 0; i < _handlers.size(); ++i) { +        _handlers[i]->toConsole(); +    } +}  } // End of namespace Pink diff --git a/engines/pink/objects/pages/page.h b/engines/pink/objects/pages/page.h new file mode 100644 index 0000000000..63d45510e5 --- /dev/null +++ b/engines/pink/objects/pages/page.h @@ -0,0 +1,58 @@ +/* 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 PINK_PAGE_H +#define PINK_PAGE_H + +#include "engines/pink/objects/object.h" +#include "engines/pink/objects/module.h" +#include "engines/pink/resource_mgr.h" + +namespace Pink { + +class Archive; +class Actor; +class LeadActor; + +class Page : public NamedObject { +public: + +    void load(Archive &archive); +    Actor *findActor(Common::String &name); +    Sound* loadSound(Common::String &fileName); + +    virtual void toConsole(); + +protected: +    Common::Array<Actor*> _actors; +    ResourceMgr _resMgr; +    LeadActor *_leadActor; + +    /* +        int unk_1; +        CString _str; +     */ +}; + +} // End of namespace Pink + +#endif
\ No newline at end of file diff --git a/engines/pink/sequences/sequence.cpp b/engines/pink/objects/sequences/sequence.cpp index 034078f725..0af8f1a3fa 100644 --- a/engines/pink/sequences/sequence.cpp +++ b/engines/pink/objects/sequences/sequence.cpp @@ -21,22 +21,39 @@   */  #include <common/debug.h> -#include <engines/pink/items/sequence_item_leader.h> +#include "sequence_item.h"  #include "sequence.h"  #include "sequencer.h" -#include "../archive.h" -#include "../page.h" -#include "../actors/actor.h" +#include "engines/pink/archive.h" +#include "engines/pink/objects/pages/game_page.h" +#include "engines/pink/objects/actors/actor.h"  namespace Pink { +Sequence::Sequence() +    : _unk(0), _context(nullptr), +      _sequencer(nullptr) {} + +Sequence::~Sequence() { +    for (int i = 0; i < _items.size(); ++i) { +        delete _items[i]; +    } +} +  void Sequence::deserialize(Archive &archive) {      NamedObject::deserialize(archive); -    debug("\tSequence %s", _name.c_str());      _sequencer = static_cast<Sequencer*>(archive.readObject());      archive >> _items;  } +void Sequence::toConsole() { +    debug("\t\tSequence %s", _name.c_str()); +    debug("\t\t\tItems:"); +    for (int i = 0; i < _items.size(); ++i) { +        _items[i]->toConsole(); +    } +} +  Common::Array<SequenceItem*> &Sequence::getItems() {      return _items;  } @@ -66,7 +83,7 @@ void Sequence::start(int unk) {      uint i;      for (i = _context->_nextItemIndex + 1; i <_items.size(); ++i){ -        if (dynamic_cast<SequenceItemLeader*>(_items[i])) +        if (_items[i]->isLeader())              break;          _items[i]->execute(_context->_unk, this, unk);      } @@ -83,7 +100,8 @@ void Sequence::start(int unk) {              assert(actor);              action = actor->findAction(states[j]._actionName);              assert(action); -            actor->setAction(action, unk); +            if (actor->getAction() != action) +                actor->setAction(action, unk);          }      }      _context->_unk++; diff --git a/engines/pink/sequences/sequence.h b/engines/pink/objects/sequences/sequence.h index 02f3904d56..f2f324b8ca 100644 --- a/engines/pink/sequences/sequence.h +++ b/engines/pink/objects/sequences/sequence.h @@ -23,7 +23,7 @@  #ifndef PINK_SEQUENCE_H  #define PINK_SEQUENCE_H -#include <engines/pink/object.h> +#include <engines/pink/objects/object.h>  #include <common/array.h>  namespace Pink { @@ -34,8 +34,12 @@ class SequenceContext;  class Sequence : public NamedObject {  public: +    Sequence(); +    virtual ~Sequence();      virtual void deserialize(Archive &archive); +    virtual void toConsole(); +      Common::Array<SequenceItem*> &getItems();      void setContext(SequenceContext *context); diff --git a/engines/pink/objects/sequences/sequence_item.cpp b/engines/pink/objects/sequences/sequence_item.cpp new file mode 100644 index 0000000000..732424a075 --- /dev/null +++ b/engines/pink/objects/sequences/sequence_item.cpp @@ -0,0 +1,109 @@ +/* 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 "sequence_item.h" +#include <common/debug.h> +#include <engines/pink/objects/sequences/sequence.h> +#include <engines/pink/objects/sequences/sequencer.h> +#include <engines/pink/objects/actions/action.h> +#include "engines/pink/archive.h" +#include "engines/pink/objects/pages/game_page.h" +#include "engines/pink/objects/actors/actor.h" + +namespace Pink { + +void SequenceItem::deserialize(Archive &archive) { +    archive >> _actor >> _action; +} + +void SequenceItem::toConsole() { +    debug("\t\t\t\tSequenceItem: _actor=%s, _action=%s", _actor.c_str(), _action.c_str()); +} + +const Common::String &SequenceItem::getActor() const { +    return _actor; +} + +const Common::String &SequenceItem::getAction() const { +    return _action; +} + +bool SequenceItem::execute(int unk, Sequence *sequence, bool unk2) { +    Actor *actor; +    Action *action; +    if (!(actor = sequence->_sequencer->_page->findActor(_actor)) || +        !(action = actor->findAction(_action))) { +        assert(0); +        return false; +    } + +    actor->setAction(action, unk2); +    Common::Array<SequenceActorState> &states = sequence->_context->_states; +    for (int i = 0; i < sequence->_context->_states.size(); ++i) { +        if (states[i]._actorName == _actor){ +            states[i]._unk = unk; +            sequence->_context->_actor = isLeader() ? actor : sequence->_context->_actor; +            break; +        } +    } + +    return true; +} + +bool SequenceItem::isLeader() { +    return false; +} + +bool SequenceItemLeader::isLeader() { +    return true; +} + +void SequenceItemLeader::toConsole() { +    debug("\t\t\t\tSequenceItemLeader: _actor=%s, _action=%s", _actor.c_str(), _action.c_str()); +} + + +void SequenceItemLeaderAudio::deserialize(Archive &archive) { +    SequenceItem::deserialize(archive); +    archive.readDWORD(); +} + +void SequenceItemLeaderAudio::toConsole() { +    debug("\t\t\t\tSequenceItemLeaderAudio: _actor=%s, _action=%s", _actor.c_str(), _action.c_str()); +} + +bool SequenceItemDefaultAction::execute(int unk, Sequence *sequence, bool unk2) { +    Common::Array<SequenceActorState> &actorStates = sequence->_context->_states; +    for (int i = 0; i < actorStates.size(); ++i) { +        if (actorStates[i]._actorName == _actor){ +            actorStates[i]._actionName = _action; +            break; +        } +    } +    return true; +} + +void SequenceItemDefaultAction::toConsole() { +    debug("\t\t\t\tSequenceItemDefaultAction: _actor=%s, _action=%s", _actor.c_str(), _action.c_str()); +} + +} // End of namespace Pink
\ No newline at end of file diff --git a/engines/pink/items/sequence_item.h b/engines/pink/objects/sequences/sequence_item.h index 2b6d2b9728..70fc68d9c7 100644 --- a/engines/pink/items/sequence_item.h +++ b/engines/pink/objects/sequences/sequence_item.h @@ -23,7 +23,7 @@  #ifndef PINK_SEQUENCE_ITEM_H  #define PINK_SEQUENCE_ITEM_H -#include <engines/pink/object.h> +#include <engines/pink/objects/object.h>  namespace Pink { @@ -33,16 +33,53 @@ class SequenceItem : public Object {  public:      virtual void deserialize(Archive &archive); +    virtual void toConsole(); +      const Common::String &getActor() const;      const Common::String &getAction() const;      virtual bool execute(int unk, Sequence *sequence, bool unk2); +    virtual bool isLeader();  protected: -    Common::String _actorName; -    Common::String _actionName; +    Common::String _actor; +    Common::String _action; +}; + +class SequenceItemLeader : public SequenceItem { +public: +    virtual void toConsole(); + +    virtual bool isLeader(); +}; + +class SequenceItemLeaderAudio : public SequenceItemLeader { +    virtual void deserialize(Archive &archive); + +public: +    virtual void toConsole(); + +private: +    //uint32 _sample; // zero in data files and not used;  }; +class SequenceItemDefaultAction : public SequenceItem { +public: +    virtual bool execute(int unk, Sequence *sequence, bool unk2); + +    virtual void toConsole(); +}; + +/* not used in games but is implemented in engine +class SequenceItemSideEffects : public SequenceItemDefaultAction { +public: +    virtual void deserialize(Archive &archive); +    virtual bool execute(int unk, Sequence *sequence, bool unk2); +private +    Common::Array<SideEffect*> _sideEffects +}; + */ +  }  #endif diff --git a/engines/pink/sequences/sequencer.cpp b/engines/pink/objects/sequences/sequencer.cpp index 68b72c1ecd..2bddcbd4f3 100644 --- a/engines/pink/sequences/sequencer.cpp +++ b/engines/pink/objects/sequences/sequencer.cpp @@ -32,8 +32,13 @@ Sequencer::Sequencer(GamePage *page)      : _context(nullptr), _page(page)  {} +Sequencer::~Sequencer() { +    for (int i = 0; i < _sequences.size(); ++i) { +        delete _sequences[i]; +    } +} +  void Sequencer::deserialize(Archive &archive) { -    debug("Sequencer:");      archive >> _sequences;      archive.readCount();// intro have 0 timers;      //serialize timers; @@ -56,9 +61,16 @@ void Sequencer::authorSequence(Sequence *sequence, bool unk) {          _context = new SequenceContext(sequence, this);          //unload array of unknown objects          _currentSequenceName = sequence->getName(); - +        sequence->start(unk);      }      else _currentSequenceName.clear();  } +void Sequencer::toConsole() { +    debug("Sequencer:"); +    for (int i = 0; i < _sequences.size(); ++i) { +        _sequences[i]->toConsole(); +    } +} +  } // End of namespace Pink
\ No newline at end of file diff --git a/engines/pink/sequences/sequencer.h b/engines/pink/objects/sequences/sequencer.h index 0243a4e1aa..d292346314 100644 --- a/engines/pink/sequences/sequencer.h +++ b/engines/pink/objects/sequences/sequencer.h @@ -25,7 +25,7 @@  #define PINK_SEQUENCER_H  #include <common/array.h> -#include "engines/pink/object.h" +#include "engines/pink/objects/object.h"  namespace Pink { @@ -36,6 +36,9 @@ class GamePage;  class Sequencer : public Object {  public:      Sequencer(GamePage *page); +    ~Sequencer(); + +    virtual void toConsole();      virtual void deserialize(Archive &archive);      Sequence* findSequence(const Common::String &name); diff --git a/engines/pink/objects/side_effect.cpp b/engines/pink/objects/side_effect.cpp new file mode 100644 index 0000000000..4b290fa054 --- /dev/null +++ b/engines/pink/objects/side_effect.cpp @@ -0,0 +1,126 @@ +/* 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 <common/hash-str.h> +#include "side_effect.h" +#include <engines/pink/archive.h> +#include <engines/pink/objects/actors/lead_actor.h> +#include <engines/pink/objects/pages/game_page.h> +#include <engines/pink/pink.h> +#include <engines/pink/objects/walk/walk_location.h> +#include <engines/pink/objects/walk/walk_mgr.h> + +namespace Pink { + +void SideEffectExit::deserialize(Archive &archive) { +    archive >> _nextModule >> _nextPage; +} + +void SideEffectExit::execute(LeadActor *actor) { +    actor->setNextExecutors(_nextModule, _nextPage); +} + +void SideEffectExit::toConsole() { +    debug("\t\tSideEffectExit: _nextModule=%s, _nextPage=%s", _nextModule.c_str(), _nextPage.c_str()); +} + + +void SideEffectLocation::deserialize(Archive &archive) { +    archive >> _location; +} + +void SideEffectLocation::execute(LeadActor *actor) { +    WalkMgr *mgr = actor->getPage()->getWalkMgr(); +    WalkLocation *location = mgr->findLocation(_location); +    //TODO end this method +} + +void SideEffectLocation::toConsole() { +    debug("\t\tSideEffectLocation: _location=%s", _location.c_str()); +} + + +void SideEffectInventoryItemOwner::deserialize(Archive &archive) { +    archive >> _item >> _owner; +} + +void SideEffectInventoryItemOwner::execute(LeadActor *actor) { +    //TODO +} + +void SideEffectInventoryItemOwner::toConsole() { +    debug("\t\tSideEffectInventoryItemOwner: _item=%s, _owner=%s", _item.c_str(), _owner.c_str()); +} + + +void SideEffectVariable::deserialize(Pink::Archive &archive) { +    archive >> _name >> _value; +} + + +void SideEffectGameVariable::execute(LeadActor *actor) { +    actor->getPage()->getGame()->setVariable(_name, _value); +} + +void SideEffectGameVariable::toConsole() { +    debug("\t\tSideEffectGameVariable: _name=%s, _value=%s", _name.c_str(), _value.c_str()); +} + + +void SideEffectModuleVariable::execute(LeadActor *actor) { +   actor->getPage()->setVariable(_name, _value); +} + +void SideEffectModuleVariable::toConsole() { +    debug("\t\tSideEffectModuleVariable: _name=%s, _value=%s", _name.c_str(), _value.c_str()); +} + + +void SideEffectPageVariable::execute(LeadActor *actor) { +    actor->getPage()->setVariable(_name, _value); +} + +void SideEffectPageVariable::toConsole() { +    debug("\t\tSideEffectPageVariable: _name=%s, _value=%s", _name.c_str(), _value.c_str()); +} + + +void SideEffectRandomPageVariable::deserialize(Archive &archive) { +    archive >> _name >> _values; +} + +void SideEffectRandomPageVariable::execute(LeadActor *actor) { +    // TODO think how to get rand gen here +    actor->getPage()->setVariable(_name, _values[0]); // temporary solution +} + +void SideEffectRandomPageVariable::toConsole() { +    Common::String values("{"); +    for (int i = 0; i < _values.size(); ++i) { +        values += _values[i]; +        values += ','; +    } +    values += '}'; +    debug("\t\tSideEffectRandomPageVariable: _name=%s, _values=%s", _name.c_str(), values.c_str()); +} + +} // End of namespace Pink
\ No newline at end of file diff --git a/engines/pink/objects/side_effect.h b/engines/pink/objects/side_effect.h new file mode 100644 index 0000000000..810dd469b6 --- /dev/null +++ b/engines/pink/objects/side_effect.h @@ -0,0 +1,121 @@ +/* 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 PINK_SIDE_EFFECT_H +#define PINK_SIDE_EFFECT_H + +#include <engines/pink/objects/object.h> +#include <common/str-array.h> + +namespace Pink { + +class LeadActor; + +class SideEffect : public Object { +public: +    virtual void deserialize(Archive &archive) = 0; +    virtual void execute(LeadActor *actor) = 0; +}; + +class SideEffectExit : public SideEffect { +public: +    virtual void deserialize(Archive &archive); + +    virtual void toConsole(); + +    virtual void execute(LeadActor *actor); + +private: +    Common::String _nextModule; +    Common::String _nextPage; +}; + +class SideEffectLocation : public SideEffect { +    virtual void deserialize(Archive &archive); +    virtual void execute(LeadActor *actor); + +public: +    virtual void toConsole(); + +private: +    Common::String _location; +}; + +class SideEffectInventoryItemOwner : public SideEffect { +    virtual void deserialize(Archive &archive); +    virtual void execute(LeadActor *actor); + +public: +    virtual void toConsole(); + +private: +    Common::String _item; +    Common::String _owner; +}; + +class SideEffectVariable : public SideEffect { +public: +    virtual void deserialize(Archive &archive); +    virtual void execute(LeadActor *actor) = 0; + +protected: +    Common::String _name; +    Common::String _value; +}; + +class SideEffectGameVariable : public SideEffectVariable { +public: +    virtual void toConsole(); +    virtual void execute(LeadActor *actor); +}; + +class SideEffectModuleVariable : public SideEffectVariable { +public: +    virtual void toConsole(); +    virtual void execute(LeadActor *actor); +}; + +class SideEffectPageVariable : public SideEffectVariable { +public: +    virtual void toConsole(); + +    virtual void execute(LeadActor *actor); +}; + +class SideEffectRandomPageVariable : public SideEffect +{ +    virtual void deserialize(Archive &archive); + +public: +    virtual void toConsole(); + +private: +    virtual void execute(LeadActor *actor); + +private: +    Common::String _name; +    Common::StringArray _values; +}; + +} + +#endif diff --git a/engines/pink/walk/walk_location.cpp b/engines/pink/objects/walk/walk_location.cpp index 7bf19eae6e..e5f5ea7535 100644 --- a/engines/pink/walk/walk_location.cpp +++ b/engines/pink/objects/walk/walk_location.cpp @@ -21,7 +21,7 @@   */  #include "walk_location.h" -#include "../archive.h" +#include "engines/pink/archive.h"  void Pink::WalkLocation::deserialize(Pink::Archive &archive) {      NamedObject::deserialize(archive); diff --git a/engines/pink/walk/walk_location.h b/engines/pink/objects/walk/walk_location.h index da96a14dfd..82e6436b77 100644 --- a/engines/pink/walk/walk_location.h +++ b/engines/pink/objects/walk/walk_location.h @@ -22,9 +22,10 @@  #ifndef PINK_WALK_LOCATION_H  #define PINK_WALK_LOCATION_H -#include <engines/pink/object.h> +#include <engines/pink/objects/object.h>  #include <common/array.h> -#include <engines/pink/utils.h> +#include <common/str-array.h> +  namespace Pink { @@ -33,7 +34,7 @@ public:      virtual void deserialize(Archive &archive);  private: -    StringArray _neighbors; +    Common::StringArray _neighbors;  };  } // End of namespace Pink diff --git a/engines/pink/objects/walk/walk_mgr.cpp b/engines/pink/objects/walk/walk_mgr.cpp new file mode 100644 index 0000000000..1b5ceef210 --- /dev/null +++ b/engines/pink/objects/walk/walk_mgr.cpp @@ -0,0 +1,20 @@ +// +// Created by andrei on 3/17/18. +// + +#include "walk_mgr.h" +#include "walk_location.h" +#include "engines/pink/objects/actors/lead_actor.h" +#include "engines/pink/archive.h" + + +void Pink::WalkMgr::deserialize(Pink::Archive &archive) { +    _leadActor = static_cast<LeadActor*>(archive.readObject()); +    archive >> _locations; +} + +Pink::WalkLocation *Pink::WalkMgr::findLocation(Common::String &name) { +    return *Common::find_if(_locations.begin(), _locations.end(), [&name] (WalkLocation *location) { +        return location->getName() == name; +    }); +} diff --git a/engines/pink/walk/walk_mgr.h b/engines/pink/objects/walk/walk_mgr.h index 857268da35..0ae7ef6194 100644 --- a/engines/pink/walk/walk_mgr.h +++ b/engines/pink/objects/walk/walk_mgr.h @@ -24,7 +24,7 @@  #define PINK_WALK_MGR_H  #include <common/array.h> -#include "engines/pink/object.h" +#include "engines/pink/objects/object.h"  namespace Pink { @@ -34,6 +34,7 @@ class LeadActor;  class WalkMgr : public Object {  public:      virtual void deserialize(Archive &archive); +    WalkLocation *findLocation(Common::String &name);  private:      LeadActor *_leadActor; diff --git a/engines/pink/pink.cpp b/engines/pink/pink.cpp index 950ef23c06..b5edbb1a19 100644 --- a/engines/pink/pink.cpp +++ b/engines/pink/pink.cpp @@ -24,7 +24,9 @@  #include "console.h"  #include <engines/util.h>  #include <common/debug-channels.h> -#include "module.h" +#include <video/flic_decoder.h> +#include "engines/pink/objects/module.h" +#include <graphics/surface.h>  namespace Pink { @@ -85,6 +87,13 @@ Common::Error Pink::PinkEngine::run() {          return error;      } +    Video::FlicDecoder flicDecoder; +    Common::File anim; +    anim.open("WANDRBOY.CEL"); +    flicDecoder.loadStream(&anim); +    flicDecoder.start(); +    _system->updateScreen(); +    const Graphics::Surface *surface = flicDecoder.decodeNextFrame();      while(!shouldQuit()){          Common::Event event;          while(_eventMan->pollEvent(event)){ @@ -110,17 +119,20 @@ Common::Error Pink::PinkEngine::run() {              }          }          //update(); - -        g_system->updateScreen(); -        g_system->delayMillis(10); +        surface = flicDecoder.needsUpdate() ? flicDecoder.decodeNextFrame() : surface; +        if (surface) { +            _system->copyRectToScreen(surface->getPixels(), surface->pitch, 0, 0, surface->w, surface->h); +            _system->updateScreen(); +        } +        _system->delayMillis(10);      }      return Common::kNoError;  }  void PinkEngine::load(Archive &archive) { -    debug(archive.readString().c_str()); -    debug(archive.readString().c_str()); +    archive.readString(); +    archive.readString();      archive >> _modules;  } @@ -151,7 +163,7 @@ void PinkEngine::initModule() {      for (i = 0; i < _modules.size(); ++i) {          assert(dynamic_cast<Module*>(_modules[i]) == 0);          if (_modules[i]->getName() == _nextModule) { -            changeProxyToModule(i); +            loadModule(i);              break;          }      } @@ -167,7 +179,7 @@ void PinkEngine::setNextExecutors(const Common::String &nextModule, const Common      _nextPage = nextPage;  } -void PinkEngine::changeProxyToModule(int index) { +void PinkEngine::loadModule(int index) {      assert(dynamic_cast<Module*>(_modules[index]) == 0);      Module *module = new Module(this, _modules[index]->getName()); @@ -178,4 +190,13 @@ void PinkEngine::changeProxyToModule(int index) {      _modules[index] = module;  } +bool PinkEngine::checkValueOfVariable(Common::String &variable, Common::String &value) { +    assert(_variables.contains(variable)); +    return _variables[variable] == value; +} + +void PinkEngine::setVariable(Common::String &variable, Common::String &value) { +    _variables[variable] = value; +} +  }
\ No newline at end of file diff --git a/engines/pink/pink.h b/engines/pink/pink.h index 834f787e21..114b475069 100644 --- a/engines/pink/pink.h +++ b/engines/pink/pink.h @@ -28,7 +28,6 @@  #include "gui/EventRecorder.h"  #include "gui/debugger.h"  #include "file.h" -#include "utils.h"  /* @@ -47,6 +46,7 @@ namespace Pink {  class Console;  class Archive; +class NamedObject;  class Module;  enum { @@ -62,7 +62,6 @@ enum {      LoadingNotSave = 0  }; -  class PinkEngine : public Engine {  public:      PinkEngine(OSystem *system, const ADGameDescription *desc); @@ -77,9 +76,12 @@ public:      OrbFile *getOrb()  { return &_orb; }      BroFile *getBro()  { return _bro; } +    bool checkValueOfVariable(Common::String &variable, Common::String &value); +    void setVariable(Common::String &variable, Common::String &value); +  private:      Common::Error init(); -    void changeProxyToModule(int index); +    void loadModule(int index);      Console *_console;      Common::RandomSource _rnd; @@ -91,7 +93,9 @@ private:      BroFile *_bro;      Module *_module; -    ModulesArray _modules; +    Common::Array<NamedObject*> _modules; + +    Common::StringMap _variables;      const ADGameDescription _desc;  }; diff --git a/engines/pink/resource_mgr.cpp b/engines/pink/resource_mgr.cpp index 378dded483..158450212b 100644 --- a/engines/pink/resource_mgr.cpp +++ b/engines/pink/resource_mgr.cpp @@ -21,31 +21,56 @@   */  #include <video/flic_decoder.h> +#include <common/substream.h> +#include <graphics/surface.h>  #include "resource_mgr.h"  #include "file.h"  #include "pink.h" -#include "page.h" +#include "sound.h" +#include "engines/pink/objects/pages/game_page.h"  namespace Pink {  ResourceMgr::ResourceMgr() -        : _game(nullptr), _orb(nullptr), _bro(nullptr), -          _resDescTable(nullptr), _resCount(0) -{} +        : _game(nullptr), _resDescTable(nullptr), +          _resCount(0) {}  ResourceMgr::~ResourceMgr() {      delete[] _resDescTable;  }  void ResourceMgr::init(PinkEngine *game, GamePage *page) { -    _orb = game->getOrb(); -    _bro = game->getBro(); +    OrbFile *orb = game->getOrb();      _game = game; -    ObjectDescription *objDesc = _orb->getObjDesc(page->getName().c_str()); +    ObjectDescription *objDesc = orb->getObjDesc(page->getName().c_str());      _resCount = objDesc->resourcesCount; -    _orb->loadObject(page, objDesc); -    _resDescTable = _orb->getResDescTable(objDesc); +    orb->loadObject(page, objDesc); +    _resDescTable = orb->getResDescTable(objDesc); +} + +Sound *ResourceMgr::loadSound(Common::String &name) { +    return new Sound(_game->_mixer, getResourceStream(name)); +} + +Common::SeekableReadStream *ResourceMgr::getResourceStream(Common::String &name) { +    Common::SeekableReadStream *stream; +    uint i; +    for (i = 0; i < _resCount; ++i) { +        if (name.compareToIgnoreCase(_resDescTable[i].name) == 0){ +            break; +        } +    } +    assert(i < _resDescTable[i].size); + +    if (_resDescTable[i].inBro) +        stream = _game->getBro(); +    else stream = _game->getOrb(); + +    stream->seek(_resDescTable[i].offset); + +    return new Common::SeekableSubReadStream(stream, _resDescTable[i].offset, +                                             _resDescTable[i].offset + _resDescTable[i].size);  }  } // End of namespace Pink diff --git a/engines/pink/resource_mgr.h b/engines/pink/resource_mgr.h index 47c381ad37..8de06b25b2 100644 --- a/engines/pink/resource_mgr.h +++ b/engines/pink/resource_mgr.h @@ -21,6 +21,7 @@   */  #include <common/scummsys.h> +#include <common/stream.h>  #ifndef PINK_RESOURCE_MGR_H  #define PINK_RESOURCE_MGR_H @@ -48,13 +49,13 @@ public:      //move methods to page      //compiler must do RVO      //Common::String loadText(Common::String &name); -    Sound loadSound(Common::String &name); +    Sound *loadSound(Common::String &name);      // loadCEL();  private: +    Common::SeekableReadStream *getResourceStream(Common::String &name); +      PinkEngine *_game; -    OrbFile *_orb; -    BroFile *_bro;      ResourceDescription *_resDescTable;      uint32 _resCount;  }; diff --git a/engines/pink/side_effects/side_effect_exit.cpp b/engines/pink/side_effects/side_effect_exit.cpp deleted file mode 100644 index 0871c2f547..0000000000 --- a/engines/pink/side_effects/side_effect_exit.cpp +++ /dev/null @@ -1,40 +0,0 @@ -/* 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 <common/debug.h> -#include "side_effect_exit.h" -#include "../archive.h" -#include "../actors/lead_actor.h" - -namespace Pink { - -void SideEffectExit::deserialize(Archive &archive) { -    archive >> _nextModule >> _nextPage; -    debug("\tSideEffectExit: _nextModule = %s, _nextPage = %s", -          _nextModule.c_str(), _nextPage.c_str()); -} - -void SideEffectExit::init(LeadActor *_actor) { -    _actor->setNextExecutors(_nextPage, _nextModule); -} - -} // End of namespace Pink
\ No newline at end of file diff --git a/engines/pink/side_effects/side_effect_exit.h b/engines/pink/side_effects/side_effect_exit.h deleted file mode 100644 index a324b8274a..0000000000 --- a/engines/pink/side_effects/side_effect_exit.h +++ /dev/null @@ -1,43 +0,0 @@ -/* 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 PINK_SIDE_EFFECT_EXIT_H -#define PINK_SIDE_EFFECT_EXIT_H - -#include "side_effect.h" - -namespace Pink { - -class SideEffectExit : public SideEffect { -public: -    virtual void deserialize(Archive &archive); - -    virtual void init(LeadActor *_actor); - -private: -    Common::String _nextModule; -    Common::String _nextPage; -}; - -} // End of namespace Pink - -#endif diff --git a/engines/pink/side_effects/side_effect_module_variable.cpp b/engines/pink/side_effects/side_effect_module_variable.cpp deleted file mode 100644 index 4e1e173d55..0000000000 --- a/engines/pink/side_effects/side_effect_module_variable.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include <engines/pink/archive.h> -#include <common/debug.h> -#include "side_effect_variable.h" - -/* 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 "side_effect_module_variable.h" -#include "../actors/lead_actor.h" -#include "../page.h" - -namespace Pink { - -void SideEffectModuleVariable::deserialize(Archive &archive) { -    SideEffectVariable::deserialize(archive); -    debug("\tSideEffectModuleVariable: _name = %s _value = %s", -          _name.c_str(), _value.c_str()); -} - -void SideEffectModuleVariable::init(LeadActor *actor) { -    Common::StringMap &moduleMap = actor->getPage()->getModule()->getMap(); -    moduleMap[_name] = _value; -} - -}
\ No newline at end of file diff --git a/engines/pink/side_effects/side_effect_module_variable.h b/engines/pink/side_effects/side_effect_module_variable.h deleted file mode 100644 index df45bf8c46..0000000000 --- a/engines/pink/side_effects/side_effect_module_variable.h +++ /dev/null @@ -1,38 +0,0 @@ -/* 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 PINK_SIDE_EFFECT_MODULE_VARIABLE_H -#define PINK_SIDE_EFFECT_MODULE_VARIABLE_H - -#include "side_effect_variable.h" - -namespace Pink { - -class SideEffectModuleVariable : public SideEffectVariable { -public: -    virtual void deserialize(Archive &archive); - -    virtual void init(LeadActor *actor); -}; - -} // End of namespace Pink - -#endif
\ No newline at end of file diff --git a/engines/pink/side_effects/side_effect_variable.cpp b/engines/pink/side_effects/side_effect_variable.cpp deleted file mode 100644 index 17481aa5b9..0000000000 --- a/engines/pink/side_effects/side_effect_variable.cpp +++ /dev/null @@ -1,32 +0,0 @@ -/* 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 "side_effect_variable.h" -#include "../archive.h" - -namespace Pink { - -void SideEffectVariable::deserialize(Pink::Archive &archive) { -    archive >> _name >> _value; -} - -} diff --git a/engines/pink/side_effects/side_effect_variable.h b/engines/pink/side_effects/side_effect_variable.h deleted file mode 100644 index c5b45f1e47..0000000000 --- a/engines/pink/side_effects/side_effect_variable.h +++ /dev/null @@ -1,41 +0,0 @@ -/* 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 PINK_SIDE_EFFECT_VARIABLE_H -#define PINK_SIDE_EFFECT_VARIABLE_H - -#include "side_effect.h" - -namespace Pink { - -class SideEffectVariable : public SideEffect { -public: -    virtual void deserialize(Archive &archive); - -protected: -    Common::String _name; -    Common::String _value; -}; - -} // End of namespace Pink - -#endif diff --git a/engines/pink/sound.cpp b/engines/pink/sound.cpp index bdc41c8c9c..cf62f03c93 100644 --- a/engines/pink/sound.cpp +++ b/engines/pink/sound.cpp @@ -27,10 +27,10 @@  namespace Pink { -Sound::Sound(Audio::Mixer *mixer, AudioFormat format, Common::SeekableReadStream *stream) +Sound::Sound(Audio::Mixer *mixer, Common::SeekableReadStream *stream)      : _mixer(mixer)  { -    load(format, stream); +    load(stream);  }  Sound::~Sound() { @@ -67,24 +67,11 @@ void Sound::play(Audio::Mixer::SoundType type, int volume, bool isLoop) {      _mixer->playStream(type, &_handle ,_stream);  } -bool Sound::load(AudioFormat format, Common::SeekableReadStream *stream) { -    //may be mem leak - -    // checked vox files in hex editor and they have WAVEfmt . -    // It seems strange for me -    // linux file says wav and vox are +bool Sound::load(Common::SeekableReadStream *stream) { +    // Vox files in pink have wave format.      // RIFF (little-endian) data, WAVE audio, Microsoft PCM, 8 bit, mono 22050 Hz -    switch (format){ -        case AudioFormat::kWAV: -            _stream = Audio::makeWAVStream(stream, DisposeAfterUse::NO); -            break; -        case AudioFormat::kVOX: -            //TODO -            // check for last arg; nBlockAlign(1, 4 or other) -            _stream = Audio::makeADPCMStream(stream, DisposeAfterUse::NO, 0, Audio::kADPCMOki, 22050, 1, 0); -            break; -    } +    _stream = Audio::makeWAVStream(stream, DisposeAfterUse::NO);      return isLoaded();  } diff --git a/engines/pink/sound.h b/engines/pink/sound.h index 7b60745667..fdd5e23ce2 100644 --- a/engines/pink/sound.h +++ b/engines/pink/sound.h @@ -28,8 +28,6 @@  namespace Pink { -enum class AudioFormat{kWAV, kVOX}; -  /*TODO    from disasm foreground 100 %, background 80 %    dont know how to properly do it @@ -38,10 +36,10 @@ enum class AudioFormat{kWAV, kVOX};  class Sound {  public: -    Sound(Audio::Mixer *mixer, AudioFormat format, Common::SeekableReadStream *stream); +    Sound(Audio::Mixer *mixer, Common::SeekableReadStream *stream);      ~Sound(); -    bool load(AudioFormat format, Common::SeekableReadStream *stream); +    bool load(Common::SeekableReadStream *stream);      void play(Audio::Mixer::SoundType type, int volume, bool isLoop);      bool isLoaded(); diff --git a/engines/pink/utils.h b/engines/pink/utils.h deleted file mode 100644 index feb164c771..0000000000 --- a/engines/pink/utils.h +++ /dev/null @@ -1,39 +0,0 @@ -/* 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 PINK_UTILS_H -#define PINK_UTILS_H - -#include <common/array.h> - -namespace Pink { -    class Object; -    class NamedObject; -    class GamePage; - -    using ObArray = Common::Array<Object*>; -    using ModulesArray = Common::Array<NamedObject*>; -    using PagesArray = Common::Array<GamePage*>; -    using StringArray = Common::Array<Common::String>; -} - -#endif diff --git a/engines/pink/walk/walk_mgr.cpp b/engines/pink/walk/walk_mgr.cpp deleted file mode 100644 index ce7690a3e8..0000000000 --- a/engines/pink/walk/walk_mgr.cpp +++ /dev/null @@ -1,13 +0,0 @@ -// -// Created by andrei on 3/17/18. -// - -#include "walk_mgr.h" -#include "../actors/lead_actor.h" -#include "../archive.h" - - -void Pink::WalkMgr::deserialize(Pink::Archive &archive) { -    _leadActor = static_cast<LeadActor*>(archive.readObject()); -    archive >> _locations; -} | 
