21 #ifndef PELROCK_ROOM_H 22 #define PELROCK_ROOM_H 24 #include "common/array.h" 25 #include "common/file.h" 26 #include "common/scummsys.h" 28 #include "pelrock/types.h" 32 const int kRoomStructSize = 104;
34 #define PERSIST_TEMP 1 35 #define PERSIST_PERM 2 36 #define PERSIST_BOTH 3 42 void clearTalkingAnims();
44 void clearRoomStickerPixels();
45 void loadRoomMetadata(
Common::File *roomFile,
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();
60 void addSticker(
int stickerId,
int persist = PERSIST_BOTH);
61 void addStickerToRoom(byte room,
int stickerId,
int persist = PERSIST_BOTH);
63 void removeSticker(
int stickerId);
64 void removeStickerFromRoom(byte room,
int stickerId);
66 bool hasSticker(
int index);
67 bool hasSticker(byte room,
int index);
69 void changeExit(byte index,
bool enabled,
int persist = PERSIST_BOTH);
70 void changeExit(byte room, byte index,
bool enabled,
int persist = PERSIST_BOTH);
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);
77 void changeWalkBox(
WalkBox walkbox,
int persist = PERSIST_BOTH);
78 void changeWalkbox(byte room,
WalkBox walkbox,
int persist = PERSIST_BOTH);
80 void changeHotSpot(
HotSpot hotspot,
int persist = PERSIST_BOTH);
81 void changeHotspot(byte room,
HotSpot hotspot,
int persist = PERSIST_BOTH);
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);
93 void disableHotspot(
HotSpot *hotspot,
int persist = PERSIST_BOTH);
94 void disableHotspot(byte room,
HotSpot *hotspot,
int persist = PERSIST_BOTH);
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);
100 void addWalkbox(
WalkBox walkbox,
int persist = PERSIST_BOTH);
101 void addWalkbox(byte room,
WalkBox walkbox,
int persist = PERSIST_BOTH);
103 void applyDisabledChoices(byte roomNumber, byte *conversationData,
size_t conversationDataSize);
104 void applyDisabledChoice(
ResetEntry entry, byte *conversationData,
size_t conversationDataSize);
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);
118 byte _currentRoomNumber = 0;
119 int _prevRoomNumber = -1;
128 byte *_pixelsShadows =
nullptr;
129 byte _roomPalette[768];
130 byte _paletteRemaps[5][256];
131 byte _musicTrack = 0;
135 byte *_conversationData =
nullptr;
136 size_t _conversationDataSize = 0;
139 uint32 _conversationOffset;
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);
148 void loadWalkboxes(byte *data,
size_t size);
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);
154 byte *loadShadowMap(
int roomNumber);
155 void loadRemaps(
int roomNumber);
157 byte loadMusicTrackForRoom(
Common::File *roomFile,
int roomOffset);
160 byte *_resetData =
nullptr;
bool isPickableByExtra(uint16 extra)
void enableHotspot(HotSpot *hotspot, int persist=3)
void addSticker(int stickerId, int persist=3)
Common::Array< HotSpot > unifyHotspots(Common::Array< Pelrock::Sprite > &anims, Common::Array< Pelrock::HotSpot > &staticHotspots)
RoomPasserBys * loadPasserByAnims(int roomNumber)