aboutsummaryrefslogtreecommitdiff
path: root/engines/drascula/animation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/drascula/animation.cpp')
-rw-r--r--engines/drascula/animation.cpp358
1 files changed, 134 insertions, 224 deletions
diff --git a/engines/drascula/animation.cpp b/engines/drascula/animation.cpp
index 43799f7944..52cab6cd32 100644
--- a/engines/drascula/animation.cpp
+++ b/engines/drascula/animation.cpp
@@ -42,7 +42,6 @@ void DrasculaEngine::updateAnim(int y, int destX, int destY, int width, int heig
}
}
-// This is the game's introduction sequence
void DrasculaEngine::animation_1_1() {
debug(4, "animation_1_1()");
@@ -92,12 +91,8 @@ void DrasculaEngine::animation_1_1() {
playFLI("scrollb.bin", 9);
- if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
- break;
clearRoom();
playSound(5);
- if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
- break;
if (animate("scr2.bin", 17))
break;
stopSound();
@@ -194,8 +189,6 @@ void DrasculaEngine::animation_1_1() {
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
break;
talk_drascula(3);
- if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
- break;
if (animate("lib.bin", 16))
break;
if (animate("lib2.bin", 16))
@@ -211,8 +204,6 @@ void DrasculaEngine::animation_1_1() {
loadPic("plan1.alg", screenSurface, HALF_PAL);
updateScreen();
talk_solo(_textd[5], "d5.als");
- if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
- break;
if (animate("lib2.bin", 16))
break;
clearRoom();
@@ -220,8 +211,6 @@ void DrasculaEngine::animation_1_1() {
updateScreen();
pause(20);
talk_solo(_textd[6], "d6.als");
- if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
- break;
if (animate("lib2.bin", 16))
break;
clearRoom();
@@ -255,8 +244,6 @@ void DrasculaEngine::animation_1_1() {
break;
playMusic(11);
talk_drascula(10);
- if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
- break;
if (animate("rayo1.bin", 16))
break;
playSound(5);
@@ -372,7 +359,6 @@ void DrasculaEngine::animation_1_1() {
loadPic(99, backSurface);
}
-// John falls in love with BJ, who is then abducted by Drascula
void DrasculaEngine::animation_2_1() {
debug(4, "animation_2_1()");
@@ -384,9 +370,6 @@ void DrasculaEngine::animation_2_1() {
term_int = 0;
while (!shouldQuit()) {
- if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
- break;
-
if (animate("ag.bin", 14))
break;
@@ -456,13 +439,8 @@ void DrasculaEngine::animation_2_1() {
curY = 95;
trackProtagonist = 1;
hare_se_ve = 1;
- if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
- break;
loadPic("97g.alg", extraSurface);
- if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
- break;
-
if (animate("lev.bin", 15))
break;
@@ -520,8 +498,6 @@ void DrasculaEngine::animation_2_1() {
break;
talk_bj(12);
gotoObject(157, 98 + curHeight);
- if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
- break;
if (animate("bes.bin", 16))
break;
playMusic(11);
@@ -530,7 +506,7 @@ void DrasculaEngine::animation_2_1() {
trackProtagonist = 3;
// The room number was originally changed here to "no_bj.alg",
// which doesn't exist. In reality, this was just a hack to
- // set the room number to a non-existant one, so that BJ does
+ // set the room number to a non-existent one, so that BJ does
// not appear again when the room is refreshed after the
// animation where Count Drascula abducts her. We set the
// room number to -1 for the same purpose
@@ -563,7 +539,6 @@ void DrasculaEngine::animation_2_1() {
}
}
-// John Hacker talks with the bartender to book a room
void DrasculaEngine::animation_3_1() {
debug(4, "animation_3_1()");
@@ -574,7 +549,6 @@ void DrasculaEngine::animation_3_1() {
loadPic(97, extraSurface);
}
-// John Hacker talks with the pianist
void DrasculaEngine::animation_4_1() {
debug(4, "animation_4_1()");
@@ -676,26 +650,39 @@ void DrasculaEngine::animation_4_2() {
pause(5);
talk_hacker(57);
pause(6);
- talk_blind(2);
- pause(4);
- talk_hacker(58);
- talk_blind(3);
- delay(14);
- talk_hacker(59);
- talk_blind(4);
- talk_hacker(60);
- talk_blind(5);
- talk_hacker(61);
- talk_blind(6);
- talk_hacker(62);
- talk_blind(7);
- talk_hacker(63);
- talk_blind(8);
- copyBackground();
- updateScreen();
- _system->delayMillis(1000);
- talk_hacker(64);
- talk_blind(9);
+
+ if (flags[4] == 0) { // first time
+ talk_blind(2);
+ pause(4);
+ talk_hacker(58);
+ talk_blind(3);
+ delay(14);
+ talk_hacker(59);
+ talk_blind(4);
+ talk_hacker(60);
+ talk_blind(5);
+ talk_hacker(61);
+ talk_blind(6);
+ talk_hacker(62);
+ talk_blind(7);
+ talk_hacker(63);
+ talk_blind(8);
+ copyBackground();
+ updateScreen();
+ _system->delayMillis(1000);
+ talk_hacker(64);
+ talk_blind(9);
+
+ flags[4] = 1; // talked to the blind man
+ } else { // second time
+ _system->delayMillis(1000);
+ talk_blind(10);
+ talk_hacker(65);
+
+ flags[33] = 1;
+ }
+
+ flags[9] = 0;
copyBackground();
updateScreen();
@@ -711,9 +698,6 @@ void DrasculaEngine::animation_4_2() {
loadPic(97, extraSurface);
loadPic(99, backSurface);
selectVerb(kVerbNone);
-
- flags[9] = 0;
- flags[4] = 1;
}
void DrasculaEngine::animation_14_2() {
@@ -798,17 +782,22 @@ void DrasculaEngine::animation_16_2() {
return;
}
- delay(3000);
+ uint32 now = _system->getMillis();
+ while (_system->getMillis() - now < 3000 * 2) {
+ delay(50);
+ if (getScan() != 0) {
+ asco();
+ return;
+ }
+ }
if (i < 4) {
fadeToBlack(1);
-
+ clearRoom();
if (getScan() != 0) {
asco();
return;
}
-
- clearRoom();
}
}
@@ -818,6 +807,7 @@ void DrasculaEngine::animation_16_2() {
for (int l = 1; l < 200; l++) {
copyBackground(0, 0, 0, l, 320, 200 - l, drawSurface3, screenSurface);
copyBackground(0, 200 - l, 0, 0, 320, l, bgSurface, screenSurface);
+ delay(10);
updateScreen();
if (getScan() != 0) {
asco();
@@ -867,6 +857,20 @@ void DrasculaEngine::animation_20_2() {
void DrasculaEngine::animation_23_2() {
debug(4, "animation_23_2()");
+ int p_x, p_y;
+ int maxN;
+ int animX, animY;
+
+ // Animation offsets - without earplugs
+ int johnFrameX[] = {1, 38, 75, 112, 75, 112, 75, 112, 149, 112, 149, 112, 149, 186, 223, 260,
+ 1, 38, 75, 112, 149, 112, 149, 112, 149, 112, 149, 186, 223, 260, 260, 260, 260, 223};
+ int johnFrameY[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 76, 76, 76, 76, 76, 76, 76,
+ 76, 76, 76, 76, 76, 76, 76, 1, 1, 1, 1};
+
+ // Animation offsets - with earplugs
+ int john2FrameX[] = {1, 35, 69, 103, 137, 171, 205, 239, 273, 1, 35, 69, 103, 137};
+ int john2FrameY[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 73, 73, 73, 73, 73};
+
loadPic("an24.alg", frontSurface);
flags[21] = 1;
@@ -893,10 +897,41 @@ void DrasculaEngine::animation_23_2() {
trackVonBraun = 1;
talk_vonBraun(18, kVonBraunNormal);
- if (flags[29] == 0)
- animation_23_joined();
- else
- animation_23_joined2();
+ if (flags[29] == 0) {
+ // John isn't wearing earplugs
+ p_x = curX + 2;
+ p_y = curY - 3;
+ maxN = 34;
+ animX = 36;
+ animY = 74;
+
+ loadPic("an23.alg", backSurface);
+ } else {
+ // John is wearing earplugs
+ p_x = curX + 4;
+ p_y = curY;
+ maxN = 14;
+ animX = 33;
+ animY = 71;
+
+ pause(50);
+
+ loadPic("an23_2.alg", backSurface);
+ }
+
+ for (int n = 0; n < maxN; n++) {
+ copyRect(p_x, p_y, p_x, p_y, animX, animY, bgSurface, screenSurface);
+ if (flags[29] == 0)
+ copyRect(johnFrameX[n], johnFrameY[n], p_x, p_y, animX, animY, backSurface, screenSurface);
+ else
+ copyRect(john2FrameX[n], john2FrameY[n], p_x, p_y, animX, animY, backSurface, screenSurface);
+ updateRefresh();
+ updateScreen(p_x, p_y, p_x, p_y, animX, animY, screenSurface);
+ updateEvents();
+ pause(5);
+ }
+
+ loadPic(99, backSurface);
trackVonBraun = 2;
animation_25_2();
@@ -921,52 +956,6 @@ void DrasculaEngine::animation_23_2() {
breakOut = 1;
}
-void DrasculaEngine::animation_23_joined() {
- debug(4, "animation_23_joined()");
-
- int p_x = curX + 2, p_y = curY - 3;
- int x[] = {1, 38, 75, 112, 75, 112, 75, 112, 149, 112, 149, 112, 149, 186, 223, 260,
- 1, 38, 75, 112, 149, 112, 149, 112, 149, 112, 149, 186, 223, 260, 260, 260, 260, 223};
- int y[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 76, 76, 76, 76, 76, 76, 76,
- 76, 76, 76, 76, 76, 76, 76, 1, 1, 1, 1};
-
- loadPic("an23.alg", backSurface);
-
- for (int n = 0; n < 34; n++) {
- copyRect(p_x, p_y, p_x, p_y, 36, 74, bgSurface, screenSurface);
- copyRect(x[n], y[n], p_x, p_y, 36, 74, backSurface, screenSurface);
- updateRefresh();
- updateScreen(p_x, p_y, p_x, p_y, 36, 74, screenSurface);
- updateEvents();
- pause(5);
- }
-
- loadPic(99, backSurface);
-}
-
-void DrasculaEngine::animation_23_joined2() {
- debug(4, "animation_23_joined2()");
-
- int p_x = curX + 4, p_y = curY;
- int x[] = {1, 35, 69, 103, 137, 171, 205, 239, 273, 1, 35, 69, 103, 137};
- int y[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 73, 73, 73, 73, 73};
-
- pause(50);
-
- loadPic("an23_2.alg", backSurface);
-
- for (int n = 0; n < 14; n++) {
- copyRect(p_x, p_y, p_x, p_y, 33, 71, bgSurface, screenSurface);
- copyRect(x[n], y[n], p_x, p_y, 33, 71, backSurface, screenSurface);
- updateRefresh();
- updateScreen(p_x,p_y, p_x,p_y, 33,71, screenSurface);
- updateEvents();
- pause(5);
- }
-
- loadPic(99, backSurface);
-}
-
void DrasculaEngine::animation_25_2() {
debug(4, "animation_25_2()");
@@ -1091,31 +1080,11 @@ void DrasculaEngine::animation_35_2() {
fadeToBlack(2);
}
-// Use cross on Yoda
void DrasculaEngine::animation_2_3() {
debug(4, "animation_2_3()");
flags[0] = 1;
playMusic(13);
- animation_3_3();
- playMusic(13);
- animation_4_3();
- flags[1] = 1;
- updateRoom();
- updateScreen(120, 0, 120, 0, 200, 200, screenSurface);
- animation_5_3();
- flags[0] = 0;
- flags[1] = 1;
-
- loadPic(96, frontSurface);
- loadPic(97, extraSurface);
- loadPic(99, backSurface);
-
- gotoObject(332, 127);
-}
-
-void DrasculaEngine::animation_3_3() {
- debug(4, "animation_3_3()");
int px = curX - 20, py = curY - 1;
@@ -1129,12 +1098,11 @@ void DrasculaEngine::animation_3_3() {
updateAnim(75, px, py, 71, 72, 4, extraSurface, 3, true);
updateAnim(2, px, py, 71, 72, 4, backSurface, 3, true);
updateAnim(75, px, py, 71, 72, 4, backSurface, 3, true);
-}
-void DrasculaEngine::animation_4_3() {
- debug(4, "animation_4_3()");
+ playMusic(13);
- int px = 120, py = 63;
+ px = 120;
+ py = 63;
loadPic("any_1.alg", frontSurface);
loadPic("any_2.alg", extraSurface);
@@ -1146,12 +1114,13 @@ void DrasculaEngine::animation_4_3() {
updateAnim(91, px, py, 77, 89, 4, extraSurface, 3, true);
updateAnim(1, px, py, 77, 89, 4, backSurface, 3, true);
updateAnim(91, px, py, 77, 89, 4, backSurface, 3, true);
-}
-void DrasculaEngine::animation_5_3() {
- debug(4, "animation_5_3()");
+ flags[1] = 1;
+ updateRoom();
+ updateScreen(120, 0, 120, 0, 200, 200, screenSurface);
- int px = curX - 20, py = curY - 1;
+ px = curX - 20;
+ py = curY - 1;
loadPic("an3y_1.alg", frontSurface);
loadPic("an3y_2.alg", extraSurface);
@@ -1163,6 +1132,15 @@ void DrasculaEngine::animation_5_3() {
updateAnim(75, px, py, 71, 72, 4, extraSurface, 3, true);
updateAnim(2, px, py, 71, 72, 4, backSurface, 3, true);
updateAnim(75, px, py, 71, 72, 4, backSurface, 3, true);
+
+ flags[0] = 0;
+ flags[1] = 1;
+
+ loadPic(96, frontSurface);
+ loadPic(97, extraSurface);
+ loadPic(99, backSurface);
+
+ gotoObject(332, 127);
}
void DrasculaEngine::animation_6_3() {
@@ -1197,8 +1175,8 @@ void DrasculaEngine::animation_6_3() {
updateScreen();
}
-void DrasculaEngine::animation_ray() {
- debug(4, "animation_ray()");
+void DrasculaEngine::animation_castle() {
+ debug(4, "animation_castle()");
loadPic("anr_1.alg", frontSurface, HALF_PAL);
loadPic("anr_2.alg", extraSurface);
@@ -1365,18 +1343,6 @@ void DrasculaEngine::animation_5_5(){
loadPic(49, bgSurface, HALF_PAL);
}
-void DrasculaEngine::animation_11_5() {
- debug(4, "animation_11_5()");
-
- flags[9] = 1;
- if (flags[2] == 1 && flags[3] == 1 && flags[4] == 1)
- animation_12_5();
- else {
- flags[9] = 0;
- talk(33);
- }
-}
-
void DrasculaEngine::animation_12_5() {
debug(4, "animation_12_5()");
@@ -1426,7 +1392,7 @@ void DrasculaEngine::animation_12_5() {
loadPic("3an11_1.alg", backSurface);
for (frame = 0; frame < 8; frame++) {
- if (frame == 2 || frame == 4 || frame == 8 || frame==10)
+ if (frame == 2 || frame == 4 || frame == 8 || frame == 10)
setPalette((byte *)&bgPalette1);
else if (frame == 1 || frame == 5 || frame == 7 || frame == 9)
setPalette((byte *)&bgPalette2);
@@ -1465,7 +1431,8 @@ void DrasculaEngine::animation_12_5() {
flags[1] = 1;
- animation_13_5();
+ animation_12_5_frankenstein();
+
playSound(1);
hiccup(12);
finishSound();
@@ -1487,13 +1454,11 @@ void DrasculaEngine::animation_12_5() {
enterRoom(57);
}
-void DrasculaEngine::animation_13_5() {
- debug(4, "animation_13_5()");
-
+void DrasculaEngine::animation_12_5_frankenstein() {
int frank_x = 199;
- int frame = 0;
int frus_x[] = {1, 46, 91, 136, 181, 226, 271};
int frus_y[] = {1, 1, 1, 1, 1, 1, 1, 89};
+ int frame = 0;
loadPic("auxfr.alg", backSurface);
@@ -1690,8 +1655,8 @@ void DrasculaEngine::animation_9_6() {
objExit = 108;
enterRoom(59);
// The room number was originally changed here to "nada.alg",
- // which is a non-existant file. In reality, this was just a
- // hack to set the room number to a non-existant one, so that
+ // which is a non-existent file. In reality, this was just a
+ // hack to set the room number to a non-existent one, so that
// room sprites do not appear again when the room is refreshed.
// We set the room number to -1 for the same purpose.
// Also check animation_2_1(), where the same hack was used
@@ -1898,27 +1863,6 @@ void DrasculaEngine::animation_24_2() {
loadPic("an24.alg", frontSurface);
- animation_32_2();
-
- flags[21] = 1;
-
- talk_vonBraun(22, kVonBraunNormal);
-
- if (flags[22] == 0)
- converse(4);
- else
- converse(5);
-
- exitRoom(0);
- flags[21] = 0;
- flags[24] = 0;
- trackVonBraun = 1;
- vonBraunX = 120;
-}
-
-void DrasculaEngine::animation_32_2() {
- debug(4, "animation_32_2()");
-
loadPic("an32_1.alg", drawSurface3);
loadPic("an32_2.alg", backSurface);
@@ -1939,6 +1883,21 @@ void DrasculaEngine::animation_32_2() {
}
loadPic("aux18.alg", drawSurface3);
+
+ flags[21] = 1;
+
+ talk_vonBraun(22, kVonBraunNormal);
+
+ if (flags[22] == 0)
+ converse(4);
+ else
+ converse(5);
+
+ exitRoom(0);
+ flags[21] = 0;
+ flags[24] = 0;
+ trackVonBraun = 1;
+ vonBraunX = 120;
}
void DrasculaEngine::animation_34_2() {
@@ -2126,55 +2085,6 @@ void DrasculaEngine::animation_6_2() {
flags[9] = 0;
}
-void DrasculaEngine::animation_33_2() {
- debug(4, "animation_33_2()");
-
- stopMusic();
- flags[9] = 1;
-
- pause(12);
- talk(60);
- pause(8);
-
- clearRoom();
- loadPic("ciego1.alg", bgSurface, HALF_PAL); // ciego = blind
- loadPic("ciego2.alg", drawSurface3);
- loadPic("ciego3.alg", extraSurface);
- loadPic("ciego4.alg", backSurface);
- loadPic("ciego5.alg", frontSurface);
-
- copyBackground();
- updateScreen();
-
- pause(10);
-
- talk_blind(1);
- pause(5);
- talk_hacker(57);
- pause(6);
- _system->delayMillis(1000);
- talk_blind(10);
- talk_hacker(65);
-
- copyBackground();
- updateScreen();
-
- pause(14);
-
- clearRoom();
-
- playMusic(roomMusic);
- loadPic(9, bgSurface, HALF_PAL);
- loadPic("aux9.alg", drawSurface3);
- loadPic(96, frontSurface);
- loadPic(97, extraSurface);
- loadPic(99, backSurface);
- selectVerb(kVerbNone);
-
- flags[33] = 1;
- flags[9] = 0;
-}
-
void DrasculaEngine::animation_1_4() {
debug(4, "animation_1_4()");