scummvm/engines/bbvs/gamemodule.h
2016-09-03 12:46:38 +02:00

252 lines
5.7 KiB
C++

/* 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