aboutsummaryrefslogtreecommitdiff
path: root/engines/bbvs/gamemodule.h
diff options
context:
space:
mode:
Diffstat (limited to 'engines/bbvs/gamemodule.h')
-rw-r--r--engines/bbvs/gamemodule.h251
1 files changed, 251 insertions, 0 deletions
diff --git a/engines/bbvs/gamemodule.h b/engines/bbvs/gamemodule.h
new file mode 100644
index 0000000000..4d4f5b90a1
--- /dev/null
+++ b/engines/bbvs/gamemodule.h
@@ -0,0 +1,251 @@
+/* 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 BBVS_GAMEMODULE_H
+#define BBVS_GAMEMODULE_H
+
+#include "common/array.h"
+#include "common/file.h"
+#include "common/memstream.h"
+#include "common/rect.h"
+#include "common/str.h"
+
+namespace Bbvs {
+
+const int kInventoryItemCount = 42;
+const int kInventoryItemSpriteCount = 2 * kInventoryItemCount;
+const int kDialogItemSpriteCount = 26;
+const int kGuiSpriteCount = 21;
+const int kCameraInitsCount = 4;
+
+struct Condition {
+ byte cond;
+ byte value1;
+ int16 value2;
+};
+
+struct Conditions {
+ Condition conditions[8];
+};
+
+struct ActionResult {
+ byte kind;
+ byte value1;
+ int16 value2;
+};
+
+struct ActionResults {
+ ActionResult actionResults[8];
+};
+
+struct ActionCommand {
+ uint16 cmd;
+ int16 sceneObjectIndex;
+ uint32 timeStamp;
+ Common::Point walkDest;
+ int32 param;
+};
+
+class ActionCommands : public Common::Array<ActionCommand> {
+};
+
+struct Action {
+ Conditions conditions;
+ ActionResults results;
+ ActionCommands actionCommands;
+};
+
+struct InventoryItemInfo {
+ int16 xOffs, yOffs;
+ int16 width, height;
+};
+
+struct CameraInit {
+ Common::Point cameraPos;
+ byte cameraLinks[8];
+ Common::Rect rects[8];
+};
+
+struct SceneObjectDef {
+ char name[20];
+ int animIndices[16];
+ int walkSpeed;
+};
+
+struct SceneObjectInit {
+ Conditions conditions;
+ int sceneObjectIndex;
+ int animIndex;
+ int x, y;
+};
+
+struct BgObject {
+ char name[20];
+ Common::Rect rect;
+};
+
+struct Animation {
+ int frameCount;
+ int *frameSpriteIndices;
+ int16 *frameTicks;
+ Common::Rect *frameRects1;
+ Common::Rect *frameRects2;
+ Animation()
+ : frameCount(0), frameSpriteIndices(0), frameTicks(0), frameRects1(0), frameRects2(0) {
+ }
+ ~Animation() {
+ delete[] frameSpriteIndices;
+ delete[] frameTicks;
+ delete[] frameRects1;
+ delete[] frameRects2;
+ }
+};
+
+struct SceneExit {
+ Common::Rect rect;
+ int newModuleNum;
+};
+
+struct SceneSound {
+ Conditions conditions;
+ uint soundNum;
+};
+
+class GameModule {
+public:
+ GameModule();
+ ~GameModule();
+
+ void load(const char *filename);
+
+ int getFieldC();
+ int getButtheadObjectIndex();
+
+ int getGuiSpriteIndex(int index);
+ int getInventoryItemSpriteIndex(int index);
+ int getDialogItemSpriteIndex(int index);
+
+ int getActionsCount();
+ Action *getAction(int index);
+
+ InventoryItemInfo *getInventoryItemInfo(int index);
+
+ CameraInit *getCameraInit(int cameraNum);
+
+ int getSceneExitsCount();
+ SceneExit *getSceneExit(int index);
+
+ int getWalkRectsCount();
+ Common::Rect *getWalkRects();
+
+ int getSceneObjectDefsCount();
+ SceneObjectDef *getSceneObjectDef(int index);
+
+ int getSceneObjectInitsCount();
+ SceneObjectInit *getSceneObjectInit(int index);
+
+ int getBgObjectsCount();
+ BgObject *getBgObject(int index);
+
+ int getBgSpritesCount();
+ int getBgSpriteIndex(int index);
+ int getBgSpritePriority(int index);
+
+ int getSceneSoundsCount();
+ SceneSound *getSceneSound(int index);
+ uint getSceneSoundIndex(uint soundNum);
+
+ uint getPreloadSoundsCount();
+ uint getPreloadSound(uint index);
+
+ Animation *getAnimation(int index);
+
+protected:
+
+ int _bgSpriteCount;
+ int *_bgSpriteIndices;
+ int16 *_bgSpritePriorities;
+
+ CameraInit _cameraInits[kCameraInitsCount];
+
+ int _walkRectsCount;
+ Common::Rect *_walkRects;
+
+ int _sceneExitsCount;
+ SceneExit *_sceneExits;
+
+ int _bgObjectsCount;
+ BgObject *_bgObjects;
+
+ int _animationsCount;
+ Animation *_animations;
+
+ int _sceneObjectDefsCount;
+ SceneObjectDef *_sceneObjectDefs;
+
+ int _sceneObjectInitsCount;
+ SceneObjectInit *_sceneObjectInits;
+
+ int _actionsCount;
+ Action *_actions;
+
+ int _sceneSoundsCount;
+ SceneSound *_sceneSounds;
+
+ uint _preloadSoundsCount;
+ uint *_preloadSounds;
+
+ int _guiSpriteIndices[kGuiSpriteCount];
+ int _inventoryItemSpriteIndices[kInventoryItemSpriteCount];
+ InventoryItemInfo _inventoryItemInfos[kInventoryItemCount];
+ int _dialogItemSpriteIndices[kDialogItemSpriteCount];
+
+ int _fieldC;
+ int _buttheadObjectIndex;
+
+ Common::Point readPoint(Common::SeekableReadStream &s);
+ Common::Rect readRect(Common::SeekableReadStream &s);
+ Conditions readConditions(Common::SeekableReadStream &s);
+
+ void unload();
+
+ void loadBgSprites(Common::SeekableReadStream &s);
+ void loadCameraInits(Common::SeekableReadStream &s);
+ void loadWalkRects(Common::SeekableReadStream &s);
+ void loadSceneExits(Common::SeekableReadStream &s);
+ void loadBgObjects(Common::SeekableReadStream &s);
+ void loadAnimations(Common::SeekableReadStream &s);
+ void loadSceneObjectDefs(Common::SeekableReadStream &s);
+ void loadSceneObjectInits(Common::SeekableReadStream &s);
+ void loadActions(Common::SeekableReadStream &s);
+ void loadGuiSpriteIndices(Common::SeekableReadStream &s);
+ void loadInventoryItemSpriteIndices(Common::SeekableReadStream &s);
+ void loadInventoryItemInfos(Common::SeekableReadStream &s);
+ void loadDialogItemSpriteIndices(Common::SeekableReadStream &s);
+ void loadSceneSounds(Common::SeekableReadStream &s);
+ void loadPreloadSounds(Common::SeekableReadStream &s);
+
+};
+
+} // End of namespace Bbvs
+
+#endif // BBVS_GAMEMODULE_H