aboutsummaryrefslogtreecommitdiff
path: root/engines/drascula/rooms.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/drascula/rooms.cpp')
-rw-r--r--engines/drascula/rooms.cpp41
1 files changed, 25 insertions, 16 deletions
diff --git a/engines/drascula/rooms.cpp b/engines/drascula/rooms.cpp
index fcf3ff597b..a71545feca 100644
--- a/engines/drascula/rooms.cpp
+++ b/engines/drascula/rooms.cpp
@@ -35,7 +35,7 @@ struct doorInfo {
int flag;
};
-doorInfo doors[] = {
+static const doorInfo doors[] = {
{ 2, 138, 0 }, { 2, 136, 8 },
{ 2, 156, 16 }, { 2, 163, 17 },
{ 2, 177, 15 }, { 2, 175, 40 },
@@ -63,15 +63,19 @@ struct DrasculaUpdater {
Updater proc;
};
-Common::Array<DrasculaRoomParser*> _roomParsers;
-Common::Array<DrasculaUpdater*> _roomPreupdaters;
-Common::Array<DrasculaUpdater*> _roomUpdaters;
+struct RoomHandlers {
+ Common::Array<DrasculaRoomParser *> roomParsers;
+ Common::Array<DrasculaUpdater *> roomPreupdaters;
+ Common::Array<DrasculaUpdater *> roomUpdaters;
+};
-#define ROOM(x) _roomParsers.push_back(new DrasculaRoomParser(#x, &DrasculaEngine::x))
-#define PREUPDATEROOM(x) _roomPreupdaters.push_back(new DrasculaUpdater(#x, &DrasculaEngine::x))
-#define UPDATEROOM(x) _roomUpdaters.push_back(new DrasculaUpdater(#x, &DrasculaEngine::x))
+#define ROOM(x) _roomHandlers->roomParsers.push_back(new DrasculaRoomParser(#x, &DrasculaEngine::x))
+#define PREUPDATEROOM(x) _roomHandlers->roomPreupdaters.push_back(new DrasculaUpdater(#x, &DrasculaEngine::x))
+#define UPDATEROOM(x) _roomHandlers->roomUpdaters.push_back(new DrasculaUpdater(#x, &DrasculaEngine::x))
void DrasculaEngine::setupRoomsTable() {
+ _roomHandlers = new RoomHandlers();
+
ROOM(room_0); // default
ROOM(room_1);
ROOM(room_3);
@@ -135,6 +139,11 @@ void DrasculaEngine::setupRoomsTable() {
UPDATEROOM(update_102);
}
+void DrasculaEngine::freeRoomsTable() {
+ delete _roomHandlers;
+ _roomHandlers = 0;
+}
+
bool DrasculaEngine::roomParse(int rN, int fl) {
bool seen = false;
@@ -1080,10 +1089,10 @@ void DrasculaEngine::updateRefresh() {
// Call room-specific updater
char rm[20];
sprintf(rm, "update_%d", roomNumber);
- for (uint i = 0; i < _roomUpdaters.size(); i++) {
- if (!strcmp(rm, _roomUpdaters[i]->desc)) {
+ for (uint i = 0; i < _roomHandlers->roomUpdaters.size(); i++) {
+ if (!strcmp(rm, _roomHandlers->roomUpdaters[i]->desc)) {
debug(4, "Calling room updater %d", roomNumber);
- (this->*(_roomUpdaters[i]->proc))();
+ (this->*(_roomHandlers->roomUpdaters[i]->proc))();
break;
}
}
@@ -1118,10 +1127,10 @@ void DrasculaEngine::updateRefresh_pre() {
// Call room-specific preupdater
char rm[20];
sprintf(rm, "update_%d_pre", roomNumber);
- for (uint i = 0; i < _roomPreupdaters.size(); i++) {
- if (!strcmp(rm, _roomPreupdaters[i]->desc)) {
+ for (uint i = 0; i < _roomHandlers->roomPreupdaters.size(); i++) {
+ if (!strcmp(rm, _roomHandlers->roomPreupdaters[i]->desc)) {
debug(4, "Calling room preupdater %d", roomNumber);
- (this->*(_roomPreupdaters[i]->proc))();
+ (this->*(_roomHandlers->roomPreupdaters[i]->proc))();
break;
}
}
@@ -1619,11 +1628,11 @@ bool DrasculaEngine::room(int rN, int fl) {
// Call room-specific parser
char rm[20];
sprintf(rm, "room_%d", rN);
- for (uint i = 0; i < _roomParsers.size(); i++) {
- if (!strcmp(rm, _roomParsers[i]->desc)) {
+ for (uint i = 0; i < _roomHandlers->roomParsers.size(); i++) {
+ if (!strcmp(rm, _roomHandlers->roomParsers[i]->desc)) {
debug(4, "Calling room parser %d", rN);
- return (this->*(_roomParsers[i]->proc))(fl);
+ return (this->*(_roomHandlers->roomParsers[i]->proc))(fl);
}
}