aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/drascula/animation.cpp40
-rw-r--r--engines/drascula/converse.cpp209
-rw-r--r--engines/drascula/drascula.h19
-rw-r--r--engines/drascula/graphics.cpp4
-rw-r--r--engines/drascula/palette.cpp22
5 files changed, 108 insertions, 186 deletions
diff --git a/engines/drascula/animation.cpp b/engines/drascula/animation.cpp
index 954181d327..720506add1 100644
--- a/engines/drascula/animation.cpp
+++ b/engines/drascula/animation.cpp
@@ -1010,10 +1010,6 @@ void DrasculaEngine::animation_17_2() {
flags[40] = 1;
}
-void DrasculaEngine::animation_19_2() {
- talk_vonBraun(5, kVonBraunDoor);
-}
-
void DrasculaEngine::animation_20_2() {
talk_vonBraun(7, kVonBraunDoor);
talk_vonBraun(8, kVonBraunDoor);
@@ -1044,10 +1040,6 @@ void DrasculaEngine::animation_20_2() {
}
}
-void DrasculaEngine::animation_21_2() {
- talk_vonBraun(6, kVonBraunDoor);
-}
-
void DrasculaEngine::animation_23_2() {
loadPic("an24.alg", frontSurface);
@@ -1514,10 +1506,6 @@ void DrasculaEngine::animation_1_5() {
converse(8);
}
-void DrasculaEngine::animation_2_5() {
- talk_bj(22);
-}
-
void DrasculaEngine::animation_3_5() {
talk_bj(23);
pickObject(10);
@@ -1837,14 +1825,6 @@ void DrasculaEngine::animation_15_5() {
talk_mus(7);
}
-void DrasculaEngine::animation_16_5() {
- talk_mus(8);
-}
-
-void DrasculaEngine::animation_17_5() {
- talk_mus(9);
-}
-
void DrasculaEngine::animation_1_6() {
trackProtagonist = 0;
curX = 103;
@@ -1919,18 +1899,6 @@ void DrasculaEngine::animation_1_6() {
activatePendulum();
}
-void DrasculaEngine::animation_2_6() {
- talk_drascula(24, 1);
-}
-
-void DrasculaEngine::animation_3_6() {
- talk_drascula(24, 1);
-}
-
-void DrasculaEngine::animation_4_6() {
- talk_drascula(25, 1);
-}
-
void DrasculaEngine::animation_5_6() {
int pos_pen[6] = { 1, 29, 204, -125, 18, 125 };
@@ -2080,10 +2048,6 @@ void DrasculaEngine::animation_12_6() {
talk_bartender(14, 1);
}
-void DrasculaEngine::animation_13_6() {
- talk_bartender(15, 1);
-}
-
void DrasculaEngine::animation_14_6() {
talk_bartender(24, 1);
addObject(21);
@@ -2091,10 +2055,6 @@ void DrasculaEngine::animation_14_6() {
breakOut = 1;
}
-void DrasculaEngine::animation_15_6() {
- talk_bartender(16, 1);
-}
-
void DrasculaEngine::animation_18_6() {
flags[6] = 1;
withoutVerb();
diff --git a/engines/drascula/converse.cpp b/engines/drascula/converse.cpp
index 1c3831e4ca..da24ffd55a 100644
--- a/engines/drascula/converse.cpp
+++ b/engines/drascula/converse.cpp
@@ -27,38 +27,32 @@
namespace Drascula {
+void DrasculaEngine::cleanupString(char *string) {
+ uint len = strlen(string);
+ for (uint h = 0; h < len; h++)
+ if (string[h] == (char)0xa7)
+ string[h] = ' ';
+}
+
void DrasculaEngine::converse(int index) {
char fileName[20];
sprintf(fileName, "op_%d.cal", index);
- uint h;
- int game1 = 1, game2 = 1, game3 = 1, game4 = 1;
- char phrase1[78];
- char phrase2[78];
- char phrase3[87];
- char phrase4[78];
- char sound1[13];
- char sound2[13];
- char sound3[13];
- char sound4[13];
- int answer1;
- int answer2;
- int answer3;
- int used1 = 0;
- int used2 = 0;
- int used3 = 0;
+ _arj.open(fileName);
+ if (!_arj.isOpen())
+ error("missing data file %s", fileName);
+
+ int size = _arj.size();
+ int game1 = kDialogOptionUnselected,
+ game2 = kDialogOptionUnselected,
+ game3 = kDialogOptionUnselected;
+ char phrase1[78], phrase2[78], phrase3[78], phrase4[78];
+ char sound1[13], sound2[13], sound3[13], sound4[13];
+ int answer1, answer2, answer3;
char buffer[256];
- uint len;
breakOut = 0;
- if (currentChapter == 5)
- withoutVerb();
-
- _arj.open(fileName);
- if (!_arj.isOpen()) {
- error("missing data file %s", fileName);
- }
- int size = _arj.size();
+ withoutVerb();
getStringFromLine(buffer, size, phrase1);
getStringFromLine(buffer, size, phrase2);
@@ -92,129 +86,96 @@ void DrasculaEngine::converse(int index) {
answer3 = 15;
}
- len = strlen(phrase1);
- for (h = 0; h < len; h++)
- if (phrase1[h] == (char)0xa7)
- phrase1[h] = ' ';
-
- len = strlen(phrase2);
- for (h = 0; h < len; h++)
- if (phrase2[h] == (char)0xa7)
- phrase2[h] = ' ';
-
- len = strlen(phrase3);
- for (h = 0; h < len; h++)
- if (phrase3[h] == (char)0xa7)
- phrase3[h] = ' ';
-
- len = strlen(phrase4);
- for (h = 0; h < len; h++)
- if (phrase4[h] == (char)0xa7)
- phrase4[h] = ' ';
+ cleanupString(phrase1);
+ cleanupString(phrase2);
+ cleanupString(phrase3);
+ cleanupString(phrase4);
loadPic("car.alg", backSurface);
// TODO code here should limit y position for mouse in dialog menu,
- // but we can't implement this due lack backend functionality
+ // but we can't implement this as there is lack in backend functionality
// from 1(top) to 31
color_abc(kColorLightGreen);
while (breakOut == 0) {
updateRoom();
- if (currentChapter == 1 || currentChapter == 4 || currentChapter == 6) {
- if (musicStatus() == 0 && flags[11] == 0)
- playMusic(roomMusic);
- } else if (currentChapter == 2) {
- if (musicStatus() == 0 && flags[11] == 0 && roomMusic != 0)
- playMusic(roomMusic);
- } else if (currentChapter == 3 || currentChapter == 5) {
- if (musicStatus() == 0)
+ if (musicStatus() == 0 && roomMusic != 0) {
+ if (currentChapter == 3 || currentChapter == 5) {
playMusic(roomMusic);
+ } else { // chapters 1, 2, 4, 6
+ if (flags[11] == 0)
+ playMusic(roomMusic);
+ }
}
updateEvents();
+ print_abc_opc(phrase1, 2, game1);
+ print_abc_opc(phrase2, 10, game2);
+ print_abc_opc(phrase3, 18, game3);
+ print_abc_opc(phrase4, 26, kDialogOptionUnselected);
+
if (mouseY > 0 && mouseY < 9) {
- if (used1 == 1 && _color != kColorWhite)
+ if (game1 == kDialogOptionClicked && _color != kColorWhite)
color_abc(kColorWhite);
- else if (used1 == 0 && _color != kColorLightGreen)
+ else if (game1 != kDialogOptionClicked && _color != kColorLightGreen)
color_abc(kColorLightGreen);
+
+ print_abc_opc(phrase1, 2, kDialogOptionSelected);
+
+ if (leftMouseButton == 1) {
+ delay(100);
+ game1 = kDialogOptionClicked;
+ talk(phrase1, sound1);
+ response(answer1);
+ }
} else if (mouseY > 8 && mouseY < 17) {
- if (used2 == 1 && _color != kColorWhite)
+ if (game2 == kDialogOptionClicked && _color != kColorWhite)
color_abc(kColorWhite);
- else if (used2 == 0 && _color != kColorLightGreen)
+ else if (game2 != kDialogOptionClicked && _color != kColorLightGreen)
color_abc(kColorLightGreen);
+
+ print_abc_opc(phrase2, 10, kDialogOptionSelected);
+
+ if (leftMouseButton == 1) {
+ delay(100);
+ game2 = kDialogOptionClicked;
+ talk(phrase2, sound2);
+ response(answer2);
+ }
} else if (mouseY > 16 && mouseY < 25) {
- if (used3 == 1 && _color != kColorWhite)
+ if (game3 == kDialogOptionClicked && _color != kColorWhite)
color_abc(kColorWhite);
- else if (used3 == 0 && _color != kColorLightGreen)
+ else if (game3 != kDialogOptionClicked && _color != kColorLightGreen)
color_abc(kColorLightGreen);
- } else if (_color != kColorLightGreen)
- color_abc(kColorLightGreen);
-
- if (mouseY > 0 && mouseY < 9)
- game1 = 2;
- else if (mouseY > 8 && mouseY < 17)
- game2 = 2;
- else if (mouseY > 16 && mouseY < 25)
- game3 = 2;
- else if (mouseY > 24 && mouseY < 33)
- game4 = 2;
- print_abc_opc(phrase1, 1, 2, game1);
- print_abc_opc(phrase2, 1, 10, game2);
- print_abc_opc(phrase3, 1, 18, game3);
- print_abc_opc(phrase4, 1, 26, game4);
+ print_abc_opc(phrase3, 18, kDialogOptionSelected);
- updateScreen();
-
- if ((leftMouseButton == 1) && (game1 == 2)) {
- delay(100);
- used1 = 1;
- talk(phrase1, sound1);
- if (currentChapter == 3)
- grr();
- else
- response(answer1);
- } else if ((leftMouseButton == 1) && (game2 == 2)) {
- delay(100);
- used2 = 1;
- talk(phrase2, sound2);
- if (currentChapter == 3)
- grr();
- else
- response(answer2);
- } else if ((leftMouseButton == 1) && (game3 == 2)) {
- delay(100);
- used3 = 1;
- talk(phrase3, sound3);
- if (currentChapter == 3)
- grr();
- else
+ if (leftMouseButton == 1) {
+ delay(100);
+ game3 = kDialogOptionClicked;
+ talk(phrase3, sound3);
response(answer3);
- } else if ((leftMouseButton == 1) && (game4 == 2)) {
- delay(100);
- talk(phrase4, sound4);
- breakOut = 1;
- }
+ }
+ } else if (mouseY > 24 && mouseY < 33) {
+ print_abc_opc(phrase4, 26, kDialogOptionSelected);
- if (leftMouseButton == 1) {
- delay(100);
+ if (leftMouseButton == 1) {
+ delay(100);
+ talk(phrase4, sound4);
+ breakOut = 1;
+ }
+ } else if (_color != kColorLightGreen)
color_abc(kColorLightGreen);
- }
- game1 = (used1 == 0) ? 1 : 3;
- game2 = (used2 == 0) ? 1 : 3;
- game3 = (used3 == 0) ? 1 : 3;
- game4 = 1;
+ updateScreen();
} // while (breakOut == 0)
if (currentChapter == 2)
loadPic(menuBackground, backSurface);
else
loadPic(99, backSurface);
- if (currentChapter != 5)
- withoutVerb();
}
void DrasculaEngine::response(int function) {
@@ -235,11 +196,11 @@ void DrasculaEngine::response(int function) {
else if (function == 17)
animation_17_2();
else if (function == 19)
- animation_19_2();
+ talk_vonBraun(5, kVonBraunDoor);
else if (function == 20)
animation_20_2();
else if (function == 21)
- animation_21_2();
+ talk_vonBraun(6, kVonBraunDoor);
else if (function == 23)
animation_23_2();
else if (function == 28)
@@ -250,6 +211,8 @@ void DrasculaEngine::response(int function) {
animation_30_2();
else if (function == 31)
animation_31_2();
+ } else if (currentChapter == 3) {
+ grr();
} else if (currentChapter == 4) {
if (function == 2)
animation_2_4();
@@ -259,7 +222,7 @@ void DrasculaEngine::response(int function) {
animation_4_4();
} else if (currentChapter == 5) {
if (function == 2)
- animation_2_5();
+ talk_bj(22);
else if (function == 3)
animation_3_5();
else if (function == 6)
@@ -271,26 +234,26 @@ void DrasculaEngine::response(int function) {
else if (function == 15)
animation_15_5();
else if (function == 16)
- animation_16_5();
+ talk_mus(8);
else if (function == 17)
- animation_17_5();
+ talk_mus(9);
} else if (currentChapter == 6) {
if (function == 2)
- animation_2_6();
+ talk_drascula(24, 1);
else if (function == 3)
- animation_3_6();
+ talk_drascula(24, 1);
else if (function == 4)
- animation_4_6();
+ talk_drascula(25, 1);
else if (function == 11)
animation_11_6();
else if (function == 12)
animation_12_6();
else if (function == 13)
- animation_13_6();
+ talk_bartender(15, 1);
else if (function == 14)
animation_14_6();
else if (function == 15)
- animation_15_6();
+ talk_bartender(16, 1);
}
}
diff --git a/engines/drascula/drascula.h b/engines/drascula/drascula.h
index 2eb7a19559..417674e8c3 100644
--- a/engines/drascula/drascula.h
+++ b/engines/drascula/drascula.h
@@ -151,6 +151,12 @@ enum AnimFrameTypes {
kFramePendulum = 7
};
+enum DialogOptionStatus {
+ kDialogOptionUnselected = 1,
+ kDialogOptionSelected = 2,
+ kDialogOptionClicked = 3
+};
+
#define TEXTD_START 68
struct DrasculaGameDescription;
@@ -499,8 +505,9 @@ public:
bool checkMenuFlags();
void setupRoomsTable();
bool roomParse(int, int);
+ void cleanupString(char *string);
void converse(int);
- void print_abc_opc(const char *, int, int, int);
+ void print_abc_opc(const char *, int, int);
void response(int);
void activatePendulum();
@@ -578,9 +585,7 @@ public:
void animation_16_2();
void animation_17_2();
void animation_18_2();
- void animation_19_2();
void animation_20_2();
- void animation_21_2();
void animation_22_2();
void animation_23_2();
void animation_23_joined();
@@ -618,7 +623,6 @@ public:
void animation_9_4();
//
void animation_1_5();
- void animation_2_5();
void animation_3_5();
void animation_4_5();
void animation_5_5();
@@ -632,13 +636,8 @@ public:
void animation_13_5();
void animation_14_5();
void animation_15_5();
- void animation_16_5();
- void animation_17_5();
//
void animation_1_6();
- void animation_2_6();
- void animation_3_6();
- void animation_4_6();
void animation_5_6();
void animation_6_6();
void animation_7_6();
@@ -646,9 +645,7 @@ public:
void animation_10_6();
void animation_11_6();
void animation_12_6();
- void animation_13_6();
void animation_14_6();
- void animation_15_6();
void animation_18_6();
void animation_19_6();
diff --git a/engines/drascula/graphics.cpp b/engines/drascula/graphics.cpp
index cde9dcca4d..6fc7e54bc4 100644
--- a/engines/drascula/graphics.cpp
+++ b/engines/drascula/graphics.cpp
@@ -254,10 +254,12 @@ void DrasculaEngine::print_abc(const char *said, int screenX, int screenY) {
} // for
}
-void DrasculaEngine::print_abc_opc(const char *said, int screenX, int screenY, int game) {
+void DrasculaEngine::print_abc_opc(const char *said, int screenY, int game) {
int signY, letterY, letterX = 0;
uint len = strlen(said);
+ int screenX = 1;
+
for (uint h = 0; h < len; h++) {
if (game == 1) {
letterY = 6;
diff --git a/engines/drascula/palette.cpp b/engines/drascula/palette.cpp
index 6a93f21e55..3dd2a779e8 100644
--- a/engines/drascula/palette.cpp
+++ b/engines/drascula/palette.cpp
@@ -27,6 +27,17 @@
namespace Drascula {
+const char colorTable[][3] = {
+ { 0, 0, 0 }, { 0x10, 0x3E, 0x28 },
+ { 0, 0, 0 }, // unused
+ { 0x16, 0x3F, 0x16 }, { 0x09, 0x3F, 0x12 },
+ { 0x3F, 0x3F, 0x15 },
+ { 0, 0, 0 }, // unused
+ { 0x38, 0, 0 }, { 0x3F, 0x27, 0x0B },
+ { 0x2A, 0, 0x2A }, { 0x30, 0x30, 0x30 },
+ { 98, 91, 100 }
+};
+
void DrasculaEngine::setRGB(byte *pal, int colorCount) {
int x, cnt = 0;
@@ -70,17 +81,6 @@ void DrasculaEngine::setPalette(byte *PalBuf) {
void DrasculaEngine::color_abc(int cl) {
_color = cl;
- char colorTable[][3] = {
- { 0, 0, 0 }, { 0x10, 0x3E, 0x28 },
- { 0, 0, 0 }, // unused
- { 0x16, 0x3F, 0x16 }, { 0x09, 0x3F, 0x12 },
- { 0x3F, 0x3F, 0x15 },
- { 0, 0, 0 }, // unused
- { 0x38, 0, 0 }, { 0x3F, 0x27, 0x0B },
- { 0x2A, 0, 0x2A }, { 0x30, 0x30, 0x30 },
- { 98, 91, 100 }
- };
-
for (int i = 0; i <= 2; i++)
gamePalette[254][i] = colorTable[cl][i];