Files
pepe_port/pepe2000_utf8.cpp
2024-01-25 16:34:30 +01:00

3961 lines
131 KiB
C++

/*──────────────────────────────────────────────────────────────────────────
PEPE EL PINTOR Versió 1.0
Sergi Valor Martínez Juliol-Agost 1999
Versió 1.70 Build 3 Març 2000 (Windows2000)
Port a C/Windows per Raimon Zamora Chanzà (Gener 2024)
──────────────────────────────────────────────────────────────────────────*/
#include "grafix.h"
#include "crt.h"
#include "jinput.h"
#include "dos.h"
#include "pepe_vell.h"
#include "midiplay.h"
// const
#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 NULL
#define ample 248
#define alt 192
#define max_pintura 255
#define color_pared 80
#define l0 10
#define l1 232
#define l2 182
#define l3 10
#define es_un_bloc_per_pintar 0
#define es_pepe 239
#define es_un_bloc_pintat 2
#define es_un_bicho 50
#define es_una_paret 1
#define es_casa 5
#define max_malos 3
#define amunt 0
#define avall 2
#define esquerra 3
#define dreta 1
#define verticalment 0
#define horitzontalment 1
#define no_mou 3
#define max_fondos 13
#define max_fondos_story 11
#define color_marcador_pintura_fondo 34
#define color_borde_m_p 239
#define tamany_m_p 5
#define pos_esq_m_p 266 // on comença el marcador de pintura per l'esquerra
#define pos_dreta_m_p 276 // on comença el marcador de pintura per la dreta
#define pos_base_m_p 180 // on comença el marcador de pintura per la base
#define pos_ini_x_pepe 238
#define pos_ini_y_pepe 96
#define vides_de_pepe 5
#define blocs_fase_0 1102
#define blocs_fase_3 990
#define blocs_fase_7 778
#define blocs_fase_1 1026
#define blocs_fase_4 896
#define blocs_fase_5 989
#define blocs_fase_6 782
#define blocs_fase_2 729
#define blocs_fase_8 866
#define blocs_fase_9 800
#define blocs_fase_10 700
#define ultima_fase 10
#define color_fondo_marcador_punts 15
#define naiximent_del_malo 0
#define mos_a_pepe 1
#define pot_ple 3
#define pot_buit 2
#define vida_extra 4
#define facil 4
#define normal 2
#define dificil 0
#define Left 0
#define Right 1
#define musica_fase01 "./datos/mfase01.dat"
#define musica_fase02 "./datos/mfase02.dat"
#define musica_fase10 "./datos/mfase10.dat"
#define musica_logo "./datos/mlogo.dat"
#define musica_historia "./datos/mhist.dat"
#define musica_canvi_fase "./datos/mlevelc.dat"
#define musica_canvi_fase_n "./datos/mlevelcn.dat"
#define musica_title "./datos/mtitle.dat"
#define musica_game_over "./datos/mgover.dat"
#define musica_time_attack "./datos/mtimea.dat"
#define musica_final_joc "./datos/mfinalbo.dat"
#define musica_final_fals "./datos/mfinalf.dat"
#define musica_nit "./datos/mnit.dat"
#define musica_fase_nit "./datos/mnitfase.dat"
#define musica_campanes "./datos/mcampana.dat"
#define musica_options "./datos/moptions.dat"
#define DONE01 1
#define FINAL01 2
#define FINAL02 3
#define FINAL03 4
#define HIST01 5
#define HIST02 6
#define HIST03 7
#define HIST04 8
#define MENU 9
#define INTRO_N 10
#define INTRO_N2 11
#define LOGO 12
#define PEPE01 13
#define PEPE02 14
#define PEPE03 15
#define PEPE04 16
#define PEPE05 17
#define PEPE06 18
#define PEPE07 19
#define PEPE08 20
#define PEPE09 21
#define PEPE10 22
#define PEPE11 23
#define PEPEFINS 24
#define RECORDS 25
#define SELECT 26
#define TIME 27
#define TIME_FIN 28
#define ULT_FASE 29
#define CLASSIC 30
#define FINALF1 31
#define MENU_NIT 32
#define IN_NIT 33
#define SELECT_N 34
#define OPTIONS 35
#define MENU_S 36
#define DONE05 37
#define FONS_NIT 38
#define TITOL 39
#define CREDITSF 40
#define FINALF2 41
#define FASES 42
#define FINALN01 43
#define FINALN02 44
#define FINALN03 45
#define FINALN04 46
#define rosita_normal 16
#define rosita_dificil 26
#define Dream_tour 7
#define pepe_malo 0 + 56
#define d_malo1 132 + 56
#define gorro 6 + 56
#define d_malo2 138 + 56
#define pepe_gorro 12 + 56
#define d_malo3 144 + 56
#define pepe 18 + 56
#define amic 150 + 56
#define pepe_b 24 + 56
#define amic_m2 156 + 56
#define pepe_m 30 + 56
#define amic_a 162 + 56
#define pepe_m2 36 + 56
#define amic_a2 168 + 56
#define pepe_a 42 + 56
#define amic_b 174 + 56
#define pepe_a2 48 + 56
#define dib_pot 180 + 56
#define rosita3 54 + 56
#define dib_pared 186 + 56
#define rosita 60 + 56
#define dos_p 192 + 56
#define rosita2 66 + 56
#define num1 198 + 56
#define rosita_chillido 72 + 56
#define num2 204 + 56
#define rosita_m 78 + 56
#define num3 210 + 56
#define rosita_m2 84 + 56
#define num4 216 + 56
#define rosita_a 90 + 56
#define num5 222 + 56
#define rosita_a2 96 + 56
#define num6 228 + 56
#define rosita_p 102 + 56
#define num7 234 + 56
#define preso 108 + 56
#define num8 240 + 56
#define rellontge_dib 114 + 56
#define num9 246 + 56
#define rellontge_dib_x 120 + 56
#define num0 252 + 56
#define rellontge_dib_y 126 + 56
#define amic_m 314
#define tick 0 + (320 * 6)
#define num_11 198 + (320 * 6)
#define fletxa 9 + (320 * 6)
#define lletra_a 207 + (320 * 6)
#define fletxa2 18 + (320 * 6)
#define lletra_b 216 + (320 * 6)
#define fletxa3 27 + (320 * 6)
#define lletra_c 225 + (320 * 6)
#define fletxa_final01 36 + (320 * 6)
#define lletra_d 234 + (320 * 6)
#define fletxa_final02 45 + (320 * 6)
#define lletra_e 243 + (320 * 6)
#define fletxa_final03 54 + (320 * 6)
#define lletra_f 252 + (320 * 6)
#define fletxa_final04 63 + (320 * 6)
#define lletra_g 261 + (320 * 6)
#define help_1 72 + (320 * 6)
#define lletra_h 270 + (320 * 6)
#define help_2 81 + (320 * 6)
#define lletra_i 279 + (320 * 6)
#define altaveu_on 90 + (320 * 6)
#define lletra_j 288 + (320 * 6)
#define altaveu_off 99 + (320 * 6)
#define lletra_k 297 + (320 * 6)
#define num_1 108 + (320 * 6)
#define lletra_l 306 + (320 * 6)
#define num_2 117 + (320 * 6)
#define lletra_m 0 + (320 * 15)
#define num_3 126 + (320 * 6)
#define lletra_n 9 + (320 * 15)
#define num_4 135 + (320 * 6)
#define lletra_o 18 + (320 * 15)
#define num_5 144 + (320 * 6)
#define lletra_p 27 + (320 * 15)
#define num_6 153 + (320 * 6)
#define lletra_q 36 + (320 * 15)
#define num_7 162 + (320 * 6)
#define lletra_r 45 + (320 * 15)
#define num_8 171 + (320 * 6)
#define lletra_s 54 + (320 * 15)
#define num_9 180 + (320 * 6)
#define lletra_t 63 + (320 * 15)
#define num_0 189 + (320 * 6)
#define lletra_u 72 + (320 * 15)
#define lletra_y 108 + (320 * 15)
#define lletra_v 81 + (320 * 15)
#define lletra_z 117 + (320 * 15)
#define lletra_w 90 + (320 * 15)
#define lletra_parentesis_o 126 + (320 * 15)
#define lletra_x 99 + (320 * 15)
#define lletra_parentesis_t 135 + (320 * 15)
#define lletra_dos_punts 171 + (320 * 15)
#define lletra_exclamacio_o 144 + (320 * 15)
#define lletra_exclamacio_t 180 + (320 * 15)
#define lletra_apostrof 153 + (320 * 15)
#define lletra_punt 189 + (320 * 15)
#define lletra_guio 162 + (320 * 15)
#define lletra_espai 198 + (320 * 15)
//var
// [RZC 24/01/2024] No crec que estos facen falta ara
//Virscr : Ptr_pantalla;
//VirScr2 : Ptr_pantalla;
//VirScrSP : Ptr_pantalla;
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;
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;
uint8_t x,y; // : byte;
uint8_t i,j; // : byte;
uint8_t pintura; // : byte;
uint8_t que_hi_ha; // : byte;
uint8_t el_que_hi_havia; // : byte;
uint8_t velocitat_joc; // : byte;
uint8_t dificultat; // : byte;
uint8_t antiga_direccio; // : byte;
uint8_t valor_del_bloc; // : byte;
uint8_t cap_on_va_Pepe; // : byte;
uint8_t vides; // : byte;
uint8_t num_fase; // : byte;
uint8_t mode_rosita, mode_amic, mode_easy, mode_normal, mode_hard; // : byte;
uint8_t mode_easy_r, mode_normal_r, mode_hard_r, mode_Dream_tour; // : byte;
uint8_t color_pintura, color_marcador_pintura; // : byte;
uint8_t R, G, B; // : byte;
uint8_t volumen; // : byte;
uint8_t tecla_amunt, tecla_avall, tecla_esquerra, tecla_dreta; // : byte;
uint8_t contador_de_menus; // : byte;
uint8_t retard_pepe; // : byte;
uint8_t velocitat_pepe; // : byte;
bool rosita_selected; // : boolean;
bool no_queden_vides; // : boolean;
bool naiximent; // : boolean;
bool map; // : boolean;
bool menejant; // : boolean;
bool time_attack_mode; // : boolean;
bool story_mode_mode; // : boolean;
bool amic_selected; // : boolean;
bool fletxa_final_fase; // : boolean;
bool malos_quets; // : boolean;
bool amb_so; // : boolean;
bool donar_vida; // : boolean;
bool mode_nocturne; // : boolean;
bool fin_historia; // : boolean;
bool eixir_del_joc; // : boolean;
bool en_casa; // : boolean;
bool final_fase; // : boolean;
bool GM; // : boolean;
bool midi; // : boolean;
bool sense_rellontge; // : boolean;
uint8_t pantalla[38][29];
uint8_t path[20]; // : ARRAY[1..20] of byte;
char nom[20][255];
char nom2[20][255]; // : ARRAY[1..20] of string;
uint8_t *paleta; // : tpaleta;
char frase[255]; // : string;
uint16_t numero_G[91]; // : ARRAY [0..90] of word;
int32_t puntuacio[5]; // : ARRAY [1..5] of longint;
uint8_t minuts[5], segons_tabla[5]; // : ARRAY [1..5] of byte;
uint16_t numero[10]; // : ARRAY [0..9] of word;
int32_t punts; // : longint;
int32_t contador; // : longint;
struct estrela_t
{
uint8_t velocitat;
uint16_t x, y;
};
estrela_t estreles[10]; // estreles : ARRAY[1..10] of RECORD velocitat : byte; x,y : word; end;
uint8_t Puerto, DMA, IRQ; // : byte;
struct rellontge_t
{
uint8_t i, j; // : byte;
bool viu; // : boolean;
uint32_t temps; // : byte;
};
rellontge_t rellontge;
struct malo_t {
uint8_t i, j;
uint8_t sentit;
bool viu;
uint16_t dibuix;
};
malo_t malo[max_malos];
/*──────────────────────────────────────────────────────────────────────────*/
void power_off(uint16_t where)
{
uint16_t i;
uint8_t j;
fadedown(0, 0, 0, 0);
cls32(0, where);
volcar32(where, VGA);
set_color(1, 63, 63, 63);
for (int i = 0; i < 320; ++i)
putpixel(i, 100, 1, where);
for (int i = 0; i <= 160; ++i)
{
putpixel(i, 100, 0, where);
putpixel(320 - i, 100, 0, where);
if (i % 2 == 0)
volcar32(where, VGA);
}
for (int i = 0; i <= 20; ++i)
espera_VGA();
}
/*──────────────────────────────────────────────────────────────────────────*/
void load_mif(int num, uint8_t *where)
{
espera_VGA();
cls32(0, VGA);
FILE *fich = fopen("datos/graf.mif", "rb");
// Reset(fich);
uint8_t num_dibuixos = fgetc(fich);
// fread(&num_dibuixos, 1, 1, fich); // Read(fich,num_dibuixos);
int pos = 1 + (8 * num_dibuixos) + ((num - 1) * 64768);
fseek(fich, pos, SEEK_SET);
fread(where, 64000, 1, fich);
uint8_t paleta[768];
fread(paleta, 768, 1, fich);
setpaleta(paleta);
fclose(fich);
}
/*──────────────────────────────────────────────────────────────────────────*/
void save_cfg()
{
FILE *fich = fopen("pepe.ini", "w");
fprintf(fich, "PC SPEAKER: OFF=0, ON=1\n");
fprintf(fich, "%hhu\n", amb_so ? 1 : 0);
fprintf(fich, "VOLUMEN MIDI(0-10): OFF=0, MAX=10\n");
fprintf(fich, "%hhu\n", volumen);
fprintf(fich, "SYNTHESIZER: General Midi=1, FM Synthesizer=0\n");
fprintf(fich, "%hhu\n", GM ? 1 : 0);
fprintf(fich, "GAME KEYS:\n");
fprintf(fich, "%hhu\n", tecla_amunt);
fprintf(fich, "%hu\n", tecla_amunt_dib);
fprintf(fich, "%hhu\n", tecla_avall);
fprintf(fich, "%hu\n", tecla_avall_dib);
fprintf(fich, "%hhu\n", tecla_dreta);
fprintf(fich, "%hu\n", tecla_dreta_dib);
fprintf(fich, "%hhu\n", tecla_esquerra);
fprintf(fich, "%hu\n", tecla_esquerra_dib);
fclose(fich);
}
/*──────────────────────────────────────────────────────────────────────────*/
void load_cfg()
{
char buffer[100];
uint8_t tmp;
FILE *fich = fopen("pepe.ini", "r");
if (fich)
{
fgets(buffer, 100, fich);
fscanf(fich, "%hhu\n", &tmp); amb_so = tmp;
fgets(buffer, 100, fich);
fscanf(fich, "%hhu\n", &volumen);
fgets(buffer, 100, fich);
fscanf(fich, "%hhu\n", &tmp); GM = tmp;
fgets(buffer, 100, fich);
fscanf(fich, "%hhu\n", &tecla_amunt);
fscanf(fich, "%hu\n", &tecla_amunt_dib);
fscanf(fich, "%hhu\n", &tecla_avall);
fscanf(fich, "%hu\n", &tecla_avall_dib);
fscanf(fich, "%hhu\n", &tecla_dreta);
fscanf(fich, "%hu\n", &tecla_dreta_dib);
fscanf(fich, "%hhu\n", &tecla_esquerra);
fscanf(fich, "%hu\n", &tecla_esquerra_dib);
fclose(fich);
}
else
{
volumen = 0;
amb_so = false;
GM = true;
tecla_amunt = SDL_SCANCODE_UP;
tecla_amunt_dib = 14157;
tecla_avall = SDL_SCANCODE_DOWN;
tecla_avall_dib = 4485;
tecla_dreta = SDL_SCANCODE_RIGHT;
tecla_dreta_dib = 14133;
tecla_esquerra = SDL_SCANCODE_LEFT;
tecla_esquerra_dib = 14109;
save_cfg();
}
amb_so = false;
}
/*──────────────────────────────────────────────────────────────────────────*/
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
intents := 0;
if volumen>0 then
begin
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
if GM then
begin
aux:=setGM;
end
else begin
aux:=setFM;
end;
if aux then
begin
repeat until (loadMIDI(midi_titol));
SetVol(25*volumen);
midi := true;
end else begin volumen := 0; midi := false; end;
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);
}
/*──────────────────────────────────────────────────────────────────────────*/
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)];
}
/*──────────────────────────────────────────────────────────────────────────*/
// [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)];
}
/*──────────────────────────────────────────────────────────────────────────*/
// [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)];
}
/*──────────────────────────────────────────────────────────────────────────*/
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;
}
/*──────────────────────────────────────────────────────────────────────────*/
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)];
}
/*──────────────────────────────────────────────────────────────────────────*/
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;
}
/*──────────────────────────────────────────────────────────────────────────*/
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; i<strlen(nom); ++i)
{
if ((mode2 == 0) & (TeclaPuls(SDL_SCANCODE_SPACE))) break;
if (mode == 0) volcar32(VGA, where);
uint16_t quina_lletra;
switch (nom[i]) {
case 'A' : quina_lletra = lletra_a; break;
case 'B' : quina_lletra = lletra_b; break;
case 'C' : quina_lletra = lletra_c; break;
case 'D' : quina_lletra = lletra_d; break;
case 'E' : quina_lletra = lletra_e; break;
case 'F' : quina_lletra = lletra_f; break;
case 'G' : quina_lletra = lletra_g; break;
case 'H' : quina_lletra = lletra_h; break;
case 'I' : quina_lletra = lletra_i; break;
case 'J' : quina_lletra = lletra_j; break;
case 'K' : quina_lletra = lletra_k; break;
case 'L' : quina_lletra = lletra_l; break;
case 'M' : quina_lletra = lletra_m; break;
case 'N' : quina_lletra = lletra_n; break;
case 'O' : quina_lletra = lletra_o; break;
case 'P' : quina_lletra = lletra_p; break;
case 'Q' : quina_lletra = lletra_q; break;
case 'R' : quina_lletra = lletra_r; break;
case 'S' : quina_lletra = lletra_s; break;
case 'T' : quina_lletra = lletra_t; break;
case 'U' : quina_lletra = lletra_u; break;
case 'V' : quina_lletra = lletra_v; break;
case 'W' : quina_lletra = lletra_w; break;
case 'X' : quina_lletra = lletra_x; break;
case 'Y' : quina_lletra = lletra_y; break;
case 'Z' : quina_lletra = lletra_z; break;
case '0' : quina_lletra = num_0; break;
case '1' : quina_lletra = num_1; break;
case '2' : quina_lletra = num_2; break;
case '3' : quina_lletra = num_3; break;
case '4' : quina_lletra = num_4; break;
case '5' : quina_lletra = num_5; break;
case '6' : quina_lletra = num_6; break;
case '7' : quina_lletra = num_7; break;
case '8' : quina_lletra = num_8; break;
case '9' : quina_lletra = num_9; break;
case ' ' : quina_lletra = lletra_espai; break;
case ':' : quina_lletra = lletra_dos_punts; break;
case '(' : quina_lletra = lletra_parentesis_o; break;
case ')' : quina_lletra = lletra_parentesis_t; break;
case '¡' : quina_lletra = lletra_exclamacio_o; break;
case '!' : quina_lletra = lletra_exclamacio_t; break;
case '*' : quina_lletra = lletra_apostrof; break;
case '.' : quina_lletra = lletra_punt; break;
case '-' : quina_lletra = lletra_guio; break;
}
pinta_number2(quina_lletra, 255, color_determinat,x+(i*8),y,where);
retard(velocitat);
if (mode==0)
{
espera_VGA();
volcar32(where,VGA);
}
}
}
/*──────────────────────────────────────────────────────────────────────────*/
void borrar_frase(int temps, uint8_t *zona_mem1, uint8_t *zona_mem2)
{
retard(temps);
volcar32(zona_mem1, zona_mem2);
espera_VGA();
volcar32(zona_mem2, VGA);
}
/*──────────────────────────────────────────────────────────────────────────*/
void borrat_de_pantalla(uint8_t *where)
{
for (int i = 0; i < 32; ++i)
{
for (int j = 0; j < 200; ++j)
{
putpixel(i, j, 0, where);
putpixel(i + 32, j, 0, where);
putpixel(i + 288, j, 0, where);
putpixel(i + 64, j, 0, where);
putpixel(i + 96, j, 0, where);
putpixel(i + 128, j, 0, where);
putpixel(i + 160, j, 0, where);
putpixel(i + 192, j, 0, where);
putpixel(i + 224, j, 0, where);
putpixel(i + 256, j, 0, where);
}
espera_vga();
volcar32(where, VGA);
}
}
/*──────────────────────────────────────────────────────────────────────────*/
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);
char quina_lletra[2]; quina_lletra[1] = 0;
do
{
if (QteclaPuls())
{
uint8_t aux = agarrartecla();
while (QteclaPuls()) {};
lletra++;
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;
}
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);
}
/*──────────────────────────────────────────────────────────────────────────*/
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()<t) {}
}
// time attack
if (time_attack_mode || (!story_mode_mode && !time_attack_mode) )
{
volcar32(vaddr2, vaddr);
espera_VGA();
volcar32(vaddr2, VGA);
escriu_frase("- TIME ATTACK BEST TIMES -", 1, 20, 30, vaddr, 0, 0, 1);
int i = 150;
for (int x=1; i<6; ++i)
{
int 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] / 10], 255, i+12, j, vaddr);
pinta_number(numero_G[segons_tabla[x] % 10], 255, i+18, j, vaddr);
espera_VGA();
volcar32(vaddr, VGA);
}
espera_VGA();
volcar32(vaddr, VGA);
uint32_t t = SDL_GetTicks()+(segons*1000);
while (!QteclaPuls() && SDL_GetTicks()<t) {}
}
borrat_de_pantalla(vaddr);
}
/*──────────────────────────────────────────────────────────────────────────*/
void gestio_records(uint8_t color)
{
// world tour
if (story_mode_mode)
{
bool trobat = false;
int cont = 1;
while ( !trobat && cont<6 )
{
if ( puntuacio[cont] < punts && !trobat) trobat = true;
if (trobat)
{
for (int i=5; i>=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();
}
/*──────────────────────────────────────────────────────────────────────────*/
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
naiximent_del_malo : begin
for a:=0 to 5 do
for b:=0 to 40 do begin delay(1);sound(b*200);end;
nosound;
end;
mos_a_pepe : begin
a:=10000;
while a>1000 do begin sound(a);delay(1);a:=a-250;end;
nosound;
end;
pot_ple : begin
sound(5000);delay(velocitat_joc*10);nosound;
end;
pot_buit : begin
sound(1000);delay(velocitat_joc*10);nosound;
end;
vida_extra : begin
for a:=0 to 5 do
for b:=40 to 80 do
begin
delay(1);
sound(b*50);
end;
nosound;
end;
end;
*/
}
/*──────────────────────────────────────────────────────────────────────────*/
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);
}
/*──────────────────────────────────────────────────────────────────────────*/
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()<t );
espera_VGA();
volcar32(vaddr3, VGA);
setpaleta(paleta);
//Play_WAV(sample[so_bomba]);
if (i<3) fadedown(0,0,0,0);
}
PutSprite(vaddr2, vaddr, 8683, 234, 151, 43, 27);
espera_VGA();
volcar32(vaddr, VGA);
setpaleta(paleta);
for (int i=1; i<= 2; ++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()<t);
espera_VGA();
volcar32(vaddr3, VGA);
//Play_WAV(sample[so_bomba]);
t = SDL_GetTicks() + 1000;
do
{
if (!playing)
{
ini_midi(musica_final_fals);
if (midi) Playmidi();
}
} while (!QteclaPuls() && SDL_GetTicks()<t);
}
PutSprite(vaddr2, vaddr, 400, 138, 26, 170, 148);
PutSprite(vaddr2, vaddr3, 400, 138, 26, 170, 148);
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()<t);
espera_VGA();
volcar32(vaddr3,VGA);
//Play_WAV (sample[so_bomba]);
t = SDL_GetTicks() + 2000;
do
{
if (!playing)
{
ini_midi(musica_final_fals);
if (midi) Playmidi();
}
} while (!QteclaPuls() && SDL_GetTicks()<t);
} while (!Qteclapuls() && i<3);
fadedown(0,0,0,0);
if (midi)
{
StopMIDI;
unloadmidi;
midi = false;
}
Tancarvirtual(virscr3);
}
/*──────────────────────────────────────────────────────────────────────────*/
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()<t);
fadeup(paleta_blanca, 1);
fadedown(0,0,0,0);
if (midi)
{
StopMIDI();
unloadmidi();
midi = false;
}
}
/*──────────────────────────────────────────────────────────────────────────*/
void titol_del_joc()
/*var
salta_intro : boolean;
i : word; j : byte;
R,G,B : byte;
temps, temps2 : word;
*/
{
bool salta_intro = false; // [RZC 24/01/2024] [NOTA] Mirant el codi no pareix que 'salta_intro' faça res...
uint8_t h = get_hours();
if ( h >= 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);
uint32_t t = SDL_GetTicks()+6000;
do {} while (!QteclaPuls() && SDL_GetTicks()<t);
}
if (mode_nocturne)
{
if (!midi) ini_midi(musica_nit);
if (!playing && midi) Playmidi();
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);
ini_midi(musica_historia);
if (midi) 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()) 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()<t);
for (int num=1; num<=5; ++num)
{
int x, y, w, h;
switch (num)
{
case 1: x = 95; y = 18; w = 124; h = 31; break;
case 2: x = 92; y = 48; w = 134; h = 67; break;
case 3: x = 107; y = 115; w = 98; h = 24; break;
case 4: x = 113; y = 138; w = 86; h = 13; break;
case 5: x = 51; y = 151; w = 213; h = 30; break;
}
int i_int = 200;
uint32_t velocitat = 0;
uint16_t offset = x+(y*320);
while ( i_int > 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--;
}
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--;
}
}
uint32_t t = SDL_GetTicks()+10000;
do {} while (!QteclaPuls() && SDL_GetTicks()<t);
fadedown(0,0,0,3);
if (midi)
{
StopMIDI();
unloadmidi();
midi = false;
}
}
/*──────────────────────────────────────────────────────────────────────────*/
void reixa(uint16_t posx, uint8_t longitud, uint8_t *where)
{
line(posx, 30, posx, 197-longitud, 0, where);
line(posx+1, 30, posx+1, 197-longitud, 0, where);
line(posx+2, 30, posx+2, 198-longitud, 0, where);
line(posx+3, 30, posx+3, 198-longitud, 0, where);
line(posx+4, 30, posx+4, 199-longitud, 0, where);
line(posx+5, 30, posx+5, 199-longitud, 0, where);
line(posx+6, 30, posx+6, 198-longitud, 0, where);
line(posx+7, 30, posx+7, 198-longitud, 0, where);
line(posx+8, 30, posx+8, 197-longitud, 0, where);
line(posx+9, 30, posx+9, 197-longitud, 0, where);
}
/*──────────────────────────────────────────────────────────────────────────*/
void historia_final();
{
cls32(0, VGA);
ini_midi(musica_final_joc);
if (midi) Playmidi();
// dibuix 1
if (mode_nocturne) load_mif(FINALN01, vaddr) else load_mif(FINAL01, vaddr);
getpaleta(paleta);
blackout();
volcar32(vaddr, vaddr2);
if (mode_nocturne) for (int i=0; i<=3; ++i) reixa(100+(i*40), 0, vaddr2);
espera_VGA();
volcar32(vaddr2, VGA);
fadeup(paleta, 0);
if (mode_nocturne)
for (int j=0; j<=166; ++j)
{
volcar32(vaddr, vaddr2);
for (int i=0; i<=3; ++i) reixa(100+(i*40)+(j % 2), j, vaddr2);
espera_VGA(); espera_VGA();
volcar32(vaddr2, VGA);
}
if (mode_nocturne) retard(200) else retard(600);
fadedown(0,0,0,0);
// dibuix 2
if (mode_nocturne) load_mif(FINALN02, vaddr) else load_mif(FINAL02, vaddr);
set_color(1,32,0,0);
getpaleta(paleta);
blackout();
espera_VGA();
volcar32(vaddr, VGA);
fadeup(paleta, 0);
if (mode_nocturne)
for (int i=0; i<=200; ++i)
{
j = 63 - SDL_abs(32 - (i%64));
set_color(1, j, 0, 0);
espera_VGA(); espera_VGA(); espera_VGA(); espera_VGA();
}
if (!mode_nocturne) retard(600);
fadedown(0,0,0,0);
// dibuix 3
if (mode_nocturne) load_mif(FINALN03, vaddr) else load_mif(FINAL03, vaddr);
set_color(253,39, 0,48);
set_color(254, 0,63, 6);
set_color(255, 0, 3,63);
getpaleta(paleta);
blackout();
espera_VGA();
volcar32(vaddr, VGA);
fadeup(paleta, 0);
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()<t);
fadedown(0,0,0,0);
// dibuix 4
if (mode_nocturne)
{
load_mif(FINALN04, vaddr);
getpaleta(paleta);
blackout();
espera_VGA();
volcar32(vaddr, VGA);
fadeup(paleta, 0);
retard(600);
fadedown(0,0,0,0);
}
credits();
}
/*──────────────────────────────────────────────────────────────────────────*/
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)*/
{
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);
}
}
/*──────────────────────────────────────────────────────────────────────────*/
void pilla_temps()
{
hora = SDL_GetTicks() / 1000;
}
/*──────────────────────────────────────────────────────────────────────────*/
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;
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(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);
}
/*──────────────────────────────────────────────────────────────────────────*/
void resultat_time_attack()
{
fadedown(0,0,0,1);
load_mif(TIME_FIN, vaddr2);
volcar32(vaddr2, vaddr);
ini_midi(musica_game_over);
if (midi) Playmidi();
const uint16_t minuts = (temps_final % 3600) / 60;
const uint16_t segons = (temps_final % 3600) % 60;
const int 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);
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;
}
}
/*──────────────────────────────────────────────────────────────────────────*/
void missatge_game_over()
{
fadedown(0,0,0,2);
load_mif(PEPEFINS, vaddr);
ini_midi(musica_game_over);
if (midi) Playmidi();
if (time_attack_mode)
for (int i=50; i<=280; ++i)
for (int j=130; j<=190; ++j)
putpixel(i, j, 239, vaddr);
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);
espera_VGA();
volcar32(vaddr2, VGA);
retard(200);
}
if (story_mode_mode)
{
const int i = 125; // 135
const int j = 170;
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);
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;
}
}
/*──────────────────────────────────────────────────────────────────────────*/
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;
{
int temp = 0;
bool error = false;
FILE *fich = fopen("datos/comp.dat", "r");
reset(fich);
for i:=1 to filesize(fich)-9 do
begin
read(fich,aux);
inc(temp,aux);
end;
if temp<>tamany_comp then error:=true;
Close(fich);
temp:=0;
assign(fich,'datos\sprites.dat');
reset(fich);
for i:=1 to filesize(fich) do
begin
read(fich,aux);
inc(temp,aux);
end;
if temp<>tamany_sprites then error:=true;
Close(fich);
if error then
begin
setmode($3);
Writeln('Algun fitxer ha estat modificat');
Writeln('No puc executar el programa...');
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);
}
}
/*----------------------------------------------------*/
/*──────────────────────────────────────────────────────────────────────────*/
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;
if (num_fase == 0)
vides = 0;
else if (num_fase == 1)
vides = vides_de_pepe;
else
vides = vides; // Super util
pintura = max_pintura;
en_casa = true;
final_fase = false;
rellontge.viu = false;
rellontge.temps = 0;
temps = 0;
carrega_pantalla(num_fase);
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;
// ini malos
for (int i=0; i<max_malos; ++i) malo[i].viu = false;
malo[0].dibuix = d_malo1;
malo[1].dibuix = d_malo2;
malo[2].dibuix = num_fase == ultima_fase ? pepe_malo : d_malo3;
}
/*──────────────────────────────────────────────────────────────────────────*/
void ini_matrius()
{
// fondos
path[1] = PEPE01;
path[2] = PEPE02;
path[3] = PEPE03;
path[4] = PEPE04;
path[5] = PEPE05;
path[6] = PEPE06;
path[7] = PEPE07;
path[8] = PEPE08;
path[9] = PEPE09;
path[10] = PEPE10;
path[11] = PEPE11;
path[12] = ULT_FASE;
path[13] = TIME;
path[14] = FONS_NIT;
// matriu de numeros
numero[0] = num0;
numero[1] = num1;
numero[2] = num2;
numero[3] = num3;
numero[4] = num4;
numero[5] = num5;
numero[6] = num6;
numero[7] = num7;
numero[8] = num8;
numero[9] = num9;
numero_G[0] = num_0;
numero_G[1] = num_1;
numero_G[2] = num_2;
numero_G[3] = num_3;
numero_G[4] = num_4;
numero_G[5] = num_5;
numero_G[6] = num_6;
numero_G[7] = num_7;
numero_G[8] = num_8;
numero_G[9] = num_9;
numero_G[10] = num_11;
load_records();
}
/*──────────────────────────────────────────────────────────────────────────*/
void pinta_marcadors()
{
// pintura
for (int i=pos_esq_m_p; i<=pos_dreta_m_p; ++i)
for (int j=(pos_base_m_p-(max_pintura / tamany_m_p)); j<=pos_base_m_p; ++j)
putpixel(i, j, color_marcador_pintura_fondo, vaddr);
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, vaddr);
if (pintura==0)
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, pos_base_m_p, color_marcador_pintura_fondo, vaddr);
if (num_fase>0)
{
// vides
pinta_number(numero_G[vides], 255, 268, 169, vaddr);
// punts
const int i = 265;
const int 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 / 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);
}
}
/*──────────────────────────────────────────────────────────────────────────*/
void ini_pantalla()
var i,j : word;
i_int:integer;
offset : word;
VirscrFase : Ptr_pantalla;
vaddrFase : Word;
{
uint8_t *vaddrFase = (uint8_t*)malloc(64000); // 6400???
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);
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 ((num_fase==ultima_fase) && !mode_nocturne) 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 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 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);
}
// 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);
}
// 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);
if (i==14) delay(2000);
espera_VGA();
Volcar32(vaddr, VGA);
}
free(vaddrFase);
}
/*──────────────────────────────────────────────────────────────────────────*/
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();
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;
}
}
}
/*──────────────────────────────────────────────────────────────────────────*/
void volcat_de_pantalla()
{
volcar32(vaddr, vaddr2);
// 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)
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;
}
if ( (x==pos_ini_x_pepe) && (y==pos_ini_y_pepe) ) 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);
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);
}
// 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 l'altaveu
if (amb_so)
pinta_number(altaveu_on, 255, 2, 188, vaddr2);
else
pinta_number(altaveu_off, 255, 2, 188, 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);
}
espera_vga();
volcar32(vaddr2, VGA);
}
/*──────────────────────────────────────────────────────────────────────────*/
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;
}
/*──────────────────────────────────────────────────────────────────────────*/
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;
}
/*──────────────────────────────────────────────────────────────────────────*/
void animacio_mort()
{
Play_WAV(sample[so_mort]);
for (int i=1; i<=5; ++i)
{
retard(10);
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);
retard(10);
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();
}
/*──────────────────────────────────────────────────────────────────────────*/
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)
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)
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);
}
}
/*──────────────────────────────────────────────────────────────────────────*/
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;
}
}
/*──────────────────────────────────────────────────────────────────────────*/
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;
}
}
/*──────────────────────────────────────────────────────────────────────────*/
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;
}
/*──────────────────────────────────────────────────────────────────────────*/
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();
}
}
/*──────────────────────────────────────────────────────────────────────────*/
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();
}
}
/*──────────────────────────────────────────────────────────────────────────*/
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)
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);
x = x + max_m_x;
//if not(amb_so) then retard(velocitat_joc);
retard_pepe = velocitat_pepe;
menejant = true;
pantalla[x/6][(y/6)-1] = es_pepe;
}
}
else
if ( (x==232) && (y==96) ) omplir_pot();
break;
case avall:
if ( ((y+max_m_y) <= l2) && !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)
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 && (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();
}
/*──────────────────────────────────────────────────────────────────────────*/
void ini_rellontge()
{
uint8_t a, b;
do
{
a = (rand()%38);
b = (rand()%29);
} while (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;
}
/*──────────────────────────────────────────────────────────────────────────*/
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);
}
/*──────────────────────────────────────────────────────────────────────────*/
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;
}
}
/*──────────────────────────────────────────────────────────────────────────*/
void moure_malos()
{
for (int i=0; i<max_malos; ++i)
if (malo[i].viu)
{
//randomize;
switch (malo[i].sentit)
{
case horitzontalment:
if ( ((malo[i].i*6)+4)>x )
{
mou_malo(i, esquerra);
malo[i].sentit = rand()%(2+dificultat);
}
else
if ( ((malo[i].i*6)+4)<x )
{
mou_malo(i, dreta);
malo[i].sentit = rand()%(2+dificultat);
}
else
malo[i].sentit = verticalment;
break;
case verticalment:
if ( ((malo[i].j+1)*6)>y )
{
mou_malo(i, amunt);
malo[i].sentit = rand()%(2+dificultat);
}
else
if ( ((malo[i].j+1)*6)<y )
{
mou_malo(i, avall);
malo[i].sentit = rand()%(2+dificultat);
}
else
malo[i].sentit = horitzontalment;
break;
case 2:
case 3:
case 4:
case 5:
malo[i].sentit = rand()%(2+dificultat);
break;
}
}
}
/*──────────────────────────────────────────────────────────────────────────*/
void fer_apareixer_els_malos()
{
if ( blocs_per_pintar == ((total_blocs_per_pintar / 4)*3) )
if (!malo[0].viu) naix_malo(0);
if ( blocs_per_pintar == ((total_blocs_per_pintar / 4)*2) )
if (!malo[1].viu) naix_malo(1);
// rellontge
if (story_mode_mode)
if ( blocs_per_pintar == (total_blocs_per_pintar / 3) )
if ( !rellontge.viu && sense_rellontge && (num_fase<10) ) ini_rellontge();
// malo 3
if ( (num_fase==10) || (dificultat==dificil) || mode_nocturne )
if ( blocs_per_pintar == total_blocs_per_pintar / 4 )
if (!malo[2].viu) naix_malo(2);
}
/*──────────────────────────────────────────────────────────────────────────*/
void load_setup_i_versio()
{
const int color = 80;
bool tot_ok = true;
espera_VGA();
cls32(226, VGA);
escriu_frase("PEPE EL PINTOR", color, 20, 20, vaddr, 0, 0, 1);
escriu_frase("VERSIO 1.70 BUILD 3", color, 20, 30, vaddr, 0, 0, 1);
FILE *fich = fopen("datos/story.dat", "r");
if (!fich)
{
tot_ok = false;
escriu_frase('GENERANT RECORDS',198,20,110,vaddr,0,0,1);
nom[1] = "SERGI"; puntuacio[1] = 200000;
nom[2] = "PEPE"; puntuacio[2] = 150000;
nom[3] = "ICEKAS"; puntuacio[3] = 125000;
nom[4] = "ROSITA"; puntuacio[4] = 100000;
nom[5] = "JOB"; puntuacio[5] = 50000;
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", "r");
if (!fich)
{
tot_ok = false;
escriu_frase('GENERANT RECORDS',198,20,110,vaddr,0,0,1);
nom2[1] = "SERGI"; minuts[1] = 1; segons_tabla[1] = 45;
nom2[2] = "PEPE"; minuts[2] = 2; segons_tabla[2] = 00;
nom2[3] = "ICEKAS"; minuts[3] = 2; segons_tabla[3] = 10;
nom2[4] = "ROSITA"; minuts[4] = 2; segons_tabla[4] = 20;
nom2[5] = "JOB"; minuts[5] = 2; segons_tabla[5] = 30;
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);
load_records();
if (tot_ok) 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);
do {} while (!QteclaPuls);
}
/*──────────────────────────────────────────────────────────────────────────*/
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 );
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;
}
if (mode_nocturne)
ini_midi(musica_fase_nit);
else
ini_midi(musica_fase);
if (midi) Playmidi();
/*------------------------------*/
do
{
if (!playing && midi) PlayMIDI();
menejant = false;
contador++;
if (retard_pepe>0) retard_pepe--;
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.
}
if (teclapuls(SDL_SCANCODE_KP_MINUS)) then
{
baixa_velocitat_joc();
do {} while (TeclaPuls(SDL_SCANCODE_KP_MINUS));
}
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 (TeclaPuls(SDL_SCANCODE_M))
{
map = !map;
do {} while (TeclaPuls(SDL_SCANCODE_M));
}
/*---------*/
/* if TeclaPuls(KeyN) then
begin
final_fase:=true;
num_fase:=9;
end;
if TeclaPuls(KeyB) then final_fase:=true;*/
/*---------*/
if (teclapuls(SDL_SCANCODE_1))
{
amb_so = false; //!amb_so
repeat until not(TeclaPuls(SDL_SCANCODE_1));
}
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 (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();
}
fer_apareixer_els_malos();
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();
/*------------------------------*/
} while ( !( eixir || final_fase || no_queden_vides) );
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 (no_queden_vides)
{
if (midi) { StopMIDI(); unloadmidi(); midi=false; }
missatge_game_over();
}
if (eixir)
{
fadedown(0,0,0,0);
if (midi) { StopMIDI(); unloadmidi(); midi=false; }
}
}
/*──────────────────────────────────────────────────────────────────────────*/
procedure time_attack;
var
eixir : boolean;
begin
num_fase:=0;
ini_vars(num_fase);
ini_pantalla;
volcar32(vaddr2,vaddr);
pinta_marcadors;
dificultat:=normal;
rosita_selected:=false;
amic_selected:=false;
color_pintura:=162;
color_marcador_pintura:=162;
espera_VGA;
volcar32(vaddr,VGA);
pinta_marcadors;
volcat_de_pantalla;
eixir:=false;
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
ini_midi(musica_time_attack);
if midi then Playmidi;
contador:=0;
repeat until TeclaPuls(tecla_esquerra);
pilla_temps;
/*------------------------------*/
repeat
if (not(playing)) and (midi) then PlayMIDI;
inc(contador);
if retard_pepe>0 then dec(retard_pepe);
menejant:=false;
if retard_pepe=0 then begin
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);
end;
if teclapuls(Key1) then
begin
amb_so:=/*not(amb_so);*/false;
repeat until not(TeclaPuls(Key1));
end;
if teclapuls(KeyESC) then
begin
eixir:=true;
end;
/*if TeclaPuls(KeyN) then final_fase:=true;*/
fer_apareixer_els_malos;
posa_el_temps(vaddr);
if (contador mod velocitat_pepe) = 0 then moure_malos;
if not(no_queden_vides) then volcat_de_pantalla;
/*------------------------------*/
until (eixir) or (final_fase) or (no_queden_vides);
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
if final_fase then
begin
pinta(pepe,color_pintura,x,y,VGA);
x:=pos_ini_x_pepe;
y:=pos_ini_y_pepe;
animacio_alegria;
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
resultat_time_attack;
end
else if (eixir) then
begin
fadedown(0,0,0,0);
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
end;
if no_queden_vides then
begin
missatge_game_over;
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
end;
end;
/*──────────────────────────────────────────────────────────────────────────*/
procedure menu_joc;
var
temps,temps2 : word;
pos,pos_dif,pos_m,cord_y : byte;
i,j,a_on_pinte_el_marc : word;
aux : byte;
tecla_incorrecta : boolean;
i_int:integer;
dib_aux : word;
percentatge : byte;
procedure ini_estreles;
var i : byte;
begin
cls32(0,vaddr);
for i:=1 to 10 do
begin
estreles[i].x:=random(290);
estreles[i].y:=1;
estreles[i].velocitat:=random(3)+1;
end;
end;
procedure fondo_estreles(from,where:word);
var
i,a,b : byte;
begin
for i:=1 to 10 do
begin
if (estreles[i].y + estreles[i].velocitat) > 191 then
begin
estreles[i].x := random(290);
estreles[i].y := 1;
estreles[i].velocitat := random(3) + 1;
end
else estreles[i].y := estreles[i].y + (estreles[i].velocitat);
Putsprite(from,where,26747,9,8,estreles[i].x,estreles[i].y);
end;
end;
procedure actualitza_options(from,where:word);
var i,j:byte;
begin
cls32(0,vaddr2);
for i:=0 to 3 do
for j:=0 to 5 do Putsprite(vaddr,where,48000,50,50,j*50,i*50);
fondo_estreles(vaddr,vaddr2);
Putsprite(from,where,30400,165,28,70,5);
Putsprite(from,where,39733,116,18,22,43);
if amb_so then Putsprite(from,where,40492,25,17,149,45)
else Putsprite(from,where,39557,28,20,150,42);
Putsprite(from,where,57332,113,19,20,81);
if GM then Putsprite(from,where,51573,107,17,141,81)
else Putsprite(from,where,51684,130,20,141,81);
Putsprite(from,where,45172,39,20,22,61);
case volumen of
0 : Putsprite(from,where,45551,32,18,70,62);
1 : Putsprite(from,where,45580,16,18,70,62);
2 : Putsprite(from,where,45596,16,18,70,62);
3 : Putsprite(from,where,45611,16,18,70,62);
4 : Putsprite(from,where,45626,16,18,70,62);
5 : Putsprite(from,where,45642,16,18,70,62);
6 : Putsprite(from,where,45658,16,18,70,62);
7 : Putsprite(from,where,45673,16,18,70,62);
8 : Putsprite(from,where,45689,16,18,70,62);
9 : Putsprite(from,where,45705,14,18,71,62);
10 : Putsprite(from,where,45720,40,18,70,62);
end;
Putsprite(from,where,21673,84,73,22,117);
Putsprite(vaddr,vaddr2,tecla_amunt_dib,21,21,135,110);
Putsprite(vaddr,vaddr2,tecla_avall_dib,21,21,135,131);
Putsprite(vaddr,vaddr2,tecla_esquerra_dib,21,21,135,152);
Putsprite(vaddr,vaddr2,tecla_dreta_dib,21,21,135,173);
/* fletxes i ESC */
Putsprite(vaddr,vaddr2,31527,47,24,238,172);
/* Complet + percentatge */
Putsprite(vaddr,vaddr2,58405,70,17,200,120);
Putsprite(vaddr,vaddr2,percentatge*29,29,14,220,142);
Pinta_number(fletxa3,255,13,cord_y,vaddr2);
end;
procedure pinta_marcs(posicio:word);
var
i : word;
begin
volcar32(vaddr,vaddr2);
for i:=posicio to posicio+75 do
begin
putpixel(i,11,15,vaddr2);
putpixel(i,12,15,vaddr2);
putpixel(i,90,15,vaddr2);
putpixel(i,91,15,vaddr2);
end;
for i:=11 to 91 do
begin
putpixel(posicio,i,15,vaddr2);
putpixel(posicio+1,i,15,vaddr2);
putpixel(posicio+74,i,15,vaddr2);
putpixel(posicio+75,i,15,vaddr2);
end;
if mode_nocturne then
begin
if mode_Dream_Tour=Dream_tour then pinta_number_zoom(2,tick,255,216,143,vaddr2);
end
else if (pos=1) or (pos=3) then
begin
if mode_easy=pepe_facil then pinta_number_zoom(2,tick,255,216,118,vaddr2);
if mode_normal=pepe_normal then pinta_number_zoom(2,tick,255,216,143,vaddr2);
if mode_hard=pepe_dificil then pinta_number_zoom(2,tick,255,216,168,vaddr2);
end
else begin
if mode_easy_r=rosita_facil then pinta_number_zoom(2,tick,255,216,118,vaddr2);
if mode_normal_r=rosita_normal then pinta_number_zoom(2,tick,255,216,143,vaddr2);
if mode_hard_r=rosita_dificil then pinta_number_zoom(2,tick,255,216,168,vaddr2);
end;
if pos_dif=1 then pinta_number(fletxa,255,98,118,vaddr2);
if pos_dif=2 then pinta_number(fletxa,255,98,143,vaddr2);
if pos_dif=3 then pinta_number(fletxa,255,98,168,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
end;
procedure desp_marc(direccio:byte);
begin
case direccio of
Left: if pos=3 then
begin
i:=219;
while i>136 do
begin
pinta_marcs(i);
i:=i-3;
if i<137 then pinta_marcs(137);
end;
end
else if pos=2 then
begin
i:=137;
while i>54 do
begin
pinta_marcs(i);
i:=i-3;
if i<55 then pinta_marcs(55);
end;
end;
Right:if pos=1 then
begin
i:=55;
while i<138 do
begin
pinta_marcs(i);
i:=i+3;
if i>137 then pinta_marcs(137);
end;
end
else if pos=2 then
begin
i:=137;
while i<220 do
begin
pinta_marcs(i);
i:=i+3;
if i>219 then pinta_marcs(219);
end;
end;
end;
end;
begin
time_attack_mode:=false;
story_mode_mode:=false;
percentatge:=0;
if mode_easy=pepe_facil then inc(percentatge);
if mode_normal=pepe_normal then inc(percentatge);
if mode_hard=pepe_dificil then inc(percentatge);
if mode_easy_r=rosita_facil then inc(percentatge);
if mode_normal_r=rosita_normal then inc(percentatge);
if mode_hard_r=rosita_dificil then inc(percentatge);
if mode_Dream_tour=Dream_tour then inc(percentatge);
if mode_nocturne then load_mif(menu_nit,vaddr)
else load_mif(menu,vaddr);
load_mif(menu_s,vaddr2);
espera_vga;
volcar32(vaddr,VGA);
if not(mode_nocturne) then
begin
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
ini_midi(musica_title);
if midi then Playmidi;
end
else begin
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
ini_midi(musica_nit);
if midi then Playmidi;
if not(midi) then ini_midi(musica_nit);
if (not(Playing)) and (midi) then PlayMidi;
end;
i:=320;
if not(mode_nocturne) then
while (i>20) do
begin
espera_VGA;
volcar32(vaddr,VGA);
Put_Sprite_ICE_dreta(vaddr2,VGA,16983,142,26,i,53);
dec(i,10);
if i=20 then Put_Sprite_ICE_dreta(vaddr2,vaddr,16983,142,26,i,53);
end;
i:=320;
while (i>20) do
begin
espera_VGA;
volcar32(vaddr,VGA);
if not(mode_nocturne) then Put_Sprite_ICE_dreta(vaddr2,VGA,28822,132,25,i,90)
else Put_Sprite_ICE_dreta(vaddr2,VGA,28958,132,25,i,90);
dec(i,10);
if i=20 then if not(mode_nocturne) then Put_Sprite_ICE_dreta(vaddr2,vaddr,28822,132,25,i,90)
else Put_Sprite_ICE_dreta(vaddr2,vaddr,28958,132,25,i,90);
end;
i:=320;
while (i>20) do
begin
espera_VGA;
volcar32(vaddr,VGA);
Put_Sprite_ICE_dreta(vaddr2,VGA,40982,152,24,i,128);
dec(i,10);
if i=20 then Put_Sprite_ICE_dreta(vaddr2,vaddr,40982,152,24,i,128);
end;
i:=320;
while (i>20) do
begin
espera_VGA;
volcar32(vaddr,VGA);
Put_Sprite_ICE_dreta(vaddr2,VGA,52182,103,30,i,163);
dec(i,10);
if i=20 then Put_Sprite_ICE_dreta(vaddr2,vaddr,52182,103,30,i,163);
end;
i_int:=-35;
while (i_int<15) do
begin
espera_VGA;
volcar32(vaddr,VGA);
espera_VGA;
Put_Sprite_ICE_dalt(vaddr2,VGA,5463,133,33,23,i_int);
inc(i_int,10);
if i_int=15 then Put_Sprite_ICE_dalt(vaddr2,vaddr,5463,133,33,23,i_int);
end;
espera_VGA;
volcar32(vaddr,VGA);
gettime(h,m,s,c);
temps:=h*3600+m*60+s;
eixir_del_joc:=false;
pos_m:=2;
pinta_number(fletxa2,255,13,100,VGA);
cord_y:=100;
repeat
if (not(playing)) then
if (mode_nocturne) then begin ini_midi(musica_nit); if midi then PlayMIDI; end
else begin ini_midi(musica_title); if midi then PlayMIDI; end;
gettime(h,m,s,c);
temps2:=h*3600+m*60+s;
if (TeclaPuls(KeyArrowDown)) and (pos_m<4) then
begin
inc(pos_m);
case pos_m of
1:cord_y:=62;
2:cord_y:=100;
3:cord_y:=138;
4:cord_y:=174;
end;
volcar32(vaddr,vaddr2);
pinta_number(fletxa2,255,13,cord_y,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
gettime(h,m,s,c);
temps:=h*3600+m*60+s;
temps2:=h*3600+m*60+s+1;
Play_WAV (sample[so_fletxa]);
repeat until not(TeclaPuls(KeyArrowDown));
end;
if (TeclaPuls(KeyArrowUp)) and (pos_m>1) then
begin
dec(pos_m);
if (mode_nocturne) and (pos_m=1) then pos_m:=2;
case pos_m of
1:cord_y:=62;
2:cord_y:=100;
3:cord_y:=138;
4:cord_y:=174;
end;
volcar32(vaddr,vaddr2);
pinta_number(fletxa2,255,13,cord_y,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
gettime(h,m,s,c);
temps:=h*3600+m*60+s;
temps2:=h*3600+m*60+s+1;
Play_WAV (sample[so_fletxa]);
repeat until not(TeclaPuls(KeyArrowUp));
end;
volcar32(vaddr,vaddr2);
if (temps2 mod 2)=0 then pinta_number(fletxa2,255,13,cord_y,vaddr2)
else pinta_number(fletxa2,255,15,cord_y,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
until (TeclaPuls(KeyENTER)) or (TeclaPuls(KeyESC)) or ((temps2-temps)>=10);
if TeclaPuls(KeyENTER) then Play_WAV (sample[so_enter]);
if teclapuls(keyESC) then
begin
pos_m:=5;
StopMIDI;
power_off(vaddr);
eixir_del_joc:=true;
end;
if (Temps2-temps)>=10 then
begin
pos_m:=5;
fadedown(0,0,0,0);
escriu_records(10);
titol_del_joc;
end;
/* TIME ATTACK */
if (pos_m=1) and (not(mode_nocturne)) then
begin
time_attack_mode:=true;
fadedown(0,0,0,1);
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
time_attack;
end;
/* PEPE VELL */
if (pos_m=3) then
begin
fadedown(0,0,0,1);
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
pepe_text;
end;
/* STORY MODE */
if (pos_m=2) then
begin
borrat_de_pantalla(vaddr);
repeat until not(TeclaPuls(KeyENTER));
story_mode_mode:=true;
rosita_selected:=false;
amic_selected:=false;
if (mode_nocturne) then load_mif(select_n,vaddr)
else load_mif(select,vaddr);
if not(mode_rosita=rosita_enabled) then
begin
for i:=137 to 212 do
for j:=11 to 91 do putpixel(i,j,0,vaddr);
putpixel(145,19,14,vaddr);
putpixel(197,44,14,vaddr);
putpixel(149,78,14,vaddr);
putpixel(194,77,14,vaddr);
putpixel(172,54,14,vaddr);
putpixel(198,65,14,vaddr);
putpixel(177,38,9,vaddr);
putpixel(169,82,9,vaddr);
putpixel(183,12,9,vaddr);
putpixel(139,37,9,vaddr);
putpixel(211,81,9,vaddr);
end;
if not(mode_amic=job_enabled) then
begin
for i:=219 to 294 do
for j:=11 to 91 do putpixel(i,j,0,vaddr);
putpixel(228,65,14,vaddr);
putpixel(290,26,14,vaddr);
putpixel(264,63,14,vaddr);
putpixel(284,85,14,vaddr);
putpixel(262,13,14,vaddr);
putpixel(239,46,14,vaddr);
putpixel(266,74,9,vaddr);
putpixel(264,21,9,vaddr);
putpixel(248,84,9,vaddr);
putpixel(279,87,9,vaddr);
putpixel(254,39,9,vaddr);
end;
espera_vga;
volcar32(vaddr,vga);
pinta_marcs(55);
pos:=1;
if mode_nocturne then pos_dif:=0 else pos_dif:=1;
a_on_pinte_el_marc:=55;
get_color(15,R,G,B);
i:=0; G:=0; B:=0;
repeat
i:=(i+1) mod 127;
i_int:=(63-i);
B:=ABS(i_int);
G:=B;
set_color(15,R,G,B);
if (not(playing)) and (midi) then PlayMIDI;
if (TeclaPuls(KeyArrowLeft)) and (pos>1) then
if not(mode_nocturne) then
begin
desp_marc(Left);
dec(pos);
end;
if (TeclaPuls(KeyArrowRight)) and (pos<3) then
if not(mode_nocturne) then
begin
if (pos=1) and (mode_rosita=99) then
begin
desp_marc(Right);
inc(pos);
end
else if (pos=2) and (mode_amic=199) then
begin
desp_marc(Right);
inc(pos);
end;
end;
if (TeclaPuls(KeyArrowDown)) and (pos_dif<3) and
not(mode_nocturne) then
begin
inc(pos_dif);
pinta_marcs(a_on_pinte_el_marc);
Play_WAV (sample[so_fletxa]);
repeat until not(TeclaPuls(KeyArrowDown));
end;
if (TeclaPuls(KeyArrowUp)) and (pos_dif>1) and
not(mode_nocturne) then
begin
dec(pos_dif);
pinta_marcs(a_on_pinte_el_marc);
Play_WAV (sample[so_fletxa]);
repeat until not(TeclaPuls(KeyArrowUp));
end;
if pos=2 then
if mode_rosita=99 then
begin
pinta_marcs(137);
a_on_pinte_el_marc:=137;
end;
if pos=3 then
if mode_amic=199 then
begin
pinta_marcs(219);
a_on_pinte_el_marc:=219;
end;
if pos=1 then
begin
pinta_marcs(55);
a_on_pinte_el_marc:=55;
end;
until (TeclaPuls(KeyENTER)) or (TeclaPuls(KeyESC));
if TeclaPuls(KeyENTER) then Play_WAV (sample[so_enter]);
if TeclaPuls(KeyESC) then pos:=4;
if pos_dif=1 then dificultat:=facil;
if pos_dif=2 then dificultat:=normal;
if pos_dif=3 then dificultat:=dificil;
if mode_nocturne then dificultat:=normal;
if pos=1 then
begin
amic_selected:=false;
rosita_selected:=false;
color_pintura:=162;
color_marcador_pintura:=162;
end;
if pos=2 then
begin
amic_selected:=false;
rosita_selected:=true;
color_pintura:=199;
color_marcador_pintura:=199;
end;
if pos=3 then
begin
amic_selected:=true;
rosita_selected:=false;
color_pintura:=48;
color_marcador_pintura:=48;
end;
if pos=4 then borrat_de_pantalla(vaddr)
else fadedown(0,0,0,0);
if not(pos=4) then
begin
if (midi) and not(mode_nocturne) then begin StopMIDI; unloadmidi; midi:=false; end;
Story_mode;
end;
end;
/* opcions */
if (pos_m=4) then
begin
ini_estreles;
pos_m:=1;
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
ini_midi(musica_options);
if midi then Playmidi;
cord_y := 47;
load_mif(options,vaddr);
actualitza_options(vaddr,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
repeat
if (not(playing)) and (midi) then PlayMIDI;
if (TeclaPuls(KeyArrowDown)) and (pos_m<7) then
begin
inc(pos_m);
case pos_m of
1:cord_y:=47;
2:cord_y:=65;
3:cord_y:=83;
4:cord_y:=122;
5:cord_y:=140;
6:cord_y:=158;
7:cord_y:=176;
end;
Play_WAV (sample[so_fletxa]);
actualitza_options(vaddr,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
repeat
actualitza_options(vaddr,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
until not(TeclaPuls(KeyArrowDown));
end;
if (TeclaPuls(KeyArrowUp)) and (pos_m>1) then
begin
dec(pos_m);
case pos_m of
1:cord_y:=47;
2:cord_y:=65;
3:cord_y:=83;
4:cord_y:=122;
5:cord_y:=140;
6:cord_y:=158;
7:cord_y:=176;
end;
Play_WAV (sample[so_fletxa]);
actualitza_options(vaddr,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
repeat
actualitza_options(vaddr,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
until not(TeclaPuls(KeyArrowUp));
end;
if (TeclaPuls(KeyArrowRight)) then
begin
if (pos_m=1) then begin
amb_so:=/*not(amb_so);*/false;
if Puerto=255 then amb_so:=false;
/*if amb_so then InitWAV(Puerto,DMA,IRQ) else EndWav;
if amb_so then arxius_wav(amb_so);*/
end
else if (pos_m=2) then begin if volumen<10 then inc(volumen) end
else if (pos_m=3) then GM:=not(GM);
actualitza_options(vaddr,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
repeat
actualitza_options(vaddr,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
until not(QTeclaPuls);
end;
if (TeclaPuls(KeyArrowLeft)) then
begin
if (pos_m=1) then begin
amb_so:=/*not(amb_so);*/false;
if Puerto=255 then amb_so:=false;
/*if amb_so then InitWAV(Puerto,DMA,IRQ) else EndWav;
if amb_so then arxius_wav(amb_so);*/
end
else if (pos_m=2) then begin if volumen>0 then dec(volumen) end
else if (pos_m=3) then GM:=not(GM);
actualitza_options(vaddr,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
repeat
actualitza_options(vaddr,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
until not(QTeclaPuls);
end;
if ((TeclaPuls(KeyENTER))) and (pos_m>3) then
begin
repeat
actualitza_options(vaddr,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
Play_WAV (sample[so_enter]);
until not(TeclaPuls(KeyENTER));
aux := 0;
dib_aux := 23781;
actualitza_options(vaddr,vaddr2);
case pos_m of
4 : begin
tecla_amunt:=aux;
tecla_amunt_dib := dib_aux;
end;
5 : begin
tecla_avall:=aux;
tecla_avall_dib := dib_aux;
end;
6 : begin
tecla_esquerra:=aux;
tecla_esquerra_dib := dib_aux;
end;
7 : begin
tecla_dreta:=aux;
tecla_dreta_dib := dib_aux;
end;
end;
espera_VGA;
volcar32(vaddr2,VGA);
repeat
tecla_incorrecta:=true;
repeat
actualitza_options(vaddr,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
until Qteclapuls;
aux:=AgarrarTecla;
repeat
actualitza_options(vaddr,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
until not(QTeclaPuls);
case aux of
KeyA,KeyB,KeyC,KeyD,KeyE,KeyF,KeyG,KeyH,KeyI,KeyJ,KeyK,KeyL,KeyM,KeyN,
KeyO,KeyP,KeyQ,KeyR,KeyS,KeyT,KeyU,KeyV,KeyW,KeyX,KeyY,KeyZ,
KeyArrowUp,KeyArrowDown,KeyArrowLeft,KeyArrowRight : tecla_incorrecta:=false;
else tecla_incorrecta:=true;
end;
until (not(tecla_incorrecta));
case aux of
KeyA : dib_aux := 4485;
KeyB : dib_aux := 4509;
KeyC : dib_aux := 4533;
KeyD : dib_aux := 4557;
KeyE : dib_aux := 4581;
KeyF : dib_aux := 4605;
KeyG : dib_aux := 4629;
KeyH : dib_aux := 4653;
KeyI : dib_aux := 4677;
KeyJ : dib_aux := 4702;
KeyK : dib_aux := 4726;
KeyL : dib_aux := 4750;
KeyM : dib_aux := 4774;
KeyN : dib_aux := 14085;
KeyO : dib_aux := 14109;
KeyP : dib_aux := 14133;
KeyQ : dib_aux := 14157;
KeyR : dib_aux := 14181;
KeyS : dib_aux := 14205;
KeyT : dib_aux := 14229;
KeyU : dib_aux := 14253;
KeyV : dib_aux := 14277;
KeyW : dib_aux := 14302;
KeyX : dib_aux := 14326;
KeyY : dib_aux := 14350;
KeyZ : dib_aux := 14374;
KeyArrowUp : dib_aux := 23709;
KeyArrowDown : dib_aux := 23685;
KeyArrowLeft : dib_aux := 23757;
KeyArrowRight : dib_aux := 23733;
end;
case pos_m of
4 : begin
tecla_amunt:=aux;
tecla_amunt_dib := dib_aux;
end;
5 : begin
tecla_avall:=aux;
tecla_avall_dib := dib_aux;
end;
6 : begin
tecla_esquerra:=aux;
tecla_esquerra_dib := dib_aux;
end;
7 : begin
tecla_dreta:=aux;
tecla_dreta_dib := dib_aux;
end;
end;
actualitza_options(vaddr,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
end;
actualitza_options(vaddr,vaddr2);
espera_VGA;
volcar32(vaddr2,VGA);
until TeclaPuls(KeyESC);
borrat_de_pantalla(vaddr2);
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
save_cfg;
end;
end;
/*──────────────────────────────────────────────────────────────────────────*/
/*──────────────────────────────────────────────────────────────────────────*/
int main(int argc, char *argv[])
{
comprobar_comp_i_sprites();
randomize();
instalarkb();
setmode(0x13);
setupvirtual(virscr, vaddr);
setupvirtual(virscr2, vaddr2);
getmem(virscrSP, 7680);
vaddrSP = seg(virscrSP ^);
loadPCX('datos/sprites.dat', vaddrSP);
load_setup_i_versio();
ini_matrius();
load_cfg();
intro_logo();
titol_del_joc();
/* if amb_so then InitWAV(Puerto,DMA,IRQ);
if amb_so then arxius_wav(TRUE);*/
do
{
menu_joc();
} while (!eixir_del_joc);
Tancarvirtual(virscr);
Tancarvirtual(virscr2);
Freemem(virscrSP, 7680);
/* if amb_so then arxius_wav(FALSE);
if amb_so then EndWAV;*/
DesinstalarKB();
setmode(0x3);
}
/*
ini_midi('.\music\logo.mid');
if midi then Playmidi;
if (not(playing)) and (midi) then PlayMIDI;
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
*/