aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilippos Karapetis2008-05-27 07:45:13 +0000
committerFilippos Karapetis2008-05-27 07:45:13 +0000
commitafd44c95d98f6fdaf522fe2aa6292894ca8481a4 (patch)
treeb05eeff98cd6acf3fb639410baa948b5cb95feb6
parentb1217da63f9e9c1bcace4b51621efe8b59fe2553 (diff)
downloadscummvm-rg350-afd44c95d98f6fdaf522fe2aa6292894ca8481a4.tar.gz
scummvm-rg350-afd44c95d98f6fdaf522fe2aa6292894ca8481a4.tar.bz2
scummvm-rg350-afd44c95d98f6fdaf522fe2aa6292894ca8481a4.zip
Changed roomParse to accept an array directly and rewrote some more room logic
svn-id: r32315
-rw-r--r--engines/drascula/drascula.h3
-rw-r--r--engines/drascula/rooms.cpp175
2 files changed, 84 insertions, 94 deletions
diff --git a/engines/drascula/drascula.h b/engines/drascula/drascula.h
index b015074172..e7efe66d69 100644
--- a/engines/drascula/drascula.h
+++ b/engines/drascula/drascula.h
@@ -59,6 +59,7 @@ enum Languages {
#define TEXTD_START 68
struct DrasculaGameDescription;
+struct RoomTalkAction;
#define NUM_SAVES 10
#define NUM_FLAGS 50
@@ -616,7 +617,7 @@ public:
void aumenta_num_frame();
int sobre_que_objeto();
bool comprueba_banderas_menu();
- bool roomParse(int, int);
+ bool roomParse(RoomTalkAction*, int);
void room_0();
void room_1(int);
void room_2(int);
diff --git a/engines/drascula/rooms.cpp b/engines/drascula/rooms.cpp
index f97c31566b..617c39cef4 100644
--- a/engines/drascula/rooms.cpp
+++ b/engines/drascula/rooms.cpp
@@ -81,28 +81,86 @@ RoomTalkAction room0Actions[] = {
};
RoomTalkAction room1Actions[] = {
+ // num action object speech
{ -1, PICK, 118, 5 },
{ -1, OPEN, 118, 3 },
{ -1, CLOSE, 118, 4 },
{ -1, TALK, 118, 6 },
+ // -------------------------------
{ -1, LOOK, 119, 8 },
{ -1, MOVE, 119, 13 },
{ -1, CLOSE, 119, 10 },
{ -1, TALK, 119, 12 },
+ // -------------------------------
{ -1, MOVE, 120, 13 },
{ -1, OPEN, 120, 18 },
{ -1, TALK, 120, 15 }
};
-bool DrasculaEngine::roomParse(int roomNo, int fl) {
- // TODO: find a better way to assign room actions
- RoomTalkAction *roomActions = 0;
- bool didAction = false;
+RoomTalkAction room3Actions[] = {
+ // num action object speech
+ { -1, LOOK, 129, 21 },
+ { -1, PICK, 129, 5 },
+ { -1, MOVE, 129, 24 },
+ { -1, OPEN, 129, 22 },
+ { -1, CLOSE, 129, 10 },
+ // -------------------------------
+ { -1, LOOK, 131, 27 },
+ { -1, PICK, 131, 5 },
+ { -1, MOVE, 131, 24 },
+ { -1, OPEN, 131, 22 },
+ { -1, CLOSE, 131, 10 },
+ { -1, TALK, 131, 23 },
+ // -------------------------------
+ { -1, LOOK, 132, 28 },
+ { -1, PICK, 132, 5 },
+ { -1, MOVE, 132, 24 },
+ { -1, OPEN, 132, 22 },
+ { -1, CLOSE, 132, 10 },
+ { -1, TALK, 132, 23 },
+ // -------------------------------
+ { -1, LOOK, 133, 321 },
+ { -1, PICK, 133, 31 },
+ { -1, MOVE, 133, 34 },
+ { -1, OPEN, 133, 30 },
+ { -1, CLOSE, 133, 10 },
+ // -------------------------------
+ { -1, LOOK, 166, 55 },
+ { -1, PICK, 166, 7 },
+ // -------------------------------
+ { -1, LOOK, 211, 184 }
+};
- if (roomNo == 0)
- roomActions = room0Actions;
- else if (roomNo == 1)
- roomActions = room1Actions;
+RoomTalkAction room4Actions[] = {
+ // num action object speech
+ { -1, LOOK, 189, 182 },
+ // -------------------------------
+ { -1, LOOK, 207, 175 },
+ { -1, TALK, 207, 176 },
+ // -------------------------------
+ { -1, LOOK, 208, 177 },
+ // -------------------------------
+ { -1, LOOK, 209, 179 },
+ // -------------------------------
+ { -1, LOOK, 210, 180 },
+ { -1, OPEN, 210, 181 }
+};
+
+RoomTalkAction room12Actions[] = {
+ // num action object speech
+ { -1, LOOK, 154, 329 },
+ { -1, TALK, 154, 330 },
+ // -------------------------------
+ { -1, MOVE, 155, 48 },
+ { -1, TALK, 155, 331 },
+ // -------------------------------
+ { -1, LOOK, 156, 35 },
+ { -1, MOVE, 156, 48 },
+ { -1, TALK, 156, 50 },
+};
+
+bool DrasculaEngine::roomParse(RoomTalkAction* roomActions, int fl) {
+ bool didAction = false;
for (int i = 0; i < ARRAYSIZE(roomActions); i++) {
if (roomActions[i].num == num_ejec ||
@@ -123,7 +181,7 @@ bool DrasculaEngine::roomParse(int roomNo, int fl) {
}
void DrasculaEngine::room_0() {
- if (roomParse(0, -1))
+ if (roomParse(room0Actions, -1))
return;
// non-default actions
@@ -199,7 +257,7 @@ void DrasculaEngine::room_0() {
}
void DrasculaEngine::room_1(int fl) {
- if (roomParse(1, fl))
+ if (roomParse(room1Actions, fl))
return;
if (objeto_que_lleva == LOOK && fl == 118) {
@@ -213,55 +271,14 @@ void DrasculaEngine::room_1(int fl) {
}
void DrasculaEngine::room_3(int fl) {
- if (objeto_que_lleva == LOOK && fl == 129)
- talk(21);
- else if (objeto_que_lleva == PICK && fl == 129)
- talk(5);
- else if (objeto_que_lleva == MOVE && fl == 129)
- talk(24);
- else if (objeto_que_lleva == OPEN && fl == 129)
- talk(22);
- else if (objeto_que_lleva == CLOSE && fl == 129)
- talk(10);
- else if (objeto_que_lleva == TALK && fl == 129) {
+ if (roomParse(room3Actions, fl))
+ return;
+
+ if (objeto_que_lleva == TALK && fl == 129) {
talk(23);
pause(6);
talk_sinc(_text[_lang][50], "50.als", "11111111111144432554433");
- } else if (objeto_que_lleva == LOOK && fl == 131)
- talk(27);
- else if (objeto_que_lleva == PICK && fl == 131)
- talk(5);
- else if (objeto_que_lleva == MOVE && fl == 131)
- talk(24);
- else if (objeto_que_lleva == OPEN && fl == 131)
- talk(22);
- else if (objeto_que_lleva == CLOSE && fl == 131)
- talk(10);
- else if (objeto_que_lleva == TALK && fl == 131)
- talk(23);
- else if (objeto_que_lleva == LOOK && fl == 132)
- talk(28);
- else if (objeto_que_lleva == PICK && fl == 132)
- talk(5);
- else if (objeto_que_lleva == MOVE && fl == 132)
- talk(24);
- else if (objeto_que_lleva == OPEN && fl == 132)
- talk(22);
- else if (objeto_que_lleva == CLOSE && fl == 132)
- talk(10);
- else if (objeto_que_lleva == TALK && fl == 132)
- talk(23);
- else if (objeto_que_lleva == LOOK && fl == 133)
- talk(321);
- else if (objeto_que_lleva == PICK && fl == 133)
- talk(31);
- else if (objeto_que_lleva == MOVE && fl == 133)
- talk(34);
- else if (objeto_que_lleva == OPEN && fl == 133)
- talk(30);
- else if (objeto_que_lleva == CLOSE && fl == 133)
- talk(10);
- else if (objeto_que_lleva == TALK && fl == 133) {
+ } else if (objeto_que_lleva == TALK && fl == 133) {
talk_sinc(_text[_lang][322], "322.als", "13333334125433333333");
updateRoom();
updateScreen(0, 0, 0, 0, 320, 200, dir_zona_pantalla);
@@ -280,17 +297,11 @@ void DrasculaEngine::room_3(int fl) {
pickObject(10);
flags[3] = 1;
visible[8] = 0;
- } else if (objeto_que_lleva == LOOK && fl == 166)
- talk(55);
- else if (objeto_que_lleva == PICK && fl == 166)
- talk(7);
- else if (objeto_que_lleva == 14 && fl == 166 && flags[37] == 0) {
+ } else if (objeto_que_lleva == 14 && fl == 166 && flags[37] == 0) {
animation_7_2();
pickObject(8);
} else if (objeto_que_lleva == 14 && fl == 166 && flags[37] == 1)
talk(323);
- else if (objeto_que_lleva == LOOK && fl == 211)
- talk(184);
else if (objeto_que_lleva == TALK && fl == 211) {
talk(185);
talk(186);
@@ -299,27 +310,16 @@ void DrasculaEngine::room_3(int fl) {
}
void DrasculaEngine::room_4(int fl) {
+ if (roomParse(room4Actions, fl))
+ return;
+
if (objeto_que_lleva == MOVE && fl == 189 && flags[34] == 0) {
talk(327);
pickObject(13);
flags[34] = 1;
if (flags[7] == 1 && flags[26] == 1 && flags[34] == 1 && flags[35] == 1 && flags[37] == 1)
flags[38] = 1;
- } else if (objeto_que_lleva == LOOK && fl == 189)
- talk(182);
- else if (objeto_que_lleva == LOOK && fl == 207)
- talk(175);
- else if (objeto_que_lleva == TALK && fl == 207)
- talk(176);
- else if (objeto_que_lleva == LOOK && fl == 208)
- talk(177);
- else if (objeto_que_lleva == LOOK && fl == 209)
- talk(179);
- else if (objeto_que_lleva == LOOK && fl == 210)
- talk(180);
- else if (objeto_que_lleva == OPEN && fl == 210)
- talk(181);
- else
+ } else
hay_respuesta = 0;
}
@@ -470,21 +470,10 @@ void DrasculaEngine::room_9(int fl){
}
void DrasculaEngine::room_12(int fl){
- if (objeto_que_lleva == LOOK && fl == 154)
- talk(329);
- else if (objeto_que_lleva == TALK && fl == 154)
- talk(330);
- else if (objeto_que_lleva == MOVE && fl == 155)
- talk(48);
- else if (objeto_que_lleva == TALK && fl == 155)
- talk(331);
- else if (objeto_que_lleva == LOOK && fl == 156)
- talk(35);
- else if (objeto_que_lleva == MOVE && fl == 156)
- talk(48);
- else if (objeto_que_lleva == TALK && fl == 156)
- talk(50);
- else if (objeto_que_lleva == OPEN && fl == 156)
+ if (roomParse(room12Actions, fl))
+ return;
+
+ if (objeto_que_lleva == OPEN && fl == 156)
openDoor(16, 4);
else if (objeto_que_lleva == CLOSE && fl == 156)
closeDoor(16, 4);