ScummVM API documentation
room.h
1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 #ifndef PELROCK_ROOM_H
22 #define PELROCK_ROOM_H
23 
24 #include "common/array.h"
25 #include "common/file.h"
26 #include "common/scummsys.h"
27 
28 #include "pelrock/types.h"
29 
30 namespace Pelrock {
31 
32 const int kRoomStructSize = 104;
33 
34 #define PERSIST_TEMP 1
35 #define PERSIST_PERM 2
36 #define PERSIST_BOTH 3
37 
38 class RoomManager {
39 public:
40  RoomManager();
41  ~RoomManager();
42  void clearTalkingAnims();
43  void clearAnims();
44  void clearRoomStickerPixels();
45  void loadRoomMetadata(Common::File *roomFile, int roomNumber);
49  RoomPasserBys *loadPasserByAnims(int roomNumber);
54  void loadRoomTalkingAnimations(int roomNumber);
55  void getPalette(Common::File *roomFile, int roomOffset, byte *palette);
56  void getBackground(Common::File *roomFile, int roomOffset, byte *background);
57  void loadWaterPaletteRemap();
58 
60  void addSticker(int stickerId, int persist = PERSIST_BOTH);
61  void addStickerToRoom(byte room, int stickerId, int persist = PERSIST_BOTH);
62 
63  void removeSticker(int stickerId);
64  void removeStickerFromRoom(byte room, int stickerId);
65 
66  bool hasSticker(int index);
67  bool hasSticker(byte room, int index);
68 
69  void changeExit(byte index, bool enabled, int persist = PERSIST_BOTH);
70  void changeExit(byte room, byte index, bool enabled, int persist = PERSIST_BOTH);
71 
72  void disableExit(byte index, int persist = PERSIST_BOTH);
73  void disableExit(byte room, byte index, int persist = PERSIST_BOTH);
74  void enableExit(byte index, int persist = PERSIST_BOTH);
75  void enableExit(byte room, byte index, int persist = PERSIST_BOTH);
76 
77  void changeWalkBox(WalkBox walkbox, int persist = PERSIST_BOTH);
78  void changeWalkbox(byte room, WalkBox walkbox, int persist = PERSIST_BOTH);
79 
80  void changeHotSpot(HotSpot hotspot, int persist = PERSIST_BOTH);
81  void changeHotspot(byte room, HotSpot hotspot, int persist = PERSIST_BOTH);
82 
83  void disableSprite(byte spriteIndex, int persist = PERSIST_BOTH);
84  void disableSprite(byte roomNumber, byte spriteIndex, int persist = PERSIST_BOTH);
85  void enableSprite(byte spriteIndex, byte zOrder, int persist = PERSIST_BOTH);
86  void enableSprite(byte roomNumber, byte spriteIndex, byte zOrder, int persist = PERSIST_BOTH);
90  void enableHotspot(HotSpot *hotspot, int persist = PERSIST_BOTH);
91  void enableHotspot(byte room, HotSpot *hotspot, int persist = PERSIST_BOTH);
92 
93  void disableHotspot(HotSpot *hotspot, int persist = PERSIST_BOTH);
94  void disableHotspot(byte room, HotSpot *hotspot, int persist = PERSIST_BOTH);
95 
96  void moveHotspot(HotSpot *hotspot, int16 newX, int16 newY, int persist = PERSIST_BOTH);
97  void moveHotspot(byte room, HotSpot *hotspot, int16 newX, int16 newY, int persist = PERSIST_BOTH);
98  void setActionMask(HotSpot *hotspot, byte actionMask, int persist = PERSIST_BOTH);
99 
100  void addWalkbox(WalkBox walkbox, int persist = PERSIST_BOTH);
101  void addWalkbox(byte room, WalkBox walkbox, int persist = PERSIST_BOTH);
102 
103  void applyDisabledChoices(byte roomNumber, byte *conversationData, size_t conversationDataSize);
104  void applyDisabledChoice(ResetEntry entry, byte *conversationData, size_t conversationDataSize);
105  void addDisabledChoice(ChoiceOption choice);
106 
110  bool isPickableByExtra(uint16 extra);
111 
112  Sprite *findSpriteByIndex(byte index);
113  Sprite *findSpriteByExtra(int16 extra);
114  HotSpot *findHotspotByIndex(byte index);
115  HotSpot *findHotspotByExtra(uint16 extra);
116  PaletteAnim *getPaletteAnimForRoom(int roomNumber);
117 
118  byte _currentRoomNumber = 0;
119  int _prevRoomNumber = -1;
120  Common::Array<HotSpot> _currentRoomHotspots;
121  Common::Array<Sprite> _currentRoomAnims;
122  Common::Array<Exit> _currentRoomExits;
123  Common::Array<WalkBox> _currentRoomWalkboxes;
124  Common::Array<Description> _currentRoomDescriptions;
125 
126  TalkingAnims _talkingAnims;
127  ScalingParams _scaleParams;
128  byte *_pixelsShadows = nullptr;
129  byte _roomPalette[768];
130  byte _paletteRemaps[5][256];
131  byte _musicTrack = 0;
132  Common::Array<byte> _roomSfx;
133  PaletteAnim *_currentPaletteAnim = nullptr;
134  RoomPasserBys *_passerByAnims = nullptr;
135  byte *_conversationData = nullptr;
136  size_t _conversationDataSize = 0;
137  Common::Array<Sticker> _roomStickers;
138  Common::Array<byte *> _roomStickerPixelData;
139  uint32 _conversationOffset;
140 
141 private:
142  void init();
143  void loadAnimationPixelData(Common::File *roomFile, int roomOffset, byte *&buffer, size_t &outSize);
144  void loadRoomAnimations(byte *pixelData, size_t pixelDataSize, byte *data, size_t size);
145  void loadHotspots(byte *data, size_t size);
146  void loadExits(byte *data, size_t size);
147  ScalingParams loadScalingParams(byte *data, size_t size);
148  void loadWalkboxes(byte *data, size_t size);
149  uint32 loadDescriptions(byte *pair12data, size_t pair12size, Common::Array<Description> &outDescriptions);
150  void loadConversationData(byte *pair12data, size_t pair12size, uint32 startPos, size_t &outConversationDataSize, byte *&outConversationData);
151  void resetConversationStates(byte roomNumber, byte *conversationData, size_t conversationDataSize);
152  void resetMetadataDefaults(byte room, byte *&data, size_t size);
153 
154  byte *loadShadowMap(int roomNumber);
155  void loadRemaps(int roomNumber);
156  Common::StringArray loadRoomNames();
157  byte loadMusicTrackForRoom(Common::File *roomFile, int roomOffset);
158  Common::Array<byte> loadRoomSfx(Common::File *roomFile, int roomOffset);
159 
160  byte *_resetData = nullptr;
161  Common::Array<HotSpot> _staticHotspots;
162 };
163 
164 } // End of namespace Pelrock
165 
166 #endif
bool isPickableByExtra(uint16 extra)
Definition: types.h:384
Definition: types.h:492
Definition: types.h:518
Definition: array.h:52
Definition: types.h:470
Definition: actions.h:27
Definition: types.h:311
void enableHotspot(HotSpot *hotspot, int persist=3)
void addSticker(int stickerId, int persist=3)
Definition: file.h:47
Definition: room.h:38
Definition: types.h:292
Definition: types.h:368
Definition: types.h:504
Definition: types.h:326
Common::Array< HotSpot > unifyHotspots(Common::Array< Pelrock::Sprite > &anims, Common::Array< Pelrock::HotSpot > &staticHotspots)
RoomPasserBys * loadPasserByAnims(int roomNumber)