aboutsummaryrefslogtreecommitdiff
path: root/engines/m4/actor.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/m4/actor.h')
-rw-r--r--engines/m4/actor.h117
1 files changed, 117 insertions, 0 deletions
diff --git a/engines/m4/actor.h b/engines/m4/actor.h
new file mode 100644
index 0000000000..a39398db55
--- /dev/null
+++ b/engines/m4/actor.h
@@ -0,0 +1,117 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef M4_ACTOR_H
+#define M4_ACTOR_H
+
+#include "common/array.h"
+
+#include "m4/m4.h"
+#include "m4/scene.h"
+#include "m4/graphics.h"
+#include "m4/assets.h"
+
+namespace M4 {
+
+struct InventoryObject {
+ const char* name;
+ int32 scene;
+ int32 icon;
+};
+
+enum inventoryObjectFlags {
+ UNKNOWN_OBJECT = 997,
+ BACKPACK = 998,
+ NOWHERE = 999
+};
+
+enum WalkerDirection {
+ kFacingNorth = 1, // has shadow
+ kFacingNorthEast = 2, // has shadow
+ kFacingEast = 3, // has shadow
+ kFacingSouthEast = 4, // has shadow
+ kFacingSouth = 5, // has shadow
+ // 6 is unused
+ kFacingSouthAlt = 7, // no shadow
+ kFacingSouthWest = 8, // no shadow
+ kFacingWest = 9 // no shadow
+};
+
+class Actor {
+public:
+ Actor(M4Engine *vm);
+ ~Actor();
+ void placeWalkerSpriteAt(int spriteNum, int x, int y);
+ void setWalkerScaling(int scaling) { _scaling = scaling; }
+ int getWalkerScaling() { return _scaling; }
+ void setWalkerDirection(uint8 direction) { _direction = direction; }
+ uint8 getWalkerDirection() { return _direction; }
+ void setWalkerPalette();
+ int getWalkerWidth();
+ int getWalkerHeight();
+private:
+ M4Engine *_vm;
+ int _scaling;
+ uint8 _direction;
+ Common::Array<SpriteAsset*> _walkerSprites;
+
+ void loadWalkers();
+ void loadWalkerDirection(uint8 direction);
+ void unloadWalkers();
+};
+
+// TODO: perhaps the inventory and its view could be merged?
+// TODO: the original game capitalizes all inventory object names
+// internally, which we do as well, but perhaps we could make sure
+// that all object names are parsed with the same case and avoid
+// case-insensitive string comparing through scumm_stricmp, using
+// the normal strcmp method instead
+class Inventory {
+public:
+ Inventory(M4Engine *vm);
+ ~Inventory();
+ void clear();
+ void registerObject(char* name, int32 scene, int32 icon);
+ void moveObject(char* name, int32 scene);
+ void giveToPlayer(char* name) { moveObject(name, BACKPACK); }
+ void addToBackpack(uint32 objectIndex);
+ void removeFromBackpack(uint32 objectIndex);
+ bool isInBackpack(char* name) { return (getScene(name) == BACKPACK); }
+ bool isInScene(char* name, int32 scene) { return (getScene(name) == scene); }
+ bool isInCurrentScene(char* name);
+ int getScene(char* name);
+ int getIcon(char* name);
+ int getIndex(char* name);
+ int getTotalItems() { return _inventory.size(); }
+
+private:
+ M4Engine *_vm;
+ Common::Array<InventoryObject *> _inventory;
+};
+
+} // End of namespace M4
+
+
+#endif