aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwhitertandrek2018-03-22 07:47:45 +0200
committerEugene Sandulenko2018-06-28 23:51:32 +0200
commit467d3f1ab890bfca77629dd239b670ee4797bfe8 (patch)
treeb534737f1dbafc4ec98a044d576f2457dc919517
parent824b3fa38e965e425d09239f2ac81c4853eb43e8 (diff)
downloadscummvm-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.
-rw-r--r--engines/pink/archive.cpp37
-rw-r--r--engines/pink/archive.h9
-rw-r--r--engines/pink/cursor_mgr.cpp2
-rw-r--r--engines/pink/cursor_mgr.h6
-rw-r--r--engines/pink/file.cpp4
-rw-r--r--engines/pink/file.h3
-rw-r--r--engines/pink/handlers/handler.cpp44
-rw-r--r--engines/pink/handlers/handler_sequences.cpp43
-rw-r--r--engines/pink/handlers/handler_start_page.cpp38
-rw-r--r--engines/pink/handlers/handler_start_page.h38
-rw-r--r--engines/pink/items/sequence_item.cpp72
-rw-r--r--engines/pink/items/sequence_item_default_action.cpp35
-rw-r--r--engines/pink/items/sequence_item_default_action.h37
-rw-r--r--engines/pink/module.mk30
-rw-r--r--engines/pink/objects/actions/action.cpp (renamed from engines/pink/actions/action.cpp)4
-rw-r--r--engines/pink/objects/actions/action.h (renamed from engines/pink/actions/action.h)6
-rw-r--r--engines/pink/objects/actions/action_cel.cpp (renamed from engines/pink/actions/action_cel.cpp)3
-rw-r--r--engines/pink/objects/actions/action_cel.h (renamed from engines/pink/actions/action_cel.h)2
-rw-r--r--engines/pink/objects/actions/action_hide.cpp (renamed from engines/pink/actions/action_hide.cpp)7
-rw-r--r--engines/pink/objects/actions/action_hide.h (renamed from engines/pink/actions/action_hide.h)2
-rw-r--r--engines/pink/objects/actions/action_play.cpp (renamed from engines/pink/actions/action_play.cpp)5
-rw-r--r--engines/pink/objects/actions/action_play.h (renamed from engines/pink/actions/action_play.h)2
-rw-r--r--engines/pink/objects/actions/action_sound.cpp (renamed from engines/pink/actions/action_sound.cpp)35
-rw-r--r--engines/pink/objects/actions/action_sound.h (renamed from engines/pink/actions/action_sound.h)7
-rw-r--r--engines/pink/objects/actions/action_still.cpp (renamed from engines/pink/actions/action_still.cpp)12
-rw-r--r--engines/pink/objects/actions/action_still.h (renamed from engines/pink/actions/action_still.h)1
-rw-r--r--engines/pink/objects/actions/walk_action.cpp (renamed from engines/pink/items/sequence_item_leader.cpp)16
-rw-r--r--engines/pink/objects/actions/walk_action.h (renamed from engines/pink/items/sequence_item_leader.h)11
-rw-r--r--engines/pink/objects/actors/actor.cpp (renamed from engines/pink/actors/actor.cpp)24
-rw-r--r--engines/pink/objects/actors/actor.h (renamed from engines/pink/actors/actor.h)8
-rw-r--r--engines/pink/objects/actors/lead_actor.cpp (renamed from engines/pink/actors/lead_actor.cpp)22
-rw-r--r--engines/pink/objects/actors/lead_actor.h (renamed from engines/pink/actors/lead_actor.h)4
-rw-r--r--engines/pink/objects/condition.cpp98
-rw-r--r--engines/pink/objects/condition.h106
-rw-r--r--engines/pink/objects/handlers/handler.cpp89
-rw-r--r--engines/pink/objects/handlers/handler.h (renamed from engines/pink/handlers/handler.h)33
-rw-r--r--engines/pink/objects/handlers/handler_mgr.cpp5
-rw-r--r--engines/pink/objects/handlers/handler_mgr.h14
-rw-r--r--engines/pink/objects/handlers/handler_timer.cpp (renamed from engines/pink/side_effects/side_effect.h)25
-rw-r--r--engines/pink/objects/handlers/handler_timer.h (renamed from engines/pink/handlers/handler_sequences.h)32
-rw-r--r--engines/pink/objects/inventory.cpp (renamed from engines/pink/inventory.cpp)35
-rw-r--r--engines/pink/objects/inventory.h (renamed from engines/pink/inventory.h)17
-rw-r--r--engines/pink/objects/module.cpp (renamed from engines/pink/module.cpp)15
-rw-r--r--engines/pink/objects/module.h (renamed from engines/pink/module.h)17
-rw-r--r--engines/pink/objects/object.cpp (renamed from engines/pink/object.cpp)2
-rw-r--r--engines/pink/objects/object.h (renamed from engines/pink/object.h)1
-rw-r--r--engines/pink/objects/pages/game_page.cpp (renamed from engines/pink/side_effects/side_effect.cpp)0
-rw-r--r--engines/pink/objects/pages/game_page.h (renamed from engines/pink/page.h)49
-rw-r--r--engines/pink/objects/pages/page.cpp (renamed from engines/pink/page.cpp)51
-rw-r--r--engines/pink/objects/pages/page.h58
-rw-r--r--engines/pink/objects/sequences/sequence.cpp (renamed from engines/pink/sequences/sequence.cpp)32
-rw-r--r--engines/pink/objects/sequences/sequence.h (renamed from engines/pink/sequences/sequence.h)6
-rw-r--r--engines/pink/objects/sequences/sequence_item.cpp109
-rw-r--r--engines/pink/objects/sequences/sequence_item.h (renamed from engines/pink/items/sequence_item.h)43
-rw-r--r--engines/pink/objects/sequences/sequencer.cpp (renamed from engines/pink/sequences/sequencer.cpp)16
-rw-r--r--engines/pink/objects/sequences/sequencer.h (renamed from engines/pink/sequences/sequencer.h)5
-rw-r--r--engines/pink/objects/side_effect.cpp126
-rw-r--r--engines/pink/objects/side_effect.h121
-rw-r--r--engines/pink/objects/walk/walk_location.cpp (renamed from engines/pink/walk/walk_location.cpp)2
-rw-r--r--engines/pink/objects/walk/walk_location.h (renamed from engines/pink/walk/walk_location.h)7
-rw-r--r--engines/pink/objects/walk/walk_mgr.cpp20
-rw-r--r--engines/pink/objects/walk/walk_mgr.h (renamed from engines/pink/walk/walk_mgr.h)3
-rw-r--r--engines/pink/pink.cpp37
-rw-r--r--engines/pink/pink.h12
-rw-r--r--engines/pink/resource_mgr.cpp43
-rw-r--r--engines/pink/resource_mgr.h7
-rw-r--r--engines/pink/side_effects/side_effect_exit.cpp40
-rw-r--r--engines/pink/side_effects/side_effect_exit.h43
-rw-r--r--engines/pink/side_effects/side_effect_module_variable.cpp44
-rw-r--r--engines/pink/side_effects/side_effect_module_variable.h38
-rw-r--r--engines/pink/side_effects/side_effect_variable.cpp32
-rw-r--r--engines/pink/side_effects/side_effect_variable.h41
-rw-r--r--engines/pink/sound.cpp23
-rw-r--r--engines/pink/sound.h6
-rw-r--r--engines/pink/utils.h39
-rw-r--r--engines/pink/walk/walk_mgr.cpp13
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;
-}