From 74c3756a24435eb664a6938245175971d76f4e44 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Wed, 24 Jan 2024 19:36:56 +0100 Subject: [PATCH] - Fins la linea 2060 --- pepe2000_utf8.cpp | 843 ++++++++++++++++++++++------------------------ 1 file changed, 402 insertions(+), 441 deletions(-) diff --git a/pepe2000_utf8.cpp b/pepe2000_utf8.cpp index d894215..d3ab3bf 100644 --- a/pepe2000_utf8.cpp +++ b/pepe2000_utf8.cpp @@ -1548,172 +1548,188 @@ void historia_final(); } /*──────────────────────────────────────────────────────────────────────────*/ -procedure put_map(uint8_t *nom;color:byte; x,y: word;i,j: byte; desti:word); +void put_map(uint8_t *nom, uint8_t color, uint16_t x, uint16_t y, uint8_t i, uint8_t j, uint8_t *desti) /* nom : nom de la matriu; color: 255 = original o color; x,y = posició pantalla; i,j = tamany matriu; desti = VGA o vaddr)*/ -var a,b:word; -begin - for a:=x+1 to x+i do - for b:=y+1 to y+j do - begin - if color<>255 then putpixel(a,b,color,desti) - else putpixel(a,b,nom[a-x,b-y],desti); - end; -end; +{ + for (int a=x+1; a<=x+i; ++a) + for (int b=y+1; b<=y+j; ++b) + { + if (color!=255) putpixel(a, b, (color!=255 ? color : nom[a-x,b-y]), desti); + } +} + /*──────────────────────────────────────────────────────────────────────────*/ -procedure pilla_temps; -begin - gettime(h,m,s,c); - hora := (s)+(m*60)+(h*3600); -end; +void pilla_temps() +{ + hora = SDL_GetTicks() / 1000; +} + /*──────────────────────────────────────────────────────────────────────────*/ -procedure posa_el_temps(where:word); -var - h1,m1,s1,c1,minuts,segons,i : word; -begin - gettime(h1,m1,s1,c1); - /*temps:=temps+(((h1-h)*24)+((m1-m)*60)+(s1-s));*/ - /*if (s1-s)>0 then temps:=temps+(100-c+c1) else temps:=temps+(c1-c);*/ - temps := (s1)+(m1*60)+(h1*3600) - hora; - minuts :=(temps) div 60; - segons :=(temps) mod 60; +void posa_el_temps(uint8_t *where) +{ + gettime(h1,m1,s1,c1); + temps = (SDL_GetTicks() / 1000) - hora; + const uint16_t minuts = temps / 60; + const uint16_t segons = temps % 60; + const int i = 255; - i:= 255; + pinta_number(num_0, 180, i,82, where); + pinta_number(num_0, 180, i+12, 82, where); + pinta_number(num_0, 180, i+18, 82, where); - pinta_number(num_0,180,i,82,where); - pinta_number(num_0,180,i+12,82,where); - pinta_number(num_0,180,i+18,82,where); + pinta_number(num_11, 255, i+6, 82, where); - pinta_number(num_11,255,i+6,82,where); + pinta_number(numero_G[minuts], 255, i, 82, where); + pinta_number(numero_G[segons / 10], 255, i+12, 82, where); + pinta_number(numero_G[segons % 10], 255, i+18, 82, where); +} - pinta_number(numero_G[minuts],255,i,82,where); - pinta_number(numero_G[segons div 10],255,i+12,82,where); - pinta_number(numero_G[segons mod 10],255,i+18,82,where); -end; /*──────────────────────────────────────────────────────────────────────────*/ -procedure resultat_time_attack; -var i,minuts,segons : word; -begin +void resultat_time_attack() +{ + fadedown(0,0,0,1); + load_mif(TIME_FIN, vaddr2); + volcar32(vaddr2, vaddr); - fadedown(0,0,0,1); - load_mif(time_fin,vaddr2); - volcar32(vaddr2,vaddr); + ini_midi(musica_game_over); + if (midi) Playmidi(); - ini_midi(musica_game_over); - if midi then Playmidi; + const uint16_t minuts = (temps_final % 3600) / 60; + const uint16_t segons = (temps_final % 3600) % 60; - minuts:=(temps_final mod 3600) div 60; - segons:=(temps_final mod 3600) mod 60; + const int i = 180; - i:=180; + pinta_number_zoom(4, numero_G[minuts], 255, i, 126, vaddr); + pinta_number_zoom(4, num_11, 255, i+6*4, 126, vaddr); + pinta_number_zoom(4, numero_G[segons / 10], 255, i+12*4, 126, vaddr); + pinta_number_zoom(4, numero_G[segons % 10], 255, i+18*4, 126, vaddr); - pinta_number_zoom(4,numero_G[minuts],255,i,126,vaddr); - pinta_number_zoom(4,num_11,255,i+6*4,126,vaddr); - pinta_number_zoom(4,numero_G[segons div 10],255,i+12*4,126,vaddr); - pinta_number_zoom(4,numero_G[segons mod 10],255,i+18*4,126,vaddr); + espera_vga(); + volcar32(vaddr, VGA); + retard(300); + gestio_records(43); + retard(100); + escriu_records(10); + borrat_de_pantalla(vaddr); + save_records(); - espera_vga; - volcar32(vaddr,VGA); - retard(300); - gestio_records(43); - retard(100); - escriu_records(10); - borrat_de_pantalla(vaddr); - save_records; + if (midi) + { + StopMIDI(); + unloadmidi(); + midi = false; + } +} - if midi then begin StopMIDI; unloadmidi; midi:=false; end; - -end; /*──────────────────────────────────────────────────────────────────────────*/ -procedure missatge_game_over; -var - i,j : word; - k : byte; - num1,num2,num3,num4,num5,num6,num7 : byte; +void missatge_game_over() +{ + fadedown(0,0,0,2); + load_mif(PEPEFINS, vaddr); -begin + ini_midi(musica_game_over); + if (midi) Playmidi(); - fadedown(0,0,0,2); - load_mif(pepefins,vaddr); + if (time_attack_mode) + for (int i=50; i<=280; ++i) + for (int j=130; j<=190; ++j) + putpixel(i, j, 239, vaddr); - ini_midi(musica_game_over); - if midi then Playmidi; + if (story_mode_mode) + { + volcar32(vaddr, vaddr2); + for (int i=50; i<=280; ++i) + for (int j=130; j<=190; ++j) + putpixel(i, j, 239, vaddr2); - if time_attack_mode then for i:=50 to 280 do - for j:=130 to 190 do putpixel(i,j,239,vaddr); - if story_mode_mode then - begin - volcar32(vaddr,vaddr2); - for i:=50 to 280 do - for j:=130 to 190 do putpixel(i,j,239,vaddr2); - espera_VGA; - volcar32(vaddr2,VGA); - retard(200); - end; + espera_VGA(); + volcar32(vaddr2, VGA); + retard(200); + } - if story_mode_mode then - begin - i:=125/*135*/; - j:=170; - num1:=punts div 1000000; - num2:=(punts mod 1000000) div 100000; - num3:=((punts mod 1000000) mod 100000) div 10000; - num4:=(((punts mod 1000000) mod 100000) mod 10000) div 1000; - num5:=((((punts mod 1000000) mod 100000) mod 10000) mod 1000) div 100; - num6:=(((((punts mod 1000000) mod 100000) mod 10000) mod 1000) mod 100) div 10; - num7:=(((((punts mod 1000000) mod 100000) mod 10000) mod 100) mod 10); + if (story_mode_mode) + { + const int i = 125; // 135 + const int j = 170; - if num1<>0 then pinta_number(numero_G[num1],255,i,j,vaddr); - if (num2<>0) or (num1<>0) then pinta_number(numero_G[num2],255,i+6,j,vaddr); - if (num3<>0) or (num2<>0) or (num1<>0) then pinta_number(numero_G[num3],255,i+12,j,vaddr); - if (num4<>0) or (num3<>0) or (num2<>0) or (num1<>0) then pinta_number(numero_G[num4],255,i+18,j,vaddr); - if (num5<>0) or (num4<>0) or (num3<>0) or (num2<>0) or (num1<>0) then pinta_number(numero_G[num5],255,i+24,j,vaddr); - if (num6<>0) or (num5<>0) or (num4<>0) or (num3<>0) or (num2<>0) or (num1<>0) - then pinta_number(numero_G[num6],255,i+30,j,vaddr); - if (num7<>0) or (num6<>0) or (num5<>0) or (num4<>0) or (num3<>0) or (num2<>0) or (num1<>0) - then pinta_number(numero_G[num7],255,i+36,j,vaddr); + uint8_t num = (((((puntuacio[x] % 1000000) % 100000) % 10000) % 100) % 10); + if (num != 0) + { + pinta_number(numero_G[num], 255, i+36, j, vaddr); - /*pinta_number(numero_G[num1],255,i,j,vaddr); - pinta_number(numero_G[num2],255,i+6,j,vaddr); - pinta_number(numero_G[num3],255,i+12,j,vaddr); - pinta_number(numero_G[num4],255,i+18,j,vaddr); - pinta_number(numero_G[num5],255,i+24,j,vaddr); - pinta_number(numero_G[num6],255,i+30,j,vaddr); - pinta_number(numero_G[num7],255,i+36,j,vaddr);*/ - end; + num = (((((puntuacio[x] % 1000000) % 100000) % 10000) % 1000) % 100) / 10; + if (num != 0) + { + pinta_number(numero_G[num], 255, i+30, j, vaddr); - espera_vga; - volcar32(vaddr,VGA); - retard(300); - if story_mode_mode then gestio_records(144); - fadedown(0,0,0,0); + num = ((((puntuacio[x] % 1000000) % 100000) % 10000) % 1000) / 100; + if (num != 0) + { + pinta_number(numero_G[num], 255, i+24, j, vaddr); + num = (((puntuacio[x] % 1000000) % 100000) % 10000) / 1000; + if (num != 0) + { + pinta_number(numero_G[num], 255, i+18, j, vaddr); - escriu_records(10); - borrat_de_pantalla(vaddr); - vides:=0; - no_queden_vides:=true; - save_records; + num = ((puntuacio[x] % 1000000) % 100000) / 10000; + if (num != 0) + { + pinta_number(numero_G[num], 255, i+12, j, vaddr); - if midi then begin StopMIDI; unloadmidi; midi:=false; end; + num = (puntuacio[x] % 1000000) / 100000; + if (num != 0) + { + pinta_number(numero_G[num], 255, i+6, j, vaddr); + + num = puntuacio[x] / 1000000; + if (num != 0) pinta_number(numero_G[num], 255, i, j, vaddr); + } + } + } + } + } + } + } + + espera_vga(); + volcar32(vaddr, VGA); + retard(300); + if (story_mode_mode) gestio_records(144); + fadedown(0,0,0,0); + + escriu_records(10); + borrat_de_pantalla(vaddr); + vides = 0; + no_queden_vides = true; + save_records(); + + if (midi) + { + StopMIDI(); + unloadmidi(); + midi = false; + } +} -end; /*──────────────────────────────────────────────────────────────────────────*/ -procedure comprobar_comp_i_sprites; -const - tamany_comp = 2415; - tamany_sprites = 968792; +void comprobar_comp_i_sprites() {} +// [RZC 24/01/2024] [INFO] Passe de esta merda, de totes formes no anava a implementar-ho... +/* + const int tamany_comp = 2415; + const int tamany_sprites = 968792; var fich : file of byte; i : word; temp : longint; aux : byte; error : boolean; -begin - temp:=0; - error:=false; - assign(fich,'datos\comp.dat'); +{ + int temp = 0; + bool error = false; + FILE *fich = fopen("datos/comp.dat", "r"); reset(fich); for i:=1 to filesize(fich)-9 do begin @@ -1742,360 +1758,305 @@ begin halt; end; end; +*/ + + +/*----------------------------------------------------*/ +void carrega_pantalla(uint8_t num) +{ + if (num == 0) + memset(pantalla, 0, 38*29); + else + { + FILE *fich = fopen("datos/comp.dat", "r"); + fseek(fich, (num-1)*38*29, SEEK_SET); + fread(pantalla, 38*29, 1, fich); + fclose(fich); + } +} +/*----------------------------------------------------*/ + /*──────────────────────────────────────────────────────────────────────────*/ -procedure ini_vars(num_fase:byte); +void ini_vars(uint8_t num_fase) +{ + malos_quets = false; + sense_rellontge = true; + velocitat_pepe = 5; + x = pos_ini_x_pepe; + y = pos_ini_y_pepe; + fletxa_final_fase = false; - /*----------------------------------------------------*/ - procedure carrega_pantalla(num:byte); - var - fich : file of byte; - i,j,k : byte; - temp : byte; + if (num_fase == 0) + vides = 0; + else if (num_fase == 1) + vides = vides_de_pepe; + else + vides = vides; // Super util - begin - if num = 0 then for i:=1 to 38 do for j:=1 to 29 do pantalla[i,j]:=0 - else begin + pintura = max_pintura; + en_casa = true; + final_fase = false; + rellontge.viu = false; + rellontge.temps = 0; + temps = 0; - Assign(fich,'datos/comp.dat'); - Reset(fich); + carrega_pantalla(num_fase); - for k:=1 to num do - begin - for i:=1 to 38 do - begin - for j:=1 to 29 do - begin - read(fich,temp); - pantalla[i,j] := temp; - end; - end; - end; + switch (num_fase) + { + case 0: total_blocs_per_pintar = blocs_fase_0; break; + case 1: total_blocs_per_pintar = blocs_fase_1; break; + case 2: total_blocs_per_pintar = blocs_fase_2; break; + case 3: total_blocs_per_pintar = blocs_fase_3; break; + case 4: total_blocs_per_pintar = blocs_fase_4; break; + case 5: total_blocs_per_pintar = blocs_fase_5; break; + case 6: total_blocs_per_pintar = blocs_fase_6; break; + case 7: total_blocs_per_pintar = blocs_fase_7; break; + case 8: total_blocs_per_pintar = blocs_fase_8; break; + case 9: total_blocs_per_pintar = blocs_fase_9; break; + case 10: total_blocs_per_pintar = blocs_fase_10; break; + } + blocs_per_pintar = total_blocs_per_pintar; + temps = 0; + velocitat_joc = 1; + no_queden_vides = false; + naiximent = false; + map = false; - Close(fich); + // ini malos + for (int i=0; i0) + { + // vides + pinta_number(numero_G[vides], 255, 268, 169, vaddr); - if num_fase>0 then - begin - /* vides */ - pinta_number(numero_G[vides],255,268,169,vaddr); + // punts + const int i = 265; + const int j = 73; - /* punts */ - i:=265; - j:=73; + pinta_number(numero_G[punts], color_fondo_marcador_punts, i, j, vaddr); + pinta_number(numero_G[punts], color_fondo_marcador_punts, i+6, j, vaddr); + pinta_number(numero_G[punts], color_fondo_marcador_punts, i+12, j, vaddr); + pinta_number(numero_G[punts], color_fondo_marcador_punts, i+18, j, vaddr); + pinta_number(numero_G[punts], color_fondo_marcador_punts, i+24, j, vaddr); + pinta_number(numero_G[punts], color_fondo_marcador_punts, i+30, j, vaddr); + pinta_number(numero_G[punts], color_fondo_marcador_punts, i+36, j, vaddr); - pinta_number(numero_G[punts],color_fondo_marcador_punts,i,j,vaddr); - pinta_number(numero_G[punts],color_fondo_marcador_punts,i+6,j,vaddr); - pinta_number(numero_G[punts],color_fondo_marcador_punts,i+12,j,vaddr); - pinta_number(numero_G[punts],color_fondo_marcador_punts,i+18,j,vaddr); - pinta_number(numero_G[punts],color_fondo_marcador_punts,i+24,j,vaddr); - pinta_number(numero_G[punts],color_fondo_marcador_punts,i+30,j,vaddr); - pinta_number(numero_G[punts],color_fondo_marcador_punts,i+36,j,vaddr); + pinta_number(numero_G[punts / 1000000], 255, i, j, vaddr); + pinta_number(numero_G[(punts % 1000000) / 100000], 255, i+6, j, vaddr); + pinta_number(numero_G[((punts % 1000000) % 100000) / 10000], 255, i+12, j, vaddr); + pinta_number(numero_G[(((punts % 1000000) % 100000) % 10000) / 1000], 255, i+18, j, vaddr); + pinta_number(numero_G[((((punts % 1000000) % 100000) % 10000) % 1000) / 100], 255, i+24, j, vaddr); + pinta_number(numero_G[(((((punts % 1000000) % 100000) % 10000) % 1000) % 100) / 10], 255, i+30, j, vaddr); + pinta_number(numero_G[(((((punts % 1000000) % 100000) % 10000) % 100) % 10)], 255, i+36, j, vaddr); + } +} - pinta_number(numero_G[punts div 1000000],255,i,j,vaddr); - pinta_number(numero_G[(punts mod 1000000) div 100000],255,i+6,j,vaddr); - pinta_number(numero_G[((punts mod 1000000) mod 100000) div 10000],255,i+12,j,vaddr); - pinta_number(numero_G[(((punts mod 1000000) mod 100000) mod 10000) div 1000],255,i+18,j,vaddr); - pinta_number(numero_G[((((punts mod 1000000) mod 100000) mod 10000) mod 1000) div 100],255,i+24,j,vaddr); - pinta_number(numero_G[(((((punts mod 1000000) mod 100000) mod 10000) mod 1000) mod 100) div 10],255,i+30,j,vaddr); - pinta_number(numero_G[(((((punts mod 1000000) mod 100000) mod 10000) mod 100) mod 10)],255,i+36,j,vaddr); - - /* blocs */ - /*pinta(numero[blocs_per_pintar],239,i,60,vaddr); - pinta(numero[blocs_per_pintar],239,i+4,60,vaddr); - pinta(numero[blocs_per_pintar],239,i+8,60,vaddr); - pinta(numero[blocs_per_pintar],239,i+12,60,vaddr); - - pinta(numero[blocs_per_pintar div 1000],255,i,60,vaddr); - pinta(numero[((blocs_per_pintar mod 1000) div 100)],255,i+4,60,vaddr); - pinta(numero[(((blocs_per_pintar mod 1000) mod 100) div 10)],255,i+8,60,vaddr); - pinta(numero[(((blocs_per_pintar mod 1000) mod 100) mod 10)],255,i+12,60,vaddr);*/ - - /* altaveu */ - /*if amb_so then - begin - pinta_number(altaveu_on,255,1,189,vaddr); - end - else begin - pinta_number(altaveu_off,255,1,189,vaddr); - end;*/ - /* mapa */ - - end; -end; /*──────────────────────────────────────────────────────────────────────────*/ -procedure ini_pantalla; +void ini_pantalla() var i,j : word; i_int:integer; offset : word; VirscrFase : Ptr_pantalla; vaddrFase : Word; -begin +{ + uint8_t *vaddrFase = (uint8_t*)malloc(64000); // 6400??? - getmem(virscrFase,6400); - vaddrFase:=seg(virscrFase^); + load_mif(FASES,vaddr); + Cls32(0, vaddrFase); + offset = ((num_fase / 6)*160)+((((num_fase-1) % 5)*40)*320); + PutSprite(vaddr, vaddrFase, offset, 160, 40, 0, 0); - load_mif(fases,vaddr); - Cls32(0,vaddrFase); - offset:=((num_fase div 6)*160)+((((num_fase-1) mod 5)*40)*320); - PutSprite(vaddr,vaddrFase,offset,160,40,0,0); + if (!mode_nocturne) + { + if (num_fase>0) + load_mif(path[(rand()%max_fondos_story)+1], vaddr2); + else + load_mif(path[13], vaddr2); + } + else + load_mif(path[14], vaddr2); - if not(mode_nocturne) then - begin - if num_fase>0 then load_mif(path[random(max_fondos_story)+1],vaddr2) - else load_mif(path[13],vaddr2); - end - else load_mif(path[14],vaddr2); + if ((num_fase==ultima_fase) && !mode_nocturne) load_mif(path[12], vaddr2); - if (num_fase=ultima_fase) and not(mode_nocturne) then load_mif(path[12],vaddr2); + // pinta numero de fase + if ( (num_fase>0) && (num_fase<10) ) pinta_number(numero_G[num_fase], 255, 1, 1, vaddr2); + // pinta les pareds + for (int i=0; i<38; ++i) + for (int j=0; j<29; ++j) + if (pantalla[i,j]==es_una_paret) pinta(dib_pared, 255, (i*6)+4, (j+1)*6, vaddr2); - /* pinta numero de fase */ - if (num_fase>0) and (num_fase<10) then pinta_number(numero_G[num_fase],255,1,1,vaddr2); + // pinta a Rosita i a la presó + if (num_fase==ultima_fase) + { + pinta(rosita, 255, 16, 96, vaddr2); + pinta(preso, 255, 22, 96, vaddr2); + for (int i=97; i<=102; ++i) putpixel(16, i, 237, vaddr2); + putpixel(17, 97, 237, vaddr2); + putpixel(22, 97, 237, vaddr2); + putpixel(17, 102, 237, vaddr2); + putpixel(22, 102, 237, vaddr2); + } - /* pinta les pareds */ - for i:=1 to 38 do - for j:=1 to 29 do - if pantalla[i,j]=es_una_paret then pinta(dib_pared,255,(i*6)+4,(j+1)*6,vaddr2) - /*put_matrix(pepe,color_pared,(i*6)+4,(j+1)*6,6,6,vaddr2)*/; + // pinta el marcador de pintura + for (int i=pos_esq_m_p; i<=pos_dreta_m_p; ++i) + for (int j=(pos_base_m_p-(pintura / tamany_m_p)); j<=pos_base_m_p; ++j) + { + putpixel(i, j, color_marcador_pintura, vaddr2); + putpixel(pos_esq_m_p-1, j, color_borde_m_p, vaddr2); + putpixel(pos_dreta_m_p+1, j, color_borde_m_p, vaddr2); + putpixel(i, (pos_base_m_p-(max_pintura / tamany_m_p)-1), color_borde_m_p, vaddr2); + putpixel(i, (pos_base_m_p+1), color_borde_m_p, vaddr2); + } - /* pinta a Rosita i a la presó */ - if num_fase=ultima_fase then - begin - pinta(rosita,255,16,96,vaddr2); - pinta(preso,255,22,96,vaddr2); - for i:=97 to 102 do putpixel(16,i,237,vaddr2); - putpixel(17,97,237,vaddr2); - putpixel(22,97,237,vaddr2); - putpixel(17,102,237,vaddr2); - putpixel(22,102,237,vaddr2); - end; + // coloca la fase + getpaleta(paleta); + blackout(); + cls32(0, vaddr); + PutBloc(vaddr2, 0, vaddr, 249, 200, 0, 0); + volcar32(vaddr, VGA); + fadeup(paleta, 0); + // posa el marcador + for (int j=0; j<=49; ++j) + { + const int i = j << 1; + PutBloc(vaddr2, 248+((99-i)*320), vaddr, 72, i+1, 248, 0); + PutBloc(vaddr2, 32248, vaddr, 72, i+1, 248, 199-i); + PutBloc(vaddr2, 0, vaddr, 249, 200, 0, 0); + espera_VGA(); + volcar32(vaddr, VGA); + } - /* pinta el marcador de pintura */ - for i:=pos_esq_m_p to pos_dreta_m_p do - for j:= (pos_base_m_p-(pintura div tamany_m_p)) to pos_base_m_p do - begin - putpixel(i,j,color_marcador_pintura,vaddr2); - putpixel(pos_esq_m_p-1,j,color_borde_m_p,vaddr2); - putpixel(pos_dreta_m_p+1,j,color_borde_m_p,vaddr2); - putpixel(i,(pos_base_m_p-(max_pintura div tamany_m_p)-1),color_borde_m_p,vaddr2); - putpixel(i,(pos_base_m_p+1),color_borde_m_p,vaddr2); - end; + // posa el lletrero de fase X + if (story_mode_mode) + for (int i=-40; i<=80; ++i) + { + volcar32(vaddr2, vaddr); + if (i<20) + Put_Sprite_ICE_esquerra(vaddrFase, vaddr, 0, 160, 40, i << 2, 80); + else + Put_Sprite_ICE_dreta(vaddrFase, vaddr, 0, 160, 40, i << 2, 80); - /* coloca la fase */ - getpaleta(paleta); - blackout; - cls32(0,vaddr); - PutBloc(vaddr2,0,vaddr,249,200,0,0); - volcar32(vaddr,VGA); - fadeup(paleta,0); + if (i==14) delay(2000); + espera_VGA(); + Volcar32(vaddr, VGA); + } + free(vaddrFase); +} - /* posa el marcador */ - For j:=0 to 49 do - begin - i:=j shl 1; - PutBloc(vaddr2,248+((99-i)*320),vaddr,72,i+1,248,0); - PutBloc(vaddr2,32248,vaddr,72,i+1,248,199-i); - PutBloc(vaddr2,0,vaddr,249,200,0,0); - espera_VGA; - volcar32(vaddr,VGA); - end; - - /* posa el lletrero de fase X */ - if story_mode_mode then - for i_int:=-40 to 80 do - begin - volcar32(vaddr2,vaddr); - if i_int<20 then Put_Sprite_ICE_esquerra(vaddrFase,vaddr,0,160,40,i_int shl 2,80) - else Put_Sprite_ICE_dreta(vaddrFase,vaddr,0,160,40,i_int shl 2,80); - if i_int=14 then delay(2000); - espera_VGA; - Volcar32(vaddr,VGA); - end; - - Freemem(virscrFase,6400); - -end; /*──────────────────────────────────────────────────────────────────────────*/ -procedure level_complete; -var i,temps,temps2 : word; -begin +void level_complete() +{ + if (midi) + { + StopMIDI(); + unloadmidi(); + midi = false; + } + if (!mode_nocturne) + { + load_mif(DONE01, vaddr); + espera_vga(); + volcar32(vaddr, VGA); + ini_midi(musica_canvi_fase); + if (midi) Playmidi(); - if midi then begin StopMIDI; unloadmidi; midi:=false; end; - if not(mode_nocturne) then - begin - load_mif(done01,vaddr); - espera_vga; - volcar32(vaddr,VGA); - ini_midi(musica_canvi_fase); - if midi then Playmidi; + const uint32_t t = SDL_GetTicks() + 4000; + do {} while( SDL_GetTicks() < t ); + borrat_de_pantalla(vaddr); + } + else + { + load_mif(DONE05, vaddr); + espera_vga(); + volcar32(vaddr, VGA); + ini_midi(musica_canvi_fase_n); + if (midi) Playmidi(); + if (midi) + do {} while(playing); + else + for (int i=0; i<=300; ++i) espera_VGA(); + borrat_de_pantalla(vaddr); + if (midi) + { + StopMIDI(); + unloadmidi(); + midi = false; + } + } +} - Gettime(h,m,s,c); - temps:=h*3600+m*60+s; - Repeat - Gettime(h,m,s,c); - temps2:=h*3600+m*60+s; - until /*(QteclaPuls) or*/ ((temps2-temps)>=4); - - borrat_de_pantalla(vaddr); - end - else begin - load_mif(done05,vaddr); - espera_vga; - volcar32(vaddr,VGA); - ini_midi(musica_canvi_fase_n); - if midi then Playmidi; - if midi then repeat until not(playing) - else for i:=0 to 300 do espera_VGA; - borrat_de_pantalla(vaddr); - if midi then begin StopMIDI; unloadmidi; midi:=false; end; - - end; - -end; /*──────────────────────────────────────────────────────────────────────────*/ procedure volcat_de_pantalla; begin