diff --git a/pepe2000_utf8.cpp b/pepe2000_utf8.cpp index d3ab3bf..bab423a 100644 --- a/pepe2000_utf8.cpp +++ b/pepe2000_utf8.cpp @@ -344,7 +344,7 @@ struct rellontge_t { uint8_t i, j; // : byte; bool viu; // : boolean; - uint8_t temps; // : byte; + uint32_t temps; // : byte; }; rellontge_t rellontge; @@ -463,13 +463,13 @@ void load_cfg() volumen = 0; amb_so = false; GM = true; - tecla_amunt = 16; + tecla_amunt = SDL_SCANCODE_UP; tecla_amunt_dib = 14157; - tecla_avall = 30; + tecla_avall = SDL_SCANCODE_DOWN; tecla_avall_dib = 4485; - tecla_dreta = 25; + tecla_dreta = SDL_SCANCODE_RIGHT; tecla_dreta_dib = 14133; - tecla_esquerra = 24; + tecla_esquerra = SDL_SCANCODE_LEFT; tecla_esquerra_dib = 14109; save_cfg(); } @@ -2058,888 +2058,959 @@ void level_complete() } /*──────────────────────────────────────────────────────────────────────────*/ -procedure volcat_de_pantalla; -begin - volcar32(vaddr,vaddr2); +void volcat_de_pantalla() +{ + volcar32(vaddr, vaddr2); - /* inicialització i comprobació de la fletxa de GO! */ - fletxa_final_fase := true; - for i:=1 to 38 do - for j:=1 to 29 do - if (pantalla[i,j]=es_un_bloc_per_pintar) then fletxa_final_fase:=false; + // inicialització i comprobació de la fletxa de GO! + fletxa_final_fase = true; + for (int i=0; i<38; ++i) + for (int j=0; j<29; ++j) + if (pantalla[i,j] == es_un_bloc_per_pintar) fletxa_final_fase = false; - /* pinta el rellontge */ - if rellontge.viu then - case (c mod 50) of + // pinta el rellontge + if (rellontge.viu) + switch ((c % 48)/12) + { + case 0: + case 2: pinta(rellontge_dib, 255, rellontge.i, rellontge.j, vaddr2); break; + case 1: pinta(rellontge_dib_X, 255, rellontge.i, rellontge.j, vaddr2); break; + case 3: pinta(rellontge_dib_Y, 255, rellontge.i, rellontge.j, vaddr2); break; + } - 0..12 : pinta(rellontge_dib,255,rellontge.i,rellontge.j,vaddr2); - 13..25 : pinta(rellontge_dib_X,255,rellontge.i,rellontge.j,vaddr2); - 26..37 : pinta(rellontge_dib,255,rellontge.i,rellontge.j,vaddr2); - 38..49 : pinta(rellontge_dib_Y,255,rellontge.i,rellontge.j,vaddr2); - end; + if ( (x==pos_ini_x_pepe) && (y==pos_ini_y_pepe) ) en_casa = true; - if (x=pos_ini_x_pepe) and (y=pos_ini_y_pepe) then en_casa:=true; + // pinta a PEPE, ROSITA o JOB + if (mode_nocturne && !rosita_selected &&d !amic_selected) pinta(gorro, 255, x, y-6, vaddr2); + if (pintura > 0) + if (rosita_selected) + pinta(rosita_p, 255, x, y, vaddr2); + else + if (amic_selected) + pinta(amic, 255, x, y, vaddr2); + else + if (mode_nocturne) + pinta(pepe_gorro, 255, x, y, vaddr2); + else + pinta(pepe, 255, x, y, vaddr2); + else + if (amic_selected) + pinta(amic_b, 255, x, y, vaddr2); + else + if (mode_nocturne) + pinta(pepe_gorro, 255, x, y, vaddr2); + else + pinta(pepe_b, 255, x, y, vaddr2); - /* pinta a PEPE, ROSITA o JOB */ - if (mode_nocturne) and (not(rosita_selected)) and (not(amic_selected)) then pinta(gorro,255,x,y-6,vaddr2); - if pintura>0 then if rosita_selected then pinta(rosita_p,255,x,y,vaddr2) - else if amic_selected then pinta(amic,255,x,y,vaddr2) - else if mode_nocturne then pinta(pepe_gorro,255,x,y,vaddr2) - else pinta(pepe,255,x,y,vaddr2) - else if amic_selected then pinta(amic_b,255,x,y,vaddr2) - else if mode_nocturne then pinta(pepe_gorro,255,x,y,vaddr2) - else pinta(pepe_b,255,x,y,vaddr2); + if (!en_casa) + pinta(dib_pot, 255, 238, 96, vaddr2); + else + { + pinta(dib_pot, 255, 238, 96, vaddr2); + if (rosita_selected) + pinta(rosita_p, 255, x, y, vaddr2); + else + if (amic_selected) + pinta(amic, 255, x, y, vaddr2); + else + if (mode_nocturne) + pinta(pepe_gorro, 255, x, y, vaddr2); + else + pinta(pepe, 255, x, y, vaddr2); + } - if not(en_casa) then pinta(dib_pot,255,238,96,vaddr2) - else begin - pinta(dib_pot,255,238,96,vaddr2); - if rosita_selected then pinta(rosita_p,255,x,y,vaddr2) - else if amic_selected then pinta(amic,255,x,y,vaddr2) - else if mode_nocturne then pinta(pepe_gorro,255,x,y,vaddr2) - else pinta(pepe,255,x,y,vaddr2); - end; + // pinta a rosita en la pressó + if (num_fase == ultima_fase) + { + if ((s%4)==0) + pinta(rosita, 255, 16, 96, vaddr2); + else + if ((s%4)==1) + pinta(rosita2, 255, 16, 96, vaddr2); + else + if ((s%4)==2) + pinta(rosita, 255, 16, 96, vaddr2); + else + pinta(rosita3, 255, 16, 96, vaddr2); + + if ( ((s%10)==0) || ((s%10)==1) ) + { + pinta(rosita_chillido, 255, 16, 96, vaddr2); + pinta_number(help_1, 255, 12, 87, vaddr2); + pinta_number(help_2, 255, 21, 87, vaddr2); + } + } + // pinta el mapa + if (map) put_map(pantalla, 255, 270, 1, 38, 29, vaddr2); - /* pinta a rosita en la pressó */ - if num_fase=ultima_fase then - begin - if (s mod 4)=0 then pinta(rosita,255,16,96,vaddr2) - else if (s mod 4)=1 then pinta(rosita2,255,16,96,vaddr2) - else if (s mod 4)=2 then pinta(rosita,255,16,96,vaddr2) - else pinta(rosita3,255,16,96,vaddr2); - if ((s mod 10)=0) or ((s mod 10)=1) then - begin - pinta(rosita_chillido,255,16,96,vaddr2); - pinta_number(help_1,255,12,87,vaddr2); - pinta_number(help_2,255,21,87,vaddr2); - end; - end; + // pinta l'altaveu + if (amb_so) + pinta_number(altaveu_on, 255, 2, 188, vaddr2); + else + pinta_number(altaveu_off, 255, 2, 188, vaddr2); - /* pinta el mapa */ - if map then put_map(pantalla,255,270,1,38,29,vaddr2); + // pinta la fletxa de GO! + if (fletxa_final_fase) + if (c%99 < 50) + { + pinta_number(fletxa_final01, 255, 250, 90, vaddr2); + pinta_number(fletxa_final02, 255, 259, 90, vaddr2); + pinta_number(fletxa_final03, 255, 250, 99, vaddr2); + pinta_number(fletxa_final04, 255, 259, 99, vaddr2); + } + else + { + pinta_number(fletxa_final01, 255, 248, 90, vaddr2); + pinta_number(fletxa_final02, 255, 257, 90, vaddr2); + pinta_number(fletxa_final03, 255, 248, 99, vaddr2); + pinta_number(fletxa_final04, 255, 257, 99, vaddr2); + } - /* pinta l'altaveu */ - if amb_so then pinta_number(altaveu_on,255,2,188,vaddr2) - else pinta_number(altaveu_off,255,2,188,vaddr2); + espera_vga(); + volcar32(vaddr2, VGA); +} - /* pinta la fletxa de GO! */ - if fletxa_final_fase then - if (c mod 99 < 50) then - begin - pinta_number(fletxa_final01,255,250,90,vaddr2); - pinta_number(fletxa_final02,255,259,90,vaddr2); - pinta_number(fletxa_final03,255,250,99,vaddr2); - pinta_number(fletxa_final04,255,259,99,vaddr2); - end - else begin - pinta_number(fletxa_final01,255,248,90,vaddr2); - pinta_number(fletxa_final02,255,257,90,vaddr2); - pinta_number(fletxa_final03,255,248,99,vaddr2); - pinta_number(fletxa_final04,255,257,99,vaddr2); - end; - - - espera_vga; - volcar32(vaddr2,VGA); -end; /*──────────────────────────────────────────────────────────────────────────*/ -procedure omplir_pot; -var i,j : byte; -begin - temps_final:=temps; - final_fase:=true; - for i:=1 to 38 do - for j:=1 to 29 do - if pantalla[i,j]=es_un_bloc_per_pintar - /*if blocs_per_pintar=0*/ then final_fase:=false; +void omplir_pot() +{ + temps_final = temps; + final_fase = true; + for (int i=0; i<38; ++i) + for (int j=0; j<29; ++j) + if (pantalla[i][j] == es_un_bloc_per_pintar) final_fase = false; + + if (!final_fase) + { + pinta(pepe, color_pintura, x, y, vaddr); + pantalla[x/6][(y/6)-1] = es_un_bloc_pintat; + x = pos_ini_x_pepe; + y = pos_ini_y_pepe; + if (mode_nocturne) + pinta(pepe_gorro, 255, x, y, vaddr); + else + pinta(pepe, 255, x, y, vaddr); + + Play_WAV(sample[so_pot]); + + while (pintura < max_pintura) + { + if (pintura < max_pintura) pintura++; + if (pintura < max_pintura) pintura++; + if (pintura < max_pintura) pintura++; + pinta_marcadors(); + if (time_attack_mode) posa_el_temps(vaddr); + if ((pintura==Max_pintura) || (pintura%50==0)) Play_WAV(sample[so_pot]); + volcat_de_pantalla(); + } + nosound(); + } + en_casa = true; +} - if not(final_fase) then - begin - pinta(pepe,color_pintura,x,y,vaddr); - pantalla[(x div 6),((y div 6)-1)]:=es_un_bloc_pintat; - x:=pos_ini_x_pepe; - y:=pos_ini_y_pepe; - if mode_nocturne then pinta(pepe_gorro,255,x,y,vaddr) - else pinta(pepe,255,x,y,vaddr); - Play_WAV (sample[so_pot]); - while pintura0 then - begin - /*if amb_so then so_de(pot_ple);*/ - if not(rosita_selected) then dec(pintura); - pinta(pepe,color,x,y,vaddr); - pantalla[(x div 6),((y div 6)-1)]:=es_un_bloc_pintat; - if el_que_hi_havia=es_un_bloc_per_pintar then - begin - dec(blocs_per_pintar); - if not(amic_selected) then punts:=punts+(25-(5*dificultat))+valor_del_bloc - else punts:=punts+(((25-(5*dificultat))+valor_del_bloc)*2); - if (punts mod 20000)>(25-(5*dificultat)+valor_del_bloc) then donar_vida:=true; - if (vides<9) and (story_mode_mode) and (donar_vida) then if punts>100 then - if (punts mod 20000)<(25-(5*dificultat)+valor_del_bloc) then - if not(amic_selected) then - begin - donar_vida:=false; - inc(vides); - pinta_number_zoom(5,numero_G[vides],255,260,150,VGA); - if amb_so then PlayWav(sample[so_ring])/*so_de(vida_extra)*/ - else retard(40); - end; - end; - end - else if el_que_hi_havia=es_un_bloc_pintat then - begin - /*if amb_so then so_de(pot_buit);*/ - pinta(pepe,color,x,y,vaddr); - pantalla[(x div 6),((y div 6)-1)]:=es_un_bloc_pintat; - end - else if el_que_hi_havia=es_un_bloc_per_pintar then - begin - /*if amb_so then so_de(pot_buit);*/ - pantalla[(x div 6),((y div 6)-1)]:=es_un_bloc_per_pintar; - end; - antiga_direccio:=cap_on_va_Pepe; -end; +void pinta_un_bloc(uint8_t color, uint8_t queda_pintura) +{ + if (antiga_direccio == cap_on_va_Pepe) + { + if (valor_del_bloc < 10) valor_del_bloc++; + } + else + valor_del_bloc = 0; + + if (queda_pintura > 0) + { + //if amb_so then so_de(pot_ple); + if (!rosita_selected) pintura--; + pinta(pepe, color, x, y, vaddr); + pantalla[x/6][(y/6)-1] = es_un_bloc_pintat; + if (el_que_hi_havia == es_un_bloc_per_pintar) + { + blocs_per_pintar--; + if (!amic_selected) + punts = punts + (25-(5*dificultat)) + valor_del_bloc; + else + punts = punts + (((25-(5*dificultat))+valor_del_bloc)*2); + + if ( (punts%20000) > (25-(5*dificultat)+valor_del_bloc) donar_vida = true; + if ( (vides<9) && story_mode_mode && donar_vida) + if (punts>100) + if ( (punts%20000) < (25-(5*dificultat)+valor_del_bloc) ) + if (!amic_selected) + { + donar_vida = false; + vides++; + pinta_number_zoom(5, numero_G[vides], 255, 260, 150, VGA); + if (amb_so) + PlayWav(sample[so_ring]);/*so_de(vida_extra)*/ + else + retard(40); + } + } + } + else + if (el_que_hi_havia==es_un_bloc_pintat) + { + // if amb_so then so_de(pot_buit); + pinta(pepe, color, x, y, vaddr); + pantalla[x/6][(y/6)-1] = es_un_bloc_pintat; + } + else + if (el_que_hi_havia == es_un_bloc_per_pintar) + { + //if amb_so then so_de(pot_buit); + pantalla[x/6][(y/6)-1] = es_un_bloc_per_pintar; + } + antiga_direccio = cap_on_va_Pepe; +} + /*──────────────────────────────────────────────────────────────────────────*/ -procedure animacio_mort; -var i: byte; -begin - Play_WAV (sample[so_mort]); - for i:=1 to 5 do - begin +void animacio_mort() +{ + Play_WAV(sample[so_mort]); + for (int i=1; i<=5; ++i) + { retard(10); - if rosita_selected then pinta(rosita_m,255,x,y,VGA) - else if amic_selected then pinta(amic_m,255,x,y,VGA) - else pinta(pepe_m,255,x,y,VGA); + if (rosita_selected) + pinta(rosita_m, 255, x, y, VGA); + else + if (amic_selected) + pinta(amic_m, 255, x, y, VGA); + else + pinta(pepe_m, 255, x, y, VGA); - /*if amb_so then sound(2000);*/ + // if amb_so then sound(2000); retard(10); - if rosita_selected then pinta(rosita_m2,255,x,y,VGA) - else if amic_selected then pinta(amic_m2,255,x,y,VGA) - else pinta(pepe_m2,255,x,y,VGA); - /*if amb_so then sound(1000);*/ - end; - nosound; -end; -/*──────────────────────────────────────────────────────────────────────────*/ -procedure animacio_alegria; -var i: byte; -begin + if (rosita_selected) + pinta(rosita_m2, 255, x, y, VGA); + else + if (amic_selected) + pinta(amic_m2, 255, x, y, VGA); + else + pinta(pepe_m2, 255, x, y, VGA); + //if amb_so then sound(1000); + } + nosound(); +} - if (mode_nocturne) and - (not(rosita_selected)) and - (not(amic_selected)) then - begin - que_hi_ha:=pantalla[((x-max_m_x) div 6),(((y-max_m_y) div 6)-1)]; - if que_hi_ha=es_un_bloc_pintat then pinta(gorro,color_pintura,x-6,y-6,VGA) - else if que_hi_ha=es_una_paret then pinta(dib_pared,255,x-6,y-6,VGA); - pinta(gorro,255,x,y-6,VGA); - end; - for i:=1 to 10 do - begin +/*──────────────────────────────────────────────────────────────────────────*/ +void animacio_alegria() +{ + if (mode_nocturne && !rosita_selected && !amic_selected) + { + que_hi_ha = pantalla[(x-max_m_x) / 6][((y-max_m_y) / 6)-1]; + if (que_hi_ha == es_un_bloc_pintat) + pinta(gorro, color_pintura, x-6, y-6, VGA); + else + if (que_hi_ha == es_una_paret) pinta(dib_pared, 255, x-6, y-6, VGA); + + pinta(gorro, 255, x, y-6, VGA); + } + + for int i=1; i<=1; ++i) + { retard(10); - if rosita_selected then pinta(rosita_a,255,x,y,VGA) - else if amic_selected then pinta(amic_a,255,x,y,VGA) - else if mode_nocturne then pinta(pepe_gorro,255,x,y,VGA) - else pinta(pepe_a,255,x,y,VGA); + if (rosita_selected) + pinta(rosita_a, 255, x, y, VGA); + else + if (amic_selected) + pinta(amic_a, 255, x, y, VGA); + else + if (mode_nocturne) + pinta(pepe_gorro, 255, x, y, VGA); + else + pinta(pepe_a, 255, x, y, VGA); + retard(10); - if rosita_selected then pinta(rosita_a2,255,x,y,VGA) - else if amic_selected then pinta(amic_a2,255,x,y,VGA) - else if mode_nocturne then pinta(pepe_gorro,255,x,y,VGA) - else pinta(pepe_a2,255,x,y,VGA); - end; -end; -/*──────────────────────────────────────────────────────────────────────────*/ -procedure mort; -begin - if vides=0 then - begin - no_queden_vides:=true; - pinta(pepe,color_pintura,x,y,vaddr); - volcat_de_pantalla; - animacio_mort; - x:=pos_ini_x_pepe; - y:=pos_ini_y_pepe; - en_casa:=true; - end - else begin - if vides>0 then dec(vides); - if el_que_hi_havia=es_un_bloc_pintat then pinta(pepe,color_pintura,x,y,vaddr); - volcat_de_pantalla; - /*so_de(mos_a_pepe);*/Play_WAV (sample[so_mort]); - animacio_mort; - pantalla[(x div 6),(y div 6)-1]:=el_que_hi_havia/*es_un_bloc_pintat*/; - x:=pos_ini_x_pepe; - y:=pos_ini_y_pepe; - en_casa:=true; - volcat_de_pantalla; - if mode_nocturne then pinta(pepe_gorro,255,x,y,vaddr2) - else pinta(pepe,255,x,y,vaddr2); - omplir_pot; - volcat_de_pantalla; - retard_pepe:=velocitat_pepe; - end; -end; -/*──────────────────────────────────────────────────────────────────────────*/ -procedure mira_el_que_hi_ha(cap_on_vaig:byte); -begin -el_que_hi_havia:=que_hi_ha; - case cap_on_vaig of + if (rosita_selected) + pinta(rosita_a2, 255, x, y, VGA); + else + if (amic_selected) + pinta(amic_a2, 255, x, y, VGA); + else + if (mode_nocturne) + pinta(pepe_gorro, 255, x, y, VGA); + else + pinta(pepe_a2, 255, x, y, VGA); + } +} - amunt:que_hi_ha:=pantalla[(x div 6),(((y-max_m_y) div 6)-1)]; - dreta:que_hi_ha:=pantalla[((x+max_m_x) div 6),((y div 6)-1)]; - avall:que_hi_ha:=pantalla[(x div 6),(((y+max_m_y) div 6)-1)]; - esquerra:que_hi_ha:=pantalla[((x-max_m_x) div 6),((y div 6)-1)]; +/*──────────────────────────────────────────────────────────────────────────*/ +void mort() +{ + if (vides == 0) + { + no_queden_vides = true; + pinta(pepe, color_pintura, x, y, vaddr); + volcat_de_pantalla(); + animacio_mort(); + x = pos_ini_x_pepe; + y = pos_ini_y_pepe; + en_casa = true; + } + else + { + if (vides > 0) vides--; + if (el_que_hi_havia == es_un_bloc_pintat) pinta(pepe, color_pintura, x, y, vaddr); + volcat_de_pantalla(); + //so_de(mos_a_pepe); + Play_WAV(sample[so_mort]); + animacio_mort(); + pantalla[x/6][(y/6)-1] = el_que_hi_havia; //es_un_bloc_pintat + x = pos_ini_x_pepe; + y = pos_ini_y_pepe; + en_casa = true; + volcat_de_pantalla(); + if (mode_nocturne) + pinta(pepe_gorro, 255, x, y, vaddr2); + else + pinta(pepe, 255, x, y, vaddr2); + omplir_pot(); + volcat_de_pantalla(); + retard_pepe = velocitat_pepe; + } +} - end; +/*──────────────────────────────────────────────────────────────────────────*/ +void mira_el_que_hi_ha(uint8_t cap_on_vaig) +{ + el_que_hi_havia = que_hi_ha; + switch (cap_on_vaig) + { + case amunt: que_hi_ha = pantalla[x/6][((y-max_m_y)/6)-1]; break; + case dreta: que_hi_ha = pantalla[(x+max_m_x)/6)][(y/6)-1]; break; + case avall: que_hi_ha = pantalla[x/6][((y+max_m_y)/6)-1]; break; + case esquerra: que_hi_ha = pantalla[(x-max_m_x) div 6][(y/6)-1]; break; + } +} -end; /*──────────────────────────────────────────────────────────────────────────*/ -procedure ja_no_pots_eixir; -begin - escriu_frase('JA NO POTS EIXIR',64,50,96,vaddr,10,0,1); - animacio_mort; - x:=0; - y:=0; - no_queden_vides:=true; -end; +void ja_no_pots_eixir() +{ + escriu_frase("JA NO POTS EIXIR", 64, 50, 96, vaddr, 10, 0, 1); + animacio_mort(); + x = 0; + y = 0; + no_queden_vides = true; +} + /*──────────────────────────────────────────────────────────────────────────*/ -procedure munta_velocitat_joc; -begin - if velocitat_pepe<9 then inc(velocitat_pepe); - pinta_number_zoom(6,numero_G[velocitat_pepe],255,110,80,VGA); - if amb_so then - begin - sound(velocitat_pepe*150); - retard(1); - nosound; - end; -end; +void munta_velocitat_joc() +{ + if (velocitat_pepe < 9) velocitat_pepe++; + pinta_number_zoom(6, numero_G[velocitat_pepe], 255, 110, 80, VGA); + if (amb_so) + { + sound(velocitat_pepe*150); + retard(1); + nosound(); + } +} + /*──────────────────────────────────────────────────────────────────────────*/ -procedure baixa_velocitat_joc; -begin - if velocitat_pepe>1 then dec(velocitat_pepe); - pinta_number_zoom(6,numero_G[velocitat_pepe],255,110,80,VGA); - if amb_so then - begin - sound(velocitat_pepe*150); - retard(1); - nosound; - end; -end; +void baixa_velocitat_joc() +{ + if (velocitat_pepe > 1) velocitat_pepe--; + pinta_number_zoom(6, numero_G[velocitat_pepe], 255, 110, 80, VGA); + if (amb_so) + { + sound(velocitat_pepe*150); + retard(1); + nosound(); + } +} + /*──────────────────────────────────────────────────────────────────────────*/ -procedure moure(direccio:byte); -var desp_pixel:byte; -begin - cap_on_va_Pepe:=direccio; - case direccio of - amunt:if ((y-max_m_y)>=l0) and (not(en_casa)) - and (not(pantalla[(x div 6),(((y-max_m_y) div 6)-1)]=es_una_paret)) then - begin +void moure(uint8_t direccio) +//var desp_pixel:byte; +{ + cap_on_va_Pepe = direccio; + SWITCH (direccio) + { + case amunt: + if ( ((y-max_m_y)>=l0) && (!en_casa) && (!(pantalla[x/6][((y-max_m_y) / 6)-1] == es_una_paret)) ) + { mira_el_que_hi_ha(direccio); - if que_hi_ha=es_un_bicho then mort - else begin + if (que_hi_ha == es_un_bicho) + mort() + else + { + pinta_un_bloc(color_pintura, pintura); + //for desp_pixel:=1 to max_m_y do begin dec(y); volcat_de_pantalla; end; + y = y - max_m_y; + // if not(amb_so) then *//*retard(velocitat_joc); + retard_pepe = velocitat_pepe; + menejant = true; + pantalla[x/6][(y/6)-1] = es_pepe; + } + } + break; + case dreta: + if (!en_casa && !(pantalla[(x+max_m_x)/6][(y/6)-1] == es_una_paret)) + if ( (x+max_m_x) <= l1 ) + { + mira_el_que_hi_ha(direccio); + if (que_hi_ha == es_un_bicho) + mort(); + else + { pinta_un_bloc(color_pintura,pintura); - /*for desp_pixel:=1 to max_m_y do begin dec(y); volcat_de_pantalla; end;*/ - y:=y-max_m_y; - /*if not(amb_so) then *//*retard(velocitat_joc);*/ - retard_pepe:=velocitat_pepe; - menejant:=true; - pantalla[(x div 6),((y div 6)-1)]:=es_pepe; - end; - - end; - dreta:begin - if (not(en_casa)) - and (not(pantalla[((x+max_m_x) div 6),((y div 6)-1)]=es_una_paret)) then - if ((x+max_m_x)<=l1) then - begin - mira_el_que_hi_ha(direccio); - if que_hi_ha=es_un_bicho then mort - else begin - pinta_un_bloc(color_pintura,pintura); - x:=x+max_m_x; - /*if not(amb_so) then *//*retard(velocitat_joc);*/ - retard_pepe:=velocitat_pepe; - menejant:=true; - pantalla[(x div 6),((y div 6)-1)]:=es_pepe; - end; - - end - else if (x=232) and (y=96) /*and (pintura=l3) - and (not(pantalla[((x-max_m_x) div 6),((y div 6)-1)]=es_una_paret)) then - begin + if (que_hi_ha = es_un_bicho) + mort(); + else + { + pinta_un_bloc(color_pintura,pintura); + y = y + max_m_y; + //if not(amb_so) then retard(velocitat_joc); + retard_pepe = velocitat_pepe; + menejant = true; + pantalla[x/6][(y/6)-1] = es_pepe; + } + } + break; + case esquerra: + if ( ((x-max_m_x) >= l3) && !(pantalla[(x-max_m_x)/6][(y/6)-1] == es_una_paret) ) + { mira_el_que_hi_ha(direccio); - if (en_casa) and (que_hi_ha=es_un_bicho) then ja_no_pots_eixir; - /*if en_casa then x:=x-max_m_x - else*/ - if /*(not(en_casa)) and*/ (que_hi_ha=es_un_bicho) then mort - else begin - pinta_un_bloc(color_pintura,pintura); - x:=x-max_m_x; - /*if not(amb_so) then *//*retard(velocitat_joc);*/ - retard_pepe:=velocitat_pepe; - menejant:=true; - pantalla[(x div 6),((y div 6)-1)]:=es_pepe; - end; + if (en_casa && (que_hi_ha == es_un_bicho)) ja_no_pots_eixir(); + if (que_hi_ha == es_un_bicho) then + mort(); + else + { + pinta_un_bloc(color_pintura, pintura); + x = x - max_m_x; + retard_pepe = velocitat_pepe; + menejant = true; + pantalla[x/6][(y/6)-1] = es_pepe; + } + en_casa = false; + } + break; + } + pinta_marcadors(); +} - en_casa:=false; - end; - end; - - pinta_marcadors; - -end; /*──────────────────────────────────────────────────────────────────────────*/ -procedure ini_rellontge; -var a,b : byte; -begin +void ini_rellontge() +{ + uint8_t a, b; + do + { + a = (rand()%38); + b = (rand()%29); + } while (pantalla[a][b] == es_una_paret); - /*randomize;*/ - repeat + rellontge.i = (a*6)+4; + rellontge.j = (b+1)*6; + rellontge.viu = true; + Play_WAV(sample[so_ring]); + sense_rellontge = false; +} - a:=random(38)+1; - b:=random(29)+1; - - until not(pantalla[a,b]=es_una_paret); - rellontge.i := (a*6)+4; - rellontge.j := (b+1)*6; - rellontge.viu := true; - Play_WAV (sample[so_ring]); - sense_rellontge := false; - -end; /*──────────────────────────────────────────────────────────────────────────*/ -procedure naix_malo(numero:byte); -var a,b : byte; cont : word; - begin - malo[numero].viu:=true; - /*randomize;*/ - cont := 0; - repeat - a:=random(38)+1; - b:=random(29)+1; - inc(cont); if cont>10000 then begin a:=38; b:=15; break; end; - until (pantalla[a,b]=es_un_bloc_pintat) and (abs(a-(x div 6))>5) and (abs(b-((y div 6)-1))>5); - malo[numero].i:=a; - malo[numero].j:=b; - /*so_de(naiximent_del_malo);*/Play_WAV (sample[so_malo]); - pinta(malo[numero].dibuix,255,((malo[numero].i*6)+4),(malo[numero].j+1)*6,vaddr); -end; +void naix_malo(uint8_t numero) +//var a,b : byte; cont : word; +{ + malo[numero].viu = true; + cont = 0; + uint8_t a, b; + do + { + a = (rand()%38); + b = (rand()%29); + cont++; + if (cont > 10000) + { + a = 37; + b = 14; + break; + } + } while (!((pantalla[a][b] == es_un_bloc_pintat) && (SDL_abs(a-(x/6))>5) && (SDL_abs(b-((y/6)-1))>5))); + + malo[numero].i = a; + malo[numero].j = b; + //so_de(naiximent_del_malo); + Play_WAV(sample[so_malo]); + pinta(malo[numero].dibuix, 255, (malo[numero].i*6)+4, (malo[numero].j+1)*6, vaddr); +} + /*──────────────────────────────────────────────────────────────────────────*/ -procedure mou_malo(numero,direccio:byte); -begin - case direccio of +void mou_malo(uint8_t numero, uint8_t direccio); +{ + switch (direccio) + { + case amunt: + if ( (pantalla[malo[numero].i][malo[numero].j-1] == es_un_bloc_pintat) && (!(pantalla[malo[numero].i][malo[numero].j-1] == es_un_bicho)) ) + { + pinta(malo[numero].dibuix, color_pintura, (malo[numero].i*6)+4, (malo[numero].j+1)*6, vaddr); + pantalla[malo[numero].i, malo[numero].j] = es_un_bloc_pintat; + malo[numero].j--; + pinta(malo[numero].dibuix, 255, (malo[numero].i*6)+4, (malo[numero].j+1)*6, vaddr); + pantalla[malo[numero].i][malo[numero].j] = es_un_bicho; + } + else + if ( (pantalla[malo[numero].i][malo[numero].j-1] == es_pepe) && (!(en_casa)) && (pintura>0) ) + mort(); + else + if ( (pintura==0) && (que_hi_ha == es_un_bloc_pintat) && (pantalla[malo[numero].i][malo[numero].j-1] == es_pepe) && (!(en_casa)) ) + mort(); + break; + + case avall: + if ( (pantalla[malo[numero].i][malo[numero].j+1] == es_un_bloc_pintat) && (!(pantalla[malo[numero].i][malo[numero].j+1] == es_un_bicho)) ) + { + pinta(malo[numero].dibuix, color_pintura, (malo[numero].i*6)+4, (malo[numero].j+1)*6, vaddr); + pantalla[malo[numero].i][malo[numero].j] = es_un_bloc_pintat; + malo[numero].j++; + pinta(malo[numero].dibuix, 255, (malo[numero].i*6)+4, (malo[numero].j+1)*6, vaddr); + pantalla[malo[numero].i][malo[numero].j] = es_un_bicho; + } + else + if ( (pantalla[malo[numero].i][malo[numero].j+1] == es_pepe) && (!(en_casa)) && (pintura>0) ) + mort(); + else + if ( (pintura==0) && (que_hi_ha == es_un_bloc_pintat) && (pantalla[malo[numero].i][malo[numero].j+1] == es_pepe) & (!(en_casa)) ) + mort(); + break; + + case dreta: + if ( (pantalla[malo[numero].i+1][malo[numero].j] == es_un_bloc_pintat) && (!(pantalla[malo[numero].i+1][malo[numero].j] == es_un_bicho)) && (!((malo[numero].i+1) == 39)) ) + { + pinta(malo[numero].dibuix, color_pintura, (malo[numero].i*6)+4, (malo[numero].j+1)*6, vaddr); + pantalla[malo[numero].i][malo[numero].j] = es_un_bloc_pintat; + malo[numero].i++; + pinta(malo[numero].dibuix,255, (malo[numero].i*6)+4, (malo[numero].j+1)*6, vaddr); + pantalla[malo[numero].i][malo[numero].j] = es_un_bicho; + } + else + if ( (pantalla[malo[numero].i+1][malo[numero].j] == es_pepe) || ((malo[numero].i+1) == 38) ) + if ( (!(en_casa)) && (pintura>0) ) + mort(); + else + if ( (pantalla[malo[numero].i+1][malo[numero].j] == es_pepe) || ((malo[numero].i+1) == 38) ) + if ( (pintura==0) && (que_hi_ha==es_un_bloc_pintat) && (pantalla[malo[numero].i+1][malo[numero].j] == es_pepe) && (!(en_casa)) ) + mort(); + else + if ( ((malo[numero].i+1) == 38) and (malo[numero].j == 14) && (en_casa) ) + ja_no_pots_eixir(); + break; + + case esquerra: + if ( (pantalla[malo[numero].i-1][malo[numero].j] == es_un_bloc_pintat) && (!(pantalla[malo[numero].i-1][malo[numero].j] == es_un_bicho)) ) + { + pinta(malo[numero].dibuix, color_pintura, (malo[numero].i*6)+4, (malo[numero].j+1)*6, vaddr); + pantalla[malo[numero].i][malo[numero].j] = es_un_bloc_pintat; + malo[numero].i--; + pinta(malo[numero].dibuix, 255, (malo[numero].i*6)+4, (malo[numero].j+1)*6, vaddr); + pantalla[malo[numero].i][malo[numero].j] = es_un_bicho; + } + else + if ( (pantalla[malo[numero].i-1][malo[numero].j] == es_pepe) && (!(en_casa)) && (pintura>0) ) + mort(); + else + if ( (pintura == 0) && (que_hi_ha == es_un_bloc_pintat) && (pantalla[malo[numero].i-1][malo[numero].j] == es_pepe) && (!(en_casa)) ) + mort(); + break; + } +} - amunt:if (pantalla[malo[numero].i,malo[numero].j-1]=es_un_bloc_pintat) - and (not(pantalla[malo[numero].i,malo[numero].j-1]=es_un_bicho)) then - begin - pinta(malo[numero].dibuix,color_pintura,(malo[numero].i*6)+4,(malo[numero].j+1)*6,vaddr); - pantalla[malo[numero].i,malo[numero].j]:=es_un_bloc_pintat; - dec(malo[numero].j); - pinta(malo[numero].dibuix,255,(malo[numero].i*6)+4,(malo[numero].j+1)*6,vaddr); - pantalla[malo[numero].i,malo[numero].j]:=es_un_bicho; - end - else if (pantalla[malo[numero].i,malo[numero].j-1]=es_pepe) - and (not(en_casa)) - and (pintura>0) then mort - else if (pintura=0) - and (que_hi_ha=es_un_bloc_pintat) - and (pantalla[malo[numero].i,malo[numero].j-1]=es_pepe) - and (not(en_casa)) then mort; - avall:if (pantalla[malo[numero].i,malo[numero].j+1]=es_un_bloc_pintat) - and (not(pantalla[malo[numero].i,malo[numero].j+1]=es_un_bicho)) then - begin - pinta(malo[numero].dibuix,color_pintura,(malo[numero].i*6)+4,(malo[numero].j+1)*6,vaddr); - pantalla[malo[numero].i,malo[numero].j]:=es_un_bloc_pintat; - inc(malo[numero].j); - pinta(malo[numero].dibuix,255,(malo[numero].i*6)+4,(malo[numero].j+1)*6,vaddr); - pantalla[malo[numero].i,malo[numero].j]:=es_un_bicho; - end - else if (pantalla[malo[numero].i,malo[numero].j+1]=es_pepe) - and (not(en_casa)) - and (pintura>0) then mort - else if (pintura=0) - and (que_hi_ha=es_un_bloc_pintat) - and (pantalla[malo[numero].i,malo[numero].j+1]=es_pepe) - and (not(en_casa)) then mort; - dreta:if (pantalla[malo[numero].i+1,malo[numero].j]=es_un_bloc_pintat) - and (not(pantalla[malo[numero].i+1,malo[numero].j]=es_un_bicho)) - and (not((malo[numero].i+1)=39)) then - begin - pinta(malo[numero].dibuix,color_pintura,(malo[numero].i*6)+4,(malo[numero].j+1)*6,vaddr); - pantalla[malo[numero].i,malo[numero].j]:=es_un_bloc_pintat; - inc(malo[numero].i); - pinta(malo[numero].dibuix,255,(malo[numero].i*6)+4,(malo[numero].j+1)*6,vaddr); - pantalla[malo[numero].i,malo[numero].j]:=es_un_bicho; - end - else if (pantalla[malo[numero].i+1,malo[numero].j]=es_pepe) - or ((malo[numero].i+1)=39) then - if (not(en_casa)) - and (pintura>0) then mort - else if (pantalla[malo[numero].i+1,malo[numero].j]=es_pepe) - or ((malo[numero].i+1)=39) then - if (pintura=0) - and (que_hi_ha=es_un_bloc_pintat) - and (pantalla[malo[numero].i+1,malo[numero].j]=es_pepe) - and (not(en_casa)) then mort - else if ((malo[numero].i+1)=39) and (malo[numero].j=15) and (en_casa) then ja_no_pots_eixir; - esquerra:if (pantalla[malo[numero].i-1,malo[numero].j]=es_un_bloc_pintat) - and (not(pantalla[malo[numero].i-1,malo[numero].j]=es_un_bicho)) then - begin - pinta(malo[numero].dibuix,color_pintura,(malo[numero].i*6)+4,(malo[numero].j+1)*6,vaddr); - pantalla[malo[numero].i,malo[numero].j]:=es_un_bloc_pintat; - dec(malo[numero].i); - pinta(malo[numero].dibuix,255,(malo[numero].i*6)+4,(malo[numero].j+1)*6,vaddr); - pantalla[malo[numero].i,malo[numero].j]:=es_un_bicho; - end - else if (pantalla[malo[numero].i-1,malo[numero].j]=es_pepe) - and (not(en_casa)) - and (pintura>0) then mort - else if (pintura=0) - and (que_hi_ha=es_un_bloc_pintat) - and (pantalla[malo[numero].i-1,malo[numero].j]=es_pepe) - and (not(en_casa)) then mort; - end; -end; /*──────────────────────────────────────────────────────────────────────────*/ -procedure moure_malos; -begin - for i:=1 to max_malos do - if malo[i].viu then - begin - /*randomize;*/ - case malo[i].sentit of +void moure_malos() +{ + for (int i=0; ix ) + { + mou_malo(i, esquerra); + malo[i].sentit = rand()%(2+dificultat); + } + else + if ( ((malo[i].i*6)+4)y ) + { + mou_malo(i, amunt); + malo[i].sentit = rand()%(2+dificultat); + } + else + if ( ((malo[i].j+1)*6)x then - begin - mou_malo(i,esquerra); - malo[i].sentit:=random(2+dificultat); - end - else if ((malo[i].i*6)+4)y then - begin - mou_malo(i,amunt); - malo[i].sentit:=random(2+dificultat); - end - else if ((malo[i].j+1)*6)'') and (P<>'') then - escriu_frase('DATOS DEL JOC CARREGATS',color,20,110,vaddr,0,0,1); - - escriu_frase('PULSA UNA TECLA PER A CONTINUAR...',color,20,180,vaddr,0,0,1); - - Repeat until QteclaPuls; - -end; /*──────────────────────────────────────────────────────────────────────────*/ -procedure story_mode; -var +void story_mode() +/*var eixir : boolean; s_vella : byte; musica_fase:string; +*/ +{ + historia(); + num_fase = 1; + + do + { + contador = 0; + ini_vars(num_fase); + const char *musica_fase = num_fase==10 ? musica_fase10 : ( num_fase%2==0 ? musica_fase02 : musica_fase01 ); -begin + if (num_fase = 1) punts = 0; + // if not(mode_nocturne) then pantalla_presentacio(num_fase); + ini_pantalla(); + volcar32(vaddr2, vaddr); + pinta_marcadors(); + eixir = false; + if (midi) then + { + StopMIDI(); + unloadmidi(); + midi = false; + } - historia; - num_fase:=1; - repeat + if (mode_nocturne) + ini_midi(musica_fase_nit); + else + ini_midi(musica_fase); - contador:=0; - ini_vars(num_fase); - case num_fase of + if (midi) Playmidi(); + + /*------------------------------*/ + do + { + if (!playing && midi) PlayMIDI(); + menejant = false; - 1,3,5,7,9 : musica_fase:=musica_fase01; + contador++; + if (retard_pepe>0) retard_pepe--; - 2,4,6,8 : musica_fase:=musica_fase02; + if (teclapuls(SDL_SCANCODE_KP_PLUS)) then + { + munta_velocitat_joc(); + do {} while (TeclaPuls(SDL_SCANCODE_KP_PLUS)); // [RZC 25/01/2004] [TODO] Açò no va a funcionar en SDL. Fer un keyDown i un keyPress. Revisar el tot el codi. + } - 10 : musica_fase:=musica_fase10; + if (teclapuls(SDL_SCANCODE_KP_MINUS)) then + { + baixa_velocitat_joc(); + do {} while (TeclaPuls(SDL_SCANCODE_KP_MINUS)); + } - end; - if num_fase=1 then punts:=0; - /*if not(mode_nocturne) then pantalla_presentacio(num_fase);*/ - ini_pantalla; - volcar32(vaddr2,vaddr); - pinta_marcadors; - eixir:=false; - if midi then begin StopMIDI; unloadmidi; midi:=false; end; - if mode_nocturne then ini_midi(musica_fase_nit) - else ini_midi(musica_fase); + if (retard_pepe == 0) + if (teclapuls(tecla_amunt)) + moure(amunt) + else + if (teclapuls(tecla_avall)) + moure(avall) + else + if (teclapuls(tecla_dreta)) + moure(dreta) + else + if (teclapuls(tecla_esquerra)) + moure(esquerra); - if midi then Playmidi; - /*------------------------------*/ - repeat + if (TeclaPuls(SDL_SCANCODE_M)) + { + map = !map; + do {} while (TeclaPuls(SDL_SCANCODE_M)); + } - if (not(playing)) and (midi) then PlayMIDI; + /*---------*/ + /* if TeclaPuls(KeyN) then + begin + final_fase:=true; + num_fase:=9; + end; - s_vella := s; - gettime(h,m,s,c); + if TeclaPuls(KeyB) then final_fase:=true;*/ + /*---------*/ - menejant:=false; + if (teclapuls(SDL_SCANCODE_1)) + { + amb_so = false; //!amb_so + repeat until not(TeclaPuls(SDL_SCANCODE_1)); + } - inc(contador); - if retard_pepe>0 then dec(retard_pepe); + if (teclapuls(SDL_SCANCODE_ESCAPE)) + { + rellontge.temps = rellontge.temps - SDL_GetTicks(); + escriu_frase("JOC DETINGUT", 147, 69, 89, vaddr2, 0, 0, 0); + escriu_frase("(*ESC* PER A EIXIR)", 147, 38, 101, vaddr2, 0, 0, 0); + espera_VGA(); + volcar32(vaddr2, VGA); + do {} while (TeclaPuls(SDL_SCANCODE_ESCAPE)); + do {} while (!QteclaPuls()); + if (TeclaPuls(SDL_SCANCODE_ESCAPE)) eixir = true; + rellontge.temps = rellontge.temps + SDL_GetTicks(); + } - if teclapuls(KeyKeypadPlus) then - begin - munta_velocitat_joc; - repeat until not(TeclaPuls(KeyKeypadPlus)); - end; + if (rellontge.viu) + if ( (x == rellontge.i) && (y == rellontge.j) ) + { + malos_quets = true; + rellontge.temps = SDL_GetTicks()+10; + rellontge.viu = false; + if (midi) { StopMIDI(); unloadmidi(); midi=false; } + ini_midi(musica_campanes); + if (midi) Playmidi(); + } - if teclapuls(KeyKeypadminus) then - begin - baixa_velocitat_joc; - repeat until not(TeclaPuls(KeyKeypadMinus)); - end; + fer_apareixer_els_malos(); - if retard_pepe=0 then - if teclapuls(tecla_amunt) then moure(amunt) - else if teclapuls(tecla_avall) then moure(avall) - else if teclapuls(tecla_dreta) then moure(dreta) - else if teclapuls(tecla_esquerra) then moure(esquerra); + if (!malos_quets) + { + if (contador % velocitat_pepe == 0) moure_malos(); + } + else + { + if (SDL_GetTicks() >= rellontge.temps) + { + malos_quets = false; + if (midi) { StopMIDI(); unloadmidi(); midi=false; } + if (mode_nocturne) + ini_midi(musica_fase_nit); + else + ini_midi(musica_fase); + if (midi) Playmidi(); + } + } + + if (!no_queden_vides) volcat_de_pantalla(); - if TeclaPuls(KeyM) then begin map:=not(map); repeat until not(TeclaPuls(KeyM)); end; + /*------------------------------*/ - /*---------*/ -/* if TeclaPuls(KeyN) then - begin - final_fase:=true; - num_fase:=9; - end; + } while ( !( eixir || final_fase || no_queden_vides) ); - if TeclaPuls(KeyB) then final_fase:=true;*/ - /*---------*/ + if (final_fase) + if (num_fase < ultima_fase) + { + pinta(pepe, color_pintura, x, y, VGA); + x = pos_ini_x_pepe; + y = pos_ini_y_pepe; + animacio_alegria(); + fadedown(0,0,0,2); + if (midi) { StopMIDI(); unloadmidi(); midi = false; } + level_complete(); + num_fase++; + } + else + if (mode_nocturne) + { + no_queden_vides = true; + pinta(pepe, color_pintura, x, y, VGA); + x = pos_ini_x_pepe; + y = pos_ini_y_pepe; + animacio_alegria(); + fadedown(0,0,0,3); + if (midi) { StopMIDI(); unloadmidi(); midi=false; } + historia_final(); + mode_Dream_Tour = Dream_Tour; + save_records(); + } + else + { + no_queden_vides = true; + pinta(pepe, color_pintura, x, y, VGA); + x = pos_ini_x_pepe; + y = pos_ini_y_pepe; + animacio_alegria(); + fadedown(0,0,0,3); + if (midi) { StopMIDI(); unloadmidi(); midi=false; } + if (dificultat == dificil) + { + historia_final(); + if ( !(mode_rosita == rosita_enabled) && !(mode_amic == job_enabled) ) mode_hard = pepe_dificil; + if ( (mode_rosita == rosita_enabled) && !(mode_amic == job_enabled) ) mode_hard_r = rosita_dificil; + if ( !(mode_rosita == rosita_enabled) && (mode_easy == pepe_facil) && (mode_normal == pepe_normal) && (mode_hard == pepe_dificil) ) + { + mode_rosita = rosita_enabled; + text_rosita(); + } + if ( (mode_rosita == rosita_enabled) && (mode_easy_r == rosita_facil) && (mode_normal_r == rosita_normal) && (mode_hard_r == rosita_dificil) ) + { + mode_amic = job_enabled; + text_amic(); + } + save_records(); + } + else + if (dificultat == normal) + { + final_fals(); + if ( !(mode_rosita == rosita_enabled) && !(mode_amic == job_enabled) ) mode_normal = pepe_normal; + if ( (mode_rosita == rosita_enabled) && !(mode_amic == job_enabled) ) mode_normal_r = rosita_normal; + if ( !(mode_rosita == rosita_enabled) && (mode_easy == pepe_facil) && (mode_normal == pepe_normal) && (mode_hard == pepe_dificil) ) + { + mode_rosita = rosita_enabled; + text_rosita(); + } + if ( (mode_rosita == rosita_enabled) && (mode_easy_r == rosita_facil) && (mode_normal_r == rosita_normal) && (mode_hard_r == rosita_dificil) ) + { + mode_amic = job_enabled; + text_amic(); + } + save_records(); + } + else + { + final_fals(); + if (!(mode_rosita == rosita_enabled) && !(mode_amic == job_enabled) ) mode_easy = pepe_facil; + if ((mode_rosita == rosita_enabled) && !(mode_amic == job_enabled) ) mode_easy_r = rosita_facil; + if (!(mode_rosita == rosita_enabled) && (mode_easy == pepe_facil) && (mode_normal == pepe_normal) && (mode_hard == pepe_dificil) ) + { + mode_rosita = rosita_enabled; + text_rosita; + } + if (!(mode_amic == job_enabled) && (mode_rosita == rosita_enabled) && (mode_easy_r == rosita_facil) && (mode_normal_r == rosita_normal) && (mode_hard_r == rosita_dificil) ) + { + mode_amic = job_enabled; + text_amic; + } + save_records(); + } + no_queden_vides = true; + } + } while (!eixir && !no_queden_vides); - if teclapuls(Key1) then - begin - amb_so:=/*not(amb_so);*/false; - repeat until not(TeclaPuls(Key1)); - end; + if (no_queden_vides) + { + if (midi) { StopMIDI(); unloadmidi(); midi=false; } + missatge_game_over(); + } - if teclapuls(KeyESC) then - begin - escriu_frase('JOC DETINGUT',147,69,89,vaddr2,0,0,0); - escriu_frase('(*ESC* PER A EIXIR)',147,38,101,vaddr2,0,0,0); - espera_VGA; - volcar32(vaddr2,VGA); - repeat until not(TeclaPuls(KeyESC)); - repeat until (QteclaPuls); - if TeclaPuls(KeyESC) then eixir:=true; - end; + if (eixir) + { + fadedown(0,0,0,0); + if (midi) { StopMIDI(); unloadmidi(); midi=false; } + } +} - if rellontge.viu then - if (x = rellontge.i) and (y = rellontge.j) then - begin - malos_quets := true; - rellontge.temps := 0; - rellontge.viu := false; - if midi then begin StopMIDI; unloadmidi; midi:=false; end; - ini_midi(musica_campanes); - if midi then Playmidi; - end; - - fer_apareixer_els_malos; - - if not(malos_quets) then - begin - if contador mod velocitat_pepe = 0 then moure_malos - end - else begin - if (s_vella<>s) then inc(rellontge.temps); - if rellontge.temps = 10 then - begin - malos_quets:=false; - if midi then begin StopMIDI; unloadmidi; midi:=false; end; - if mode_nocturne then ini_midi(musica_fase_nit) - else ini_midi(musica_fase); - if midi then Playmidi; - end; - - end; - - if not(no_queden_vides) then volcat_de_pantalla; - - /*------------------------------*/ - - until (eixir) or (final_fase) or (no_queden_vides); - if final_fase then if num_fase