diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..57c2030 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "algorithm": "cpp" + } +} \ No newline at end of file diff --git a/crt.cpp b/crt.cpp new file mode 100644 index 0000000..a40b9ac --- /dev/null +++ b/crt.cpp @@ -0,0 +1,11 @@ +#include "crt.h" +#include + +uint8_t get_hours() +{ + time_t t; + struct tm *tm; + time (&t); + tm = localtime (&t); + return tm->tm_hour; +} \ No newline at end of file diff --git a/crt.h b/crt.h index e69de29..7467992 100644 --- a/crt.h +++ b/crt.h @@ -0,0 +1,5 @@ +#pragma once + +#include + +uint8_t get_hours(); \ No newline at end of file diff --git a/jinput.h b/jinput.h index 6f70f09..1880566 100644 --- a/jinput.h +++ b/jinput.h @@ -1 +1,3 @@ #pragma once + +bool TeclaPuls(uint8_t tecla); \ No newline at end of file diff --git a/pepe2000_utf8.cpp b/pepe2000_utf8.cpp index b215295..d894215 100644 --- a/pepe2000_utf8.cpp +++ b/pepe2000_utf8.cpp @@ -5,6 +5,7 @@ Versió 1.70 Build 3 Març 2000 (Windows2000) + Port a C/Windows per Raimon Zamora Chanzà (Gener 2024) ──────────────────────────────────────────────────────────────────────────*/ @@ -21,7 +22,9 @@ #define codi_sense_tecla 86 // jinput #define max_m_y 6 // amplaria matriu personatge #define max_m_x 6 // alçada matriu personatge -#define VGA 0xA000 + +#define VGA NULL + #define ample 248 #define alt 192 #define max_pintura 255 @@ -254,19 +257,20 @@ //var - + // [RZC 24/01/2024] No crec que estos facen falta ara //Virscr : Ptr_pantalla; //VirScr2 : Ptr_pantalla; //VirScrSP : Ptr_pantalla; - uint16_t Vaddr; // : word; - uint16_t Vaddr2; // : word; - uint16_t VaddrSP; // : word; + uint8_t *vaddr; // : word; + uint8_t *vaddr2; // : word; + uint8_t *vaddrSP; // : word; uint16_t blocs_per_pintar;// : word; uint16_t total_blocs_per_pintar;// : word; - uint16_t h, m, s, c, temps, hora;//: word; + //uint16_t h, m, s, c; + uint16_t temps, hora;//: word; uint16_t temps_final; // : word; uint16_t tecla_amunt_dib, tecla_avall_dib, tecla_dreta_dib, tecla_esquerra_dib; // : word; @@ -363,7 +367,7 @@ void power_off(uint16_t where) fadedown(0, 0, 0, 0); cls32(0, where); - volcar32(where, 0xA000); + volcar32(where, VGA); set_color(1, 63, 63, 63); for (int i = 0; i < 320; ++i) @@ -374,7 +378,7 @@ void power_off(uint16_t where) putpixel(i, 100, 0, where); putpixel(320 - i, 100, 0, where); if (i % 2 == 0) - volcar32(where, 0xA000); + volcar32(where, VGA); } for (int i = 0; i <= 20; ++i) @@ -473,7 +477,12 @@ void load_cfg() } /*──────────────────────────────────────────────────────────────────────────*/ -procedure ini_midi(midi_titol:string); +void ini_midi(char *midi_titol) +{ + // [RZC 24/01/2024] [TODO] Reescritura sencera + // Si està sonant una música, parar-la + // Carregar la música que s'especifica (encara no playar-la) +/* var aux : boolean; intents : word; begin @@ -506,531 +515,517 @@ var aux : boolean; intents : word; save_cfg; end; +*/ + } + + /*──────────────────────────────────────────────────────────────────────────*/ + void load_records() + { + // [RZC 24/01/2024] [TODO] Llevar tota esta monserga i que guarde en un arxiu normal (i en el futur en JailScore) + FILE *fich = fopen("datos/story.dat", "r"); + for (int i = 0; i < 6; ++i) + { + fgets(nom[x], 255, fich); + fscanf(fich, "%i\n", &puntuacio[i]); + } + fclose(fich); + + fich = fopen("datos/time.dat", "r"); + for (int i = 0; i < 6; ++i) + { + fgets(nom2[x], 255, fich); + fscanf(fich, "%hhu\n", &minuts[i]); + fscanf(fich, "%hhu\n", &segons_tabla[i]); + } + fclose(fich); + + fich = fopen("datos/comp.dat", "rb"); + fseek(fich, -9, SEEK_END); + mode_rosita = fgetc(fich); + mode_amic = fgetc(fich); + mode_easy = fgetc(fich); + mode_normal = fgetc(fich); + mode_hard = fgetc(fich); + mode_easy_r = fgetc(fich); + mode_normal_r = fgetc(fich); + mode_hard_r = fgetc(fich); + mode_Dream_tour = fgetc(fich); + fclose(fich); + } + + /*──────────────────────────────────────────────────────────────────────────*/ + void save_records() + { + // [RZC 24/01/2024] [TODO] Llevar tota esta monserga i que guarde en un arxiu normal (i en el futur en JailScore) + FILE *fich = fopen("datos/story.dat", "w"); + for (int i = 0; i < 6; ++i) + { + fprintf(fich, "%s\n", nom[x]); + fprintf(fich, "%i\n", &puntuacio[i]); + } + fclose(fich); + + fich = fopen("datos/time.dat", "w"); + for (int i = 0; i < 6; ++i) + { + fprintf(fich, "%s\n", nom2[x]); + fprintf(fich, "%hhu\n", &minuts[i]); + fprintf(fich, "%hhu\n", &segons_tabla[i]); + } + fclose(fich); + + fich = fopen("datos/comp.dat", "wb"); + fseek(fich, -9, SEEK_END); + fputc(mode_rosita, fich); + fputc(mode_amic, fich); + fputc(mode_easy, fich); + fputc(mode_normal, fich); + fputc(mode_hard, fich); + fputc(mode_easy_r, fich); + fputc(mode_normal_r, fich); + fputc(mode_hard_r, fich); + fputc(mode_Dream_tour, fich); + fclose(fich); + } - end; /*──────────────────────────────────────────────────────────────────────────*/ -procedure load_records; -var - x:byte; - fich : text; - fichbyte : file of byte; + void pinta(uint16_t offset, uint8_t color, uint16_t x, uint16_t y, uint8_t *where) // offset es on comença el dibuixet en el "bitmap" de sprites, where la surface + { + // [RZC 24/01/0224] [NOTA] No entenc perqué s'incrementa 1 a les coordenades on anem a pintar. Per ara ho lleve + // inc(x); inc(y); + for (int i = 0; i < 6; ++i) + for (int j = 0; j < 6; ++j) + if (color != 255) + where[(x + i) + ((y + j) * 320)] = color; + else if (vaddrSP[offset + i + (j * 320)] != 255) + where[(x + i) + ((y + j) * 320)] = vaddrSP[offset + i + (j * 320)]; + } -begin - - Assign(fich,'datos\story.dat'); - Reset(fich); - x:=1; - while x<6 do - begin - readln(fich,nom[x]); - readln(fich,puntuacio[x]); - inc(x); - end; - Close(fich); - - Assign(fich,'datos\time.dat'); - Reset(fich); - x:=1; - while x<6 do - begin - readln(fich,nom2[x]); - readln(fich,minuts[x]); - readln(fich,segons_tabla[x]); - inc(x); - end; - Close(fich); - - Assign(fichbyte,'datos\comp.dat'); - Reset(fichbyte); - seek(fichbyte,filesize(fichbyte)-9); - begin - read(fichbyte,mode_rosita); - read(fichbyte,mode_amic); - read(fichbyte,mode_easy); - read(fichbyte,mode_normal); - read(fichbyte,mode_hard); - read(fichbyte,mode_easy_r); - read(fichbyte,mode_normal_r); - read(fichbyte,mode_hard_r); - read(fichbyte,mode_Dream_tour); - end; - Close(fichbyte); - -end; /*──────────────────────────────────────────────────────────────────────────*/ -procedure save_records; -var - x:word; - fich : text; - fichbyte : file of byte; +// [RZC 24/01/0224] [NOTA] Esta funció i l'anterior son exactament iguals! +void pinta_zoom(uint8_t zoom, uint16_t offset, uint8_t color, uint16_t x, uint16_t y, uint8_t *where) +{ + // [RZC 24/01/0224] [NOTA] No entenc perqué s'incrementa 1 a les coordenades on anem a pintar. Per ara ho lleve + // inc(x); inc(y); + for (int i = 0; i < 6; ++i) + for (int j = 0; j < 6; ++j) + if (color != 255) + where[(x + i) + ((y + j) * 320)] = color; + else if (vaddrSP[offset + i + (j * 320)] != 255) + where[(x + i) + ((y + j) * 320)] = vaddrSP[offset + i + (j * 320)]; +} -begin - Assign(fich,'datos\story.dat'); - Rewrite(fich); - x:=1; - while x<6 do - begin - writeln(fich,nom[x]); - writeln(fich,puntuacio[x]); - inc(x); - end; - Close(fich); +/*──────────────────────────────────────────────────────────────────────────*/ +// [RZC 24/01/0224] [NOTA] Esta es igual pero els bucles van de 0 a 8 en compte de de 0 a 5 +void pinta_number(uint16_t offset, uint8_t color, uint16_t x, uint16_t y, uint8_t *where) +{ + // [RZC 24/01/0224] [NOTA] No entenc perqué s'incrementa 1 a les coordenades on anem a pintar. Per ara ho lleve + // inc(x); inc(y); + for (int i = 0; i < 9; ++i) + for (int j = 0; j < 9; ++j) + if (color != 255) + where[(x + i) + ((y + j) * 320)] = color; + else if (vaddrSP[offset + i + (j * 320)] != 255) + where[(x + i) + ((y + j) * 320)] = vaddrSP[offset + i + (j * 320)]; +} - Assign(fich,'datos\time.dat'); - Rewrite(fich); - x:=1; - while x<6 do - begin - writeln(fich,nom2[x]); - writeln(fich,minuts[x]); - writeln(fich,segons_tabla[x]); - inc(x); - end; - Close(fich); +/*──────────────────────────────────────────────────────────────────────────*/ +void pinta_number2(uint16_t offset, uint8_t color, uint8_t color_determinat, uint16_t x, uint16_t y, uint8_t *where) +{ + // [RZC 24/01/0224] [NOTA] No entenc perqué s'incrementa 1 a les coordenades on anem a pintar. Per ara ho lleve + // inc(x); inc(y); + for (int i = 0; i < 9; ++i) + for (int j = 0; j < 9; ++j) + if (color != 255) + where[(x + i) + ((y + j) * 320)] = color; + else if ((vaddrSP[offset + i + (j * 320)] != 255) && (vaddrSP[offset + i + (j * 320)] != 254)) + where[(x + i) + ((y + j) * 320)] = vaddrSP[offset + i + (j * 320)]; + else if (vaddrSP[offset + i + (j * 320)] == 254) + where[(x + i) + ((y + j) * 320)] = color_determinat; +} - Assign(fichbyte,'datos\comp.dat'); - Reset(fichbyte); - seek(fichbyte,filesize(fichbyte)-9); - begin - write(fichbyte,mode_rosita); - write(fichbyte,mode_amic); - write(fichbyte,mode_easy); - write(fichbyte,mode_normal); - write(fichbyte,mode_hard); - write(fichbyte,mode_easy_r); - write(fichbyte,mode_normal_r); - write(fichbyte,mode_hard_r); - write(fichbyte,mode_Dream_Tour); - end; - Close(fichbyte); -end; /*──────────────────────────────────────────────────────────────────────────*/ -procedure pinta(offset:word; color:byte; x,y:word; where:word); -var i,j : byte; -begin - inc(x); inc(y); - for i:=0 to 5 do - for j:=0 to 5 do - if color<>255 then mem[where:(x+i)+((y+j)*320)]:=color - else if mem[vaddrSP:offset+i+(j*320)]<>255 then mem[where:(x+i)+((y+j)*320)]:=mem[vaddrSP:offset+i+(j*320)]; -end; -/*──────────────────────────────────────────────────────────────────────────*/ -procedure pinta_zoom(zoom:byte; offset:word; color:byte; x,y:word; where:word); -var i,j : byte; -begin - inc(x); inc(y); - for i:=0 to 5 do - for j:=0 to 5 do - if color<>255 then mem[where:(x+i)+((y+j)*320)]:=color - else if mem[vaddrSP:offset+i+(j*320)]<>255 then mem[where:(x+i)+((y+j)*320)]:=mem[vaddrSP:offset+i+(j*320)]; -end; -/*──────────────────────────────────────────────────────────────────────────*/ -procedure pinta_number(offset:word; color:byte; x,y:word; where:word); -var i,j : byte; -begin - inc(x); inc(y); - for i:=0 to 8 do - for j:=0 to 8 do - if color<>255 then mem[where:(x+i)+((y+j)*320)]:=color - else if mem[vaddrSP:offset+i+(j*320)]<>255 then mem[where:(x+i)+((y+j)*320)]:=mem[vaddrSP:offset+i+(j*320)]; -end; -/*──────────────────────────────────────────────────────────────────────────*/ -procedure pinta_number2(offset:word; color,color_determinat:byte; x,y:word; where:word); -var i,j : byte; -begin - inc(x); inc(y); - for i:=0 to 8 do - for j:=0 to 8 do - if color<>255 then mem[where:(x+i)+((y+j)*320)]:=color - else if (mem[vaddrSP:offset+i+(j*320)]<>255) - and (mem[vaddrSP:offset+i+(j*320)]<>254) then mem[where:(x+i)+((y+j)*320)]:=mem[vaddrSP:offset+i+(j*320)] - else if (mem[vaddrSP:offset+i+(j*320)]=254) then mem[where:(x+i)+((y+j)*320)]:=color_determinat; -end; -/*──────────────────────────────────────────────────────────────────────────*/ -procedure pinta_number_zoom(zoom:byte; offset:word; color:byte; x,y:word; where:word); -var i,j : integer; -begin - inc(x); inc(y); - for i:=0 to ((9*zoom)-1) do - for j:=0 to ((9*zoom)-1) do - if color<>255 then mem[where:(x+i)+((y+j)*320)]:=color - else if mem[vaddrSP:offset+(i div zoom)+((j div zoom)*320)]<>255 then - mem[where:(x+i)+((y+j)*320)]:=mem[vaddrSP:offset+(i div zoom)+((j div zoom)*320)]; -end; -/*──────────────────────────────────────────────────────────────────────────*/ -procedure retard(centesimes:integer); -var - h,m,s,c : word; - temps1, temps2 : longint; -begin - gettime(h,m,s,c); - temps1:=c+(s*100)+(m*6000)+(h*360000); - if centesimes>0 then - repeat - if (not(playing)) and (midi) then PlayMIDI; - gettime(h,m,s,c); - temps2:=c+(s*100)+(m*6000)+(h*360000); - until (temps2-temps1>=centesimes) or (TeclaPuls(KeySPACE)); -end; -/*──────────────────────────────────────────────────────────────────────────*/ -procedure escriu_frase(nom:string;color_determinat:byte;x,y,where,velocitat:word;mode,mode2:byte); -var aux : byte; quina_lletra : word; -begin - for aux:=1 to length(nom) do - begin - if (mode2=0) and (TeclaPuls(KeySPACE)) then break; - if mode=0 then volcar32(VGA,where); - case nom[aux] of +void pinta_number_zoom(uint8_t zoom, uint16_t offset, uint8_t color, uint16_t x, uint16_t y, uint8_t *where) +{ + // [RZC 24/01/0224] [NOTA] No entenc perqué s'incrementa 1 a les coordenades on anem a pintar. Per ara ho lleve + // inc(x); inc(y); + for (int i = 0; i < 9 * zoom; ++i) + for (int j = 0; j < 9 * zoom; ++j) + if (color != 255) + where[(x + i) + ((y + j) * 320)] = color; + else if (vaddrSP[offset + (i / zoom) + ((j / zoom) * 320)] != 255) + where[(x + i) + ((y + j) * 320)] = vaddrSP[offset + (i / zoom) + ((j / zoom) * 320)]; +} - 'A' : quina_lletra:=lletra_a; - 'B' : quina_lletra:=lletra_b; - 'C' : quina_lletra:=lletra_c; - 'D' : quina_lletra:=lletra_d; - 'E' : quina_lletra:=lletra_e; - 'F' : quina_lletra:=lletra_f; - 'G' : quina_lletra:=lletra_g; - 'H' : quina_lletra:=lletra_h; - 'I' : quina_lletra:=lletra_i; - 'J' : quina_lletra:=lletra_j; - 'K' : quina_lletra:=lletra_k; - 'L' : quina_lletra:=lletra_l; - 'M' : quina_lletra:=lletra_m; - 'N' : quina_lletra:=lletra_n; - 'O' : quina_lletra:=lletra_o; - 'P' : quina_lletra:=lletra_p; - 'Q' : quina_lletra:=lletra_q; - 'R' : quina_lletra:=lletra_r; - 'S' : quina_lletra:=lletra_s; - 'T' : quina_lletra:=lletra_t; - 'U' : quina_lletra:=lletra_u; - 'V' : quina_lletra:=lletra_v; - 'W' : quina_lletra:=lletra_w; - 'X' : quina_lletra:=lletra_x; - 'Y' : quina_lletra:=lletra_y; - 'Z' : quina_lletra:=lletra_z; +/*──────────────────────────────────────────────────────────────────────────*/ +void retard(int centesimes) +{ + uint32_t t = SDL_GetTicks() + centesimes * 10; + while ((SDL_GetTicks() < t) && (!TeclaPuls(SDL_SCANCODE_SPACE))) {}; + // [RZC 24/01/0224] [NOTA] Açò del midi estaba dins del bucle este anterior. Crec que és perque necessita anar omplint el buffer + // if (not(playing)) and (midi) then PlayMIDI; +} - '0' : quina_lletra:=num_0; - '1' : quina_lletra:=num_1; - '2' : quina_lletra:=num_2; - '3' : quina_lletra:=num_3; - '4' : quina_lletra:=num_4; - '5' : quina_lletra:=num_5; - '6' : quina_lletra:=num_6; - '7' : quina_lletra:=num_7; - '8' : quina_lletra:=num_8; - '9' : quina_lletra:=num_9; +/*──────────────────────────────────────────────────────────────────────────*/ +void escriu_frase(char *nom, uint8_t color_determinat, uint16_t x,uint16_t y, uint8_t *where, uint16_t velocitat, uint8_t mode, uint8_t mode2) +{ + for (int i=0; i0 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); - - espera_VGA; - volcar32(vaddr,VGA); - - end; - - espera_VGA; - volcar32(vaddr,VGA); - gettime(h,m,s,c); - temps:=h*3600+m*60+s; - repeat - gettime(h,m,s,c); - temps2:=h*3600+m*60+s; - until ((temps2-temps)>=segons) or (QteclaPuls); - end; - - /* time attack */ - if (time_attack_mode) or ((not(story_mode_mode)) and (not(time_attack_mode))) then - begin - volcar32(vaddr2,vaddr); - espera_VGA; - volcar32(vaddr2,VGA); - escriu_frase('- TIME ATTACK BEST TIMES -',1,20,30,vaddr,0,0,1); - i:=150; - for x:=1 to 5 do - begin - j:=x*20+50; - escriu_frase(nom2[x],2,60,x*20+50,vaddr,0,0,1); - - pinta_number(numero_G[minuts[x]],255,i,j,vaddr); - pinta_number(num_11,255,i+6,j,vaddr); - pinta_number(numero_G[segons_tabla[x] div 10],255,i+12,j,vaddr); - pinta_number(numero_G[segons_tabla[x] mod 10],255,i+18,j,vaddr); - - espera_VGA; - volcar32(vaddr,VGA); - - end; - - espera_VGA; - volcar32(vaddr,VGA); - gettime(h,m,s,c); - temps:=h*3600+m*60+s; - repeat - gettime(h,m,s,c); - temps2:=h*3600+m*60+s; - until ((temps2-temps)>=segons) or (QteclaPuls); - end; - borrat_de_pantalla(vaddr); - - - - -end; /*──────────────────────────────────────────────────────────────────────────*/ -procedure gestio_records(color:word); -var - trobat: boolean; - cont,i:byte; - minuts_prov,segons_prov:word; +void intro_nom(char **nom, uint8_t color) +{ + volcar32(VGA, vaddr); + (*nom)[0] = 0; + uint8_t lletra = 0; + uint16_t x = 210; + uint16_t y = 45; + escriu_frase("ENHORABONA", color, 110, 10, vaddr, 0, 0, 1); + escriu_frase("HAS ACONSEGUIT", color, 92, 20, vaddr, 0, 0, 1); + escriu_frase("UN NOU RECORD", color, 97, 30, vaddr, 0, 0, 1); + escriu_frase("INTRODUEIX EL TEU NOM:", color, 35, 45, vaddr, 0, 0, 1); -begin - /* world tour */ - if story_mode_mode then - begin - trobat:=false; - cont:=1; - while (not(trobat)) and (cont<6) do - begin - if (puntuacio[cont]minuts_prov) then - /*if (segons_tabla[cont]>=segons_prov) and - (not(trobat)) then */trobat:=true; + switch (aux) + { + case SDL_SCANCODE_A : quina_lletra[0] = 'A'; break; + case SDL_SCANCODE_B : quina_lletra[0] = 'B'; break; + case SDL_SCANCODE_C : quina_lletra[0] = 'C'; break; + case SDL_SCANCODE_D : quina_lletra[0] = 'D'; break; + case SDL_SCANCODE_E : quina_lletra[0] = 'E'; break; + case SDL_SCANCODE_F : quina_lletra[0] = 'F'; break; + case SDL_SCANCODE_G : quina_lletra[0] = 'G'; break; + case SDL_SCANCODE_H : quina_lletra[0] = 'H'; break; + case SDL_SCANCODE_I : quina_lletra[0] = 'I'; break; + case SDL_SCANCODE_J : quina_lletra[0] = 'J'; break; + case SDL_SCANCODE_K : quina_lletra[0] = 'K'; break; + case SDL_SCANCODE_L : quina_lletra[0] = 'L'; break; + case SDL_SCANCODE_M : quina_lletra[0] = 'M'; break; + case SDL_SCANCODE_N : quina_lletra[0] = 'N'; break; + case SDL_SCANCODE_O : quina_lletra[0] = 'O'; break; + case SDL_SCANCODE_P : quina_lletra[0] = 'P'; break; + case SDL_SCANCODE_Q : quina_lletra[0] = 'Q'; break; + case SDL_SCANCODE_R : quina_lletra[0] = 'R'; break; + case SDL_SCANCODE_S : quina_lletra[0] = 'S'; break; + case SDL_SCANCODE_T : quina_lletra[0] = 'T'; break; + case SDL_SCANCODE_U : quina_lletra[0] = 'U'; break; + case SDL_SCANCODE_V : quina_lletra[0] = 'V'; break; + case SDL_SCANCODE_W : quina_lletra[0] = 'W'; break; + case SDL_SCANCODE_X : quina_lletra[0] = 'X'; break; + case SDL_SCANCODE_Y : quina_lletra[0] = 'Y'; break; + case SDL_SCANCODE_Z : quina_lletra[0] = 'Z'; break; + case SDL_SCANCODE_SPACE : quina_lletra[0] = ' '; break; + case SDL_SCANCODE_RETURN : quina_lletra[0] = 0; break; + } - if (minuts[cont]=minuts_prov) then - if (segons_tabla[cont]>=segons_prov) and - (not(trobat)) then trobat:=true; + escriu_frase(quina_lletra, color, x, y, vaddr, 0, 0, 0); + x += 8; + (*nom)[lletra] = quina_lletra[0]; + } + } while ( (lletra < 8) && (quina_lletra[0]!=0) ); + + cls32(color, vaddr2); + espera_VGA(); + volcar32(vaddr2, VGA); + espera_VGA(); + volcar32(vaddr, VGA); + retard(50); +} - if trobat then - begin - for i:=5 downto cont do - begin - nom2[i]:=nom2[i-1]; - minuts[i]:=minuts[i-1]; - segons_tabla[i]:=segons_tabla[i-1]; - end; - intro_nom(nom2[cont],color); - minuts[cont]:=minuts_prov; - segons_tabla[cont]:=segons_prov; - end; - inc(cont); - end; - end; - save_records; -end; /*──────────────────────────────────────────────────────────────────────────*/ -procedure text_rosita; -begin - load_mif(pepe01,vaddr); - cls32(0,vaddr); - escriu_frase('FELICITATS!',64,10,90,vaddr,0,0,0); - escriu_frase('HAS SUPERAT TOTS ELS NIVELLS',64,10,110,vaddr,0,0,0); - escriu_frase('DE DIFICULTAT AMB PEPE.',64,10,120,vaddr,0,0,0); - escriu_frase('ARA JA POTS JUGAR AMB ROSITA.',64,10,130,vaddr,0,0,0); - escriu_frase('A ROSITA NO SE LI ACABA LA PINTURA.',64,10,150,vaddr,0,0,0); - retard(1000); - borrat_de_pantalla(vaddr); -end; +void escriu_records(uint8_t segons) +{ + load_mif(RECORDS, vaddr2); + volcar32(vaddr2, vaddr); + espera_VGA(); + volcar32(vaddr2, VGA); + + // story mode + if ( story_mode_mode || (!story_mode_mode && !time_attack_mode) ) + { + escriu_frase("- WORLD TOUR SCORE -", 1, 42, 30, vaddr, 0, 0, 1); + int i = 150; + for (int x=1; x<6; ++x) + { + int j = x*20+50; + escriu_frase(nom[x], 2, 60, x*20+50, vaddr, 0, 0, 1); + + uint8_t num = (((((puntuacio[x] % 1000000) % 100000) % 10000) % 100) % 10); + if (num != 0) + { + pinta_number(numero_G[num], 255, i+36, j, vaddr); + + num = (((((puntuacio[x] % 1000000) % 100000) % 10000) % 1000) % 100) / 10; + if (num != 0) + { + pinta_number(numero_G[num], 255, i+30, j, vaddr); + + 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); + + num = ((puntuacio[x] % 1000000) % 100000) / 10000; + if (num != 0) + { + pinta_number(numero_G[num], 255, i+12, j, vaddr); + + 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); + } + + espera_VGA(); + volcar32(vaddr, VGA); + uint32_t t = SDL_GetTicks()+(segons*1000); + while (!QteclaPuls() && SDL_GetTicks()=cont; --i) + { + for (int j=0; j<256; ++j) nom[i][j] = nom[i-1][j]; + puntuacio[i] = puntuacio[i-1]; + } + intro_nom(&nom[cont], color); + puntuacio[cont] = punts; + } + cont++; + } + } + + // time attack + if (time_attack_mode) + { + bool trobat = false; + int cont = 1; + uint16_t minuts_prov = (temps_final % 3600) / 60; + uint16_t segons_prov = (temps_final % 3600) % 60; + while ( !trobat && cont<6 ) + { + if ( minuts[cont] > minuts_prov ) trobat = true; + + if ( minuts[cont] = minuts_prov ) + if ( segons_tabla[cont] >= segons_prov && !trobat ) trobat = true; + + if (trobat) + { + for (int i=5; i>=cont; --i) + { + for (int j=0; j<256; ++j) nom2[i][j] = nom2[i-1][j]; + minuts[i] = minuts[i-1]; + segons_tabla[i] = segons_tabla[i-1]; + } + intro_nom(&nom2[cont], color); + minuts[cont] = minuts_prov; + segons_tabla[cont] = segons_prov; + } + inc(cont); + } + } + save_records(); +} + /*──────────────────────────────────────────────────────────────────────────*/ -procedure so_de(quin_so:byte); +void text_rosita() +{ + load_mif(PEPE01, vaddr); + cls32(0, vaddr); + escriu_frase("FELICITATS!",64, 10, 90, vaddr, 0, 0, 0); + escriu_frase("HAS SUPERAT TOTS ELS NIVELLS", 64, 10, 110, vaddr, 0, 0, 0); + escriu_frase("DE DIFICULTAT AMB PEPE.", 64, 10, 120, vaddr, 0, 0, 0); + escriu_frase("ARA JA POTS JUGAR AMB ROSITA.", 64, 10, 130, vaddr, 0, 0, 0); + escriu_frase("A ROSITA NO SE LI ACABA LA PINTURA.", 64, 10, 150, vaddr, 0, 0, 0); + retard(1000); + borrat_de_pantalla(vaddr); +} + +/*──────────────────────────────────────────────────────────────────────────*/ +void text_amic() +{ + load_mif(PEPE01, vaddr); + cls32(0, vaddr); + escriu_frase("FELICITATS!", 64, 10, 90, vaddr, 0, 0, 0); + escriu_frase("HAS SUPERAT TOTS ELS NIVELLS", 64, 10, 110, vaddr, 0, 0, 0); + escriu_frase("DE DIFICULTAT AMB ROSITA.",64, 10, 120, vaddr, 0, 0, 0); + escriu_frase("ARA JA POTS JUGAR AMB JOB.",64, 10, 130, vaddr, 0, 0, 0); + escriu_frase("JOB GUANYA EL DOBLE DE PUNTS.",64, 10, 150, vaddr, 0, 0, 0); + escriu_frase("A PER EL RECORD !!", 64, 10, 170, vaddr, 0, 0, 0); + retard(1000); + borrat_de_pantalla(vaddr); +} + +/*──────────────────────────────────────────────────────────────────────────*/ +void so_de(uint8_t quin_so) +{ + //[RZC 24/01/2024] [TODO] Reimplementar si es vol. En la versió Pascal els sons estaven desactivats +/* var a,b : word; begin case quin_so of @@ -1062,533 +1057,496 @@ begin end; end; -end; -/*──────────────────────────────────────────────────────────────────────────*/ -procedure pepe_text; -begin - load_mif(classic,vaddr); - espera_vga; - volcar32(vaddr,VGA); - retard(400); - fadedown(0,0,0,1); - setmode(3); - pepe_clasic; - setmode($13); -end; -/*──────────────────────────────────────────────────────────────────────────*/ -procedure final_fals; -var - temps,temps2 : word; - VirScr3 : Ptr_pantalla; - Vaddr3 : word; -begin - setupvirtual(virscr3,vaddr3); - cls32(0,vaddr); - load_mif(finalf1,vaddr2); - load_mif(finalf2,vaddr3); - getpaleta(paleta); + */ +} - ini_midi(musica_final_fals); - if midi then Playmidi; +/*──────────────────────────────────────────────────────────────────────────*/ +void pepe_text() +{ + load_mif(CLASSIC, vaddr); + espera_vga(); + volcar32(vaddr, VGA); + retard(400); + fadedown(0,0,0,1); + setmode(3); + pepe_clasic(); + setmode(0x13); +} - for i:=1 to 3 do - begin - espera_VGA; - volcar32(vaddr,VGA); - Gettime(h,m,s,c); - temps:=h*3600+m*60+s; - Repeat - if not(playing) then begin ini_midi(musica_final_fals); - if midi then Playmidi; end; - Gettime(h,m,s,c); - temps2:=h*3600+m*60+s; - until (QteclaPuls) or ((temps2-temps)>=5); - espera_VGA; - volcar32(vaddr3,VGA); +/*──────────────────────────────────────────────────────────────────────────*/ +void final_fals() +{ + setupvirtual(vaddr3); + cls32(0, vaddr); + load_mif(FINALF1, vaddr2); + load_mif(FINALF2, vaddr3); + getpaleta(paleta); + + ini_midi(musica_final_fals); + if (midi) Playmidi(); + + for (int i=1; i<=3; ++i) + { + espera_VGA(); + volcar32(vaddr, VGA); + + uint32_t t = SDL_GetTicks() + 5000; + do + { + if (!playing) + { + ini_midi(musica_final_fals); + if (midi) Playmidi(); + } + } while ( !QteclaPuls() && SDL_GetTicks()=5); - espera_VGA; - volcar32(vaddr3,VGA); - Play_WAV (sample[so_bomba]); - Gettime(h,m,s,c); - temps:=h*3600+m*60+s; - Repeat - if not(playing) then begin ini_midi(musica_final_fals); - if midi then Playmidi; end; - Gettime(h,m,s,c); - temps2:=h*3600+m*60+s; - until (QteclaPuls) or ((temps2-temps)>=1); - end; + int i=0; + do + { + i++; + espera_VGA(); + volcar32(vaddr, VGA); + uint32_t t = SDL_GetTicks() + 5000; + do + { + if (!playing) + { + ini_midi(musica_final_fals); + if midi then Playmidi; + } + } while (!QteclaPuls() && SDL_GetTicks()=5); - espera_VGA; - volcar32(vaddr3,VGA); - Play_WAV (sample[so_bomba]); - Gettime(h,m,s,c); - temps:=h*3600+m*60+s; - Repeat - if not(playing) then begin ini_midi(musica_final_fals); - if midi then Playmidi; end; - Gettime(h,m,s,c); - temps2:=h*3600+m*60+s; - until (QteclaPuls) or ((temps2-temps)>=2); - Until (Qteclapuls) or (i=3); + fadedown(0,0,0,0); - fadedown(0,0,0,0); - - if midi then begin StopMIDI; unloadmidi; midi:=false; end; - Tancarvirtual(virscr3); -end; -/*──────────────────────────────────────────────────────────────────────────*/ -procedure intro_logo; -var - paleta_blanca : tpaleta; - i, aux : byte; - temps,temps2 : word; -begin - - load_mif(logo,vaddr); - getpaleta(paleta); - for i:=1 to 255 do set_color(i,63,63,63); - getpaleta(paleta_blanca); - setpaleta(paleta); - blackout; - espera_VGA; - volcar32(vaddr,VGA); - ini_midi(musica_logo); - if midi then Playmidi; - fadeup(paleta,1); - 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)>=6); - fadeup(paleta_blanca,1); - fadedown(0,0,0,0); - - if midi then begin StopMIDI; unloadmidi; midi:=false; end; -end; + if (midi) + { + StopMIDI; + unloadmidi; + midi = false; + } + Tancarvirtual(virscr3); +} /*──────────────────────────────────────────────────────────────────────────*/ -procedure titol_del_joc; -var +void intro_logo() +{ + //[RZC 24/01/2024] [TODO] Arreglar el tema de les paletes. Ací i en tots els llocs: Quines fan falta, inicialització (i finalització), + // els colors ja no van de 0 a 63, sino de 0 a 255... + load_mif(LOGO, vaddr); + getpaleta(paleta); + for (int i=1; i<256; ++i) set_color(i,63,63,63); + uint8_t paleta_blanca[256][3]; + getpaleta(paleta_blanca); + setpaleta(paleta); + blackout(); + espera_VGA(); + volcar32(vaddr, VGA); + ini_midi(musica_logo); + if (midi) Playmidi(); + fadeup(paleta, 1); + //[RZC 24/01/2024] [TODO] Arreglar TOTS els do whiles amb getticks que hi han. Al final son Waits de temps i tecla pulsada. + uint32_t t = SDL_GetTicks()+6000; + do {} while (!QteclaPuls() && SDL_GetTicks()= 22 || h <= 8) + { + load_mif(INTRO_N, vaddr); + load_mif(INTRO_N2, vaddr2); + mode_nocturne = true; + } + else + { + load_mif(TITOL, vaddr2); + mode_nocturne = false; + espera_VGA(); + volcar32(vaddr2, VGA); - if (h>=22) or (h<=8) then - begin - load_mif(intro_n,vaddr); - load_mif(intro_n2,vaddr2); - mode_nocturne:=true; - end - else begin - load_mif(titol,vaddr2); - mode_nocturne:=false; - espera_VGA; - volcar32(vaddr2,VGA); + uint32_t t = SDL_GetTicks()+6000; + do {} while (!QteclaPuls() && SDL_GetTicks()=6); + if (mode_nocturne) + { + if (!midi) ini_midi(musica_nit); + if (!playing && midi) Playmidi(); - end; - - if mode_nocturne then - begin - - if not(midi) then ini_midi(musica_nit); - if (not(playing)) and (midi) then Playmidi; - - i:=0; - repeat - if (not(playing)) and (midi) then PlayMIDI; - j:=0; - while (j<100) do - begin - espera_VGA; - inc(j); - end; - espera_VGA; - volcar32(vaddr2,VGA); - j:=0; - while (j<100) do - begin - espera_VGA; - inc(j); - end; - espera_VGA; - volcar32(vaddr,VGA); - inc(i); - until (i>10) or (QteclaPuls); - if QteclaPuls then salta_intro:=true; - end - else ; - if TeclaPuls(KeySPACE) then salta_intro:=true; - fadedown(0,0,0,0); - -end; -/*──────────────────────────────────────────────────────────────────────────*/ -procedure historia; -begin - if mode_nocturne then - begin - cls32(0,VGA); - load_mif(in_nit,vaddr); - getpaleta(paleta); - blackout; - espera_VGA; - volcar32(vaddr,VGA); - if (not(playing)) and (midi) then Playmidi; - fadeup(paleta,0); - retard(300); - fadedown(0,0,0,0); - end - else begin - fin_historia:=false; - cls32(0,VGA); - load_mif(hist01,vaddr); - getpaleta(paleta); - blackout; - espera_VGA; - volcar32(vaddr,VGA); - - ini_midi(musica_historia); - if midi then Playmidi; - - - fadeup(paleta,0); - escriu_frase('QUE BON DIA FA NO CREUS PEPE',2,40,90,vaddr2,10,0,0); - borrar_frase(150,vaddr,vaddr2); - escriu_frase('EEEE..SS..SSIII.SI',10,50,80,vaddr2,10,0,0); - borrar_frase(150,vaddr,vaddr2); - escriu_frase('(SEMPRE QUE M*ACOSTE',2,140,140,vaddr2,10,0,0); - escriu_frase('A PEPE ES POSA RARO)',2,140,150,vaddr2,10,0,0); - borrar_frase(150,vaddr,vaddr2); - - retard(200); - if QTeclaPuls then fin_historia:=true; - fadedown(0,0,0,0); - if not(fin_historia) then - begin - load_mif(hist02,vaddr); - getpaleta(paleta); - blackout; - espera_VGA; - volcar32(vaddr,VGA); - fadeup(paleta,0); - escriu_frase('AAAAY !',10,100,140,vaddr2,0,0,0); - borrar_frase(150,vaddr,vaddr2); - escriu_frase('JA T*HE PILLAT PEPE',3,100,55,vaddr2,10,0,0); - borrar_frase(150,vaddr,vaddr2); - escriu_frase('AUXILI!',2,145,125,vaddr2,0,0,0); - borrar_frase(150,vaddr,vaddr2); - retard(200); - end; - if QTeclaPuls then fin_historia:=true; - fadedown(0,0,0,0); - if not(fin_historia) then - begin - load_mif(hist03,vaddr); - getpaleta(paleta); - blackout; - espera_VGA; - volcar32(vaddr,VGA); - fadeup(paleta,0); - escriu_frase('ARA ROSITA ES MEUA',5,50,80,vaddr2,10,0,0); - borrar_frase(150,vaddr,vaddr2); - escriu_frase('SI VOLS ACONSEGUIR-LA',5,50,80,vaddr2,10,0,0); - escriu_frase('HAURAS DE SEGUIR-ME',5,50,90,vaddr2,10,0,0); - escriu_frase('PER TOT EL MON.',5,50,100,vaddr2,10,0,0); - borrar_frase(150,vaddr,vaddr2); - escriu_frase('JA JA JA JA JA !!',5,60,80,vaddr2,0,0,0); - borrar_frase(150,vaddr,vaddr2); - retard(200); - end; - if QTeclaPuls then fin_historia:=true; - fadedown(0,0,0,0); - if not(fin_historia) then - begin - load_mif(hist04,vaddr); - getpaleta(paleta); - blackout; - espera_VGA; - volcar32(vaddr,VGA); - fadeup(paleta,0); - escriu_frase('AJUDA*M PEPE!',2,120,60,vaddr2,5,0,0); - borrar_frase(150,vaddr,vaddr2); - escriu_frase('MALEIT SIGUES',7,50,50,vaddr2,60,0,0); - escriu_frase('ET TROBARE...',7,50,60,vaddr2,40,0,0); - retard(200); - end; - fadedown(0,0,0,0); - end; -end; + int i = 0; + do + { + if ( !playing && midi ) PlayMIDI(); + int j = 0; + while ( j<100 ) + { + espera_VGA(); + j++; + } + espera_VGA(); + volcar32(vaddr2, VGA); + j = 0; + while ( j<100 ) + { + espera_VGA(); + j++; + } + espera_VGA(); + volcar32(vaddr, VGA); + i++; + } while ( i<=10 && !QteclaPuls() ); + if (QteclaPuls()) salta_intro = true; + } + if (TeclaPuls(SDL_SCANCODE_SPACE)) salta_intro = true; + fadedown(0,0,0,0); +} /*──────────────────────────────────────────────────────────────────────────*/ +void historia() +{ + if (mode_nocturne) + { + cls32(0, VGA); + load_mif(IN_NIT, vaddr); + getpaleta(paleta); + blackout(); + espera_VGA(); + volcar32(vaddr, VGA); + if ( !playing && midi ) Playmidi(); + fadeup(paleta, 0); + retard(300); + fadedown(0,0,0,0); + } + else + { + fin_historia = false; + cls32(0, VGA); + load_mif(HIST01, vaddr); + getpaleta(paleta); + blackout(); + espera_VGA(); + volcar32(vaddr, VGA); -procedure credits; -var i_int:integer; velocitat:longint; num : byte; - x,y,ample,alt,xo,yo:integer; - temps, temps2 : word; - offset : word; -begin - load_mif(creditsf,vaddr2); - cls32(0,vaddr); + ini_midi(musica_historia); + if (midi) Playmidi(); - 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)>=3); + fadeup(paleta, 0); + escriu_frase("QUE BON DIA FA NO CREUS PEPE", 2, 40, 90, vaddr2, 10, 0, 0); + borrar_frase(150, vaddr, vaddr2); + escriu_frase("EEEE..SS..SSIII.SI", 10, 50, 80, vaddr2, 10, 0, 0); + borrar_frase(150, vaddr, vaddr2); + escriu_frase("(SEMPRE QUE M*ACOSTE", 2, 140, 140, vaddr2, 10, 0, 0); + escriu_frase("A PEPE ES POSA RARO)", 2, 140, 150, vaddr2, 10, 0, 0); + borrar_frase(150, vaddr, vaddr2); - - for num:=1 to 5 do - begin - case num of - 1 : begin - x := 95; - y := 18; - ample := 124; - alt := 31; - end; - - 2 : begin - x := 92; - y := 48; - ample := 134; - alt := 67; - end; - - 3 : begin - x := 107; - y := 115; - ample := 98; - alt := 24; - end; - - 4 : begin - x := 113; - y := 138; - ample := 86; - alt := 13; - end; - - 5 : begin - x := 51; - y := 151; - ample := 213; - alt := 30; - end; - - end; - i_int:=200; - velocitat:=0; - offset:=x+(y*320); - while (i_int>80) do - begin - if (not(playing)) and (midi) then begin ini_midi(musica_final_joc); - if midi then Playmidi; end; - Put_Sprite_ICE_baix(vaddr2,vaddr,offset,ample,alt,x,i_int); - espera_VGA; - volcar32(vaddr,VGA); - inc(velocitat); - if velocitat mod 5=0 then dec(i_int,1); - end; - - if num<5 then - while (i_int>-alt) do - begin - if (not(playing)) and (midi) then begin ini_midi(musica_final_joc); - if midi then Playmidi; end; - Put_Sprite_ICE_dalt(vaddr2,vaddr,offset,ample,alt,x,i_int); - espera_VGA; - volcar32(vaddr,VGA); - inc(velocitat); - if velocitat mod 5=0 then dec(i_int,1); - end; - end; - - 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)>=10); - - fadedown(0,0,0,3); - - if midi then begin StopMIDI; unloadmidi; midi:=false; end; - -end; + retard(200); + if (QTeclaPuls()) fin_historia = true; + fadedown(0,0,0,0); + if (!fin_historia) + { + load_mif(HIST02, vaddr); + getpaleta(paleta); + blackout(); + espera_VGA(); + volcar32(vaddr, VGA); + fadeup(paleta, 0); + escriu_frase("AAAAY !", 10, 100, 140, vaddr2, 0, 0, 0); + borrar_frase(150, vaddr, vaddr2); + escriu_frase("JA T*HE PILLAT PEPE", 3, 100, 55, vaddr2, 10, 0, 0); + borrar_frase(150, vaddr, vaddr2); + escriu_frase("AUXILI!", 2, 145, 125, vaddr2, 0, 0, 0); + borrar_frase(150, vaddr, vaddr2); + retard(200); + } + if (QTeclaPuls()) fin_historia = true; + fadedown(0,0,0,0); + if (!fin_historia) + { + load_mif(HIST03, vaddr); + getpaleta(paleta); + blackout(); + espera_VGA(); + volcar32(vaddr, VGA); + fadeup(paleta, 0); + escriu_frase("ARA ROSITA ES MEUA", 5, 50, 80, vaddr2, 10, 0, 0); + borrar_frase(150, vaddr, vaddr2); + escriu_frase("SI VOLS ACONSEGUIR-LA", 5, 50, 80, vaddr2, 10, 0, 0); + escriu_frase("HAURAS DE SEGUIR-ME", 5, 50, 90, vaddr2, 10, 0, 0); + escriu_frase("PER TOT EL MON.", 5, 50, 100, vaddr2, 10, 0, 0); + borrar_frase(150, vaddr, vaddr2); + escriu_frase("JA JA JA JA JA !!", 5, 60, 80, vaddr2, 0, 0, 0); + borrar_frase(150, vaddr, vaddr2); + retard(200); + } + if (QTeclaPuls()) fin_historia = true; + fadedown(0,0,0,0); + if (!fin_historia) + { + load_mif(HIST04, vaddr); + getpaleta(paleta); + blackout(); + espera_VGA(); + volcar32(vaddr, VGA); + fadeup(paleta, 0); + escriu_frase("AJUDA*M PEPE!", 2, 120, 60, vaddr2, 5, 0, 0); + borrar_frase(150, vaddr, vaddr2); + escriu_frase("MALEIT SIGUES", 7, 50, 50, vaddr2, 60, 0, 0); + escriu_frase("ET TROBARE...", 7, 50, 60, vaddr2, 40, 0, 0); + retard(200); + } + fadedown(0,0,0,0); + } +} /*──────────────────────────────────────────────────────────────────────────*/ +void credits() +{ + load_mif(CREDITSF, vaddr2); + cls32(0, vaddr); + uint32_t t = SDL_GetTicks()+3000; + do {} while (!QteclaPuls() && SDL_GetTicks() 80 ) + { + if (!playing && midi) + { + ini_midi(musica_final_joc); + if (midi) Playmidi(); + } + Put_Sprite_ICE_baix(vaddr2, vaddr, offset, ample, alt, x, i_int); + espera_VGA(); + volcar32(vaddr, VGA); + velocitat++; + if (velocitat % 5 == 0) i_int--; + } - procedure reixa(posx:word; long:byte; where:word); - const posy = 30; - begin - line(posx, posy,posx, 197-long,0,where); - line(posx+1,posy,posx+1,197-long,0,where); - line(posx+2,posy,posx+2,198-long,0,where); - line(posx+3,posy,posx+3,198-long,0,where); - line(posx+4,posy,posx+4,199-long,0,where); - line(posx+5,posy,posx+5,199-long,0,where); - line(posx+6,posy,posx+6,198-long,0,where); - line(posx+7,posy,posx+7,198-long,0,where); - line(posx+8,posy,posx+8,197-long,0,where); - line(posx+9,posy,posx+9,197-long,0,where); - end; + if (num < 5) + while (i_int > -alt) + { + if (!playing && midi) + { + ini_midi(musica_final_joc); + if (midi) Playmidi(); + } + Put_Sprite_ICE_dalt(vaddr2, vaddr, offset, ample, alt, x, i_int); + espera_VGA(); + volcar32(vaddr, VGA); + velocitat++; + if (velocitat % 5 == 0) i_int--; + } + } -begin + uint32_t t = SDL_GetTicks()+10000; + do {} while (!QteclaPuls() && SDL_GetTicks()=10); + uint32_t t = SDL_GetTicks()+10000; + do + { + retard(10); + espera_VGA(); + set_color(253,39, 0,48); + set_color(254, 0,63, 6); + set_color(255, 0, 3,63); + retard(10); + espera_VGA(); + set_color(253, 0, 3,63); + set_color(254,39, 0,48); + set_color(255, 0,63, 6); + retard(10); + espera_VGA(); + set_color(253, 0,63, 6); + set_color(254, 0, 3,63); + set_color(255,39, 0,48); + } while (!QteclaPuls() && SDL_GetTicks()