diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/drascula/drascula.cpp | 1154 | ||||
-rw-r--r-- | engines/drascula/drascula.h | 39 |
2 files changed, 1173 insertions, 20 deletions
diff --git a/engines/drascula/drascula.cpp b/engines/drascula/drascula.cpp index a31ac982ae..de8c63886a 100644 --- a/engines/drascula/drascula.cpp +++ b/engines/drascula/drascula.cpp @@ -177,8 +177,13 @@ int DrasculaEngine::go() { asigna_memoria(); carga_info(); - lee_dibujos("95.alg"); - descomprime_dibujo(dir_mesa, 1); + if (num_ejec != 6) { + lee_dibujos("95.alg"); + descomprime_dibujo(dir_mesa, 1); + } + + if (num_ejec == 6) + dir_pendulo = dir_dibujo3; lee_dibujos("96.alg"); descomprime_dibujo(dir_hare_frente, COMPLETA); @@ -217,7 +222,25 @@ int DrasculaEngine::go() { descomprime_dibujo(dir_hare_dch, 1); lee_dibujos("99.alg"); descomprime_dibujo(dir_hare_fondo, 1); - } + } else if (num_ejec == 6) { + con_voces = 1; + x_igor = 105, y_igor = 85, sentido_igor = 1; + x_dr = 62, y_dr = 99, sentido_dr = 1; + frame_pen = 0; + flag_tv = 0; + + dir_pendulo = dir_dibujo3; + + lee_dibujos("96.alg"); + descomprime_dibujo(dir_hare_frente, COMPLETA); + lee_dibujos("99.alg"); + descomprime_dibujo(dir_hare_fondo,1); + lee_dibujos("97.alg"); + descomprime_dibujo(dir_hare_dch,1); + + lee_dibujos("95.alg"); + descomprime_dibujo(dir_mesa, 1); + } strcpy(nombre_icono[1], "look"); strcpy(nombre_icono[2], "take"); strcpy(nombre_icono[3], "open"); @@ -566,6 +589,23 @@ bool DrasculaEngine::escoba() { carga_escoba_1("45.ald"); } else para_cargar(nom_partida); + } else if (num_ejec == 6) { + suma_objeto(28); + suma_objeto(9); + + buffer_teclado(); + sentido_hare = 1; + obj_saliendo = 104; + if (hay_que_load == 0) + carga_escoba_1("58.ald"); + else + para_cargar(nom_partida); + if (hay_que_load == 0) + animacion_1_6(); + else { + lee_dibujos("auxdr.alg"); + descomprime_dibujo(dir_dibujo2, 1); + } } bucles: @@ -616,8 +656,10 @@ bucles: lee_dibujos("icons2.alg"); else if (num_ejec == 5) lee_dibujos("icons3.alg"); + else if (num_ejec == 6) + lee_dibujos("icons3.alg"); else - lee_dibujos("icons.alg"); + lee_dibujos("iconsp.alg"); descomprime_dibujo(dir_hare_fondo, 1); menu_scr = 1; espera_soltar(); @@ -691,6 +733,9 @@ bucles: } else if (key == Common::KEYCODE_ESCAPE) { confirma_salir(); cont_sv = 0; + } else if (key == Common::KEYCODE_0 && !strcmp(num_room, "61.alg")) { + lee_dibujos("alcbar.alg"); + descomprime_dibujo(dir_dibujo1, 255); } else if (cont_sv == 1500) { salva_pantallas(); cont_sv = 0; @@ -700,7 +745,9 @@ bucles: } void DrasculaEngine::agarra_objeto(int objeto) { - if (num_ejec == 4 || num_ejec == 5) + if (num_ejec == 6) + lee_dibujos("iconsp.alg"); + else if (num_ejec == 4 || num_ejec == 5) lee_dibujos("icons2.alg"); else lee_dibujos("icons.alg"); @@ -1742,7 +1789,7 @@ void DrasculaEngine::borra_pantalla() { } void DrasculaEngine::lleva_al_hare(int punto_x, int punto_y) { - if (num_ejec == 5) { + if (num_ejec == 5 || num_ejec == 6) { if (hare_se_ve==0) { hare_x = sitio_x; hare_y = sitio_y; @@ -3181,7 +3228,7 @@ bucless: if (con_voces == 0) centra_texto(dicho, x_igor + 26, y_igor); - VUELCA_PANTALLA(0,0, 0,0, 320,200, dir_zona_pantalla); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); pausa(3); @@ -3410,6 +3457,17 @@ void DrasculaEngine::hablar(const char *dicho, const char *filename) { int longitud; longitud = strlen(dicho); + if (num_ejec == 6) { + if (flags[0] == 0 && (!strcmp(num_room, "102.alg"))) { + habla_pen(dicho, filename); + return; + } + if (flags[0] == 0 && (!strcmp(num_room, "58.alg"))) { + habla_pen2(dicho, filename); + return; + } + } + tiempol = _system->getMillis(); tiempou = (unsigned int)tiempol / 2; _rnd->setSeed(tiempou); @@ -3812,7 +3870,13 @@ void DrasculaEngine::actualiza_refresco() { refresca_63(); else if (!strcmp(num_room, "62.alg")) refresca_62(); - else if (!strcmp(num_room, "3.alg")) + else if (!strcmp(num_room, "60.alg")) + refresca_60(); + else if (!strcmp(num_room, "61.alg")) + refresca_61(); + else if (!strcmp(num_room, "58.alg")) + refresca_58(); + else if (!strcmp(num_room, "3.alg")) refresca_3(); else if (!strcmp(num_room, "2.alg")) refresca_2(); @@ -3843,6 +3907,14 @@ void DrasculaEngine::actualiza_refresco() { void DrasculaEngine::actualiza_refresco_antes() { if (!strcmp(num_room, "62.alg")) refresca_62_antes(); + else if (!strcmp(num_room, "102.alg")) + refresca_pendulo(); + else if (!strcmp(num_room, "58.alg")) + refresca_58_antes(); + else if (!strcmp(num_room, "59.alg")) + refresca_59_antes(); + else if (!strcmp(num_room, "60.alg")) + refresca_60_antes(); else if (!strcmp(num_room, "1.alg")) refresca_1_antes(); else if (!strcmp(num_room, "3.alg")) @@ -4049,8 +4121,12 @@ void DrasculaEngine::menu_sin_volcar() { h = objetos_que_tengo[n]; if (h != 0) - DIBUJA_FONDO(x_pol[n], y_pol[n], x_obj[n], y_obj[n], - ANCHOBJ, ALTOBJ, dir_hare_frente, dir_zona_pantalla); + if (num_ejec < 6) + DIBUJA_FONDO(x_pol[n], y_pol[n], x_obj[n], y_obj[n], + ANCHOBJ, ALTOBJ, dir_hare_frente, dir_zona_pantalla); + else + DIBUJA_FONDO(x_pol[n], y_pol[n], x_obj[n], y_obj[n], + ANCHOBJ, ALTOBJ, dir_mesa, dir_zona_pantalla); DIBUJA_BLOQUE(x1d_menu[h], y1d_menu[h], x_obj[n], y_obj[n], ANCHOBJ, ALTOBJ, dir_hare_fondo, dir_zona_pantalla); @@ -4212,6 +4288,28 @@ bool DrasculaEngine::sal_de_la_habitacion(int l) { hare_x = -1; carga_escoba_1(salgo); } + } else if (num_ejec == 6) { + puertas_cerradas(l); + + if (espuerta[l] != 0) { + lleva_al_hare(sitiobj_x[l], sitiobj_y[l]); + sentido_hare = sentidobj[l]; + refresca_pantalla(); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + hare_se_mueve = 0; + sentido_hare = sentido_alkeva[l]; + obj_saliendo = alapuertakeva[l]; + rompo = 1; + musica_antes = musica_room; + borra_pantalla(); + strcpy(salgo, alapantallakeva[l]); + strcat(salgo, ".ald"); + hare_x = -1; + carga_escoba_1(salgo); + + if (obj_saliendo == 105) + animacion_19_6(); + } } return false; @@ -4433,9 +4531,7 @@ void DrasculaEngine::banderas(int fl) { hablar(TEXT161, "161.als"); else hay_respuesta = 0; - } - } else { - if (num_ejec == 5) { + } else if (num_ejec == 5) { if (objeto_que_lleva == MIRAR && fl == 50) hablar("Cuanto mas me miro, mas me gusto.", "54.als"); else if (objeto_que_lleva == ABRIR && fl == 50) @@ -4463,10 +4559,28 @@ void DrasculaEngine::banderas(int fl) { else hay_respuesta = 0; return; + } else if (num_ejec == 6) { + if (objeto_que_lleva == MIRAR && fl == 28) + hablar(TEXT328, "328.als"); + else if (objeto_que_lleva == MIRAR && fl == 9) { + hablar(TEXT482, "482.als"); + hablar(TEXT483, "483.als"); + } else if (objeto_que_lleva == MIRAR && fl == 20) + hablar(TEXT123, "123.als"); + else if (objeto_que_lleva == MIRAR && fl == 21) + hablar(TEXT441, "441.als"); + else + hay_respuesta = 0; } + } else { if (objeto_que_lleva == MIRAR && fl == 50) if (num_ejec == 3) hablar(TEXT308, "308.als"); + else if (num_ejec == 6) + if (flags[0] == 1) + hablar(TEXT308, "308.als"); + else if (flags[0] == 0) + hablar(TEXT250, "250.als"); else hablar(TEXT309, "309.als"); else if (objeto_que_lleva == ABRIR && fl == 50) @@ -4479,7 +4593,17 @@ void DrasculaEngine::banderas(int fl) { hablar(TEXT313, "313.als" ); else if (objeto_que_lleva == HABLAR && fl == 50) hablar(TEXT314, "314.als" ); - else if (!strcmp(num_room, "62.alg")) + else if (!strcmp(num_room, "102.alg")) + pantalla_pendulo(fl); + else if (!strcmp(num_room, "58.alg")) + pantalla_58(fl); + else if (!strcmp(num_room, "59.alg")) + pantalla_59(fl); + else if (!strcmp(num_room, "60.alg")) + pantalla_60(fl); + else if (!strcmp(num_room, "61.alg")) + pantalla_61(fl); + else if (!strcmp(num_room, "62.alg")) pantalla_62(fl); else if (!strcmp(num_room, "63.alg")) pantalla_63(fl); @@ -4864,8 +4988,8 @@ void DrasculaEngine::reduce_hare_chico(int xx1, int yy1, int xx2, int yy2, int a pixel_x = xx1; pixel_y = yy1; - for (n = 0;n < nuevo_alto; n++){ - for (m = 0; m < nuevo_ancho; m++){ + for (n = 0; n < nuevo_alto; n++) { + for (m = 0; m < nuevo_ancho; m++) { pos_pixel[0] = (int)pixel_x; pos_pixel[1] = (int)pixel_y; pos_pixel[2] = xx2 + m; @@ -5136,6 +5260,32 @@ void DrasculaEngine::comprueba_banderas_menu() { } void DrasculaEngine::pantalla_0() { + if (num_ejec == 6) { + if (objeto_que_lleva == MIRAR) { + hablar(mirar_t[c_mirar], mirar_v[c_mirar]); + c_mirar++; + if (c_mirar == 3) + c_mirar = 0; + } else if (objeto_que_lleva == MOVER) + hablar(TEXT19, "19.als"); + else if (objeto_que_lleva == COGER) { + hablar(poder_t[c_poder], poder_v[c_poder]); + c_poder++; + if (c_poder == 6) + c_poder = 0; + } else if (objeto_que_lleva == ABRIR) + hablar(TEXT9, "9.als"); + else if (objeto_que_lleva == CERRAR) + hablar(TEXT9, "9.als"); + else if (objeto_que_lleva == HABLAR) + hablar(TEXT16, "16.als"); + else { + hablar(poder_t[c_poder], poder_v[c_poder]); + c_poder++; + if (c_poder == 6) + c_poder = 0; + } + } if (num_ejec == 5) { if (objeto_que_lleva == MIRAR) { hablar(mirar_t[c_mirar], mirar_v[c_mirar]); @@ -5325,6 +5475,18 @@ void DrasculaEngine::conversa(const char *nom_fich) { respuesta3 = 31; } + if (num_ejec == 6 && !strcmp(nom_fich, "op_5.cal") && flags[7] == 1) { + strcpy(frase3, TEXT273); + strcpy(suena3, "273.als"); + respuesta3 = 14; + } + + if (num_ejec == 6 && !strcmp(nom_fich, "op_5.cal") && flags[10] == 1) { + strcpy(frase3, ".cuanto.queda.para.que.acabe.el.partido?"); + strcpy(suena3, "274.als"); + respuesta3 = 15; + } + longitud = strlen(frase1); for (h = 0; h < longitud; h++) if (frase1[h] == (char)0xa7) @@ -5741,6 +5903,25 @@ void DrasculaEngine::responde(int funcion) { animacion_17_5(); return; } + if (num_ejec == 6) { + if (funcion == 2) + animacion_2_6(); + else if (funcion == 3) + animacion_3_6(); + else if (funcion == 4) + animacion_4_6(); + else if (funcion == 11) + animacion_11_6(); + else if (funcion == 12) + animacion_12_6(); + else if (funcion == 13) + animacion_13_6(); + else if (funcion == 14) + animacion_14_6(); + else if (funcion == 15) + animacion_15_6(); + return; + } if (funcion == 2) animacion_2_4(); else if (funcion == 3) @@ -6039,6 +6220,15 @@ void DrasculaEngine::actualiza_datos() { visible[3] = 0; if (!strcmp(num_room,"55.alg") && flags[8] == 1) visible[1] = 0; + if ((!strcmp(num_room, "58.alg")) && flags[8] == 0) + espuerta[1] = 0; + if ((!strcmp(num_room, "58.alg")) && flags[8] == 1) + espuerta[1] = 1; + if (!strcmp(num_room, "59.alg")) + espuerta[1] = 0; + if (!strcmp(num_room, "60.alg")) { + sentido_dr = 0; x_dr = 155; y_dr = 69; + } } void DrasculaEngine::animacion_1_2() { @@ -6576,7 +6766,7 @@ void DrasculaEngine::animacion_25() { DIBUJA_BLOQUE_CUT(pos_cabina, dir_hare_fondo, dir_zona_pantalla); actualiza_refresco(); - VUELCA_PANTALLA(0,0, 0,0, 320,200, dir_zona_pantalla); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); } fin_sound(); @@ -7162,7 +7352,7 @@ comienza: void DrasculaEngine::abre_puerta(int nflag, int n_puerta) { if (flags[nflag] == 0) { - if (num_ejec == 5) { + if (num_ejec == 5 || num_ejec == 6) { comienza_sound("s3.als"); flags[nflag] = 1; } @@ -8627,5 +8817,933 @@ bucless: VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); } +void DrasculaEngine::animacion_1_6() { + int l; + + sentido_hare = 0; + hare_x = 103; + hare_y = 108; + flags[0] = 1; + for (l = 0; l < 200; l++) + factor_red[l] = 98; + lee_dibujos("auxig2.alg"); + descomprime_dibujo(dir_hare_frente, 1); + lee_dibujos("auxdr.alg"); + descomprime_dibujo(dir_dibujo2, 1); + lee_dibujos("car.alg"); + descomprime_dibujo(dir_hare_fondo, 1); + habla_dr_dch(TEXTD19, "D19.als"); + hablar(TEXT247, "247.als"); + habla_dr_dch(TEXTD20, "d20.als"); + habla_dr_dch(TEXTD21, "d21.als"); + hablar(TEXT248, "248.als"); + habla_dr_dch(TEXTD22, "d22.als"); + hablar(TEXT249, "249.als"); + habla_dr_dch(TEXTD23, "d23.als"); + conversa("op_11.cal"); + habla_dr_dch(TEXTD26, "d26.als"); + + anima("fum.bin", 15); + + habla_dr_dch(TEXTD27, "d27.als"); + hablar(TEXT254, "254.als"); + habla_dr_dch(TEXTD28, "d28.als"); + hablar(TEXT255, "255.als"); + habla_dr_dch(TEXTD29, "d29.als"); + FundeAlNegro(1); + borra_pantalla(); + lee_dibujos("time1.alg"); + descomprime_dibujo(dir_zona_pantalla, 1); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + delay(930); + borra_pantalla(); + Negro(); + hare_se_ve =0; + flags[0] = 0; + refresca_pantalla(); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + FundeDelNegro(1); + hablar(TEXT256, "256.als"); + habla_dr_dch(TEXTD30, "d30.als"); + hablar(TEXT257, "257.als"); + FundeAlNegro(0); + borra_pantalla(); + lee_dibujos("time1.alg"); + descomprime_dibujo(dir_zona_pantalla,1); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + delay(900); + borra_pantalla(); + Negro(); + refresca_pantalla(); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + FundeDelNegro(1); + hablar(TEXT258, "258.als"); + habla_dr_dch(TEXTD31, "d31.als"); + animacion_5_6(); + habla_dr_dch(TEXTD32, "d32.als"); + habla_igor_dch(TEXTI11, "I11.als"); + sentido_igor = 3; + habla_dr_dch(TEXTD33, "d33.als"); + habla_igor_frente(TEXTI12, "I12.als"); + habla_dr_dch(TEXTD34, "d34.als"); + sentido_dr = 0; + habla_dr_izq(TEXTD35,"d35.als"); + borra_pantalla(); + carga_escoba_1("102.ald"); + activa_pendulo(); +} + +void DrasculaEngine::animacion_2_6() { + habla_dr_dch(TEXTD24, "d24.als"); +} + +void DrasculaEngine::animacion_3_6() { + habla_dr_dch(TEXTD24, "d24.als"); +} + +void DrasculaEngine::animacion_4_6() { + habla_dr_dch(TEXTD25, "d25.als"); +} + +void DrasculaEngine::animacion_5_6() { + int n, pos_pen[6]; + + pos_pen[0] = 1; + pos_pen[1] = 29; + pos_pen[2] = 204; + pos_pen[3] = -125; + pos_pen[4] = 18; + pos_pen[5] = 125; + + anima("man.bin", 14); + + for (n = -125; n <= 0; n = n + 2) { + DIBUJA_FONDO(0, 0, 0, 0, 320, 200, dir_dibujo1, dir_zona_pantalla); + actualiza_refresco_antes(); + pos_pen[3] = n; + DIBUJA_BLOQUE_CUT(pos_pen, dir_dibujo3, dir_zona_pantalla); + + actualiza_refresco(); + + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + pausa(2); + } + + flags[3] = 1; +} + +void DrasculaEngine::animacion_6_6() { + anima("rct.bin", 11); + borra_pantalla(); + sin_verbo(); + resta_objeto(20); + lee_dibujos("96.alg"); + descomprime_dibujo(dir_hare_frente, 1); + lee_dibujos("97.alg"); + descomprime_dibujo(dir_hare_frente, 1); + lee_dibujos("97.alg"); + descomprime_dibujo(dir_hare_dch, 1); + lee_dibujos("99.alg"); + descomprime_dibujo(dir_hare_fondo, 1); + rompo = 1; + obj_saliendo = 104; + hare_x = -1; + sin_verbo(); + carga_escoba_1("58.ald"); + hare_se_ve = 1; + sentido_hare = 1; + anima("hbp.bin", 14); + + sentido_hare = 3; + flags[0] = 1; + flags[1] = 0; + flags[2] = 1; +} + +void DrasculaEngine::animacion_7_6() { + flags[8] = 1; + actualiza_datos(); +} + +void DrasculaEngine::animacion_9_6() { + int v_cd; + + anima("fin.bin", 14); + playmusic(13); + flags[5] = 1; + anima("drf.bin", 16); + FundeAlNegro(0); + borra_pantalla(); + hare_x = -1; + obj_saliendo = 108; + carga_escoba_1("59.ald"); + strcpy(num_room, "nada.alg"); + lee_dibujos("nota2.alg"); + descomprime_dibujo(dir_dibujo1, MEDIA); + Negro(); + sentido_hare = 1; + hare_x -= 21; + refresca_pantalla(); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + FundeDelNegro(0); + pausa(96); + lleva_al_hare(116, 178); + sentido_hare = 2; + refresca_pantalla(); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + playmusic(9); + borra_pantalla(); + lee_dibujos("nota.alg"); + descomprime_dibujo(dir_dibujo1, COMPLETA); + color_abc(BLANCO); + habla_solo(TEXTBJ24, "bj24.als"); + habla_solo(TEXTBJ25, "bj25.als"); + habla_solo(TEXTBJ26, "bj26.als"); + habla_solo(TEXTBJ27, "bj27.als"); + habla_solo(TEXTBJ28, "bj28.als"); + sentido_hare = 3; + borra_pantalla(); + lee_dibujos("96.alg"); + descomprime_dibujo(dir_hare_frente, COMPLETA); + lee_dibujos("nota2.alg"); + descomprime_dibujo(dir_dibujo1, MEDIA); + hablar(TEXT296, "296.als"); + hablar(TEXT297, "297.als"); + hablar(TEXT298, "298.als"); + sentido_hare = 1; + hablar(TEXT299, "299.als"); + hablar(TEXT300, "300.als"); + refresca_pantalla(); + DIBUJA_FONDO(0, 0, 0, 0, 320, 200, dir_zona_pantalla, dir_dibujo1); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + color_abc(VERDE_CLARO); + habla_solo("GOOOOOOOOOOOOOOOL", "s15.als"); + lee_dibujos("nota2.alg"); + descomprime_dibujo(dir_dibujo1, 1); + sentido_hare = 0; + refresca_pantalla(); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + hablar(TEXT301, "301.als"); + v_cd = _mixer->getVolumeForSoundType(Audio::Mixer::kMusicSoundType) / 16; + v_cd = v_cd + 4; + playmusic(17); + FundeAlNegro(1); + borra_pantalla(); + fliplay("qpc.bin", 1); + MusicFadeout(); + stopmusic(); + borra_pantalla(); + _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, v_cd * 16); + playmusic(3); + fliplay("crd.bin", 1); + stopmusic(); + error("end of game ?"); +} + +void DrasculaEngine::animacion_10_6() { + comienza_sound ("s14.als"); + DIBUJA_FONDO(0, 0, 0, 0, 320, 200, dir_dibujo1, dir_zona_pantalla); + actualiza_refresco_antes(); + DIBUJA_FONDO(164, 85, 155, 48, 113, 114, dir_dibujo3, dir_zona_pantalla); + + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + fin_sound(); + habla_taber2(TEXTT23, "t23.als"); + flags[7] = 1; + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + FundeDelNegro(0); + pausa(96); + lleva_al_hare(116, 178); + sentido_hare = 2; + refresca_pantalla(); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + playmusic(9); + borra_pantalla(); + lee_dibujos("nota.alg"); + descomprime_dibujo(dir_dibujo1, COMPLETA); + color_abc(BLANCO); + habla_solo(TEXTBJ24, "bj24.als"); + habla_solo(TEXTBJ25, "bj25.als"); + habla_solo(TEXTBJ26, "bj26.als"); + habla_solo(TEXTBJ27, "bj27.als"); + habla_solo(TEXTBJ28, "bj28.als"); + sentido_hare = 3; + borra_pantalla(); + lee_dibujos("96.alg"); + descomprime_dibujo(dir_hare_frente, COMPLETA); + lee_dibujos("nota2.alg"); + descomprime_dibujo(dir_dibujo1, MEDIA); + hablar(TEXT296, "296.als"); + hablar(TEXT297, "297.als"); + hablar(TEXT298, "298.als"); + sentido_hare = 1; + hablar(TEXT299, "299.als"); + hablar(TEXT300, "300.als"); + refresca_pantalla(); + DIBUJA_FONDO(0, 0, 0, 0, 320, 200, dir_zona_pantalla, dir_dibujo1); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + color_abc(VERDE_CLARO); + habla_solo("GOOOOOOOOOOOOOOOL", "s15.als"); + lee_dibujos("nota2.alg"); + descomprime_dibujo(dir_dibujo1, 1); +} + +void DrasculaEngine::animacion_11_6() { + habla_taber2(TEXTT10, "t10.als"); + hablar(TEXT268, "268.als"); + habla_taber2(TEXTT11, "t11.als"); +} + +void DrasculaEngine::animacion_12_6() { + habla_taber2(TEXTT12, "t12.als"); + hablar(TEXT270, "270.als"); + habla_taber2(TEXTT13, "t13.als"); + habla_taber2(TEXTT14, "t14.als"); +} + +void DrasculaEngine::animacion_13_6() { + habla_taber2(TEXTT15, "t15.als"); +} + +void DrasculaEngine::animacion_14_6() { + habla_taber2(TEXTT24, "t24.als"); + suma_objeto(21); + flags[10] = 1; + rompo_y_salgo = 1; +} + +void DrasculaEngine::animacion_15_6() { + habla_taber2(TEXTT16, "t16.als"); +} + +void DrasculaEngine::animacion_18_6() { + sin_verbo(); + resta_objeto(21); + anima("beb.bin", 10); +} + +void DrasculaEngine::animacion_19_6() { + DIBUJA_FONDO(0, 0, 0, 0, 320, 200, dir_dibujo1, dir_zona_pantalla); + DIBUJA_FONDO(140, 23, 161, 69, 35, 80, dir_dibujo3, dir_zona_pantalla); + + actualiza_refresco_antes(); + pon_hare(); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + pausa(6); + refresca_pantalla(); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + comienza_sound("s4.als"); + pausa(6); + fin_sound(); +} + +void DrasculaEngine::activa_pendulo() { + flags[1] = 2; + hare_se_ve = 0; + strcpy(num_room, "102.alg"); + lee_dibujos("102.alg"); + descomprime_dibujo(dir_dibujo1, MEDIA); + lee_dibujos("an_p1.alg"); + descomprime_dibujo(dir_dibujo3, 1); + lee_dibujos("an_p2.alg"); + descomprime_dibujo(dir_hare_dch, 1); + lee_dibujos("an_p3.alg"); + descomprime_dibujo(dir_hare_frente, 1); + + DIBUJA_FONDO(0, 171, 0, 0, ANCHOBJ, ALTOBJ, dir_hare_fondo, dir_dibujo3); + + conta_ciego_vez = vez(); +} + +void DrasculaEngine::habla_pen(const char *dicho, const char *filename) { + int tiempou; + long tiempol; + + int x_habla[8] = {112, 138, 164, 190, 216, 242, 268, 294}; + int cara; + + int longitud; + longitud = strlen(dicho); + + flags[1] = 1; + + refresca_pantalla(); + DIBUJA_BLOQUE(44, 145, 145, 105, 25, 29, dir_dibujo3, dir_zona_pantalla); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + + tiempol = _system->getMillis(); + tiempou = (unsigned int)tiempol / 2; + _rnd->setSeed(tiempou); + + buffer_teclado(); + + color_abc(AMARILLO); + + if (hay_sb == 1) { + sku = new Common::File; + sku->open(filename); + if (!sku->isOpen()) { + error("no puedo abrir archivo de voz"); + } + ctvd_init(2); + ctvd_speaker(1); + ctvd_output(sku); + } + +bucless: + + cara = _rnd->getRandomNumber(7); + + DIBUJA_FONDO(0, 0, 0, 0, 320, 200, dir_dibujo1, dir_zona_pantalla); + + actualiza_refresco_antes(); + + DIBUJA_BLOQUE(x_habla[cara], 145, 145, 105, 25, 29, dir_dibujo3, dir_zona_pantalla); + + actualiza_refresco(); + + if (con_voces == 0) + centra_texto(dicho, 160, 105); + + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + + pausa(3); + + int key = getscan(); + if (key != 0) + ctvd_stop(); + buffer_teclado(); + if (hay_sb == 1) { + if (LookForFree() != 0) + goto bucless; + delete sku; + ctvd_terminate(); + } else { + longitud = longitud - 2; + if (longitud > 0) + goto bucless; + } + + flags[1] = 0; + DIBUJA_FONDO(0, 0, 0, 0, 320, 200, dir_dibujo1, dir_zona_pantalla); + actualiza_refresco_antes(); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); +} + +void DrasculaEngine::habla_pen2(const char *dicho, const char *filename) { + int tiempou; + long tiempol; + + int x_habla[5]={122, 148, 174, 200, 226}; + int cara; + + int longitud; + longitud = strlen(dicho); + + flags[1] = 1; + + tiempol = _system->getMillis(); + tiempou = (unsigned int)tiempol / 2; + _rnd->setSeed(tiempou); + + buffer_teclado(); + + color_abc(AMARILLO); + + if (hay_sb == 1) { + sku = new Common::File; + sku->open(filename); + if (!sku->isOpen()) { + error("no puedo abrir archivo de voz"); + } + ctvd_init(2); + ctvd_speaker(1); + ctvd_output(sku); + } + +bucless: + + cara = _rnd->getRandomNumber(4); + + DIBUJA_FONDO(0, 0, 0, 0, 320, 200, dir_dibujo1, dir_zona_pantalla); + + actualiza_refresco_antes(); + + DIBUJA_FONDO(x_habla[cara], 171, 173, 116, 25, 28, dir_dibujo3, dir_zona_pantalla); + + actualiza_refresco(); + + if (con_voces == 0) + centra_texto(dicho, 195, 107); + + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + + pausa(3); + + int key = getscan(); + if (key != 0) + ctvd_stop(); + buffer_teclado(); + if (hay_sb == 1) { + if (LookForFree() != 0) + goto bucless; + delete sku; + ctvd_terminate(); + } else { + longitud = longitud - 2; + if (longitud > 0) + goto bucless; + } + + flags[1] = 0; + DIBUJA_FONDO(0, 0, 0, 0, 320, 200, dir_dibujo1, dir_zona_pantalla); + actualiza_refresco_antes(); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); +} + +void DrasculaEngine::habla_taber2(const char *dicho, const char *filename) { + int tiempou; + long tiempol; + + int x_habla[6] = {1, 23, 45, 67, 89, 111}; + int cara; + + int longitud; + longitud = strlen(dicho); + + tiempol = _system->getMillis(); + tiempou = (unsigned int)tiempol / 2; + _rnd->setSeed(tiempou); + + buffer_teclado(); + + color_abc(MARRON); + + if (hay_sb == 1) { + sku = new Common::File; + sku->open(filename); + if (!sku->isOpen()) { + error("no puedo abrir archivo de voz"); + } + ctvd_init(2); + ctvd_speaker(1); + ctvd_output(sku); + } + +bucless: + + cara = _rnd->getRandomNumber(5); + + DIBUJA_FONDO(0, 0, 0, 0, 320, 200, dir_dibujo1, dir_zona_pantalla); + + actualiza_refresco_antes(); + + DIBUJA_FONDO(x_habla[cara], 130, 151, 43, 21, 24, dir_dibujo3, dir_zona_pantalla); + pon_hare(); + actualiza_refresco(); + + if (con_voces == 0) + centra_texto(dicho, 132, 45); + + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + + pausa(3); + + int key = getscan(); + if (key != 0) + ctvd_stop(); + buffer_teclado(); + if (hay_sb == 1) { + if (LookForFree() != 0) + goto bucless; + delete sku; + ctvd_terminate(); + } else { + longitud = longitud - 2; + if (longitud > 0) + goto bucless; + } + + refresca_pantalla(); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); +} + +void DrasculaEngine::refresca_58() { + if (hare_se_ve == 1) + DIBUJA_BLOQUE(67, 139, 140, 147, 12, 16, dir_dibujo3, dir_zona_pantalla); +} + +void DrasculaEngine::refresca_60() { + if (hare_y - 10 < y_dr && flags[5] == 0) + pon_dr(); +} + +void DrasculaEngine::refresca_61() { + DIBUJA_BLOQUE(1, 154, 83, 122, 131, 44, dir_dibujo3, dir_zona_pantalla); +} + +void DrasculaEngine::refresca_58_antes() { + if (flags[0] == 0) + DIBUJA_FONDO(1, 156, 143, 120, 120, 43, dir_dibujo3, dir_zona_pantalla); + if (flags[1] == 2) + DIBUJA_BLOQUE(252, 171, 173, 116, 25, 28, dir_dibujo3, dir_zona_pantalla); + if (flags[1] == 0 && flags[0] == 0) + DIBUJA_BLOQUE(278, 171, 173, 116, 25, 28, dir_dibujo3, dir_zona_pantalla); + if (flags[2] == 0) { + pon_igor(); + pon_dr(); + } + if (flags[3] == 1) + DIBUJA_BLOQUE(1, 29, 204, 0, 18, 125, dir_dibujo3, dir_zona_pantalla); + if (flags[8] == 1) + DIBUJA_FONDO(20, 60, 30, 64, 46, 95, dir_dibujo3, dir_zona_pantalla); +} + +void DrasculaEngine::refresca_59_antes() { + if (flags[4] == 0) + DIBUJA_BLOQUE(1, 146, 65, 106, 83, 40, dir_dibujo3, dir_zona_pantalla); + if (flags[9] == 1) { + DIBUJA_FONDO(65, 103, 65, 103, 49, 38, dir_dibujo1, dir_zona_pantalla); + DIBUJA_BLOQUE(1, 105, 65, 103, 49, 38, dir_dibujo3, dir_zona_pantalla); + } +} + +void DrasculaEngine::refresca_60_antes() { + int velas_y[] = {158, 172, 186}; + int diferencia; + + if (flags[5] == 0) + pon_dr(); + + DIBUJA_FONDO(123, velas_y[frame_velas], 142, 14, 39, 13, dir_dibujo3, dir_zona_pantalla); + + if (flag_tv == 1) + DIBUJA_FONDO(114, 158, 8, 30, 8, 23, dir_dibujo3, dir_zona_pantalla); + + diferencia = vez() - conta_ciego_vez; + parpadeo = _rnd->getRandomNumber(7); + if (parpadeo == 5 && flag_tv == 0) + flag_tv = 1; + else if (parpadeo == 5 && flag_tv == 1) + flag_tv = 0; + if (diferencia > 6) { + frame_velas++; + if (frame_velas == 3) + frame_velas = 0; + conta_ciego_vez = vez(); + } +} + +void DrasculaEngine::pantalla_58(int fl) { + if (objeto_que_lleva == MOVER && fl == 103) + animacion_7_6(); + else if (objeto_que_lleva == MIRAR && fl == 104) + hablar(TEXT454, "454.als"); + else + hay_respuesta = 0; +} + +void DrasculaEngine::pantalla_59(int fl) { + if ((objeto_que_lleva == HABLAR && fl == 51) || (objeto_que_lleva == MIRAR && fl == 51)) { + flags[9] = 1; + hablar(TEXT259, "259.als"); + habla_bj_cama(TEXTBJ13, "bj13.als"); + hablar(TEXT263, "263.als"); + habla_bj_cama(TEXTBJ14, "bj14.als"); + pausa(40); + hablar(TEXT264, "264.als"); + habla_bj_cama(TEXTBJ15, "BJ15.als"); + hablar(TEXT265, "265.als"); + flags[9] = 0; + if (flags[11] == 0) { + comienza_sound("s12.als"); + delay(40); + fin_sound(); + delay(10); + lleva_al_hare(174, 168); + sentido_hare = 2; + refresca_pantalla(); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + pausa(40); + comienza_sound("s12.als"); + pausa(19); + fin_sound_corte(); + hare_se_ve = 0; + refresca_pantalla(); + DIBUJA_BLOQUE(101, 34, hare_x - 4, hare_y - 1, 37, 70, dir_dibujo3, dir_zona_pantalla); + DIBUJA_FONDO(0, 0, 0, 0, 320, 200, dir_zona_pantalla, dir_dibujo1); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + hare_se_ve = 1; + borra_pantalla(); + lee_dibujos("tlef0.alg"); + descomprime_dibujo(dir_dibujo1, COMPLETA); + lee_dibujos("tlef1.alg"); + descomprime_dibujo(dir_dibujo3, 1); + lee_dibujos("tlef2.alg"); + descomprime_dibujo(dir_hare_frente, 1); + lee_dibujos("tlef3.alg"); + descomprime_dibujo(dir_hare_fondo, 1); + habla_htel(TEXT240, "240.als"); + + color_abc(VON_BRAUN); + habla_solo(TEXTVB58, "VB58.als"); + habla_htel(TEXT241, "241.als"); + color_abc(VON_BRAUN); + habla_solo(TEXTVB59, "VB59.als"); + habla_htel(TEXT242, "242.als"); + color_abc(VON_BRAUN); + habla_solo(TEXTVB60, "VB60.als"); + habla_htel(TEXT196, "196.als"); + color_abc(VON_BRAUN); + habla_solo(TEXTVB61,"VB61.als"); + habla_htel(TEXT244, "244.als"); + color_abc(VON_BRAUN); + habla_solo(TEXTVB62, "VB62.als"); + borra_pantalla(); + lee_dibujos("aux59.alg"); + descomprime_dibujo(dir_dibujo3, 1); + lee_dibujos("96.alg"); + descomprime_dibujo(dir_hare_frente, COMPLETA); + lee_dibujos("99.alg"); + descomprime_dibujo(dir_hare_fondo, 1); + lee_dibujos("59.alg"); + descomprime_dibujo(dir_dibujo1, MEDIA); + sentido_hare = 3; + hablar(TEXT245, "245.als"); + sin_verbo(); + flags[11] = 1; + } + } else + hay_respuesta = 0; +} + +void DrasculaEngine::pantalla_60(int fl) { + if (objeto_que_lleva == MOVER && fl == 112) + animacion_10(); + else if (objeto_que_lleva == MIRAR && fl == 112) + hablar(TEXT440, "440.als"); + else if (objeto_que_lleva == HABLAR && fl == 52) { + hablar(TEXT266, "266.als"); + habla_taber2(TEXTT1, "t1.als"); + conversa("op_12.cal"); + sin_verbo(); + objeto_que_lleva = 0; + } else if (objeto_que_lleva == HABLAR && fl == 115) + hablar(TEXT455, "455.als"); + else if (objeto_que_lleva == HABLAR && fl == 56) + hablar(TEXT455, "455.als"); + else if (objeto_que_lleva == MIRAR && fl == 114) + hablar(TEXT167, "167.als"); + else if (objeto_que_lleva == MIRAR && fl == 113) + hablar(TEXT168, "168.als"); + else if (objeto_que_lleva == COGER && fl == 113) + hablar(TEXT170, "170.als"); + else if (objeto_que_lleva == MOVER && fl == 113) + hablar(TEXT170, "170.als"); + else if (objeto_que_lleva == HABLAR && fl == 113) + hablar(TEXT169, "169.als"); + else if (objeto_que_lleva == 21 && fl == 56) + animacion_18_6(); + else if (objeto_que_lleva == 9 && fl ==56 && flags[6] == 1) + animacion_9(); + else if (objeto_que_lleva == 9 && fl ==56 && flags[6] == 0) { + anima("cnf.bin", 14); + hablar(TEXT455, "455.als"); + } else + hay_respuesta = 0; +} + +void DrasculaEngine::pantalla_61(int fl) { + if (objeto_que_lleva == MIRAR && fl == 116) + hablar(TEXT172, "172.als"); + else if (objeto_que_lleva == MIRAR && fl == 117) + hablar(TEXT173, "173.als"); + else if (objeto_que_lleva == MOVER && fl == 117) + hablar(TEXT174, "174.als"); + else if (objeto_que_lleva == ABRIR && fl == 117) + hablar(TEXT174, "174.als"); + else + hay_respuesta = 0; +} + +void DrasculaEngine::habla_bj_cama(const char *dicho, const char *filename) { + int tiempou; + long tiempol; + + int x_habla[5] = {51, 101, 151, 201, 251}; + int cara; + + int longitud; + longitud = strlen(dicho); + + tiempol = _system->getMillis(); + tiempou = (unsigned int)tiempol / 2; + _rnd->setSeed(tiempou); + + buffer_teclado(); + + color_abc(BLANCO); + + if (hay_sb == 1) { + sku = new Common::File; + sku->open(filename); + if (!sku->isOpen()) { + error("no puedo abrir archivo de voz"); + } + ctvd_init(2); + ctvd_speaker(1); + ctvd_output(sku); + } + +bucless: + + cara = _rnd->getRandomNumber(4); + + DIBUJA_FONDO(0, 0, 0, 0, 320, 200, dir_dibujo1, dir_zona_pantalla); + + actualiza_refresco_antes(); + + DIBUJA_FONDO(65, 103, 65, 103, 49, 38, dir_dibujo1, dir_zona_pantalla); + DIBUJA_BLOQUE(x_habla[cara], 105, 65, 103, 49, 38, dir_dibujo3, dir_zona_pantalla); + pon_hare(); + actualiza_refresco(); + + if (con_voces == 0) + centra_texto(dicho, 104, 102); + + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + + pausa(3); + + int key = getscan(); + if (key != 0) + ctvd_stop(); + buffer_teclado(); + if (hay_sb == 1) { + if (LookForFree() != 0) + goto bucless; + delete sku; + ctvd_terminate(); + } else { + longitud = longitud - 2; + if (longitud > 0) + goto bucless; + } + refresca_pantalla(); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); +} + +void DrasculaEngine::habla_htel(const char *dicho, const char *filename) { + int tiempou; + long tiempol; + char *num_cara; + + int x_habla[3] = {1, 94, 187}; + int cara, pantalla; + + int longitud; + longitud = strlen(dicho); + + tiempol = _system->getMillis(); + tiempou = (unsigned int)tiempol / 2; + _rnd->setSeed(tiempou); + + buffer_teclado(); + + color_abc(AMARILLO); + + if (hay_sb == 1) { + sku = new Common::File; + sku->open(filename); + if (!sku->isOpen()) { + error("no puedo abrir archivo de voz"); + } + ctvd_init(2); + ctvd_speaker(1); + ctvd_output(sku); + } + +bucless: + + cara = _rnd->getRandomNumber(2); + pantalla = _rnd->getRandomNumber(2); + + if (cara == 0 && pantalla == 0) + num_cara = (char *)dir_dibujo3; + else if (pantalla == 1) + num_cara = (char *)dir_hare_frente; + else + num_cara = (char *)dir_hare_fondo; + + DIBUJA_FONDO(0, 0, 0, 0, 320, 200, dir_dibujo1, dir_zona_pantalla); + + DIBUJA_FONDO(x_habla[cara], 1, 45, 24, 92, 108, (byte *)num_cara, dir_zona_pantalla); + + if (con_voces == 0) + centra_texto(dicho, 90, 50); + + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); + pausa(3); + + int key = getscan(); + if (key != 0) + ctvd_stop(); + buffer_teclado(); + if (hay_sb == 1) { + if (LookForFree() != 0) + goto bucless; + delete sku; + ctvd_terminate(); + } else { + longitud = longitud - 2; + if (longitud > 0) + goto bucless; + } + + DIBUJA_FONDO(0, 0, 0, 0, 320, 200, dir_dibujo1, dir_zona_pantalla); + VUELCA_PANTALLA(0, 0, 0, 0, 320, 200, dir_zona_pantalla); +} + +void DrasculaEngine::refresca_pendulo() { + int pendulo_x[] = {40, 96, 152, 208, 264, 40, 96, 152, 208, 208, 152, 264, 40, 96, 152, 208, 264}; + int diferencia; + + if (frame_pen <= 4) + dir_pendulo = dir_dibujo3; + else if (frame_pen <= 11) + dir_pendulo = dir_hare_dch; + else + dir_pendulo = dir_hare_frente; + DIBUJA_FONDO(pendulo_x[frame_pen], 19, 152, 0, 55, 125, dir_pendulo, dir_zona_pantalla); + + if (flags[1] == 2) + DIBUJA_BLOQUE(18, 145, 145, 105, 25, 29, dir_dibujo3, dir_zona_pantalla); + + if (flags[1]==0) DIBUJA_BLOQUE(44, 145, 145, 105, 25, 29, dir_dibujo3, dir_zona_pantalla); + + diferencia = vez() - conta_ciego_vez; + if (diferencia > 8) { + frame_pen++; + if (frame_pen == 17) + frame_pen = 0; + conta_ciego_vez=vez(); + } +} + +void DrasculaEngine::pantalla_pendulo(int fl) { + if (objeto_que_lleva == MIRAR && fl == 100) + hablar(TEXT452, "452.als"); + else if (objeto_que_lleva == MIRAR && fl == 101) + hablar (TEXT123, "123.als"); + else if (objeto_que_lleva == COGER && fl == 101) + agarra_objeto(20); + else if (objeto_que_lleva == 20 && fl == 100) + animacion_6_6(); + else if (objeto_que_lleva == COGER || objeto_que_lleva == ABRIR) + hablar(TEXT453, "453.als"); + else + hay_respuesta = 0; +} + } // End of namespace Drascula diff --git a/engines/drascula/drascula.h b/engines/drascula/drascula.h index 283b976796..245dbe4ed2 100644 --- a/engines/drascula/drascula.h +++ b/engines/drascula/drascula.h @@ -507,7 +507,6 @@ public: void animacion_15(); void animacion_16(); void animacion_17(); - void animacion_18(); void animacion_19(); void animacion_20(); void animacion_21(); @@ -653,6 +652,9 @@ public: int GlobalSpeed; int LastFrame; + int frame_pen; + int flag_tv; + byte *carga_pcx(byte *NamePcc); void set_dac(byte *dac); void WaitForNext(int FPS); @@ -732,7 +734,40 @@ public: void habla_igor_sentado(const char *, const char *); void habla_lobo(const char *dicho, const char *filename); void habla_mus(const char *dicho, const char *filename); - + void pantalla_58(int); + void pantalla_59(int); + void pantalla_60(int); + void pantalla_61(int); + void pantalla_pendulo(int); + void refresca_pendulo(); + void refresca_58(); + void refresca_58_antes(); + void refresca_59_antes(); + void refresca_60_antes(); + void refresca_60(); + void refresca_61(); + void animacion_1_6(); + void animacion_2_6(); + void animacion_3_6(); + void animacion_4_6(); + void animacion_5_6(); + void animacion_6_6(); + void animacion_7_6(); + void animacion_9_6(); + void animacion_10_6(); + void animacion_11_6(); + void animacion_12_6(); + void animacion_13_6(); + void animacion_14_6(); + void animacion_15_6(); + void animacion_18_6(); + void animacion_19_6(); + void activa_pendulo(); + void habla_pen(const char *, const char *); + void habla_pen2(const char *, const char *); + void habla_taber2(const char *, const char *); + void habla_bj_cama(const char *dicho, const char * filename); + void habla_htel(const char *dicho, const char *filename); private: |