mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-14 13:50:13 +00:00
2230 lines
50 KiB
C++
2230 lines
50 KiB
C++
/* ScummVM - Graphic Adventure Engine
|
|
*
|
|
* ScummVM is the legal property of its developers, whose names
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
* file distributed with this source distribution.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
*/
|
|
|
|
#include "drascula/drascula.h"
|
|
|
|
namespace Drascula {
|
|
|
|
void DrasculaEngine::updateAnim(int y, int destX, int destY, int width, int height, int count, byte* src, int delayVal, bool copyRectangle) {
|
|
int x = 0;
|
|
|
|
for (int n = 0; n < count; n++){
|
|
x++;
|
|
if (copyRectangle) {
|
|
copyBackground(destX, destY, destX, destY, width, height, bgSurface, screenSurface);
|
|
copyRect(x, y, destX, destY, width, height, src, screenSurface);
|
|
} else {
|
|
copyBackground(x, y, destX, destY, width, height, src, screenSurface);
|
|
}
|
|
updateScreen(destX, destY, destX, destY, width, height, screenSurface);
|
|
x += width;
|
|
updateEvents();
|
|
pause(delayVal);
|
|
}
|
|
}
|
|
|
|
void DrasculaEngine::animation_1_1() {
|
|
debug(4, "animation_1_1()");
|
|
|
|
while (term_int == 0 && !shouldQuit()) {
|
|
playMusic(29);
|
|
playFLI("logoddm.bin", 9);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
delay(600);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
clearRoom();
|
|
delay(340);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
playMusic(26);
|
|
delay(500);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
playFLI("logoalc.bin", 8);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
clearRoom();
|
|
loadPic("cielo.alg", screenSurface, COMPLETE_PAL);
|
|
black();
|
|
updateScreen();
|
|
fadeFromBlack(2);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
delay(900);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
color_abc(kColorRed);
|
|
centerText(_textmisc[1], 160, 100);
|
|
updateScreen();
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
delay(1000);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
delay(1200);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
|
|
playFLI("scrollb.bin", 9);
|
|
|
|
clearRoom();
|
|
playSound(5);
|
|
if (animate("scr2.bin", 17))
|
|
break;
|
|
stopSound();
|
|
if (animate("scr3.bin", 17))
|
|
break;
|
|
loadPic("cielo2.alg", screenSurface, COMPLETE_PAL);
|
|
updateScreen();
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
fadeToBlack(1);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
clearRoom();
|
|
|
|
loadPic(96, frontSurface, COMPLETE_PAL);
|
|
loadPic(103, bgSurface, HALF_PAL);
|
|
loadPic(104, drawSurface3);
|
|
loadPic("aux104.alg", drawSurface2);
|
|
|
|
playMusic(4);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
delay(400);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
|
|
for (int l2 = 0; l2 < 3; l2++) {
|
|
for (int l = 0; l < 7; l++) {
|
|
copyBackground();
|
|
copyBackground(interf_x[l], interf_y[l], 156, 45, 63, 31, drawSurface2, screenSurface);
|
|
updateScreen();
|
|
if (getScan() == Common::KEYCODE_ESCAPE || shouldQuit()) {
|
|
term_int = 1;
|
|
break;
|
|
}
|
|
pause(3);
|
|
}
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
}
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
|
|
for (int l = 0, l2 = 0, p = 0; l < 180; l++) {
|
|
copyBackground(0, 0, 320 - l, 0, l, 200, drawSurface3, screenSurface);
|
|
copyBackground(l, 0, 0, 0, 320 - l, 200, bgSurface, screenSurface);
|
|
|
|
copyRect(interf_x[l2], interf_y[l2], 156 - l, 45, 63, 31, drawSurface2, screenSurface);
|
|
updateScreen();
|
|
updateEvents();
|
|
p++;
|
|
if (p == 6) {
|
|
p = 0;
|
|
l2++;
|
|
}
|
|
if (l2 == 7)
|
|
l2 = 0;
|
|
if (getScan() == Common::KEYCODE_ESCAPE || shouldQuit()) {
|
|
term_int = 1;
|
|
break;
|
|
}
|
|
}
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
copyBackground(0, 0, 0, 0, 320, 200, screenSurface, bgSurface);
|
|
|
|
talk_drascula_big(1);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
|
|
clearRoom();
|
|
|
|
loadPic(100, bgSurface, HALF_PAL);
|
|
loadPic("auxigor.alg", frontSurface);
|
|
loadPic("auxdr.alg", backSurface);
|
|
trackDrascula = 0;
|
|
drasculaX = 129;
|
|
drasculaY = 95;
|
|
trackIgor = 1;
|
|
igorX = 66;
|
|
igorY = 97;
|
|
|
|
copyBackground();
|
|
placeIgor();
|
|
placeDrascula();
|
|
updateScreen();
|
|
talk_igor(8, kIgorDch);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
copyBackground();
|
|
placeIgor();
|
|
placeDrascula();
|
|
updateScreen();
|
|
talk_drascula(2);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
talk_drascula(3);
|
|
if (animate("lib.bin", 16))
|
|
break;
|
|
if (animate("lib2.bin", 16))
|
|
break;
|
|
clearRoom();
|
|
color_solo = kColorRed;
|
|
loadPic("plan1.alg", screenSurface, HALF_PAL);
|
|
updateScreen();
|
|
pause(10);
|
|
talk_solo(_textd[4],"d4.als");
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
loadPic("plan1.alg", screenSurface, HALF_PAL);
|
|
updateScreen();
|
|
talk_solo(_textd[5], "d5.als");
|
|
if (animate("lib2.bin", 16))
|
|
break;
|
|
clearRoom();
|
|
loadPic("plan2.alg", screenSurface, HALF_PAL);
|
|
updateScreen();
|
|
pause(20);
|
|
talk_solo(_textd[6], "d6.als");
|
|
if (animate("lib2.bin", 16))
|
|
break;
|
|
clearRoom();
|
|
loadPic("plan3.alg", screenSurface, HALF_PAL);
|
|
updateScreen();
|
|
pause(20);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
talk_solo(_textd[7], "d7.als");
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
loadPic("plan3.alg", screenSurface, HALF_PAL);
|
|
updateScreen();
|
|
talk_solo(_textd[8], "d8.als");
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
clearRoom();
|
|
loadPic(100, bgSurface, HALF_PAL);
|
|
MusicFadeout();
|
|
stopMusic();
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
talk_igor(9, kIgorDch);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
talk_drascula(9);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
talk_igor(10, kIgorDch);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
playMusic(11);
|
|
talk_drascula(10);
|
|
if (animate("rayo1.bin", 16))
|
|
break;
|
|
playSound(5);
|
|
if (animate("rayo2.bin", 15))
|
|
break;
|
|
if (animate("frel2.bin", 16))
|
|
break;
|
|
if (animate("frel.bin", 16))
|
|
break;
|
|
if (animate("frel.bin", 16))
|
|
break;
|
|
stopSound();
|
|
clearRoom();
|
|
black();
|
|
playMusic(23);
|
|
fadeFromBlack(0);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
trackDrascula = 1;
|
|
talk_igor(1, kIgorDch);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
talk_drascula(11, 1);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
trackDrascula = 3;
|
|
copyBackground();
|
|
placeIgor();
|
|
placeDrascula();
|
|
updateScreen();
|
|
pause(1);
|
|
trackDrascula = 0;
|
|
copyBackground();
|
|
placeIgor();
|
|
placeDrascula();
|
|
updateScreen();
|
|
talk_drascula(12);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
trackDrascula = 3;
|
|
copyBackground();
|
|
placeIgor();
|
|
placeDrascula();
|
|
updateScreen();
|
|
pause(1);
|
|
trackDrascula = 1;
|
|
copyBackground();
|
|
placeIgor();
|
|
placeDrascula();
|
|
updateScreen();
|
|
talk_igor(2, kIgorDch);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
pause(13);
|
|
talk_drascula(13, 1);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
trackDrascula = 3;
|
|
copyBackground();
|
|
placeIgor();
|
|
placeDrascula();
|
|
updateScreen();
|
|
pause(1);
|
|
trackDrascula = 0;
|
|
copyBackground();
|
|
placeIgor();
|
|
placeDrascula();
|
|
updateScreen();
|
|
talk_drascula(14);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
talk_igor(3, kIgorDch);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
talk_drascula(15);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
talk_igor(4, kIgorDch);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
talk_drascula(16);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
talk_igor(5, kIgorDch);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
trackIgor = 3;
|
|
talk_drascula(17);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
pause(18);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
talk_igor(6, kIgorFront);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
fadeToBlack(0);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
clearRoom();
|
|
|
|
if (_lang == kSpanish)
|
|
playMusic(31);
|
|
else
|
|
playMusic(2);
|
|
|
|
pause(5);
|
|
playFLI("intro.bin", 12);
|
|
term_int = 1;
|
|
}
|
|
clearRoom();
|
|
loadPic(96, frontSurface, COMPLETE_PAL);
|
|
loadPic(99, backSurface);
|
|
}
|
|
|
|
void DrasculaEngine::animation_2_1() {
|
|
debug(4, "animation_2_1()");
|
|
|
|
int l;
|
|
|
|
walkToPoint(Common::Point(231, 91));
|
|
_characterVisible = false;
|
|
|
|
term_int = 0;
|
|
|
|
while (!shouldQuit()) {
|
|
if (animate("ag.bin", 14))
|
|
break;
|
|
|
|
loadPic("an11y13.alg", extraSurface);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
|
|
talk_bartender(22);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
|
|
loadPic(97, extraSurface);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
|
|
pause(4);
|
|
playSound(1);
|
|
hiccup(18);
|
|
finishSound();
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
|
|
clearRoom();
|
|
stopMusic();
|
|
musicStopped = 1;
|
|
memset(screenSurface, 0, 64000);
|
|
color_solo = kColorWhite;
|
|
pause(80);
|
|
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
talk_solo(_textbj[1], "BJ1.als");
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
clearRoom();
|
|
loadPic("bj.alg", screenSurface, HALF_PAL);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
black();
|
|
updateScreen();
|
|
fadeFromBlack(1);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
color_solo = kColorYellow;
|
|
talk_solo(_text[214], "214.als");
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
clearRoom();
|
|
|
|
loadPic(16, bgSurface, HALF_PAL);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
loadPic("auxbj.alg", drawSurface3);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
|
|
_roomNumber = 16;
|
|
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
for (l = 0; l < 200; l++)
|
|
factor_red[l] = 99;
|
|
curX = 91;
|
|
curY = 95;
|
|
trackProtagonist = 1;
|
|
_characterVisible = true;
|
|
|
|
loadPic("97g.alg", extraSurface);
|
|
if (animate("lev.bin", 15))
|
|
break;
|
|
|
|
walkToPoint(Common::Point(100 + curWidth / 2, 99 + curHeight));
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
trackProtagonist = 1;
|
|
curX = 100;
|
|
curY = 95;
|
|
|
|
playTalkSequence(2); // sequence 2, chapter 1
|
|
|
|
if (animate("gaf.bin", 15))
|
|
break;
|
|
if (animate("bjb.bin", 14))
|
|
break;
|
|
playMusic(9);
|
|
loadPic(97, extraSurface);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
updateRoom();
|
|
updateScreen();
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
pause(120);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
talk_solo(_text[223], "223.als");
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
color_solo = kColorWhite;
|
|
updateRoom();
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
updateScreen();
|
|
pause(110);
|
|
talk_solo(_textbj[11], "BJ11.als");
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
updateRoom();
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
updateScreen();
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
pause(118);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
walkToPoint(Common::Point(132, 97 + curHeight));
|
|
pause(60);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
talk(224);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
talk_bj(12);
|
|
walkToPoint(Common::Point(157, 98 + curHeight));
|
|
if (animate("bes.bin", 16))
|
|
break;
|
|
playMusic(11);
|
|
if (animate("rap.bin", 16))
|
|
break;
|
|
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-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
|
|
// Also check animation_9_6(), where the same hack was used by
|
|
// the original
|
|
_roomNumber = -1;
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
pause(8);
|
|
updateRoom();
|
|
updateScreen();
|
|
talk(225);
|
|
pause(76);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
trackProtagonist = 1;
|
|
updateRoom();
|
|
updateScreen();
|
|
talk(226);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
updateRoom();
|
|
updateScreen();
|
|
pause(30);
|
|
if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE) || shouldQuit())
|
|
break;
|
|
talk(227);
|
|
fadeToBlack(0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void DrasculaEngine::animation_3_1() {
|
|
debug(4, "animation_3_1()");
|
|
|
|
loadPic("an11y13.alg", extraSurface);
|
|
|
|
playTalkSequence(3); // sequence 3, chapter 1
|
|
|
|
loadPic(97, extraSurface);
|
|
}
|
|
|
|
void DrasculaEngine::animation_4_1() {
|
|
debug(4, "animation_4_1()");
|
|
|
|
loadPic("an12.alg", extraSurface);
|
|
|
|
talk(205);
|
|
|
|
updateRefresh_pre();
|
|
|
|
copyBackground(1, 139, 228, 112, 47, 60, extraSurface, screenSurface);
|
|
updateScreen(228,112, 228,112, 47,60, screenSurface);
|
|
|
|
pause(3);
|
|
|
|
updateRefresh_pre();
|
|
|
|
copyBackground(49, 139, 228, 112, 47, 60, extraSurface, screenSurface);
|
|
moveCharacters();
|
|
|
|
updateScreen();
|
|
|
|
pause(3);
|
|
stopMusic();
|
|
flags[11] = 1;
|
|
|
|
talk_pianist(1);
|
|
talk(206);
|
|
talk_pianist(2);
|
|
talk(207);
|
|
talk_pianist(3);
|
|
talk(208);
|
|
talk_pianist(4);
|
|
talk(209);
|
|
|
|
flags[11] = 0;
|
|
loadPic(97, extraSurface);
|
|
}
|
|
|
|
void DrasculaEngine::animation_2_2() {
|
|
debug(4, "animation_2_2()");
|
|
|
|
trackProtagonist = 0;
|
|
copyBackground();
|
|
moveCharacters();
|
|
updateRefresh();
|
|
updateScreen();
|
|
loadPic("an2_1.alg", frontSurface);
|
|
loadPic("an2_2.alg", extraSurface);
|
|
|
|
copyBackground();
|
|
copyBackground(1, 1, 201, 87, 50, 52, frontSurface, screenSurface);
|
|
updateScreen();
|
|
|
|
updateAnim(1, 201, 87, 50, 52, 6, frontSurface);
|
|
updateAnim(55, 201, 87, 50, 52, 6, frontSurface);
|
|
updateAnim(109, 201, 87, 50, 52, 6, frontSurface);
|
|
|
|
playSound(2);
|
|
|
|
updateAnim(1, 201, 87, 50, 52, 6, extraSurface);
|
|
updateAnim(55, 201, 87, 50, 52, 6, extraSurface);
|
|
updateAnim(109, 201, 87, 50, 52, 2, extraSurface);
|
|
|
|
copyBackground();
|
|
updateScreen();
|
|
|
|
finishSound();
|
|
|
|
pause (4);
|
|
|
|
playSound(1);
|
|
hipo_sin_nadie(12);
|
|
finishSound();
|
|
}
|
|
|
|
void DrasculaEngine::animation_4_2() {
|
|
debug(4, "animation_4_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);
|
|
|
|
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();
|
|
|
|
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);
|
|
}
|
|
|
|
void DrasculaEngine::animation_14_2() {
|
|
debug(4, "animation_14_2()");
|
|
|
|
loadPic("an14_2.alg", backSurface);
|
|
|
|
int l = 0;
|
|
for (int n = -160; n <= 0; n = n + 5 + l) {
|
|
copyBackground();
|
|
updateRefresh_pre();
|
|
moveCharacters();
|
|
moveVonBraun();
|
|
int cY = n;
|
|
copyRect(150, 6, 69, cY, 158, 161, backSurface, screenSurface);
|
|
updateRefresh();
|
|
updateScreen();
|
|
l++;
|
|
}
|
|
|
|
flags[24] = 1;
|
|
|
|
memcpy(bgSurface, screenSurface, 64000);
|
|
|
|
playSound(7);
|
|
hiccup(15);
|
|
|
|
finishSound();
|
|
|
|
loadPic(99, backSurface);
|
|
}
|
|
|
|
void DrasculaEngine::asco() {
|
|
loadPic(roomDisk, drawSurface3);
|
|
loadPic(_roomNumber, bgSurface, HALF_PAL);
|
|
black();
|
|
updateRoom();
|
|
updateScreen();
|
|
fadeFromBlack(0);
|
|
if (roomMusic != 0)
|
|
playMusic(roomMusic);
|
|
else
|
|
stopMusic();
|
|
}
|
|
|
|
// The drunk tells us about Von Braun
|
|
void DrasculaEngine::animation_16_2() {
|
|
debug(4, "animation_16_2()");
|
|
|
|
char curPic[20];
|
|
talk_drunk(12);
|
|
talk(371);
|
|
|
|
clearRoom();
|
|
|
|
if (_lang == kSpanish)
|
|
playMusic(30);
|
|
else
|
|
playMusic(32);
|
|
|
|
if (getScan() != 0) {
|
|
asco();
|
|
return;
|
|
}
|
|
|
|
color_abc(kColorDarkGreen);
|
|
|
|
for (int i = 1; i <= 4; i++) {
|
|
if (i < 4)
|
|
sprintf(curPic, "his%i.alg", i);
|
|
else
|
|
strcpy(curPic, "his4_2.alg");
|
|
|
|
loadPic(curPic, screenSurface, HALF_PAL);
|
|
centerText(_texthis[i], 180, 180);
|
|
updateScreen();
|
|
|
|
if (getScan() != 0) {
|
|
asco();
|
|
return;
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
loadPic("his4_1.alg", bgSurface, HALF_PAL);
|
|
loadPic("his4_2.alg", drawSurface3);
|
|
|
|
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();
|
|
return;
|
|
}
|
|
}
|
|
|
|
pause(5);
|
|
fadeToBlack(2);
|
|
clearRoom();
|
|
|
|
asco();
|
|
}
|
|
|
|
void DrasculaEngine::animation_20_2() {
|
|
debug(4, "animation_20_2()");
|
|
|
|
talk_vonBraun(7, kVonBraunDoor);
|
|
talk_vonBraun(8, kVonBraunDoor);
|
|
talk(383);
|
|
talk_vonBraun(9, kVonBraunDoor);
|
|
talk(384);
|
|
talk_vonBraun(10, kVonBraunDoor);
|
|
talk(385);
|
|
talk_vonBraun(11, kVonBraunDoor);
|
|
if (flags[23] == 0) {
|
|
talk(350);
|
|
talk_vonBraun(57, kVonBraunDoor);
|
|
} else {
|
|
talk(386);
|
|
talk_vonBraun(12, kVonBraunDoor);
|
|
flags[18] = 0;
|
|
flags[14] = 1;
|
|
toggleDoor(15, 1, kOpenDoor);
|
|
exitRoom(1);
|
|
animation_23_2();
|
|
exitRoom(0);
|
|
flags[21] = 0;
|
|
flags[24] = 0;
|
|
trackVonBraun = 1;
|
|
vonBraunX = 120;
|
|
|
|
breakOut = 1;
|
|
}
|
|
}
|
|
|
|
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;
|
|
|
|
if (flags[25] == 0) {
|
|
talk_vonBraun(13, kVonBraunDoor);
|
|
talk_vonBraun(14, kVonBraunDoor);
|
|
pause(10);
|
|
talk(387);
|
|
}
|
|
|
|
talk_vonBraun(15, kVonBraunNormal);
|
|
placeVonBraun(42);
|
|
trackVonBraun = 1;
|
|
talk_vonBraun(16, kVonBraunNormal);
|
|
trackVonBraun = 2;
|
|
walkToPoint(Common::Point(157, 147));
|
|
walkToPoint(Common::Point(131, 149));
|
|
trackProtagonist = 0;
|
|
animation_14_2();
|
|
if (flags[25] == 0)
|
|
talk_vonBraun(17, kVonBraunNormal);
|
|
pause(8);
|
|
trackVonBraun = 1;
|
|
talk_vonBraun(18, kVonBraunNormal);
|
|
|
|
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();
|
|
placeVonBraun(99);
|
|
|
|
if (flags[29] == 0) {
|
|
talk_vonBraun(19, kVonBraunNormal);
|
|
if (flags[25] == 0) {
|
|
talk_vonBraun(20, kVonBraunNormal);
|
|
if (removeObject(kItemMoney) == 0)
|
|
flags[30] = 1;
|
|
if (removeObject(kItemTwoCoins) == 0)
|
|
flags[31] = 1;
|
|
if (removeObject(kItemOneCoin) == 0)
|
|
flags[32] = 1;
|
|
}
|
|
talk_vonBraun(21, kVonBraunNormal);
|
|
} else
|
|
animation_27_2();
|
|
|
|
flags[25] = 1;
|
|
breakOut = 1;
|
|
}
|
|
|
|
void DrasculaEngine::animation_25_2() {
|
|
debug(4, "animation_25_2()");
|
|
|
|
loadPic("an14_2.alg", backSurface);
|
|
loadPic(18, bgSurface);
|
|
|
|
flags[24] = 0;
|
|
|
|
playSound(6);
|
|
|
|
for (int n = 0; n >= -160; n = n - 8) {
|
|
copyBackground();
|
|
|
|
updateRefresh_pre();
|
|
moveCharacters();
|
|
moveVonBraun();
|
|
|
|
int cY = n;
|
|
copyRect(150, 6, 69, cY, 158, 161, backSurface, screenSurface);
|
|
|
|
updateRefresh();
|
|
updateScreen();
|
|
updateEvents();
|
|
}
|
|
|
|
finishSound();
|
|
|
|
loadPic(99, backSurface);
|
|
}
|
|
|
|
void DrasculaEngine::animation_27_2() {
|
|
debug(4, "animation_27_2()");
|
|
|
|
flags[22] = 1;
|
|
|
|
selectVerb(kVerbNone);
|
|
removeObject(kItemEarWithEarPlug);
|
|
addObject(kItemEarplugs);
|
|
|
|
talk_vonBraun(23, kVonBraunNormal);
|
|
talk_vonBraun(24, kVonBraunNormal);
|
|
if (flags[30] == 1)
|
|
addObject(kItemMoney);
|
|
if (flags[31] == 1)
|
|
addObject(kItemTwoCoins);
|
|
if (flags[32] == 1)
|
|
addObject(kItemOneCoin);
|
|
talk_vonBraun(25, kVonBraunNormal);
|
|
talk_vonBraun(26, kVonBraunNormal);
|
|
}
|
|
|
|
void DrasculaEngine::animation_29_2() {
|
|
debug(4, "animation_29_2()");
|
|
|
|
if (flags[33] == 0) {
|
|
playTalkSequence(29); // sequence 29, chapter 2
|
|
} else
|
|
talk_vonBraun(43, kVonBraunNormal);
|
|
|
|
talk(402);
|
|
talk_vonBraun(42, kVonBraunNormal);
|
|
|
|
if (flags[38] == 0) {
|
|
talk(403);
|
|
breakOut = 1;
|
|
} else
|
|
talk(386);
|
|
}
|
|
|
|
void DrasculaEngine::animation_31_2() {
|
|
debug(4, "animation_31_2()");
|
|
|
|
talk_vonBraun(44, kVonBraunNormal);
|
|
placeVonBraun(-50);
|
|
pause(15);
|
|
walkToPoint(Common::Point(159, 140));
|
|
loadPic(99, backSurface);
|
|
|
|
playTalkSequence(31); // sequence 31, chapter 2
|
|
|
|
selectVerb(kVerbNone);
|
|
removeObject(kItemLeaves);
|
|
removeObject(kItemBubbleGum);
|
|
removeObject(kItemTissues);
|
|
removeObject(kItemCigarettes);
|
|
removeObject(kItemCandle);
|
|
addObject(kItemReefer);
|
|
}
|
|
|
|
void DrasculaEngine::animation_35_2() {
|
|
debug(4, "animation_35_2()");
|
|
|
|
walkToPoint(Common::Point(96, 165));
|
|
walkToPoint(Common::Point(79, 165));
|
|
|
|
updateRoom();
|
|
updateScreen();
|
|
|
|
loadPic("an35_1.alg", backSurface);
|
|
loadPic("an35_2.alg", frontSurface);
|
|
|
|
updateAnim(1, 70, 90, 46, 80, 6, backSurface);
|
|
updateAnim(82, 70, 90, 46, 80, 6, backSurface);
|
|
updateAnim(1, 70, 90, 46, 80, 6, frontSurface);
|
|
updateAnim(82, 70, 90, 46, 80, 2, frontSurface);
|
|
|
|
copyBackground();
|
|
|
|
updateScreen();
|
|
|
|
pause(19);
|
|
|
|
playSound(1);
|
|
hipo_sin_nadie(18);
|
|
finishSound();
|
|
|
|
pause(10);
|
|
|
|
fadeToBlack(2);
|
|
}
|
|
|
|
void DrasculaEngine::animation_2_3() {
|
|
debug(4, "animation_2_3()");
|
|
|
|
flags[0] = 1;
|
|
playMusic(13);
|
|
|
|
int px = curX - 20, py = curY - 1;
|
|
|
|
loadPic("an2y_1.alg", frontSurface);
|
|
loadPic("an2y_2.alg", extraSurface);
|
|
loadPic("an2y_3.alg", backSurface);
|
|
|
|
updateAnim(2, px, py, 71, 72, 4, frontSurface, 3, true);
|
|
updateAnim(75, px, py, 71, 72, 4, frontSurface, 3, true);
|
|
updateAnim(2, px, py, 71, 72, 4, extraSurface, 3, true);
|
|
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);
|
|
|
|
playMusic(13);
|
|
|
|
px = 120;
|
|
py = 63;
|
|
|
|
loadPic("any_1.alg", frontSurface);
|
|
loadPic("any_2.alg", extraSurface);
|
|
loadPic("any_3.alg", backSurface);
|
|
|
|
updateAnim(1, px, py, 77, 89, 4, frontSurface, 3, true);
|
|
updateAnim(91, px, py, 77, 89, 4, frontSurface, 3, true);
|
|
updateAnim(1, px, py, 77, 89, 4, extraSurface, 3, true);
|
|
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);
|
|
|
|
flags[1] = 1;
|
|
updateRoom();
|
|
updateScreen(120, 0, 120, 0, 200, 200, screenSurface);
|
|
|
|
px = curX - 20;
|
|
py = curY - 1;
|
|
|
|
loadPic("an3y_1.alg", frontSurface);
|
|
loadPic("an3y_2.alg", extraSurface);
|
|
loadPic("an3y_3.alg", backSurface);
|
|
|
|
updateAnim(2, px, py, 71, 72, 4, frontSurface, 3, true);
|
|
updateAnim(75, px, py, 71, 72, 4, frontSurface, 3, true);
|
|
updateAnim(2, px, py, 71, 72, 4, extraSurface, 3, true);
|
|
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);
|
|
|
|
walkToPoint(Common::Point(332, 127));
|
|
}
|
|
|
|
void DrasculaEngine::animation_6_3() {
|
|
debug(4, "animation_6_3()");
|
|
|
|
int frame = 0, px = 112, py = 62;
|
|
int yoda_x[] = { 3 ,82, 161, 240, 3, 82 };
|
|
int yoda_y[] = { 3, 3, 3, 3, 94, 94 };
|
|
|
|
_characterMoved = false;
|
|
flags[3] = 1;
|
|
updateRoom();
|
|
updateScreen();
|
|
|
|
flags[1] = 0;
|
|
|
|
loadPic("an4y.alg", frontSurface);
|
|
|
|
for (frame = 0; frame < 6; frame++) {
|
|
pause(3);
|
|
copyBackground();
|
|
copyRect(yoda_x[frame], yoda_y[frame], px, py, 78, 90, frontSurface, screenSurface);
|
|
updateScreen(px, py, px, py, 78, 90, screenSurface);
|
|
updateEvents();
|
|
}
|
|
|
|
flags[2] = 1;
|
|
|
|
loadPic(96, frontSurface);
|
|
|
|
updateRoom();
|
|
updateScreen();
|
|
}
|
|
|
|
void DrasculaEngine::animation_castle() {
|
|
debug(4, "animation_castle()");
|
|
|
|
loadPic("anr_1.alg", frontSurface, HALF_PAL);
|
|
loadPic("anr_2.alg", extraSurface);
|
|
loadPic("anr_3.alg", backSurface);
|
|
loadPic("anr_4.alg", bgSurface);
|
|
loadPic("anr_5.alg", drawSurface3);
|
|
|
|
updateScreen(0, 0, 0, 0, 320, 200, frontSurface);
|
|
|
|
pause(50);
|
|
|
|
playSound(5);
|
|
|
|
updateScreen(0, 0, 0, 0, 320, 200, extraSurface);
|
|
pause(3);
|
|
updateScreen(0, 0, 0, 0, 320, 200, backSurface);
|
|
pause(3);
|
|
updateScreen(0, 0, 0, 0, 320, 200, bgSurface);
|
|
pause(3);
|
|
updateScreen(0, 0, 0, 0, 320, 200, backSurface);
|
|
pause(3);
|
|
updateScreen(0, 0, 0, 0, 320, 200, drawSurface3);
|
|
pause(3);
|
|
updateScreen(0, 0, 0, 0, 320, 200, frontSurface);
|
|
finishSound();
|
|
}
|
|
|
|
void DrasculaEngine::animation_7_4() {
|
|
debug(4, "animation_7_4()");
|
|
|
|
black();
|
|
talk(427);
|
|
fadeFromBlack(1);
|
|
removeObject(8);
|
|
removeObject(10);
|
|
removeObject(12);
|
|
removeObject(16);
|
|
addObject(17);
|
|
flags[30] = 0;
|
|
flags[29] = 0;
|
|
}
|
|
|
|
void DrasculaEngine::animation_1_5() {
|
|
debug(4, "animation_1_5()");
|
|
|
|
if (flags[0] == 0) {
|
|
talk(430);
|
|
talk_bj(16);
|
|
talk_bj(17);
|
|
talk_bj(18);
|
|
talk(217);
|
|
talk_bj(19);
|
|
talk(229);
|
|
pause(5);
|
|
walkToPoint(Common::Point(114, 170));
|
|
trackProtagonist = 3;
|
|
talk(431);
|
|
talk_bj(20);
|
|
trackProtagonist = 2;
|
|
pause(4);
|
|
talk(438);
|
|
roomX = 120;
|
|
roomY = 157;
|
|
_walkToObject = true;
|
|
trackFinal = 1;
|
|
startWalking();
|
|
talk_bj(21);
|
|
|
|
while (!shouldQuit()) {
|
|
if (!_characterMoved)
|
|
break;
|
|
updateRoom();
|
|
updateScreen();
|
|
updateEvents();
|
|
}
|
|
|
|
trackProtagonist = 1;
|
|
talk(229);
|
|
flags[0] = 1;
|
|
}
|
|
|
|
trackProtagonist = 1;
|
|
converse(8);
|
|
}
|
|
|
|
void DrasculaEngine::animation_5_5(){
|
|
debug(4, "animation_5_5(");
|
|
|
|
int h;
|
|
int frame = 0;
|
|
int boneX[] = {1, 99, 197, 1, 99, 197, 1, 99, 197};
|
|
int boneY[] = {1, 1, 1, 66, 66, 66, 131, 131, 131};
|
|
int flyX[] = {1, 63, 125, 187, 249};
|
|
int pixelX = curX - 53, pixelY = curY - 9;
|
|
|
|
selectVerb(kVerbNone);
|
|
removeObject(8);
|
|
|
|
walkToPoint(Common::Point(curX - 19, curY + curHeight));
|
|
trackProtagonist = 1;
|
|
updateRoom();
|
|
updateScreen();
|
|
|
|
loadPic("3an5_1.alg", backSurface);
|
|
loadPic("3an5_2.alg", frontSurface);
|
|
|
|
for (frame = 0; frame < 9; frame++) {
|
|
pause(3);
|
|
copyBackground();
|
|
copyRect(boneX[frame], boneY[frame], pixelX, pixelY, 97, 64, backSurface, screenSurface);
|
|
updateScreen(pixelX, pixelY, pixelX,pixelY, 97,64, screenSurface);
|
|
updateEvents();
|
|
}
|
|
|
|
copyBackground(52, 161, 198, 81, 26, 24, drawSurface3, screenSurface);
|
|
updateScreen(198, 81, 198, 81, 26, 24, screenSurface);
|
|
|
|
for (frame = 0; frame < 9; frame++) {
|
|
pause(3);
|
|
copyBackground();
|
|
copyRect(boneX[frame], boneY[frame], pixelX, pixelY, 97, 64, frontSurface, screenSurface);
|
|
updateScreen(pixelX, pixelY, pixelX,pixelY, 97, 64, screenSurface);
|
|
updateEvents();
|
|
}
|
|
|
|
flags[6] = 1;
|
|
updateVisible(); // sets visible[1] to 1 and visible[2] to 0
|
|
pause(12);
|
|
|
|
loadPic(96, frontSurface);
|
|
for (h = 0; h < (200 - 18); h++)
|
|
copyBackground(0, 53, 0, h, 320, 19, frontSurface, screenSurface);
|
|
|
|
updateScreen();
|
|
|
|
loadPic(101, bgSurface, HALF_PAL);
|
|
loadPic("3an5_3.alg", backSurface);
|
|
loadPic("3an5_4.alg", extraSurface);
|
|
|
|
updateScreen(0, 0, 0, 0, 320, 200, bgSurface);
|
|
pause(9);
|
|
for (frame = 0; frame < 5; frame++) {
|
|
pause(3);
|
|
copyBackground(flyX[frame], 1, 174, 79, 61, 109, backSurface, screenSurface);
|
|
updateScreen(174, 79, 174, 79, 61, 109, screenSurface);
|
|
updateEvents();
|
|
}
|
|
for (frame = 0; frame < 5; frame++) {
|
|
pause(3);
|
|
copyBackground(flyX[frame], 1, 174, 79, 61, 109, extraSurface, screenSurface);
|
|
updateScreen(174, 79, 174, 79, 61, 109, screenSurface);
|
|
updateEvents();
|
|
}
|
|
updateScreen(0, 0, 0, 0, 320, 200, bgSurface);
|
|
|
|
playSound(1);
|
|
finishSound();
|
|
|
|
loadPic(99, backSurface);
|
|
loadPic(97, extraSurface);
|
|
|
|
clearRoom();
|
|
|
|
loadPic(49, bgSurface, HALF_PAL);
|
|
}
|
|
|
|
void DrasculaEngine::animation_12_5() {
|
|
debug(4, "animation_12_5()");
|
|
|
|
DacPalette256 bgPalette1;
|
|
DacPalette256 bgPalette2;
|
|
DacPalette256 bgPalette3;
|
|
|
|
int frame;
|
|
const int rayX[] = {1, 46, 91, 136, 181, 226, 271, 181};
|
|
const int frusky_x[] = {100, 139, 178, 217, 100, 178, 217, 139, 100, 139};
|
|
const int elfrusky_x[] = {1, 68, 135, 1, 68, 135, 1, 68, 135, 68, 1, 135, 68, 135, 68};
|
|
int color, component;
|
|
signed char fade;
|
|
|
|
playMusic(26);
|
|
updateRoom();
|
|
updateScreen();
|
|
pause(27);
|
|
animate("rayo1.bin", 23);
|
|
playSound(5);
|
|
animate("rayo2.bin", 17);
|
|
trackProtagonist = 1;
|
|
updateRoom();
|
|
updateScreen();
|
|
|
|
setDefaultPalette(darkPalette);
|
|
|
|
for (color = 0; color < 255; color++)
|
|
for (component = 0; component < 3; component++) {
|
|
bgPalette1[color][component] = gamePalette[color][component];
|
|
bgPalette2[color][component] = gamePalette[color][component];
|
|
bgPalette3[color][component] = gamePalette[color][component];
|
|
}
|
|
|
|
for (fade = 3; fade >= 0; fade--) {
|
|
for (color = 0; color < 128; color++) {
|
|
for (component = 0; component < 3; component++) {
|
|
bgPalette3[color][component] = adjustToVGA(bgPalette3[color][component] - 8 + fade);
|
|
if (fade <= 2)
|
|
bgPalette2[color][component] = adjustToVGA(bgPalette2[color][component] - 8 + fade);
|
|
if (fade <= 1)
|
|
bgPalette1[color][component] = adjustToVGA(bgPalette1[color][component] - 8 + fade);
|
|
}
|
|
}
|
|
}
|
|
|
|
loadPic("3an11_1.alg", backSurface);
|
|
|
|
for (frame = 0; frame < 8; frame++) {
|
|
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);
|
|
else
|
|
setPalette((byte *)&bgPalette3);
|
|
|
|
pause(4);
|
|
updateRoom();
|
|
copyRect(rayX[frame], 1, 41, 0, 44, 44, backSurface, screenSurface);
|
|
copyRect(frusky_x[frame], 113, 205, 50, 38, 86, drawSurface3, screenSurface);
|
|
updateScreen();
|
|
updateEvents();
|
|
}
|
|
|
|
stopSound();
|
|
|
|
for (frame = 0; frame < 15; frame++) {
|
|
if (frame == 2 || frame == 4 || frame == 7 || frame == 9)
|
|
setPalette((byte *)&bgPalette1);
|
|
else if (frame == 1 || frame == 5)
|
|
setPalette((byte *)&gamePalette);
|
|
else
|
|
setPalette((byte *)&bgPalette2);
|
|
|
|
pause(4);
|
|
updateRoom();
|
|
copyRect(elfrusky_x[frame], 47, 192, 39, 66, 106, backSurface, screenSurface);
|
|
updateScreen();
|
|
updateEvents();
|
|
}
|
|
|
|
animate("frel.bin", 16);
|
|
clearRoom();
|
|
setDefaultPalette(brightPalette);
|
|
setPalette((byte *)&gamePalette);
|
|
|
|
flags[1] = 1;
|
|
|
|
animation_12_5_frankenstein();
|
|
|
|
playSound(1);
|
|
hiccup(12);
|
|
finishSound();
|
|
|
|
loadPic(99, backSurface);
|
|
|
|
walkToPoint(Common::Point(40, 169));
|
|
walkToPoint(Common::Point(-14, 175));
|
|
|
|
doBreak = 1;
|
|
previousMusic = roomMusic;
|
|
_characterVisible = true;
|
|
clearRoom();
|
|
trackProtagonist = 1;
|
|
_characterMoved = false;
|
|
curX = -1;
|
|
objExit = 104;
|
|
selectVerb(kVerbNone);
|
|
enterRoom(57);
|
|
}
|
|
|
|
void DrasculaEngine::animation_12_5_frankenstein() {
|
|
int frank_x = 199;
|
|
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);
|
|
|
|
updateRoom();
|
|
copyRect(1, 1, frank_x, 81, 44, 87, backSurface, screenSurface);
|
|
updateScreen();
|
|
pause(15);
|
|
|
|
playMusic(18);
|
|
|
|
while (!shouldQuit()) {
|
|
updateRoom();
|
|
copyRect(frus_x[frame], frus_y[frame], frank_x, 81, 44, 87, backSurface, screenSurface);
|
|
updateScreen();
|
|
frank_x -= 5;
|
|
frame++;
|
|
if (frank_x <= -45)
|
|
break;
|
|
if (frame == 7) {
|
|
frame = 0;
|
|
trackProtagonist = 3;
|
|
}
|
|
updateEvents();
|
|
pause(6);
|
|
}
|
|
}
|
|
|
|
void DrasculaEngine::animation_14_5() {
|
|
debug(4, "animation_14_5()");
|
|
|
|
flags[11] = 1;
|
|
playSound(3);
|
|
updateRoom();
|
|
updateScreen(0, 0, 0,0 , 320, 200, screenSurface);
|
|
finishSound();
|
|
pause(17);
|
|
trackProtagonist = 3;
|
|
talk(246);
|
|
walkToPoint(Common::Point(89, 160));
|
|
flags[10] = 1;
|
|
playSound(7);
|
|
updateRoom();
|
|
updateScreen();
|
|
finishSound();
|
|
pause(14);
|
|
trackProtagonist = 3;
|
|
updateRoom();
|
|
updateScreen();
|
|
talk_solo(_textd[18], "d18.als");
|
|
fadeToBlack(1);
|
|
}
|
|
|
|
void DrasculaEngine::animation_1_6() {
|
|
debug(4, "animation_1_6()");
|
|
|
|
hideCursor();
|
|
trackProtagonist = 0;
|
|
curX = 103;
|
|
curY = 108;
|
|
flags[0] = 1;
|
|
for (int l = 0; l < 200; l++)
|
|
factor_red[l] = 98;
|
|
|
|
loadPic("auxig2.alg", frontSurface);
|
|
loadPic("auxdr.alg", drawSurface2);
|
|
loadPic("car.alg", backSurface);
|
|
talk_drascula(19, 1);
|
|
talk(247);
|
|
talk_drascula(20, 1);
|
|
talk_drascula(21, 1);
|
|
talk(248);
|
|
talk_drascula(22, 1);
|
|
talk(249);
|
|
talk_drascula(23, 1);
|
|
converse(11);
|
|
talk_drascula(26, 1);
|
|
|
|
animate("fum.bin", 15);
|
|
|
|
talk_drascula(27, 1);
|
|
talk(254);
|
|
talk_drascula(28, 1);
|
|
talk(255);
|
|
talk_drascula(29, 1);
|
|
updateEvents();
|
|
fadeToBlack(1);
|
|
updateEvents();
|
|
clearRoom();
|
|
loadPic("time1.alg", screenSurface);
|
|
updateScreen();
|
|
updateEvents();
|
|
delay(930);
|
|
updateEvents();
|
|
clearRoom();
|
|
black();
|
|
_characterVisible = false;
|
|
flags[0] = 0;
|
|
updateRoom();
|
|
updateScreen();
|
|
fadeFromBlack(1);
|
|
talk(256);
|
|
talk_drascula(30, 1);
|
|
talk(257);
|
|
fadeToBlack(0);
|
|
updateEvents();
|
|
clearRoom();
|
|
loadPic("time1.alg", screenSurface);
|
|
updateScreen();
|
|
updateEvents();
|
|
delay(900);
|
|
updateEvents();
|
|
clearRoom();
|
|
black();
|
|
updateRoom();
|
|
updateScreen();
|
|
fadeFromBlack(1);
|
|
talk(258);
|
|
talk_drascula(31, 1);
|
|
animation_5_6();
|
|
talk_drascula(32, 1);
|
|
talk_igor(11, kIgorDch);
|
|
trackIgor = 3;
|
|
talk_drascula(33, 1);
|
|
talk_igor(12, kIgorFront);
|
|
talk_drascula(34, 1);
|
|
trackDrascula = 0;
|
|
talk_drascula(35);
|
|
|
|
clearRoom();
|
|
enterRoom(102);
|
|
activatePendulum();
|
|
}
|
|
|
|
void DrasculaEngine::animation_5_6() {
|
|
debug(4, "animation_5_6()");
|
|
|
|
animate("man.bin", 14);
|
|
|
|
for (int n = -125; n <= 0; n = n + 2) {
|
|
copyBackground();
|
|
updateRefresh_pre();
|
|
int pY = n;
|
|
copyRect(1, 29, 204, pY, 18, 125, drawSurface3, screenSurface);
|
|
|
|
updateRefresh();
|
|
updateScreen();
|
|
updateEvents();
|
|
|
|
pause(2);
|
|
}
|
|
|
|
flags[3] = 1;
|
|
}
|
|
|
|
void DrasculaEngine::animation_6_6() {
|
|
debug(4, "animation_6_6()");
|
|
|
|
animate("rct.bin", 11);
|
|
clearRoom();
|
|
selectVerb(kVerbNone);
|
|
removeObject(20);
|
|
loadPic(96, frontSurface);
|
|
loadPic(97, frontSurface);
|
|
loadPic(97, extraSurface);
|
|
loadPic(99, backSurface);
|
|
doBreak = 1;
|
|
objExit = 104;
|
|
curX = -1;
|
|
selectVerb(kVerbNone);
|
|
enterRoom(58);
|
|
_characterVisible = true;
|
|
trackProtagonist = 1;
|
|
animate("hbp.bin", 14);
|
|
|
|
trackProtagonist = 3;
|
|
flags[0] = 1;
|
|
flags[1] = 0;
|
|
flags[2] = 1;
|
|
}
|
|
|
|
void DrasculaEngine::animation_9_6() {
|
|
debug(4, "animation_9_6()");
|
|
|
|
int v_cd;
|
|
|
|
(void)animate("fin.bin", 14);
|
|
playMusic(13);
|
|
flags[5] = 1;
|
|
(void)animate("drf.bin", 16);
|
|
fadeToBlack(0);
|
|
clearRoom();
|
|
curX = -1;
|
|
objExit = 108;
|
|
enterRoom(59);
|
|
// The room number was originally changed here to "nada.alg",
|
|
// 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
|
|
// by the original
|
|
_roomNumber = -2;
|
|
loadPic("nota2.alg", bgSurface, HALF_PAL);
|
|
black();
|
|
trackProtagonist = 1;
|
|
curX -= 21;
|
|
updateRoom();
|
|
updateScreen();
|
|
fadeFromBlack(0);
|
|
pause(96);
|
|
walkToPoint(Common::Point(116, 178));
|
|
trackProtagonist = 2;
|
|
updateRoom();
|
|
updateScreen();
|
|
playMusic(9);
|
|
clearRoom();
|
|
loadPic("nota.alg", bgSurface, COMPLETE_PAL);
|
|
color_abc(kColorWhite);
|
|
talk_solo(_textbj[24], "bj24.als");
|
|
talk_solo(_textbj[25], "bj25.als");
|
|
talk_solo(_textbj[26], "bj26.als");
|
|
talk_solo(_textbj[27], "bj27.als");
|
|
talk_solo(_textbj[28], "bj28.als");
|
|
trackProtagonist = 3;
|
|
clearRoom();
|
|
loadPic(96, frontSurface, COMPLETE_PAL);
|
|
loadPic("nota2.alg", bgSurface, HALF_PAL);
|
|
talk(296);
|
|
talk(297);
|
|
talk(298);
|
|
trackProtagonist = 1;
|
|
talk(299);
|
|
talk(300);
|
|
updateRoom();
|
|
copyBackground(0, 0, 0, 0, 320, 200, screenSurface, bgSurface);
|
|
updateScreen();
|
|
color_abc(kColorLightGreen);
|
|
talk_solo(_textmisc[2], "s15.als");
|
|
loadPic("nota2.alg", bgSurface);
|
|
trackProtagonist = 0;
|
|
updateRoom();
|
|
updateScreen();
|
|
talk(301);
|
|
v_cd = _mixer->getVolumeForSoundType(Audio::Mixer::kMusicSoundType) / 16;
|
|
v_cd += 4;
|
|
playMusic(17);
|
|
fadeToBlack(1);
|
|
clearRoom();
|
|
playFLI("qpc.bin", 1);
|
|
MusicFadeout();
|
|
stopMusic();
|
|
clearRoom();
|
|
_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, v_cd * 16);
|
|
playMusic(3);
|
|
playFLI("crd.bin", 1);
|
|
stopMusic();
|
|
}
|
|
|
|
void DrasculaEngine::animation_19_6() {
|
|
debug(4, "animation_19_6()");
|
|
|
|
copyBackground();
|
|
copyBackground(140, 23, 161, 69, 35, 80, drawSurface3, screenSurface);
|
|
|
|
updateRefresh_pre();
|
|
moveCharacters();
|
|
updateScreen();
|
|
pause(6);
|
|
updateRoom();
|
|
updateScreen();
|
|
playSound(4);
|
|
pause(6);
|
|
finishSound();
|
|
}
|
|
|
|
void DrasculaEngine::animation_12_2() {
|
|
debug(4, "animation_12_2()");
|
|
|
|
loadPic("an12.alg", extraSurface);
|
|
|
|
talk(356);
|
|
|
|
updateRefresh_pre();
|
|
|
|
copyBackground(1, 139, 228, 112, 47, 60, extraSurface, screenSurface);
|
|
updateScreen(228, 112, 228, 112, 47, 60, screenSurface);
|
|
|
|
pause(3);
|
|
|
|
updateRefresh_pre();
|
|
|
|
copyBackground(49, 139, 228, 112, 47, 60, extraSurface, screenSurface);
|
|
moveCharacters();
|
|
|
|
updateScreen();
|
|
|
|
pause(3);
|
|
stopMusic();
|
|
flags[11] = 1;
|
|
|
|
talk_pianist(5);
|
|
converse(1);
|
|
|
|
flags[11] = 0;
|
|
loadPic(974, extraSurface);
|
|
}
|
|
|
|
void DrasculaEngine::animation_26_2() {
|
|
debug(4, "animation_26_2()");
|
|
|
|
loadPic("an12.alg", extraSurface);
|
|
|
|
talk(392);
|
|
|
|
updateRefresh_pre();
|
|
|
|
copyBackground(1, 139, 228, 112, 47, 60, extraSurface, screenSurface);
|
|
updateScreen(228, 112, 228, 112, 47, 60, screenSurface);
|
|
|
|
pause(3);
|
|
|
|
updateRefresh_pre();
|
|
|
|
copyBackground(49, 139, 228, 112, 47, 60, extraSurface, screenSurface);
|
|
moveCharacters();
|
|
|
|
updateScreen();
|
|
|
|
pause(3);
|
|
stopMusic();
|
|
flags[11] = 1;
|
|
|
|
talk_pianist(5);
|
|
talk(393);
|
|
talk_pianist(17);
|
|
talk_pianist(18);
|
|
talk_pianist(19);
|
|
|
|
loadPic("an26.alg", extraSurface);
|
|
|
|
updateAnim(1, 225, 113, 50, 59, 6, extraSurface);
|
|
|
|
int x = 0;
|
|
for (int n = 0; n < 6; n++) {
|
|
x++;
|
|
copyBackground(x, 61, 225, 113, 50, 59, extraSurface, screenSurface);
|
|
updateScreen(225, 113, 225, 113, 50, 59, screenSurface);
|
|
x = x + 50;
|
|
if (n == 2)
|
|
playSound(9);
|
|
updateEvents();
|
|
pause(3);
|
|
}
|
|
|
|
stopSound();
|
|
|
|
updateAnim(121, 225, 113, 50, 59, 6, extraSurface);
|
|
|
|
pickObject(11);
|
|
removeObject(kItemBook);
|
|
|
|
flags[11] = 0;
|
|
flags[39] = 1;
|
|
loadPic(974, extraSurface);
|
|
roomMusic = 16;
|
|
}
|
|
|
|
void DrasculaEngine::animation_11_2() {
|
|
debug(4, "animation_11_2()");
|
|
|
|
loadPic("an11y13.alg", extraSurface);
|
|
|
|
playTalkSequence(11); // sequence 11, chapter 2
|
|
|
|
loadPic(974, extraSurface);
|
|
}
|
|
|
|
void DrasculaEngine::animation_13_2() {
|
|
debug(4, "animation_13_2()");
|
|
|
|
loadPic("an11y13.alg", frontSurface);
|
|
|
|
if (flags[41] == 0) {
|
|
playTalkSequence(13); // sequence 13, chapter 2
|
|
} else {
|
|
converse(2);
|
|
}
|
|
|
|
loadPic(964, frontSurface);
|
|
}
|
|
|
|
void DrasculaEngine::animation_24_2() {
|
|
debug(4, "animation_24_2()");
|
|
|
|
if (curX < 178)
|
|
walkToPoint(Common::Point(208, 136));
|
|
trackProtagonist = 3;
|
|
updateRoom();
|
|
pause(3);
|
|
trackProtagonist = 0;
|
|
|
|
talk(356);
|
|
|
|
loadPic("an24.alg", frontSurface);
|
|
|
|
loadPic("an32_1.alg", drawSurface3);
|
|
loadPic("an32_2.alg", backSurface);
|
|
|
|
updateAnim(1, 113, 53, 65, 81, 4, drawSurface3, 4);
|
|
updateAnim(83, 113, 53, 65, 81, 4, drawSurface3, 4);
|
|
updateAnim(1, 113, 53, 65, 81, 4, backSurface, 4);
|
|
|
|
int x = 0;
|
|
for (int n = 0; n < 3; n++) {
|
|
x++;
|
|
copyBackground(x, 83, 113, 53, 65, 81, backSurface, screenSurface);
|
|
updateScreen(113, 53, 113, 53, 65, 81, screenSurface);
|
|
x = x + 65;
|
|
if (n < 2)
|
|
pause(4);
|
|
|
|
updateEvents();
|
|
}
|
|
|
|
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() {
|
|
debug(4, "animation_34_2()");
|
|
|
|
trackProtagonist = 1;
|
|
updateRoom();
|
|
updateScreen();
|
|
|
|
loadPic("an34_1.alg", backSurface);
|
|
loadPic("an34_2.alg", extraSurface);
|
|
|
|
updateAnim(1, 218, 79, 83, 75, 3, backSurface);
|
|
updateAnim(77, 218, 79, 83, 75, 3, backSurface);
|
|
|
|
playSound(8);
|
|
|
|
updateAnim(1, 218, 79, 83, 75, 3, extraSurface);
|
|
|
|
finishSound();
|
|
|
|
pause(30);
|
|
|
|
copyBackground(1, 77, 218, 79, 83, 75, extraSurface, screenSurface);
|
|
updateScreen(218, 79, 218, 79, 83, 75, screenSurface);
|
|
pause(3);
|
|
|
|
loadPic(994, backSurface);
|
|
loadPic(974, extraSurface);
|
|
}
|
|
|
|
void DrasculaEngine::animation_36_2() {
|
|
debug(4, "animation_36_2()");
|
|
|
|
loadPic("an11y13.alg", extraSurface);
|
|
|
|
talk(404);
|
|
talk_bartender(19);
|
|
talk_bartender(20);
|
|
talk_bartender(21);
|
|
talk(355);
|
|
pause(40);
|
|
talk_bartender(82);
|
|
|
|
loadPic(974, extraSurface);
|
|
}
|
|
|
|
// Use sickle on plant
|
|
void DrasculaEngine::animation_7_2() {
|
|
debug(4, "animation_7_2()");
|
|
|
|
loadPic("an7_1.alg", backSurface);
|
|
loadPic("an7_2.alg", extraSurface);
|
|
loadPic("an7_3.alg", frontSurface);
|
|
|
|
if (flags[3] == 1)
|
|
copyBackground(258, 110, 85, 44, 23, 53, drawSurface3, bgSurface);
|
|
|
|
copyBackground();
|
|
|
|
updateScreen();
|
|
|
|
updateAnim(1, 80, 64, 51, 73, 6, backSurface, 3, true);
|
|
updateAnim(75, 80, 64, 51, 73, 6, backSurface, 3, true);
|
|
updateAnim(1, 80, 64, 51, 73, 6, extraSurface, 3, true);
|
|
updateAnim(75, 80, 64, 51, 73, 6, extraSurface, 3, true);
|
|
updateAnim(1, 80, 64, 51, 73, 6, frontSurface, 3, true);
|
|
|
|
loadPic("an7_4.alg", backSurface);
|
|
loadPic("an7_5.alg", extraSurface);
|
|
loadPic("an7_6.alg", frontSurface);
|
|
loadPic("an7_7.alg", drawSurface3);
|
|
|
|
updateAnim(1, 80, 64, 51, 73, 6, backSurface, 3, true);
|
|
updateAnim(75, 80, 64, 51, 73, 6, backSurface, 3, true);
|
|
updateAnim(1, 80, 64, 51, 73, 6, extraSurface, 3, true);
|
|
updateAnim(75, 80, 64, 51, 73, 6, extraSurface, 3, true);
|
|
updateAnim(1, 80, 64, 51, 73, 6, frontSurface, 3, true);
|
|
updateAnim(75, 80, 64, 51, 73, 6, extraSurface, 3, true);
|
|
updateAnim(1, 80, 64, 51, 73, 6, frontSurface, 3, true);
|
|
updateAnim(75, 80, 64, 51, 73, 6, frontSurface, 3, true);
|
|
updateAnim(1, 80, 64, 51, 73, 6, drawSurface3, 3, true);
|
|
updateAnim(75, 80, 64, 51, 73, 2, drawSurface3, 3, true);
|
|
|
|
loadPic("an7_8.alg", backSurface);
|
|
loadPic("an7_9.alg", extraSurface);
|
|
|
|
updateAnim(1, 80, 64, 51, 73, 6, backSurface, 3, true);
|
|
updateAnim(75, 80, 64, 51, 73, 6, backSurface, 3, true);
|
|
updateAnim(1, 80, 64, 51, 73, 6, extraSurface, 3, true);
|
|
|
|
copyBackground(80, 64, 80, 64, 51, 73, bgSurface, screenSurface);
|
|
copyRect(1, 75, 80, 64, 51, 73, extraSurface, screenSurface);
|
|
updateScreen(80, 64, 80, 64, 51, 73, screenSurface);
|
|
|
|
flags[37] = 1;
|
|
|
|
if (flags[7] == 1 && flags[26] == 1 && flags[34] == 1 && flags[35] == 1 && flags[37] == 1)
|
|
flags[38] = 1;
|
|
|
|
loadPic(99, backSurface);
|
|
loadPic(97, extraSurface);
|
|
loadPic(96, frontSurface);
|
|
loadPic("aux3.alg", drawSurface3);
|
|
}
|
|
|
|
void DrasculaEngine::animation_5_2() {
|
|
debug(4, "animation_5_2()");
|
|
|
|
trackProtagonist = 0;
|
|
updateRoom();
|
|
updateScreen();
|
|
|
|
loadPic("an5_1.alg", backSurface);
|
|
loadPic("an5_2.alg", extraSurface);
|
|
loadPic("an5_3.alg", frontSurface);
|
|
loadPic("an5_4.alg", drawSurface3);
|
|
|
|
copyBackground(1, 1, 213, 66, 53,84, backSurface, screenSurface);
|
|
updateScreen();
|
|
|
|
updateAnim(1, 213, 66, 52, 84, 6, backSurface);
|
|
updateAnim(86, 213, 66, 52, 84, 6, backSurface);
|
|
updateAnim(1, 213, 66, 52, 84, 6, extraSurface);
|
|
updateAnim(1, 213, 66, 52, 84, 6, extraSurface);
|
|
updateAnim(86, 213, 66, 52, 84, 6, extraSurface);
|
|
updateAnim(1, 213, 66, 52, 84, 6, frontSurface);
|
|
|
|
playSound(1);
|
|
updateAnim(86, 213, 66, 52, 84, 6, frontSurface);
|
|
stopSound();
|
|
|
|
updateAnim(1, 213, 66, 52, 84, 6, drawSurface3);
|
|
|
|
loadPic(994, backSurface);
|
|
loadPic(974, extraSurface);
|
|
loadPic(964, frontSurface);
|
|
loadPic("aux5.alg", drawSurface3);
|
|
flags[8] = 1;
|
|
curX = curX - 4;
|
|
talk_sync(_text[46], "46.als", "4442444244244");
|
|
selectVerb(kVerbNone);
|
|
}
|
|
|
|
void DrasculaEngine::animation_6_2() {
|
|
debug(4, "animation_6_2()");
|
|
|
|
stopMusic();
|
|
flags[9] = 1;
|
|
|
|
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(1);
|
|
|
|
if (flags[4] == 1)
|
|
talk_hacker(66);
|
|
pause(6);
|
|
talk_blind(11);
|
|
pause(4);
|
|
talk_hacker(67);
|
|
|
|
copyBackground();
|
|
updateScreen();
|
|
|
|
pause(10);
|
|
|
|
clearRoom();
|
|
|
|
playMusic(roomMusic);
|
|
loadPic(9, bgSurface, HALF_PAL);
|
|
loadPic("aux9.alg", drawSurface3);
|
|
loadPic(96, frontSurface);
|
|
loadPic(97, extraSurface);
|
|
loadPic(99, backSurface);
|
|
selectVerb(kVerbNone);
|
|
|
|
flags[9] = 0;
|
|
}
|
|
|
|
void DrasculaEngine::animation_1_4() {
|
|
debug(4, "animation_1_4()");
|
|
|
|
if (flags[21] == 0) {
|
|
strcpy(objName[2], _textmisc[5]); // "igor"
|
|
talk(275);
|
|
|
|
updateRefresh_pre();
|
|
|
|
copyBackground(131, 133, 199, 95, 50, 66, drawSurface3, screenSurface);
|
|
updateScreen(199, 95, 199, 95, 50, 66, screenSurface);
|
|
|
|
pause(3);
|
|
|
|
updateRefresh_pre();
|
|
|
|
copyBackground(182, 133, 199, 95, 50, 66, drawSurface3, screenSurface);
|
|
moveCharacters();
|
|
|
|
updateScreen();
|
|
|
|
pause(3);
|
|
flags[18] = 1;
|
|
flags[20] = 1;
|
|
|
|
talk_igor(13, kIgorSeated);
|
|
talk_igor(14, kIgorSeated);
|
|
talk_igor(15, kIgorSeated);
|
|
flags[21] = 1;
|
|
} else {
|
|
talk(356);
|
|
|
|
updateRefresh_pre();
|
|
|
|
copyBackground(131, 133, 199, 95, 50, 66, drawSurface3, screenSurface);
|
|
updateScreen(199, 95, 199, 95, 50, 66, screenSurface);
|
|
pause(2);
|
|
|
|
updateRefresh_pre();
|
|
|
|
copyBackground(182, 133, 199, 95, 50, 66, drawSurface3, screenSurface);
|
|
moveCharacters();
|
|
|
|
updateScreen();
|
|
|
|
flags[18] = 1;
|
|
flags[20] = 1;
|
|
|
|
talk(276);
|
|
pause(14);
|
|
talk_igor(6, kIgorSeated);
|
|
}
|
|
|
|
converse(6);
|
|
flags[20] = 0;
|
|
flags[18] = 0;
|
|
}
|
|
|
|
void DrasculaEngine::animation_5_4(){
|
|
debug(4, "animation_5_4(");
|
|
|
|
trackProtagonist = 3;
|
|
loadPic("anh_dr.alg", backSurface);
|
|
walkToPoint(Common::Point(99, 160));
|
|
walkToPoint(Common::Point(38, 177));
|
|
_characterVisible = false;
|
|
updateRoom();
|
|
updateScreen();
|
|
delay(800);
|
|
animate("bio.bin", 14);
|
|
flags[29] = 1;
|
|
curX = 95;
|
|
curY = 82;
|
|
updateRoom();
|
|
updateScreen();
|
|
toggleDoor(2, 0, kOpenDoor);
|
|
loadPic("auxigor.alg", frontSurface);
|
|
igorX = 100;
|
|
igorY = 65;
|
|
talk_igor(29, kIgorFront);
|
|
talk_igor(30, kIgorFront);
|
|
loadPic(96, frontSurface);
|
|
loadPic(99, backSurface);
|
|
_characterVisible = true;
|
|
fadeToBlack(0);
|
|
exitRoom(0);
|
|
}
|
|
|
|
void DrasculaEngine::animation_6_4() {
|
|
debug(4, "animation_6_4()");
|
|
|
|
int prevRoom = _roomNumber;
|
|
|
|
_roomNumber = 26;
|
|
clearRoom();
|
|
loadPic(26, bgSurface, HALF_PAL);
|
|
loadPic("aux26.alg", drawSurface3);
|
|
loadPic("auxigor.alg", frontSurface);
|
|
copyBackground();
|
|
update_26_pre();
|
|
igorX = 104;
|
|
igorY = 71;
|
|
placeIgor();
|
|
updateScreen();
|
|
pause(40);
|
|
talk_igor(26, kIgorFront);
|
|
_roomNumber = prevRoom;
|
|
clearRoom();
|
|
loadPic(96, frontSurface);
|
|
loadPic(roomDisk, drawSurface3);
|
|
loadPic(_roomNumber, bgSurface, HALF_PAL);
|
|
selectVerb(kVerbNone);
|
|
updateRoom();
|
|
}
|
|
|
|
void DrasculaEngine::animation_8_4() {
|
|
debug(4, "animation_8_4()");
|
|
|
|
int bookcaseX[] = {1, 75, 149, 223, 1, 75, 149, 223, 149, 223, 149, 223, 149, 223};
|
|
int bookcaseY[] = {1, 1, 1, 1, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74};
|
|
|
|
loadPic("an_8.alg", frontSurface);
|
|
|
|
for (int frame = 0; frame < 14; frame++) {
|
|
pause(2);
|
|
copyBackground(bookcaseX[frame], bookcaseY[frame], 77, 45, 73, 72, frontSurface, screenSurface);
|
|
updateScreen(77, 45, 77, 45, 73, 72, screenSurface);
|
|
updateEvents();
|
|
}
|
|
|
|
loadPic(96, frontSurface);
|
|
toggleDoor(7, 2, kOpenDoor);
|
|
}
|
|
|
|
void DrasculaEngine::activatePendulum() {
|
|
debug(4, "activatePendulum()");
|
|
|
|
flags[1] = 2;
|
|
_characterVisible = false;
|
|
_roomNumber = 102;
|
|
loadPic(102, bgSurface, HALF_PAL);
|
|
loadPic("an_p1.alg", drawSurface3);
|
|
loadPic("an_p2.alg", extraSurface);
|
|
loadPic("an_p3.alg", frontSurface);
|
|
|
|
copyBackground(0, 171, 0, 0, OBJWIDTH, OBJHEIGHT, backSurface, drawSurface3);
|
|
|
|
savedTime = getTime();
|
|
}
|
|
|
|
} // End of namespace Drascula
|