3971 lines
130 KiB
C++
3971 lines
130 KiB
C++
/*──────────────────────────────────────────────────────────────────────────
|
||
|
||
PEPE EL PINTOR Versió 1.0
|
||
Sergi Valor Martínez Juliol-Agost 1999
|
||
|
||
Versió 1.70 Build 3 Març 2000 (Windows2000)
|
||
|
||
──────────────────────────────────────────────────────────────────────────*/
|
||
|
||
|
||
|
||
#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 0xA000
|
||
#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
|
||
|
||
|
||
//Virscr : Ptr_pantalla;
|
||
//VirScr2 : Ptr_pantalla;
|
||
//VirScrSP : Ptr_pantalla;
|
||
|
||
|
||
uint16_t Vaddr; // : word;
|
||
uint16_t Vaddr2; // : word;
|
||
uint16_t VaddrSP; // : word;
|
||
|
||
uint16_t blocs_per_pintar;// : word;
|
||
uint16_t total_blocs_per_pintar;// : word;
|
||
uint16_t h, m, s, c, temps, hora;//: word;
|
||
uint16_t 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;
|
||
uint8_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, 0xA000);
|
||
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, 0xA000);
|
||
}
|
||
|
||
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 = 16;
|
||
tecla_amunt_dib = 14157;
|
||
tecla_avall = 30;
|
||
tecla_avall_dib = 4485;
|
||
tecla_dreta = 25;
|
||
tecla_dreta_dib = 14133;
|
||
tecla_esquerra = 24;
|
||
tecla_esquerra_dib = 14109;
|
||
save_cfg();
|
||
}
|
||
amb_so = false;
|
||
}
|
||
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure ini_midi(midi_titol:string);
|
||
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;
|
||
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure load_records;
|
||
var
|
||
x:byte;
|
||
fich : text;
|
||
fichbyte : file of byte;
|
||
|
||
begin
|
||
|
||
Assign(fich,'datos\story.dat');
|
||
Reset(fich);
|
||
x:=1;
|
||
while x<6 do
|
||
begin
|
||
readln(fich,nom[x]);
|
||
readln(fich,puntuacio[x]);
|
||
inc(x);
|
||
end;
|
||
Close(fich);
|
||
|
||
Assign(fich,'datos\time.dat');
|
||
Reset(fich);
|
||
x:=1;
|
||
while x<6 do
|
||
begin
|
||
readln(fich,nom2[x]);
|
||
readln(fich,minuts[x]);
|
||
readln(fich,segons_tabla[x]);
|
||
inc(x);
|
||
end;
|
||
Close(fich);
|
||
|
||
Assign(fichbyte,'datos\comp.dat');
|
||
Reset(fichbyte);
|
||
seek(fichbyte,filesize(fichbyte)-9);
|
||
begin
|
||
read(fichbyte,mode_rosita);
|
||
read(fichbyte,mode_amic);
|
||
read(fichbyte,mode_easy);
|
||
read(fichbyte,mode_normal);
|
||
read(fichbyte,mode_hard);
|
||
read(fichbyte,mode_easy_r);
|
||
read(fichbyte,mode_normal_r);
|
||
read(fichbyte,mode_hard_r);
|
||
read(fichbyte,mode_Dream_tour);
|
||
end;
|
||
Close(fichbyte);
|
||
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure save_records;
|
||
var
|
||
x:word;
|
||
fich : text;
|
||
fichbyte : file of byte;
|
||
|
||
begin
|
||
Assign(fich,'datos\story.dat');
|
||
Rewrite(fich);
|
||
x:=1;
|
||
while x<6 do
|
||
begin
|
||
writeln(fich,nom[x]);
|
||
writeln(fich,puntuacio[x]);
|
||
inc(x);
|
||
end;
|
||
Close(fich);
|
||
|
||
Assign(fich,'datos\time.dat');
|
||
Rewrite(fich);
|
||
x:=1;
|
||
while x<6 do
|
||
begin
|
||
writeln(fich,nom2[x]);
|
||
writeln(fich,minuts[x]);
|
||
writeln(fich,segons_tabla[x]);
|
||
inc(x);
|
||
end;
|
||
Close(fich);
|
||
|
||
Assign(fichbyte,'datos\comp.dat');
|
||
Reset(fichbyte);
|
||
seek(fichbyte,filesize(fichbyte)-9);
|
||
begin
|
||
write(fichbyte,mode_rosita);
|
||
write(fichbyte,mode_amic);
|
||
write(fichbyte,mode_easy);
|
||
write(fichbyte,mode_normal);
|
||
write(fichbyte,mode_hard);
|
||
write(fichbyte,mode_easy_r);
|
||
write(fichbyte,mode_normal_r);
|
||
write(fichbyte,mode_hard_r);
|
||
write(fichbyte,mode_Dream_Tour);
|
||
end;
|
||
Close(fichbyte);
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure pinta(offset:word; color:byte; x,y:word; where:word);
|
||
var i,j : byte;
|
||
begin
|
||
inc(x); inc(y);
|
||
for i:=0 to 5 do
|
||
for j:=0 to 5 do
|
||
if color<>255 then mem[where:(x+i)+((y+j)*320)]:=color
|
||
else if mem[vaddrSP:offset+i+(j*320)]<>255 then mem[where:(x+i)+((y+j)*320)]:=mem[vaddrSP:offset+i+(j*320)];
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure pinta_zoom(zoom:byte; offset:word; color:byte; x,y:word; where:word);
|
||
var i,j : byte;
|
||
begin
|
||
inc(x); inc(y);
|
||
for i:=0 to 5 do
|
||
for j:=0 to 5 do
|
||
if color<>255 then mem[where:(x+i)+((y+j)*320)]:=color
|
||
else if mem[vaddrSP:offset+i+(j*320)]<>255 then mem[where:(x+i)+((y+j)*320)]:=mem[vaddrSP:offset+i+(j*320)];
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure pinta_number(offset:word; color:byte; x,y:word; where:word);
|
||
var i,j : byte;
|
||
begin
|
||
inc(x); inc(y);
|
||
for i:=0 to 8 do
|
||
for j:=0 to 8 do
|
||
if color<>255 then mem[where:(x+i)+((y+j)*320)]:=color
|
||
else if mem[vaddrSP:offset+i+(j*320)]<>255 then mem[where:(x+i)+((y+j)*320)]:=mem[vaddrSP:offset+i+(j*320)];
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure pinta_number2(offset:word; color,color_determinat:byte; x,y:word; where:word);
|
||
var i,j : byte;
|
||
begin
|
||
inc(x); inc(y);
|
||
for i:=0 to 8 do
|
||
for j:=0 to 8 do
|
||
if color<>255 then mem[where:(x+i)+((y+j)*320)]:=color
|
||
else if (mem[vaddrSP:offset+i+(j*320)]<>255)
|
||
and (mem[vaddrSP:offset+i+(j*320)]<>254) then mem[where:(x+i)+((y+j)*320)]:=mem[vaddrSP:offset+i+(j*320)]
|
||
else if (mem[vaddrSP:offset+i+(j*320)]=254) then mem[where:(x+i)+((y+j)*320)]:=color_determinat;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure pinta_number_zoom(zoom:byte; offset:word; color:byte; x,y:word; where:word);
|
||
var i,j : integer;
|
||
begin
|
||
inc(x); inc(y);
|
||
for i:=0 to ((9*zoom)-1) do
|
||
for j:=0 to ((9*zoom)-1) do
|
||
if color<>255 then mem[where:(x+i)+((y+j)*320)]:=color
|
||
else if mem[vaddrSP:offset+(i div zoom)+((j div zoom)*320)]<>255 then
|
||
mem[where:(x+i)+((y+j)*320)]:=mem[vaddrSP:offset+(i div zoom)+((j div zoom)*320)];
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure retard(centesimes:integer);
|
||
var
|
||
h,m,s,c : word;
|
||
temps1, temps2 : longint;
|
||
begin
|
||
gettime(h,m,s,c);
|
||
temps1:=c+(s*100)+(m*6000)+(h*360000);
|
||
if centesimes>0 then
|
||
repeat
|
||
if (not(playing)) and (midi) then PlayMIDI;
|
||
gettime(h,m,s,c);
|
||
temps2:=c+(s*100)+(m*6000)+(h*360000);
|
||
until (temps2-temps1>=centesimes) or (TeclaPuls(KeySPACE));
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure escriu_frase(nom:string;color_determinat:byte;x,y,where,velocitat:word;mode,mode2:byte);
|
||
var aux : byte; quina_lletra : word;
|
||
begin
|
||
for aux:=1 to length(nom) do
|
||
begin
|
||
if (mode2=0) and (TeclaPuls(KeySPACE)) then break;
|
||
if mode=0 then volcar32(VGA,where);
|
||
case nom[aux] of
|
||
|
||
'A' : quina_lletra:=lletra_a;
|
||
'B' : quina_lletra:=lletra_b;
|
||
'C' : quina_lletra:=lletra_c;
|
||
'D' : quina_lletra:=lletra_d;
|
||
'E' : quina_lletra:=lletra_e;
|
||
'F' : quina_lletra:=lletra_f;
|
||
'G' : quina_lletra:=lletra_g;
|
||
'H' : quina_lletra:=lletra_h;
|
||
'I' : quina_lletra:=lletra_i;
|
||
'J' : quina_lletra:=lletra_j;
|
||
'K' : quina_lletra:=lletra_k;
|
||
'L' : quina_lletra:=lletra_l;
|
||
'M' : quina_lletra:=lletra_m;
|
||
'N' : quina_lletra:=lletra_n;
|
||
'O' : quina_lletra:=lletra_o;
|
||
'P' : quina_lletra:=lletra_p;
|
||
'Q' : quina_lletra:=lletra_q;
|
||
'R' : quina_lletra:=lletra_r;
|
||
'S' : quina_lletra:=lletra_s;
|
||
'T' : quina_lletra:=lletra_t;
|
||
'U' : quina_lletra:=lletra_u;
|
||
'V' : quina_lletra:=lletra_v;
|
||
'W' : quina_lletra:=lletra_w;
|
||
'X' : quina_lletra:=lletra_x;
|
||
'Y' : quina_lletra:=lletra_y;
|
||
'Z' : quina_lletra:=lletra_z;
|
||
|
||
'0' : quina_lletra:=num_0;
|
||
'1' : quina_lletra:=num_1;
|
||
'2' : quina_lletra:=num_2;
|
||
'3' : quina_lletra:=num_3;
|
||
'4' : quina_lletra:=num_4;
|
||
'5' : quina_lletra:=num_5;
|
||
'6' : quina_lletra:=num_6;
|
||
'7' : quina_lletra:=num_7;
|
||
'8' : quina_lletra:=num_8;
|
||
'9' : quina_lletra:=num_9;
|
||
|
||
' ' : quina_lletra:=lletra_espai;
|
||
':' : quina_lletra:=lletra_dos_punts;
|
||
'(' : quina_lletra:=lletra_parentesis_o;
|
||
')' : quina_lletra:=lletra_parentesis_t;
|
||
'' : quina_lletra:=lletra_exclamacio_o;
|
||
'!' : quina_lletra:=lletra_exclamacio_t;
|
||
'*' : quina_lletra:=lletra_apostrof;
|
||
'.' : quina_lletra:=lletra_punt;
|
||
'-' : quina_lletra:=lletra_guio;
|
||
|
||
end;
|
||
pinta_number2(quina_lletra,255,color_determinat,x+(aux*8),y,where);
|
||
retard(velocitat);
|
||
|
||
if mode=0 then
|
||
begin
|
||
espera_VGA;
|
||
volcar32(where,VGA);
|
||
end;
|
||
end;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure borrar_frase(temps:integer;zona_mem1,zona_mem2:word);
|
||
begin
|
||
retard(temps);
|
||
volcar32(zona_mem1,zona_mem2);
|
||
espera_VGA;
|
||
volcar32(zona_mem2,VGA);
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure borrat_de_pantalla(where:word);
|
||
var i,j : word;
|
||
begin
|
||
for i:=0 to 31 do
|
||
begin
|
||
for j:=0 to 199 do
|
||
begin
|
||
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);
|
||
end;
|
||
espera_vga;
|
||
volcar32(where,vga);
|
||
end;
|
||
end;
|
||
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure intro_nom(var nom:string;color:word);
|
||
var
|
||
lletra : byte;
|
||
x,y : word;
|
||
aux : byte;
|
||
quina_lletra : byte;
|
||
begin
|
||
volcar32(VGA,vaddr);
|
||
lletra:=1;
|
||
nom:='';
|
||
x:=210;
|
||
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);
|
||
repeat
|
||
if QteclaPuls then
|
||
begin
|
||
aux:=agarrartecla;
|
||
repeat until not(QteclaPuls);
|
||
inc(lletra);
|
||
case aux of
|
||
|
||
KeyA : quina_lletra:=ord('A');
|
||
KeyB : quina_lletra:=ord('B');
|
||
KeyC : quina_lletra:=ord('C');
|
||
KeyD : quina_lletra:=ord('D');
|
||
KeyE : quina_lletra:=ord('E');
|
||
KeyF : quina_lletra:=ord('F');
|
||
KeyG : quina_lletra:=ord('G');
|
||
KeyH : quina_lletra:=ord('H');
|
||
KeyI : quina_lletra:=ord('I');
|
||
KeyJ : quina_lletra:=ord('J');
|
||
KeyK : quina_lletra:=ord('K');
|
||
KeyL : quina_lletra:=ord('L');
|
||
KeyM : quina_lletra:=ord('M');
|
||
KeyN : quina_lletra:=ord('N');
|
||
KeyO : quina_lletra:=ord('O');
|
||
KeyP : quina_lletra:=ord('P');
|
||
KeyQ : quina_lletra:=ord('Q');
|
||
KeyR : quina_lletra:=ord('R');
|
||
KeyS : quina_lletra:=ord('S');
|
||
KeyT : quina_lletra:=ord('T');
|
||
KeyU : quina_lletra:=ord('U');
|
||
KeyV : quina_lletra:=ord('V');
|
||
KeyW : quina_lletra:=ord('W');
|
||
KeyX : quina_lletra:=ord('X');
|
||
KeyY : quina_lletra:=ord('Y');
|
||
KeyZ : quina_lletra:=ord('Z');
|
||
KeySPACE : quina_lletra:=ord(' ');
|
||
KeyENTER : begin lletra:=9; quina_lletra:=ord(' '); end;
|
||
|
||
end;
|
||
|
||
escriu_frase(chr(quina_lletra),color,x,y,vaddr,0,0,0);
|
||
x:=x+8;
|
||
nom:=nom+chr(quina_lletra);
|
||
end;
|
||
until (lletra=9);
|
||
cls32(color,vaddr2);
|
||
espera_VGA;
|
||
volcar32(vaddr2,VGA);
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
retard(50);
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure escriu_records(segons:byte);
|
||
var
|
||
x:byte;
|
||
num1,num2,num3,num4,num5,num6,num7 : byte;
|
||
i,j : word;
|
||
temps,temps2:word;
|
||
|
||
begin
|
||
|
||
load_mif(records,vaddr2);
|
||
volcar32(vaddr2,vaddr);
|
||
espera_VGA;
|
||
volcar32(vaddr2,VGA);
|
||
|
||
/* story mode */
|
||
if (story_mode_mode) or ((not(story_mode_mode)) and (not(time_attack_mode))) then
|
||
begin
|
||
escriu_frase('- WORLD TOUR SCORE -',1,42,30,vaddr,0,0,1);
|
||
i:=150;
|
||
for x:=1 to 5 do
|
||
begin
|
||
j:=x*20+50;
|
||
escriu_frase(nom[x],2,60,x*20+50,vaddr,0,0,1);
|
||
|
||
num1:=puntuacio[x] div 1000000;
|
||
num2:=(puntuacio[x] mod 1000000) div 100000;
|
||
num3:=((puntuacio[x] mod 1000000) mod 100000) div 10000;
|
||
num4:=(((puntuacio[x] mod 1000000) mod 100000) mod 10000) div 1000;
|
||
num5:=((((puntuacio[x] mod 1000000) mod 100000) mod 10000) mod 1000) div 100;
|
||
num6:=(((((puntuacio[x] mod 1000000) mod 100000) mod 10000) mod 1000) mod 100) div 10;
|
||
num7:=(((((puntuacio[x] mod 1000000) mod 100000) mod 10000) mod 100) mod 10);
|
||
|
||
if num1<>0 then pinta_number(numero_G[num1],255,i,j,vaddr);
|
||
if (num2<>0) or (num1<>0) then pinta_number(numero_G[num2],255,i+6,j,vaddr);
|
||
if (num3<>0) or (num2<>0) or (num1<>0) then pinta_number(numero_G[num3],255,i+12,j,vaddr);
|
||
if (num4<>0) or (num3<>0) or (num2<>0) or (num1<>0) then pinta_number(numero_G[num4],255,i+18,j,vaddr);
|
||
if (num5<>0) or (num4<>0) or (num3<>0) or (num2<>0) or (num1<>0) then pinta_number(numero_G[num5],255,i+24,j,vaddr);
|
||
if (num6<>0) or (num5<>0) or (num4<>0) or (num3<>0) or (num2<>0) or (num1<>0)
|
||
then pinta_number(numero_G[num6],255,i+30,j,vaddr);
|
||
if (num7<>0) or (num6<>0) or (num5<>0) or (num4<>0) or (num3<>0) or (num2<>0) or (num1<>0)
|
||
then pinta_number(numero_G[num7],255,i+36,j,vaddr);
|
||
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
|
||
end;
|
||
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
gettime(h,m,s,c);
|
||
temps:=h*3600+m*60+s;
|
||
repeat
|
||
gettime(h,m,s,c);
|
||
temps2:=h*3600+m*60+s;
|
||
until ((temps2-temps)>=segons) or (QteclaPuls);
|
||
end;
|
||
|
||
/* time attack */
|
||
if (time_attack_mode) or ((not(story_mode_mode)) and (not(time_attack_mode))) then
|
||
begin
|
||
volcar32(vaddr2,vaddr);
|
||
espera_VGA;
|
||
volcar32(vaddr2,VGA);
|
||
escriu_frase('- TIME ATTACK BEST TIMES -',1,20,30,vaddr,0,0,1);
|
||
i:=150;
|
||
for x:=1 to 5 do
|
||
begin
|
||
j:=x*20+50;
|
||
escriu_frase(nom2[x],2,60,x*20+50,vaddr,0,0,1);
|
||
|
||
pinta_number(numero_G[minuts[x]],255,i,j,vaddr);
|
||
pinta_number(num_11,255,i+6,j,vaddr);
|
||
pinta_number(numero_G[segons_tabla[x] div 10],255,i+12,j,vaddr);
|
||
pinta_number(numero_G[segons_tabla[x] mod 10],255,i+18,j,vaddr);
|
||
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
|
||
end;
|
||
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
gettime(h,m,s,c);
|
||
temps:=h*3600+m*60+s;
|
||
repeat
|
||
gettime(h,m,s,c);
|
||
temps2:=h*3600+m*60+s;
|
||
until ((temps2-temps)>=segons) or (QteclaPuls);
|
||
end;
|
||
borrat_de_pantalla(vaddr);
|
||
|
||
|
||
|
||
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure gestio_records(color:word);
|
||
var
|
||
trobat: boolean;
|
||
cont,i:byte;
|
||
minuts_prov,segons_prov:word;
|
||
|
||
begin
|
||
/* world tour */
|
||
if story_mode_mode then
|
||
begin
|
||
trobat:=false;
|
||
cont:=1;
|
||
while (not(trobat)) and (cont<6) do
|
||
begin
|
||
if (puntuacio[cont]<punts) and (not(trobat)) then trobat:=true;
|
||
if trobat then
|
||
begin
|
||
for i:=5 downto cont do
|
||
begin
|
||
nom[i]:=nom[i-1];
|
||
puntuacio[i]:=puntuacio[i-1];
|
||
end;
|
||
intro_nom(nom[cont],color);
|
||
puntuacio[cont]:=punts;
|
||
end;
|
||
inc(cont);
|
||
end;
|
||
end;
|
||
|
||
/* time attack */
|
||
if time_attack_mode then
|
||
begin
|
||
trobat:=false;
|
||
cont:=1;
|
||
minuts_prov:=(temps_final mod 3600) div 60;
|
||
segons_prov:=(temps_final mod 3600) mod 60;
|
||
while (not(trobat)) and (cont<6) do
|
||
begin
|
||
if (minuts[cont]>minuts_prov) then
|
||
/*if (segons_tabla[cont]>=segons_prov) and
|
||
(not(trobat)) then */trobat:=true;
|
||
|
||
if (minuts[cont]=minuts_prov) then
|
||
if (segons_tabla[cont]>=segons_prov) and
|
||
(not(trobat)) then trobat:=true;
|
||
|
||
|
||
if trobat then
|
||
begin
|
||
for i:=5 downto cont do
|
||
begin
|
||
nom2[i]:=nom2[i-1];
|
||
minuts[i]:=minuts[i-1];
|
||
segons_tabla[i]:=segons_tabla[i-1];
|
||
end;
|
||
intro_nom(nom2[cont],color);
|
||
minuts[cont]:=minuts_prov;
|
||
segons_tabla[cont]:=segons_prov;
|
||
end;
|
||
inc(cont);
|
||
end;
|
||
end;
|
||
save_records;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure text_rosita;
|
||
begin
|
||
load_mif(pepe01,vaddr);
|
||
cls32(0,vaddr);
|
||
escriu_frase('FELICITATS!',64,10,90,vaddr,0,0,0);
|
||
escriu_frase('HAS SUPERAT TOTS ELS NIVELLS',64,10,110,vaddr,0,0,0);
|
||
escriu_frase('DE DIFICULTAT AMB PEPE.',64,10,120,vaddr,0,0,0);
|
||
escriu_frase('ARA JA POTS JUGAR AMB ROSITA.',64,10,130,vaddr,0,0,0);
|
||
escriu_frase('A ROSITA NO SE LI ACABA LA PINTURA.',64,10,150,vaddr,0,0,0);
|
||
retard(1000);
|
||
borrat_de_pantalla(vaddr);
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure text_amic;
|
||
begin
|
||
load_mif(pepe01,vaddr);
|
||
cls32(0,vaddr);
|
||
escriu_frase('FELICITATS!',64,10,90,vaddr,0,0,0);
|
||
escriu_frase('HAS SUPERAT TOTS ELS NIVELLS',64,10,110,vaddr,0,0,0);
|
||
escriu_frase('DE DIFICULTAT AMB 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);
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure so_de(quin_so:byte);
|
||
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;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure pepe_text;
|
||
begin
|
||
load_mif(classic,vaddr);
|
||
espera_vga;
|
||
volcar32(vaddr,VGA);
|
||
retard(400);
|
||
fadedown(0,0,0,1);
|
||
setmode(3);
|
||
pepe_clasic;
|
||
setmode($13);
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure final_fals;
|
||
var
|
||
temps,temps2 : word;
|
||
VirScr3 : Ptr_pantalla;
|
||
Vaddr3 : word;
|
||
begin
|
||
setupvirtual(virscr3,vaddr3);
|
||
cls32(0,vaddr);
|
||
load_mif(finalf1,vaddr2);
|
||
load_mif(finalf2,vaddr3);
|
||
getpaleta(paleta);
|
||
|
||
ini_midi(musica_final_fals);
|
||
if midi then Playmidi;
|
||
|
||
for i:=1 to 3 do
|
||
begin
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
Gettime(h,m,s,c);
|
||
temps:=h*3600+m*60+s;
|
||
Repeat
|
||
if not(playing) then begin ini_midi(musica_final_fals);
|
||
if midi then Playmidi; end;
|
||
Gettime(h,m,s,c);
|
||
temps2:=h*3600+m*60+s;
|
||
until (QteclaPuls) or ((temps2-temps)>=5);
|
||
espera_VGA;
|
||
volcar32(vaddr3,VGA);
|
||
setpaleta(paleta);
|
||
Play_WAV (sample[so_bomba]);
|
||
if i<3 then fadedown(0,0,0,0);
|
||
end;
|
||
|
||
|
||
PutSprite(vaddr2,vaddr,8683,234,151,43,27);
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
setpaleta(paleta);
|
||
|
||
for i:=1 to 2 do
|
||
begin
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
Gettime(h,m,s,c);
|
||
temps:=h*3600+m*60+s;
|
||
Repeat
|
||
if not(playing) then begin ini_midi(musica_final_fals);
|
||
if midi then Playmidi; end;
|
||
Gettime(h,m,s,c);
|
||
temps2:=h*3600+m*60+s;
|
||
until (QteclaPuls) or ((temps2-temps)>=5);
|
||
espera_VGA;
|
||
volcar32(vaddr3,VGA);
|
||
Play_WAV (sample[so_bomba]);
|
||
Gettime(h,m,s,c);
|
||
temps:=h*3600+m*60+s;
|
||
Repeat
|
||
if not(playing) then begin ini_midi(musica_final_fals);
|
||
if midi then Playmidi; end;
|
||
Gettime(h,m,s,c);
|
||
temps2:=h*3600+m*60+s;
|
||
until (QteclaPuls) or ((temps2-temps)>=1);
|
||
end;
|
||
|
||
PutSprite(vaddr2,vaddr,400,138,26,170,148);
|
||
PutSprite(vaddr2,vaddr3,400,138,26,170,148);
|
||
|
||
i:=0;
|
||
repeat
|
||
inc(i);
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
Gettime(h,m,s,c);
|
||
temps:=h*3600+m*60+s;
|
||
Repeat
|
||
if not(playing) then begin ini_midi(musica_final_fals);
|
||
if midi then Playmidi; end;
|
||
Gettime(h,m,s,c);
|
||
temps2:=h*3600+m*60+s;
|
||
until (QteclaPuls) or ((temps2-temps)>=5);
|
||
espera_VGA;
|
||
volcar32(vaddr3,VGA);
|
||
Play_WAV (sample[so_bomba]);
|
||
Gettime(h,m,s,c);
|
||
temps:=h*3600+m*60+s;
|
||
Repeat
|
||
if not(playing) then begin ini_midi(musica_final_fals);
|
||
if midi then Playmidi; end;
|
||
Gettime(h,m,s,c);
|
||
temps2:=h*3600+m*60+s;
|
||
until (QteclaPuls) or ((temps2-temps)>=2);
|
||
Until (Qteclapuls) or (i=3);
|
||
|
||
fadedown(0,0,0,0);
|
||
|
||
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
|
||
Tancarvirtual(virscr3);
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure intro_logo;
|
||
var
|
||
paleta_blanca : tpaleta;
|
||
i, aux : byte;
|
||
temps,temps2 : word;
|
||
begin
|
||
|
||
load_mif(logo,vaddr);
|
||
getpaleta(paleta);
|
||
for i:=1 to 255 do set_color(i,63,63,63);
|
||
getpaleta(paleta_blanca);
|
||
setpaleta(paleta);
|
||
blackout;
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
ini_midi(musica_logo);
|
||
if midi then Playmidi;
|
||
fadeup(paleta,1);
|
||
Gettime(h,m,s,c);
|
||
temps:=h*3600+m*60+s;
|
||
Repeat
|
||
Gettime(h,m,s,c);
|
||
temps2:=h*3600+m*60+s;
|
||
until (QteclaPuls) or ((temps2-temps)>=6);
|
||
fadeup(paleta_blanca,1);
|
||
fadedown(0,0,0,0);
|
||
|
||
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
|
||
end;
|
||
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure titol_del_joc;
|
||
var
|
||
salta_intro : boolean;
|
||
i : word; j : byte;
|
||
R,G,B : byte;
|
||
temps, temps2 : word;
|
||
begin
|
||
salta_intro := false;
|
||
gettime(h,m,s,c);
|
||
|
||
|
||
if (h>=22) or (h<=8) then
|
||
begin
|
||
load_mif(intro_n,vaddr);
|
||
load_mif(intro_n2,vaddr2);
|
||
mode_nocturne:=true;
|
||
end
|
||
else begin
|
||
load_mif(titol,vaddr2);
|
||
mode_nocturne:=false;
|
||
espera_VGA;
|
||
volcar32(vaddr2,VGA);
|
||
|
||
Gettime(h,m,s,c);
|
||
temps:=(h*3600)+(m*60)+s;
|
||
Repeat
|
||
Gettime(h,m,s,c);
|
||
temps2:=(h*3600)+(m*60)+s;
|
||
until (QteclaPuls) or ((temps2-temps)>=6);
|
||
|
||
end;
|
||
|
||
if mode_nocturne then
|
||
begin
|
||
|
||
if not(midi) then ini_midi(musica_nit);
|
||
if (not(playing)) and (midi) then Playmidi;
|
||
|
||
i:=0;
|
||
repeat
|
||
if (not(playing)) and (midi) then PlayMIDI;
|
||
j:=0;
|
||
while (j<100) do
|
||
begin
|
||
espera_VGA;
|
||
inc(j);
|
||
end;
|
||
espera_VGA;
|
||
volcar32(vaddr2,VGA);
|
||
j:=0;
|
||
while (j<100) do
|
||
begin
|
||
espera_VGA;
|
||
inc(j);
|
||
end;
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
inc(i);
|
||
until (i>10) or (QteclaPuls);
|
||
if QteclaPuls then salta_intro:=true;
|
||
end
|
||
else ;
|
||
if TeclaPuls(KeySPACE) then salta_intro:=true;
|
||
fadedown(0,0,0,0);
|
||
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure historia;
|
||
begin
|
||
if mode_nocturne then
|
||
begin
|
||
cls32(0,VGA);
|
||
load_mif(in_nit,vaddr);
|
||
getpaleta(paleta);
|
||
blackout;
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
if (not(playing)) and (midi) then Playmidi;
|
||
fadeup(paleta,0);
|
||
retard(300);
|
||
fadedown(0,0,0,0);
|
||
end
|
||
else begin
|
||
fin_historia:=false;
|
||
cls32(0,VGA);
|
||
load_mif(hist01,vaddr);
|
||
getpaleta(paleta);
|
||
blackout;
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
|
||
ini_midi(musica_historia);
|
||
if midi then Playmidi;
|
||
|
||
|
||
fadeup(paleta,0);
|
||
escriu_frase('QUE BON DIA FA NO CREUS PEPE',2,40,90,vaddr2,10,0,0);
|
||
borrar_frase(150,vaddr,vaddr2);
|
||
escriu_frase('EEEE..SS..SSIII.SI',10,50,80,vaddr2,10,0,0);
|
||
borrar_frase(150,vaddr,vaddr2);
|
||
escriu_frase('(SEMPRE QUE M*ACOSTE',2,140,140,vaddr2,10,0,0);
|
||
escriu_frase('A PEPE ES POSA RARO)',2,140,150,vaddr2,10,0,0);
|
||
borrar_frase(150,vaddr,vaddr2);
|
||
|
||
retard(200);
|
||
if QTeclaPuls then fin_historia:=true;
|
||
fadedown(0,0,0,0);
|
||
if not(fin_historia) then
|
||
begin
|
||
load_mif(hist02,vaddr);
|
||
getpaleta(paleta);
|
||
blackout;
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
fadeup(paleta,0);
|
||
escriu_frase('AAAAY !',10,100,140,vaddr2,0,0,0);
|
||
borrar_frase(150,vaddr,vaddr2);
|
||
escriu_frase('JA T*HE PILLAT PEPE',3,100,55,vaddr2,10,0,0);
|
||
borrar_frase(150,vaddr,vaddr2);
|
||
escriu_frase('AUXILI!',2,145,125,vaddr2,0,0,0);
|
||
borrar_frase(150,vaddr,vaddr2);
|
||
retard(200);
|
||
end;
|
||
if QTeclaPuls then fin_historia:=true;
|
||
fadedown(0,0,0,0);
|
||
if not(fin_historia) then
|
||
begin
|
||
load_mif(hist03,vaddr);
|
||
getpaleta(paleta);
|
||
blackout;
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
fadeup(paleta,0);
|
||
escriu_frase('ARA ROSITA ES MEUA',5,50,80,vaddr2,10,0,0);
|
||
borrar_frase(150,vaddr,vaddr2);
|
||
escriu_frase('SI VOLS ACONSEGUIR-LA',5,50,80,vaddr2,10,0,0);
|
||
escriu_frase('HAURAS DE SEGUIR-ME',5,50,90,vaddr2,10,0,0);
|
||
escriu_frase('PER TOT EL MON.',5,50,100,vaddr2,10,0,0);
|
||
borrar_frase(150,vaddr,vaddr2);
|
||
escriu_frase('JA JA JA JA JA !!',5,60,80,vaddr2,0,0,0);
|
||
borrar_frase(150,vaddr,vaddr2);
|
||
retard(200);
|
||
end;
|
||
if QTeclaPuls then fin_historia:=true;
|
||
fadedown(0,0,0,0);
|
||
if not(fin_historia) then
|
||
begin
|
||
load_mif(hist04,vaddr);
|
||
getpaleta(paleta);
|
||
blackout;
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
fadeup(paleta,0);
|
||
escriu_frase('AJUDA*M PEPE!',2,120,60,vaddr2,5,0,0);
|
||
borrar_frase(150,vaddr,vaddr2);
|
||
escriu_frase('MALEIT SIGUES',7,50,50,vaddr2,60,0,0);
|
||
escriu_frase('ET TROBARE...',7,50,60,vaddr2,40,0,0);
|
||
retard(200);
|
||
end;
|
||
fadedown(0,0,0,0);
|
||
end;
|
||
end;
|
||
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
|
||
procedure credits;
|
||
var i_int:integer; velocitat:longint; num : byte;
|
||
x,y,ample,alt,xo,yo:integer;
|
||
temps, temps2 : word;
|
||
offset : word;
|
||
begin
|
||
load_mif(creditsf,vaddr2);
|
||
cls32(0,vaddr);
|
||
|
||
Gettime(h,m,s,c);
|
||
temps:=(h*3600)+(m*60)+s;
|
||
repeat
|
||
gettime(h,m,s,c);
|
||
temps2:=h*3600+m*60+s;
|
||
until (Qteclapuls) or ((temps2-temps)>=3);
|
||
|
||
|
||
for num:=1 to 5 do
|
||
begin
|
||
case num of
|
||
1 : begin
|
||
x := 95;
|
||
y := 18;
|
||
ample := 124;
|
||
alt := 31;
|
||
end;
|
||
|
||
2 : begin
|
||
x := 92;
|
||
y := 48;
|
||
ample := 134;
|
||
alt := 67;
|
||
end;
|
||
|
||
3 : begin
|
||
x := 107;
|
||
y := 115;
|
||
ample := 98;
|
||
alt := 24;
|
||
end;
|
||
|
||
4 : begin
|
||
x := 113;
|
||
y := 138;
|
||
ample := 86;
|
||
alt := 13;
|
||
end;
|
||
|
||
5 : begin
|
||
x := 51;
|
||
y := 151;
|
||
ample := 213;
|
||
alt := 30;
|
||
end;
|
||
|
||
end;
|
||
i_int:=200;
|
||
velocitat:=0;
|
||
offset:=x+(y*320);
|
||
while (i_int>80) do
|
||
begin
|
||
if (not(playing)) and (midi) then begin ini_midi(musica_final_joc);
|
||
if midi then Playmidi; end;
|
||
Put_Sprite_ICE_baix(vaddr2,vaddr,offset,ample,alt,x,i_int);
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
inc(velocitat);
|
||
if velocitat mod 5=0 then dec(i_int,1);
|
||
end;
|
||
|
||
if num<5 then
|
||
while (i_int>-alt) do
|
||
begin
|
||
if (not(playing)) and (midi) then begin ini_midi(musica_final_joc);
|
||
if midi then Playmidi; end;
|
||
Put_Sprite_ICE_dalt(vaddr2,vaddr,offset,ample,alt,x,i_int);
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
inc(velocitat);
|
||
if velocitat mod 5=0 then dec(i_int,1);
|
||
end;
|
||
end;
|
||
|
||
Gettime(h,m,s,c);
|
||
temps:=(h*3600)+(m*60)+s;
|
||
repeat
|
||
gettime(h,m,s,c);
|
||
temps2:=h*3600+m*60+s;
|
||
until (Qteclapuls) or ((temps2-temps)>=10);
|
||
|
||
fadedown(0,0,0,3);
|
||
|
||
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
|
||
|
||
end;
|
||
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
|
||
procedure historia_final;
|
||
var
|
||
temps,temps2 : integer;
|
||
i,j : integer;
|
||
|
||
procedure reixa(posx:word; long:byte; where:word);
|
||
const posy = 30;
|
||
begin
|
||
line(posx, posy,posx, 197-long,0,where);
|
||
line(posx+1,posy,posx+1,197-long,0,where);
|
||
line(posx+2,posy,posx+2,198-long,0,where);
|
||
line(posx+3,posy,posx+3,198-long,0,where);
|
||
line(posx+4,posy,posx+4,199-long,0,where);
|
||
line(posx+5,posy,posx+5,199-long,0,where);
|
||
line(posx+6,posy,posx+6,198-long,0,where);
|
||
line(posx+7,posy,posx+7,198-long,0,where);
|
||
line(posx+8,posy,posx+8,197-long,0,where);
|
||
line(posx+9,posy,posx+9,197-long,0,where);
|
||
end;
|
||
|
||
begin
|
||
|
||
cls32(0,VGA);
|
||
ini_midi(musica_final_joc);
|
||
if midi then Playmidi;
|
||
|
||
/* dibuix 1 */
|
||
if mode_nocturne then load_mif(finaln01,vaddr) else load_mif(final01,vaddr);
|
||
getpaleta(paleta);
|
||
blackout;
|
||
volcar32(vaddr,vaddr2);
|
||
if mode_nocturne then for i:=0 to 3 do reixa(100+(i*40),0,vaddr2);
|
||
espera_VGA;
|
||
volcar32(vaddr2,VGA);
|
||
fadeup(paleta,0);
|
||
if mode_nocturne then
|
||
for j:=0 to 166 do
|
||
begin
|
||
volcar32(vaddr,vaddr2);
|
||
for i:=0 to 3 do reixa(100+(i*40)+(j mod 2),j,vaddr2);
|
||
espera_VGA; espera_VGA;
|
||
volcar32(vaddr2,VGA);
|
||
end;
|
||
if mode_nocturne then retard(200) else retard(600);
|
||
fadedown(0,0,0,0);
|
||
|
||
/* dibuix 2 */
|
||
if mode_nocturne then 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 then
|
||
for i:=0 to 200 do
|
||
begin
|
||
j:=63-(ABS(32-(i mod 64)));
|
||
set_color(1,j,0,0);
|
||
espera_VGA;espera_VGA;espera_VGA;espera_VGA;
|
||
end;
|
||
if not(mode_nocturne) then retard(600);
|
||
fadedown(0,0,0,0);
|
||
|
||
/* dibuix 3 */
|
||
if mode_nocturne then 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);
|
||
gettime(h,m,s,c);
|
||
temps:=h*3600+m*60+s;
|
||
|
||
repeat
|
||
|
||
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);
|
||
|
||
gettime(h,m,s,c);
|
||
temps2:=h*3600+m*60+s;
|
||
|
||
until (Qteclapuls) or ((temps2-temps)>=10);
|
||
|
||
fadedown(0,0,0,0);
|
||
|
||
/* dibuix 4 */
|
||
if mode_nocturne then
|
||
begin
|
||
load_mif(finaln04,vaddr);
|
||
getpaleta(paleta);
|
||
blackout;
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
fadeup(paleta,0);
|
||
retard(600);
|
||
fadedown(0,0,0,0);
|
||
end;
|
||
|
||
|
||
credits;
|
||
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure put_map(uint8_t *nom;color:byte; x,y: word;i,j: byte; desti:word);
|
||
/* nom : nom de la matriu; color: 255 = original o color;
|
||
x,y = posició pantalla; i,j = tamany matriu; desti = VGA o vaddr)*/
|
||
var a,b:word;
|
||
begin
|
||
for a:=x+1 to x+i do
|
||
for b:=y+1 to y+j do
|
||
begin
|
||
if color<>255 then putpixel(a,b,color,desti)
|
||
else putpixel(a,b,nom[a-x,b-y],desti);
|
||
end;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure pilla_temps;
|
||
begin
|
||
gettime(h,m,s,c);
|
||
hora := (s)+(m*60)+(h*3600);
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure posa_el_temps(where:word);
|
||
var
|
||
h1,m1,s1,c1,minuts,segons,i : word;
|
||
begin
|
||
gettime(h1,m1,s1,c1);
|
||
/*temps:=temps+(((h1-h)*24)+((m1-m)*60)+(s1-s));*/
|
||
/*if (s1-s)>0 then temps:=temps+(100-c+c1) else temps:=temps+(c1-c);*/
|
||
temps := (s1)+(m1*60)+(h1*3600) - hora;
|
||
minuts :=(temps) div 60;
|
||
segons :=(temps) mod 60;
|
||
|
||
|
||
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 div 10],255,i+12,82,where);
|
||
pinta_number(numero_G[segons mod 10],255,i+18,82,where);
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure resultat_time_attack;
|
||
var i,minuts,segons : word;
|
||
begin
|
||
|
||
fadedown(0,0,0,1);
|
||
load_mif(time_fin,vaddr2);
|
||
volcar32(vaddr2,vaddr);
|
||
|
||
ini_midi(musica_game_over);
|
||
if midi then Playmidi;
|
||
|
||
minuts:=(temps_final mod 3600) div 60;
|
||
segons:=(temps_final mod 3600) mod 60;
|
||
|
||
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 div 10],255,i+12*4,126,vaddr);
|
||
pinta_number_zoom(4,numero_G[segons mod 10],255,i+18*4,126,vaddr);
|
||
|
||
espera_vga;
|
||
volcar32(vaddr,VGA);
|
||
retard(300);
|
||
gestio_records(43);
|
||
retard(100);
|
||
escriu_records(10);
|
||
borrat_de_pantalla(vaddr);
|
||
save_records;
|
||
|
||
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
|
||
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure missatge_game_over;
|
||
var
|
||
i,j : word;
|
||
k : byte;
|
||
num1,num2,num3,num4,num5,num6,num7 : byte;
|
||
|
||
begin
|
||
|
||
fadedown(0,0,0,2);
|
||
load_mif(pepefins,vaddr);
|
||
|
||
ini_midi(musica_game_over);
|
||
if midi then Playmidi;
|
||
|
||
if time_attack_mode then for i:=50 to 280 do
|
||
for j:=130 to 190 do putpixel(i,j,239,vaddr);
|
||
if story_mode_mode then
|
||
begin
|
||
volcar32(vaddr,vaddr2);
|
||
for i:=50 to 280 do
|
||
for j:=130 to 190 do putpixel(i,j,239,vaddr2);
|
||
espera_VGA;
|
||
volcar32(vaddr2,VGA);
|
||
retard(200);
|
||
end;
|
||
|
||
if story_mode_mode then
|
||
begin
|
||
i:=125/*135*/;
|
||
j:=170;
|
||
num1:=punts div 1000000;
|
||
num2:=(punts mod 1000000) div 100000;
|
||
num3:=((punts mod 1000000) mod 100000) div 10000;
|
||
num4:=(((punts mod 1000000) mod 100000) mod 10000) div 1000;
|
||
num5:=((((punts mod 1000000) mod 100000) mod 10000) mod 1000) div 100;
|
||
num6:=(((((punts mod 1000000) mod 100000) mod 10000) mod 1000) mod 100) div 10;
|
||
num7:=(((((punts mod 1000000) mod 100000) mod 10000) mod 100) mod 10);
|
||
|
||
if num1<>0 then pinta_number(numero_G[num1],255,i,j,vaddr);
|
||
if (num2<>0) or (num1<>0) then pinta_number(numero_G[num2],255,i+6,j,vaddr);
|
||
if (num3<>0) or (num2<>0) or (num1<>0) then pinta_number(numero_G[num3],255,i+12,j,vaddr);
|
||
if (num4<>0) or (num3<>0) or (num2<>0) or (num1<>0) then pinta_number(numero_G[num4],255,i+18,j,vaddr);
|
||
if (num5<>0) or (num4<>0) or (num3<>0) or (num2<>0) or (num1<>0) then pinta_number(numero_G[num5],255,i+24,j,vaddr);
|
||
if (num6<>0) or (num5<>0) or (num4<>0) or (num3<>0) or (num2<>0) or (num1<>0)
|
||
then pinta_number(numero_G[num6],255,i+30,j,vaddr);
|
||
if (num7<>0) or (num6<>0) or (num5<>0) or (num4<>0) or (num3<>0) or (num2<>0) or (num1<>0)
|
||
then pinta_number(numero_G[num7],255,i+36,j,vaddr);
|
||
|
||
/*pinta_number(numero_G[num1],255,i,j,vaddr);
|
||
pinta_number(numero_G[num2],255,i+6,j,vaddr);
|
||
pinta_number(numero_G[num3],255,i+12,j,vaddr);
|
||
pinta_number(numero_G[num4],255,i+18,j,vaddr);
|
||
pinta_number(numero_G[num5],255,i+24,j,vaddr);
|
||
pinta_number(numero_G[num6],255,i+30,j,vaddr);
|
||
pinta_number(numero_G[num7],255,i+36,j,vaddr);*/
|
||
end;
|
||
|
||
espera_vga;
|
||
volcar32(vaddr,VGA);
|
||
retard(300);
|
||
if story_mode_mode then 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 then begin StopMIDI; unloadmidi; midi:=false; end;
|
||
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure comprobar_comp_i_sprites;
|
||
const
|
||
tamany_comp = 2415;
|
||
tamany_sprites = 968792;
|
||
var
|
||
fich : file of byte;
|
||
i : word;
|
||
temp : longint;
|
||
aux : byte;
|
||
error : boolean;
|
||
begin
|
||
temp:=0;
|
||
error:=false;
|
||
assign(fich,'datos\comp.dat');
|
||
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;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure ini_vars(num_fase:byte);
|
||
|
||
/*----------------------------------------------------*/
|
||
procedure carrega_pantalla(num:byte);
|
||
var
|
||
fich : file of byte;
|
||
i,j,k : byte;
|
||
temp : byte;
|
||
|
||
begin
|
||
if num = 0 then for i:=1 to 38 do for j:=1 to 29 do pantalla[i,j]:=0
|
||
else begin
|
||
|
||
Assign(fich,'datos/comp.dat');
|
||
Reset(fich);
|
||
|
||
for k:=1 to num do
|
||
begin
|
||
for i:=1 to 38 do
|
||
begin
|
||
for j:=1 to 29 do
|
||
begin
|
||
read(fich,temp);
|
||
pantalla[i,j] := temp;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
Close(fich);
|
||
|
||
end;
|
||
|
||
end;
|
||
/*----------------------------------------------------*/
|
||
|
||
begin
|
||
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 then vides:=0
|
||
else if num_fase=1 then vides:=vides_de_pepe
|
||
else vides:=vides;
|
||
pintura:=max_pintura;
|
||
en_casa:=true;
|
||
final_fase:=false;
|
||
rellontge.viu := false;
|
||
rellontge.temps := 0;
|
||
temps := 0;
|
||
|
||
carrega_pantalla(num_fase);
|
||
|
||
case num_fase of
|
||
|
||
0 : total_blocs_per_pintar:=blocs_fase_0;
|
||
|
||
1 : total_blocs_per_pintar:=blocs_fase_1;
|
||
|
||
2 : total_blocs_per_pintar:=blocs_fase_2;
|
||
|
||
3 : total_blocs_per_pintar:=blocs_fase_3;
|
||
|
||
4 : total_blocs_per_pintar:=blocs_fase_4;
|
||
|
||
5 : total_blocs_per_pintar:=blocs_fase_5;
|
||
|
||
6 : total_blocs_per_pintar:=blocs_fase_6;
|
||
|
||
7 : total_blocs_per_pintar:=blocs_fase_7;
|
||
|
||
8 : total_blocs_per_pintar:=blocs_fase_8;
|
||
|
||
9 : total_blocs_per_pintar:=blocs_fase_9;
|
||
|
||
10 : total_blocs_per_pintar:=blocs_fase_10;
|
||
|
||
end;
|
||
blocs_per_pintar:=total_blocs_per_pintar;
|
||
temps:=0;
|
||
velocitat_joc:=1;
|
||
no_queden_vides:=false;
|
||
naiximent:=false;
|
||
map:=false;
|
||
|
||
/* ini malos */
|
||
if num_fase=ultima_fase then
|
||
begin
|
||
for i:=1 to max_malos do
|
||
begin
|
||
malo[i].viu:=false;
|
||
end;
|
||
malo[1].dibuix:=d_malo1;
|
||
malo[2].dibuix:=d_malo2;
|
||
malo[3].dibuix:=pepe_malo;
|
||
end
|
||
else begin
|
||
for i:=1 to max_malos do
|
||
begin
|
||
malo[i].viu:=false;
|
||
end;
|
||
malo[1].dibuix:=d_malo1;
|
||
malo[2].dibuix:=d_malo2;
|
||
malo[3].dibuix:=d_malo3;
|
||
end;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure ini_matrius;
|
||
begin
|
||
|
||
/* 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;
|
||
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure pinta_marcadors;
|
||
var i,j : word;
|
||
begin
|
||
|
||
/* pintura */
|
||
for i:=pos_esq_m_p to pos_dreta_m_p do
|
||
for j:= (pos_base_m_p-(max_pintura div tamany_m_p)) to pos_base_m_p do
|
||
putpixel(i,j,color_marcador_pintura_fondo,vaddr);
|
||
for i:=pos_esq_m_p to pos_dreta_m_p do
|
||
for j:= (pos_base_m_p-(pintura div tamany_m_p)) to pos_base_m_p do
|
||
putpixel(i,j,color_marcador_pintura,vaddr);
|
||
if pintura=0 then
|
||
for i:=pos_esq_m_p to pos_dreta_m_p do
|
||
for j:= (pos_base_m_p-(pintura div tamany_m_p)) to pos_base_m_p do
|
||
|
||
putpixel(i,(pos_base_m_p),color_marcador_pintura_fondo,vaddr);
|
||
|
||
|
||
if num_fase>0 then
|
||
begin
|
||
/* vides */
|
||
pinta_number(numero_G[vides],255,268,169,vaddr);
|
||
|
||
/* punts */
|
||
i:=265;
|
||
j:=73;
|
||
|
||
pinta_number(numero_G[punts],color_fondo_marcador_punts,i,j,vaddr);
|
||
pinta_number(numero_G[punts],color_fondo_marcador_punts,i+6,j,vaddr);
|
||
pinta_number(numero_G[punts],color_fondo_marcador_punts,i+12,j,vaddr);
|
||
pinta_number(numero_G[punts],color_fondo_marcador_punts,i+18,j,vaddr);
|
||
pinta_number(numero_G[punts],color_fondo_marcador_punts,i+24,j,vaddr);
|
||
pinta_number(numero_G[punts],color_fondo_marcador_punts,i+30,j,vaddr);
|
||
pinta_number(numero_G[punts],color_fondo_marcador_punts,i+36,j,vaddr);
|
||
|
||
pinta_number(numero_G[punts div 1000000],255,i,j,vaddr);
|
||
pinta_number(numero_G[(punts mod 1000000) div 100000],255,i+6,j,vaddr);
|
||
pinta_number(numero_G[((punts mod 1000000) mod 100000) div 10000],255,i+12,j,vaddr);
|
||
pinta_number(numero_G[(((punts mod 1000000) mod 100000) mod 10000) div 1000],255,i+18,j,vaddr);
|
||
pinta_number(numero_G[((((punts mod 1000000) mod 100000) mod 10000) mod 1000) div 100],255,i+24,j,vaddr);
|
||
pinta_number(numero_G[(((((punts mod 1000000) mod 100000) mod 10000) mod 1000) mod 100) div 10],255,i+30,j,vaddr);
|
||
pinta_number(numero_G[(((((punts mod 1000000) mod 100000) mod 10000) mod 100) mod 10)],255,i+36,j,vaddr);
|
||
|
||
/* blocs */
|
||
/*pinta(numero[blocs_per_pintar],239,i,60,vaddr);
|
||
pinta(numero[blocs_per_pintar],239,i+4,60,vaddr);
|
||
pinta(numero[blocs_per_pintar],239,i+8,60,vaddr);
|
||
pinta(numero[blocs_per_pintar],239,i+12,60,vaddr);
|
||
|
||
pinta(numero[blocs_per_pintar div 1000],255,i,60,vaddr);
|
||
pinta(numero[((blocs_per_pintar mod 1000) div 100)],255,i+4,60,vaddr);
|
||
pinta(numero[(((blocs_per_pintar mod 1000) mod 100) div 10)],255,i+8,60,vaddr);
|
||
pinta(numero[(((blocs_per_pintar mod 1000) mod 100) mod 10)],255,i+12,60,vaddr);*/
|
||
|
||
/* altaveu */
|
||
/*if amb_so then
|
||
begin
|
||
pinta_number(altaveu_on,255,1,189,vaddr);
|
||
end
|
||
else begin
|
||
pinta_number(altaveu_off,255,1,189,vaddr);
|
||
end;*/
|
||
/* mapa */
|
||
|
||
end;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure ini_pantalla;
|
||
var i,j : word;
|
||
i_int:integer;
|
||
offset : word;
|
||
VirscrFase : Ptr_pantalla;
|
||
VaddrFase : Word;
|
||
|
||
begin
|
||
|
||
getmem(virscrFase,6400);
|
||
vaddrFase:=seg(virscrFase^);
|
||
|
||
load_mif(fases,vaddr);
|
||
Cls32(0,vaddrFase);
|
||
offset:=((num_fase div 6)*160)+((((num_fase-1) mod 5)*40)*320);
|
||
PutSprite(vaddr,vaddrFase,offset,160,40,0,0);
|
||
|
||
if not(mode_nocturne) then
|
||
begin
|
||
if num_fase>0 then load_mif(path[random(max_fondos_story)+1],vaddr2)
|
||
else load_mif(path[13],vaddr2);
|
||
end
|
||
else load_mif(path[14],vaddr2);
|
||
|
||
if (num_fase=ultima_fase) and not(mode_nocturne) then load_mif(path[12],vaddr2);
|
||
|
||
|
||
/* pinta numero de fase */
|
||
if (num_fase>0) and (num_fase<10) then pinta_number(numero_G[num_fase],255,1,1,vaddr2);
|
||
|
||
/* pinta les pareds */
|
||
for i:=1 to 38 do
|
||
for j:=1 to 29 do
|
||
if pantalla[i,j]=es_una_paret then pinta(dib_pared,255,(i*6)+4,(j+1)*6,vaddr2)
|
||
/*put_matrix(pepe,color_pared,(i*6)+4,(j+1)*6,6,6,vaddr2)*/;
|
||
|
||
/* pinta a Rosita i a la presó */
|
||
if num_fase=ultima_fase then
|
||
begin
|
||
pinta(rosita,255,16,96,vaddr2);
|
||
pinta(preso,255,22,96,vaddr2);
|
||
for i:=97 to 102 do putpixel(16,i,237,vaddr2);
|
||
putpixel(17,97,237,vaddr2);
|
||
putpixel(22,97,237,vaddr2);
|
||
putpixel(17,102,237,vaddr2);
|
||
putpixel(22,102,237,vaddr2);
|
||
end;
|
||
|
||
|
||
/* pinta el marcador de pintura */
|
||
for i:=pos_esq_m_p to pos_dreta_m_p do
|
||
for j:= (pos_base_m_p-(pintura div tamany_m_p)) to pos_base_m_p do
|
||
begin
|
||
putpixel(i,j,color_marcador_pintura,vaddr2);
|
||
putpixel(pos_esq_m_p-1,j,color_borde_m_p,vaddr2);
|
||
putpixel(pos_dreta_m_p+1,j,color_borde_m_p,vaddr2);
|
||
putpixel(i,(pos_base_m_p-(max_pintura div tamany_m_p)-1),color_borde_m_p,vaddr2);
|
||
putpixel(i,(pos_base_m_p+1),color_borde_m_p,vaddr2);
|
||
end;
|
||
|
||
/* 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 j:=0 to 49 do
|
||
begin
|
||
i:=j shl 1;
|
||
PutBloc(vaddr2,248+((99-i)*320),vaddr,72,i+1,248,0);
|
||
PutBloc(vaddr2,32248,vaddr,72,i+1,248,199-i);
|
||
PutBloc(vaddr2,0,vaddr,249,200,0,0);
|
||
espera_VGA;
|
||
volcar32(vaddr,VGA);
|
||
end;
|
||
|
||
/* posa el lletrero de fase X */
|
||
if story_mode_mode then
|
||
for i_int:=-40 to 80 do
|
||
begin
|
||
volcar32(vaddr2,vaddr);
|
||
if i_int<20 then Put_Sprite_ICE_esquerra(vaddrFase,vaddr,0,160,40,i_int shl 2,80)
|
||
else Put_Sprite_ICE_dreta(vaddrFase,vaddr,0,160,40,i_int shl 2,80);
|
||
if i_int=14 then delay(2000);
|
||
espera_VGA;
|
||
Volcar32(vaddr,VGA);
|
||
end;
|
||
|
||
Freemem(virscrFase,6400);
|
||
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure level_complete;
|
||
var i,temps,temps2 : word;
|
||
begin
|
||
|
||
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
|
||
if not(mode_nocturne) then
|
||
begin
|
||
load_mif(done01,vaddr);
|
||
espera_vga;
|
||
volcar32(vaddr,VGA);
|
||
ini_midi(musica_canvi_fase);
|
||
if midi then Playmidi;
|
||
|
||
Gettime(h,m,s,c);
|
||
temps:=h*3600+m*60+s;
|
||
Repeat
|
||
Gettime(h,m,s,c);
|
||
temps2:=h*3600+m*60+s;
|
||
until /*(QteclaPuls) or*/ ((temps2-temps)>=4);
|
||
|
||
borrat_de_pantalla(vaddr);
|
||
end
|
||
else begin
|
||
load_mif(done05,vaddr);
|
||
espera_vga;
|
||
volcar32(vaddr,VGA);
|
||
ini_midi(musica_canvi_fase_n);
|
||
if midi then Playmidi;
|
||
if midi then repeat until not(playing)
|
||
else for i:=0 to 300 do espera_VGA;
|
||
borrat_de_pantalla(vaddr);
|
||
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
|
||
|
||
end;
|
||
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure volcat_de_pantalla;
|
||
begin
|
||
volcar32(vaddr,vaddr2);
|
||
|
||
/* inicialització i comprobació de la fletxa de GO! */
|
||
fletxa_final_fase := true;
|
||
for i:=1 to 38 do
|
||
for j:=1 to 29 do
|
||
if (pantalla[i,j]=es_un_bloc_per_pintar) then fletxa_final_fase:=false;
|
||
|
||
|
||
/* pinta el rellontge */
|
||
if rellontge.viu then
|
||
case (c mod 50) of
|
||
|
||
0..12 : pinta(rellontge_dib,255,rellontge.i,rellontge.j,vaddr2);
|
||
13..25 : pinta(rellontge_dib_X,255,rellontge.i,rellontge.j,vaddr2);
|
||
26..37 : pinta(rellontge_dib,255,rellontge.i,rellontge.j,vaddr2);
|
||
38..49 : pinta(rellontge_dib_Y,255,rellontge.i,rellontge.j,vaddr2);
|
||
end;
|
||
|
||
if (x=pos_ini_x_pepe) and (y=pos_ini_y_pepe) then en_casa:=true;
|
||
|
||
/* pinta a PEPE, ROSITA o JOB */
|
||
if (mode_nocturne) and (not(rosita_selected)) and (not(amic_selected)) then pinta(gorro,255,x,y-6,vaddr2);
|
||
if pintura>0 then if rosita_selected then pinta(rosita_p,255,x,y,vaddr2)
|
||
else if amic_selected then pinta(amic,255,x,y,vaddr2)
|
||
else if mode_nocturne then pinta(pepe_gorro,255,x,y,vaddr2)
|
||
else pinta(pepe,255,x,y,vaddr2)
|
||
else if amic_selected then pinta(amic_b,255,x,y,vaddr2)
|
||
else if mode_nocturne then pinta(pepe_gorro,255,x,y,vaddr2)
|
||
else pinta(pepe_b,255,x,y,vaddr2);
|
||
|
||
if not(en_casa) then pinta(dib_pot,255,238,96,vaddr2)
|
||
else begin
|
||
pinta(dib_pot,255,238,96,vaddr2);
|
||
if rosita_selected then pinta(rosita_p,255,x,y,vaddr2)
|
||
else if amic_selected then pinta(amic,255,x,y,vaddr2)
|
||
else if mode_nocturne then pinta(pepe_gorro,255,x,y,vaddr2)
|
||
else pinta(pepe,255,x,y,vaddr2);
|
||
end;
|
||
|
||
|
||
/* pinta a rosita en la pressó */
|
||
if num_fase=ultima_fase then
|
||
begin
|
||
if (s mod 4)=0 then pinta(rosita,255,16,96,vaddr2)
|
||
else if (s mod 4)=1 then pinta(rosita2,255,16,96,vaddr2)
|
||
else if (s mod 4)=2 then pinta(rosita,255,16,96,vaddr2)
|
||
else pinta(rosita3,255,16,96,vaddr2);
|
||
if ((s mod 10)=0) or ((s mod 10)=1) then
|
||
begin
|
||
pinta(rosita_chillido,255,16,96,vaddr2);
|
||
pinta_number(help_1,255,12,87,vaddr2);
|
||
pinta_number(help_2,255,21,87,vaddr2);
|
||
end;
|
||
end;
|
||
|
||
/* pinta el mapa */
|
||
if map then put_map(pantalla,255,270,1,38,29,vaddr2);
|
||
|
||
/* pinta l'altaveu */
|
||
if amb_so then pinta_number(altaveu_on,255,2,188,vaddr2)
|
||
else pinta_number(altaveu_off,255,2,188,vaddr2);
|
||
|
||
/* pinta la fletxa de GO! */
|
||
if fletxa_final_fase then
|
||
if (c mod 99 < 50) then
|
||
begin
|
||
pinta_number(fletxa_final01,255,250,90,vaddr2);
|
||
pinta_number(fletxa_final02,255,259,90,vaddr2);
|
||
pinta_number(fletxa_final03,255,250,99,vaddr2);
|
||
pinta_number(fletxa_final04,255,259,99,vaddr2);
|
||
end
|
||
else begin
|
||
pinta_number(fletxa_final01,255,248,90,vaddr2);
|
||
pinta_number(fletxa_final02,255,257,90,vaddr2);
|
||
pinta_number(fletxa_final03,255,248,99,vaddr2);
|
||
pinta_number(fletxa_final04,255,257,99,vaddr2);
|
||
end;
|
||
|
||
|
||
espera_vga;
|
||
volcar32(vaddr2,VGA);
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure omplir_pot;
|
||
var i,j : byte;
|
||
begin
|
||
temps_final:=temps;
|
||
final_fase:=true;
|
||
for i:=1 to 38 do
|
||
for j:=1 to 29 do
|
||
if pantalla[i,j]=es_un_bloc_per_pintar
|
||
/*if blocs_per_pintar=0*/ then final_fase:=false;
|
||
|
||
|
||
if not(final_fase) then
|
||
begin
|
||
pinta(pepe,color_pintura,x,y,vaddr);
|
||
pantalla[(x div 6),((y div 6)-1)]:=es_un_bloc_pintat;
|
||
x:=pos_ini_x_pepe;
|
||
y:=pos_ini_y_pepe;
|
||
if mode_nocturne then pinta(pepe_gorro,255,x,y,vaddr)
|
||
else pinta(pepe,255,x,y,vaddr);
|
||
Play_WAV (sample[so_pot]);
|
||
while pintura<max_pintura do
|
||
begin
|
||
if pintura<max_pintura then inc(pintura);
|
||
if pintura<max_pintura then inc(pintura);
|
||
if pintura<max_pintura then inc(pintura);
|
||
pinta_marcadors;
|
||
if time_attack_mode then posa_el_temps(vaddr);
|
||
if ((pintura=Max_pintura) or (pintura mod 50=0))
|
||
then /*sound(pintura*7);*/Play_WAV (sample[so_pot]);
|
||
volcat_de_pantalla;
|
||
end;
|
||
nosound;
|
||
end;
|
||
en_casa:=true;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure pinta_un_bloc(color:byte;queda_pintura:byte);
|
||
begin
|
||
if antiga_direccio=cap_on_va_Pepe then
|
||
begin if valor_del_bloc<10 then inc(valor_del_bloc); end
|
||
else valor_del_bloc:=0;
|
||
if queda_pintura>0 then
|
||
begin
|
||
/*if amb_so then so_de(pot_ple);*/
|
||
if not(rosita_selected) then dec(pintura);
|
||
pinta(pepe,color,x,y,vaddr);
|
||
pantalla[(x div 6),((y div 6)-1)]:=es_un_bloc_pintat;
|
||
if el_que_hi_havia=es_un_bloc_per_pintar then
|
||
begin
|
||
dec(blocs_per_pintar);
|
||
if not(amic_selected) then punts:=punts+(25-(5*dificultat))+valor_del_bloc
|
||
else punts:=punts+(((25-(5*dificultat))+valor_del_bloc)*2);
|
||
if (punts mod 20000)>(25-(5*dificultat)+valor_del_bloc) then donar_vida:=true;
|
||
if (vides<9) and (story_mode_mode) and (donar_vida) then if punts>100 then
|
||
if (punts mod 20000)<(25-(5*dificultat)+valor_del_bloc) then
|
||
if not(amic_selected) then
|
||
begin
|
||
donar_vida:=false;
|
||
inc(vides);
|
||
pinta_number_zoom(5,numero_G[vides],255,260,150,VGA);
|
||
if amb_so then PlayWav(sample[so_ring])/*so_de(vida_extra)*/
|
||
else retard(40);
|
||
end;
|
||
end;
|
||
end
|
||
else if el_que_hi_havia=es_un_bloc_pintat then
|
||
begin
|
||
/*if amb_so then so_de(pot_buit);*/
|
||
pinta(pepe,color,x,y,vaddr);
|
||
pantalla[(x div 6),((y div 6)-1)]:=es_un_bloc_pintat;
|
||
end
|
||
else if el_que_hi_havia=es_un_bloc_per_pintar then
|
||
begin
|
||
/*if amb_so then so_de(pot_buit);*/
|
||
pantalla[(x div 6),((y div 6)-1)]:=es_un_bloc_per_pintar;
|
||
end;
|
||
antiga_direccio:=cap_on_va_Pepe;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure animacio_mort;
|
||
var i: byte;
|
||
begin
|
||
Play_WAV (sample[so_mort]);
|
||
for i:=1 to 5 do
|
||
begin
|
||
retard(10);
|
||
if rosita_selected then pinta(rosita_m,255,x,y,VGA)
|
||
else if amic_selected then pinta(amic_m,255,x,y,VGA)
|
||
else pinta(pepe_m,255,x,y,VGA);
|
||
|
||
/*if amb_so then sound(2000);*/
|
||
retard(10);
|
||
if rosita_selected then pinta(rosita_m2,255,x,y,VGA)
|
||
else if amic_selected then pinta(amic_m2,255,x,y,VGA)
|
||
else pinta(pepe_m2,255,x,y,VGA);
|
||
/*if amb_so then sound(1000);*/
|
||
end;
|
||
nosound;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure animacio_alegria;
|
||
var i: byte;
|
||
begin
|
||
|
||
if (mode_nocturne) and
|
||
(not(rosita_selected)) and
|
||
(not(amic_selected)) then
|
||
begin
|
||
que_hi_ha:=pantalla[((x-max_m_x) div 6),(((y-max_m_y) div 6)-1)];
|
||
if que_hi_ha=es_un_bloc_pintat then pinta(gorro,color_pintura,x-6,y-6,VGA)
|
||
else if que_hi_ha=es_una_paret then pinta(dib_pared,255,x-6,y-6,VGA);
|
||
pinta(gorro,255,x,y-6,VGA);
|
||
end;
|
||
for i:=1 to 10 do
|
||
begin
|
||
retard(10);
|
||
if rosita_selected then pinta(rosita_a,255,x,y,VGA)
|
||
else if amic_selected then pinta(amic_a,255,x,y,VGA)
|
||
else if mode_nocturne then pinta(pepe_gorro,255,x,y,VGA)
|
||
else pinta(pepe_a,255,x,y,VGA);
|
||
retard(10);
|
||
if rosita_selected then pinta(rosita_a2,255,x,y,VGA)
|
||
else if amic_selected then pinta(amic_a2,255,x,y,VGA)
|
||
else if mode_nocturne then pinta(pepe_gorro,255,x,y,VGA)
|
||
else pinta(pepe_a2,255,x,y,VGA);
|
||
end;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure mort;
|
||
begin
|
||
if vides=0 then
|
||
begin
|
||
no_queden_vides:=true;
|
||
pinta(pepe,color_pintura,x,y,vaddr);
|
||
volcat_de_pantalla;
|
||
animacio_mort;
|
||
x:=pos_ini_x_pepe;
|
||
y:=pos_ini_y_pepe;
|
||
en_casa:=true;
|
||
end
|
||
else begin
|
||
if vides>0 then dec(vides);
|
||
if el_que_hi_havia=es_un_bloc_pintat then pinta(pepe,color_pintura,x,y,vaddr);
|
||
volcat_de_pantalla;
|
||
/*so_de(mos_a_pepe);*/Play_WAV (sample[so_mort]);
|
||
animacio_mort;
|
||
pantalla[(x div 6),(y div 6)-1]:=el_que_hi_havia/*es_un_bloc_pintat*/;
|
||
x:=pos_ini_x_pepe;
|
||
y:=pos_ini_y_pepe;
|
||
en_casa:=true;
|
||
volcat_de_pantalla;
|
||
if mode_nocturne then pinta(pepe_gorro,255,x,y,vaddr2)
|
||
else pinta(pepe,255,x,y,vaddr2);
|
||
omplir_pot;
|
||
volcat_de_pantalla;
|
||
retard_pepe:=velocitat_pepe;
|
||
end;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure mira_el_que_hi_ha(cap_on_vaig:byte);
|
||
begin
|
||
el_que_hi_havia:=que_hi_ha;
|
||
case cap_on_vaig of
|
||
|
||
amunt:que_hi_ha:=pantalla[(x div 6),(((y-max_m_y) div 6)-1)];
|
||
dreta:que_hi_ha:=pantalla[((x+max_m_x) div 6),((y div 6)-1)];
|
||
avall:que_hi_ha:=pantalla[(x div 6),(((y+max_m_y) div 6)-1)];
|
||
esquerra:que_hi_ha:=pantalla[((x-max_m_x) div 6),((y div 6)-1)];
|
||
|
||
end;
|
||
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure ja_no_pots_eixir;
|
||
begin
|
||
escriu_frase('JA NO POTS EIXIR',64,50,96,vaddr,10,0,1);
|
||
animacio_mort;
|
||
x:=0;
|
||
y:=0;
|
||
no_queden_vides:=true;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure munta_velocitat_joc;
|
||
begin
|
||
if velocitat_pepe<9 then inc(velocitat_pepe);
|
||
pinta_number_zoom(6,numero_G[velocitat_pepe],255,110,80,VGA);
|
||
if amb_so then
|
||
begin
|
||
sound(velocitat_pepe*150);
|
||
retard(1);
|
||
nosound;
|
||
end;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure baixa_velocitat_joc;
|
||
begin
|
||
if velocitat_pepe>1 then dec(velocitat_pepe);
|
||
pinta_number_zoom(6,numero_G[velocitat_pepe],255,110,80,VGA);
|
||
if amb_so then
|
||
begin
|
||
sound(velocitat_pepe*150);
|
||
retard(1);
|
||
nosound;
|
||
end;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure moure(direccio:byte);
|
||
var desp_pixel:byte;
|
||
begin
|
||
cap_on_va_Pepe:=direccio;
|
||
case direccio of
|
||
amunt:if ((y-max_m_y)>=l0) and (not(en_casa))
|
||
and (not(pantalla[(x div 6),(((y-max_m_y) div 6)-1)]=es_una_paret)) then
|
||
begin
|
||
mira_el_que_hi_ha(direccio);
|
||
if que_hi_ha=es_un_bicho then mort
|
||
else begin
|
||
pinta_un_bloc(color_pintura,pintura);
|
||
/*for desp_pixel:=1 to max_m_y do begin dec(y); volcat_de_pantalla; end;*/
|
||
y:=y-max_m_y;
|
||
/*if not(amb_so) then *//*retard(velocitat_joc);*/
|
||
retard_pepe:=velocitat_pepe;
|
||
menejant:=true;
|
||
pantalla[(x div 6),((y div 6)-1)]:=es_pepe;
|
||
end;
|
||
|
||
end;
|
||
dreta:begin
|
||
if (not(en_casa))
|
||
and (not(pantalla[((x+max_m_x) div 6),((y div 6)-1)]=es_una_paret)) then
|
||
if ((x+max_m_x)<=l1) then
|
||
begin
|
||
mira_el_que_hi_ha(direccio);
|
||
if que_hi_ha=es_un_bicho then mort
|
||
else begin
|
||
pinta_un_bloc(color_pintura,pintura);
|
||
x:=x+max_m_x;
|
||
/*if not(amb_so) then *//*retard(velocitat_joc);*/
|
||
retard_pepe:=velocitat_pepe;
|
||
menejant:=true;
|
||
pantalla[(x div 6),((y div 6)-1)]:=es_pepe;
|
||
end;
|
||
|
||
end
|
||
else if (x=232) and (y=96) /*and (pintura<max_pintura)*/ then omplir_pot;
|
||
end;
|
||
avall:if ((y+max_m_y)<=l2) and (not(en_casa))
|
||
and (not(pantalla[(x div 6),(((y+max_m_y) div 6)-1)]=es_una_paret)) then
|
||
begin
|
||
mira_el_que_hi_ha(direccio);
|
||
if que_hi_ha=es_un_bicho then mort
|
||
else begin
|
||
pinta_un_bloc(color_pintura,pintura);
|
||
y:=y+max_m_y;
|
||
/*if not(amb_so) then *//*retard(velocitat_joc);*/
|
||
retard_pepe:=velocitat_pepe;
|
||
menejant:=true;
|
||
pantalla[(x div 6),((y div 6)-1)]:=es_pepe;
|
||
end;
|
||
|
||
end;
|
||
esquerra:if ((x-max_m_x)>=l3)
|
||
and (not(pantalla[((x-max_m_x) div 6),((y div 6)-1)]=es_una_paret)) then
|
||
begin
|
||
mira_el_que_hi_ha(direccio);
|
||
if (en_casa) and (que_hi_ha=es_un_bicho) then ja_no_pots_eixir;
|
||
/*if en_casa then x:=x-max_m_x
|
||
else*/
|
||
if /*(not(en_casa)) and*/ (que_hi_ha=es_un_bicho) then mort
|
||
else begin
|
||
pinta_un_bloc(color_pintura,pintura);
|
||
x:=x-max_m_x;
|
||
/*if not(amb_so) then *//*retard(velocitat_joc);*/
|
||
retard_pepe:=velocitat_pepe;
|
||
menejant:=true;
|
||
pantalla[(x div 6),((y div 6)-1)]:=es_pepe;
|
||
end;
|
||
|
||
en_casa:=false;
|
||
end;
|
||
end;
|
||
|
||
pinta_marcadors;
|
||
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure ini_rellontge;
|
||
var a,b : byte;
|
||
begin
|
||
|
||
/*randomize;*/
|
||
repeat
|
||
|
||
a:=random(38)+1;
|
||
b:=random(29)+1;
|
||
|
||
until not(pantalla[a,b]=es_una_paret);
|
||
rellontge.i := (a*6)+4;
|
||
rellontge.j := (b+1)*6;
|
||
rellontge.viu := true;
|
||
Play_WAV (sample[so_ring]);
|
||
sense_rellontge := false;
|
||
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure naix_malo(numero:byte);
|
||
var a,b : byte; cont : word;
|
||
begin
|
||
malo[numero].viu:=true;
|
||
/*randomize;*/
|
||
cont := 0;
|
||
repeat
|
||
a:=random(38)+1;
|
||
b:=random(29)+1;
|
||
inc(cont); if cont>10000 then begin a:=38; b:=15; break; end;
|
||
until (pantalla[a,b]=es_un_bloc_pintat) and (abs(a-(x div 6))>5) and (abs(b-((y div 6)-1))>5);
|
||
malo[numero].i:=a;
|
||
malo[numero].j:=b;
|
||
/*so_de(naiximent_del_malo);*/Play_WAV (sample[so_malo]);
|
||
pinta(malo[numero].dibuix,255,((malo[numero].i*6)+4),(malo[numero].j+1)*6,vaddr);
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure mou_malo(numero,direccio:byte);
|
||
begin
|
||
case direccio of
|
||
|
||
amunt:if (pantalla[malo[numero].i,malo[numero].j-1]=es_un_bloc_pintat)
|
||
and (not(pantalla[malo[numero].i,malo[numero].j-1]=es_un_bicho)) then
|
||
begin
|
||
pinta(malo[numero].dibuix,color_pintura,(malo[numero].i*6)+4,(malo[numero].j+1)*6,vaddr);
|
||
pantalla[malo[numero].i,malo[numero].j]:=es_un_bloc_pintat;
|
||
dec(malo[numero].j);
|
||
pinta(malo[numero].dibuix,255,(malo[numero].i*6)+4,(malo[numero].j+1)*6,vaddr);
|
||
pantalla[malo[numero].i,malo[numero].j]:=es_un_bicho;
|
||
end
|
||
else if (pantalla[malo[numero].i,malo[numero].j-1]=es_pepe)
|
||
and (not(en_casa))
|
||
and (pintura>0) then mort
|
||
else if (pintura=0)
|
||
and (que_hi_ha=es_un_bloc_pintat)
|
||
and (pantalla[malo[numero].i,malo[numero].j-1]=es_pepe)
|
||
and (not(en_casa)) then mort;
|
||
avall:if (pantalla[malo[numero].i,malo[numero].j+1]=es_un_bloc_pintat)
|
||
and (not(pantalla[malo[numero].i,malo[numero].j+1]=es_un_bicho)) then
|
||
begin
|
||
pinta(malo[numero].dibuix,color_pintura,(malo[numero].i*6)+4,(malo[numero].j+1)*6,vaddr);
|
||
pantalla[malo[numero].i,malo[numero].j]:=es_un_bloc_pintat;
|
||
inc(malo[numero].j);
|
||
pinta(malo[numero].dibuix,255,(malo[numero].i*6)+4,(malo[numero].j+1)*6,vaddr);
|
||
pantalla[malo[numero].i,malo[numero].j]:=es_un_bicho;
|
||
end
|
||
else if (pantalla[malo[numero].i,malo[numero].j+1]=es_pepe)
|
||
and (not(en_casa))
|
||
and (pintura>0) then mort
|
||
else if (pintura=0)
|
||
and (que_hi_ha=es_un_bloc_pintat)
|
||
and (pantalla[malo[numero].i,malo[numero].j+1]=es_pepe)
|
||
and (not(en_casa)) then mort;
|
||
dreta:if (pantalla[malo[numero].i+1,malo[numero].j]=es_un_bloc_pintat)
|
||
and (not(pantalla[malo[numero].i+1,malo[numero].j]=es_un_bicho))
|
||
and (not((malo[numero].i+1)=39)) then
|
||
begin
|
||
pinta(malo[numero].dibuix,color_pintura,(malo[numero].i*6)+4,(malo[numero].j+1)*6,vaddr);
|
||
pantalla[malo[numero].i,malo[numero].j]:=es_un_bloc_pintat;
|
||
inc(malo[numero].i);
|
||
pinta(malo[numero].dibuix,255,(malo[numero].i*6)+4,(malo[numero].j+1)*6,vaddr);
|
||
pantalla[malo[numero].i,malo[numero].j]:=es_un_bicho;
|
||
end
|
||
else if (pantalla[malo[numero].i+1,malo[numero].j]=es_pepe)
|
||
or ((malo[numero].i+1)=39) then
|
||
if (not(en_casa))
|
||
and (pintura>0) then mort
|
||
else if (pantalla[malo[numero].i+1,malo[numero].j]=es_pepe)
|
||
or ((malo[numero].i+1)=39) then
|
||
if (pintura=0)
|
||
and (que_hi_ha=es_un_bloc_pintat)
|
||
and (pantalla[malo[numero].i+1,malo[numero].j]=es_pepe)
|
||
and (not(en_casa)) then mort
|
||
else if ((malo[numero].i+1)=39) and (malo[numero].j=15) and (en_casa) then ja_no_pots_eixir;
|
||
esquerra:if (pantalla[malo[numero].i-1,malo[numero].j]=es_un_bloc_pintat)
|
||
and (not(pantalla[malo[numero].i-1,malo[numero].j]=es_un_bicho)) then
|
||
begin
|
||
pinta(malo[numero].dibuix,color_pintura,(malo[numero].i*6)+4,(malo[numero].j+1)*6,vaddr);
|
||
pantalla[malo[numero].i,malo[numero].j]:=es_un_bloc_pintat;
|
||
dec(malo[numero].i);
|
||
pinta(malo[numero].dibuix,255,(malo[numero].i*6)+4,(malo[numero].j+1)*6,vaddr);
|
||
pantalla[malo[numero].i,malo[numero].j]:=es_un_bicho;
|
||
end
|
||
else if (pantalla[malo[numero].i-1,malo[numero].j]=es_pepe)
|
||
and (not(en_casa))
|
||
and (pintura>0) then mort
|
||
else if (pintura=0)
|
||
and (que_hi_ha=es_un_bloc_pintat)
|
||
and (pantalla[malo[numero].i-1,malo[numero].j]=es_pepe)
|
||
and (not(en_casa)) then mort;
|
||
end;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure moure_malos;
|
||
begin
|
||
for i:=1 to max_malos do
|
||
if malo[i].viu then
|
||
begin
|
||
/*randomize;*/
|
||
case malo[i].sentit of
|
||
|
||
horitzontalment:if ((malo[i].i*6)+4)>x then
|
||
begin
|
||
mou_malo(i,esquerra);
|
||
malo[i].sentit:=random(2+dificultat);
|
||
end
|
||
else if ((malo[i].i*6)+4)<x then
|
||
begin
|
||
mou_malo(i,dreta);
|
||
malo[i].sentit:=random(2+dificultat);
|
||
end
|
||
else malo[i].sentit:=verticalment;
|
||
verticalment:if ((malo[i].j+1)*6)>y then
|
||
begin
|
||
mou_malo(i,amunt);
|
||
malo[i].sentit:=random(2+dificultat);
|
||
end
|
||
else if ((malo[i].j+1)*6)<y then
|
||
begin
|
||
mou_malo(i,avall);
|
||
malo[i].sentit:=random(2+dificultat);
|
||
end
|
||
else malo[i].sentit:=horitzontalment;
|
||
2,3,4,5:malo[i].sentit:=random(2+dificultat);
|
||
end;
|
||
end;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure fer_apareixer_els_malos;
|
||
begin
|
||
|
||
if blocs_per_pintar=((total_blocs_per_pintar div 4)*3) then
|
||
if not(malo[1].viu) then naix_malo(1);
|
||
|
||
if blocs_per_pintar=((total_blocs_per_pintar div 4)*2) then
|
||
if not(malo[2].viu) then naix_malo(2);
|
||
|
||
/* rellontge */
|
||
if story_mode_mode then
|
||
if blocs_per_pintar=(total_blocs_per_pintar div 3) then
|
||
if (not(rellontge.viu)) and (sense_rellontge) and (num_fase<10) then ini_rellontge;
|
||
|
||
/* malo 3 */
|
||
if (num_fase=10) or (dificultat=dificil) or (mode_nocturne) then
|
||
if blocs_per_pintar=(total_blocs_per_pintar div 4) then
|
||
if not(malo[3].viu) then naix_malo(3);
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure load_setup_i_versio;
|
||
|
||
var
|
||
x:word;
|
||
fichbyte : file of byte;
|
||
fich : text;
|
||
S,P: PathStr;
|
||
|
||
const color=80;
|
||
|
||
begin
|
||
|
||
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);
|
||
|
||
S := FSearch('setup.ini','');
|
||
if S = '' then escriu_frase('SETUP.INI NO ENCONTRAT',198,20,100,vaddr,0,0,1)
|
||
else begin
|
||
|
||
Assign(fich,'setup.ini');
|
||
Reset(fich);
|
||
|
||
while not EOF(fich) do
|
||
begin
|
||
readln(fich,Puerto);
|
||
readln(fich,DMA);
|
||
readln(fich,IRQ);
|
||
end;
|
||
|
||
Close(fich);
|
||
|
||
escriu_frase('SETUP.INI CARREGAT AMB EXIT',color,20,100,vaddr,0,0,1);
|
||
|
||
end;
|
||
|
||
|
||
S := FSearch('story.dat','datos');
|
||
if S = '' then
|
||
begin
|
||
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;
|
||
|
||
Assign(fich,'datos\story.dat');
|
||
Rewrite(fich);
|
||
x:=1;
|
||
while x<6 do
|
||
begin
|
||
writeln(fich,nom[x]);
|
||
writeln(fich,puntuacio[x]);
|
||
inc(x);
|
||
end;
|
||
Close(fich);
|
||
end;
|
||
|
||
P := FSearch('time.dat','datos');
|
||
if P = '' then
|
||
begin
|
||
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;
|
||
|
||
Assign(fich,'datos\time.dat');
|
||
Rewrite(fich);
|
||
x:=1;
|
||
while x<6 do
|
||
begin
|
||
writeln(fich,nom2[x]);
|
||
writeln(fich,minuts[x]);
|
||
writeln(fich,segons_tabla[x]);
|
||
inc(x);
|
||
end;
|
||
Close(fich);
|
||
end;
|
||
|
||
load_records;
|
||
|
||
if (S<>'') and (P<>'') then
|
||
escriu_frase('DATOS DEL JOC CARREGATS',color,20,110,vaddr,0,0,1);
|
||
|
||
escriu_frase('PULSA UNA TECLA PER A CONTINUAR...',color,20,180,vaddr,0,0,1);
|
||
|
||
Repeat until QteclaPuls;
|
||
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
procedure story_mode;
|
||
var
|
||
eixir : boolean;
|
||
s_vella : byte;
|
||
musica_fase:string;
|
||
|
||
begin
|
||
|
||
historia;
|
||
num_fase:=1;
|
||
repeat
|
||
|
||
contador:=0;
|
||
ini_vars(num_fase);
|
||
case num_fase of
|
||
|
||
1,3,5,7,9 : musica_fase:=musica_fase01;
|
||
|
||
2,4,6,8 : musica_fase:=musica_fase02;
|
||
|
||
10 : musica_fase:=musica_fase10;
|
||
|
||
end;
|
||
if num_fase=1 then punts:=0;
|
||
/*if not(mode_nocturne) then pantalla_presentacio(num_fase);*/
|
||
ini_pantalla;
|
||
volcar32(vaddr2,vaddr);
|
||
pinta_marcadors;
|
||
eixir:=false;
|
||
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
|
||
if mode_nocturne then ini_midi(musica_fase_nit)
|
||
else ini_midi(musica_fase);
|
||
|
||
if midi then Playmidi;
|
||
/*------------------------------*/
|
||
repeat
|
||
|
||
if (not(playing)) and (midi) then PlayMIDI;
|
||
|
||
s_vella := s;
|
||
gettime(h,m,s,c);
|
||
|
||
menejant:=false;
|
||
|
||
inc(contador);
|
||
if retard_pepe>0 then dec(retard_pepe);
|
||
|
||
if teclapuls(KeyKeypadPlus) then
|
||
begin
|
||
munta_velocitat_joc;
|
||
repeat until not(TeclaPuls(KeyKeypadPlus));
|
||
end;
|
||
|
||
if teclapuls(KeyKeypadminus) then
|
||
begin
|
||
baixa_velocitat_joc;
|
||
repeat until not(TeclaPuls(KeyKeypadMinus));
|
||
end;
|
||
|
||
if retard_pepe=0 then
|
||
if teclapuls(tecla_amunt) then moure(amunt)
|
||
else if teclapuls(tecla_avall) then moure(avall)
|
||
else if teclapuls(tecla_dreta) then moure(dreta)
|
||
else if teclapuls(tecla_esquerra) then moure(esquerra);
|
||
|
||
if TeclaPuls(KeyM) then begin map:=not(map); repeat until not(TeclaPuls(KeyM)); end;
|
||
|
||
/*---------*/
|
||
/* if TeclaPuls(KeyN) then
|
||
begin
|
||
final_fase:=true;
|
||
num_fase:=9;
|
||
end;
|
||
|
||
if TeclaPuls(KeyB) then final_fase:=true;*/
|
||
/*---------*/
|
||
|
||
if teclapuls(Key1) then
|
||
begin
|
||
amb_so:=/*not(amb_so);*/false;
|
||
repeat until not(TeclaPuls(Key1));
|
||
end;
|
||
|
||
if teclapuls(KeyESC) then
|
||
begin
|
||
escriu_frase('JOC DETINGUT',147,69,89,vaddr2,0,0,0);
|
||
escriu_frase('(*ESC* PER A EIXIR)',147,38,101,vaddr2,0,0,0);
|
||
espera_VGA;
|
||
volcar32(vaddr2,VGA);
|
||
repeat until not(TeclaPuls(KeyESC));
|
||
repeat until (QteclaPuls);
|
||
if TeclaPuls(KeyESC) then eixir:=true;
|
||
end;
|
||
|
||
if rellontge.viu then
|
||
if (x = rellontge.i) and (y = rellontge.j) then
|
||
begin
|
||
malos_quets := true;
|
||
rellontge.temps := 0;
|
||
rellontge.viu := false;
|
||
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
|
||
ini_midi(musica_campanes);
|
||
if midi then Playmidi;
|
||
end;
|
||
|
||
fer_apareixer_els_malos;
|
||
|
||
if not(malos_quets) then
|
||
begin
|
||
if contador mod velocitat_pepe = 0 then moure_malos
|
||
end
|
||
else begin
|
||
if (s_vella<>s) then inc(rellontge.temps);
|
||
if rellontge.temps = 10 then
|
||
begin
|
||
malos_quets:=false;
|
||
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
|
||
if mode_nocturne then ini_midi(musica_fase_nit)
|
||
else ini_midi(musica_fase);
|
||
if midi then Playmidi;
|
||
end;
|
||
|
||
end;
|
||
|
||
if not(no_queden_vides) then volcat_de_pantalla;
|
||
|
||
/*------------------------------*/
|
||
|
||
until (eixir) or (final_fase) or (no_queden_vides);
|
||
if final_fase then if num_fase<ultima_fase then
|
||
begin
|
||
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 then begin StopMIDI; unloadmidi; midi:=false; end;
|
||
level_complete;
|
||
inc(num_fase);
|
||
end
|
||
else if mode_nocturne then
|
||
begin
|
||
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 then begin StopMIDI; unloadmidi; midi:=false; end;
|
||
historia_final;
|
||
mode_Dream_Tour:=Dream_Tour;
|
||
save_records;
|
||
end
|
||
else begin
|
||
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 then begin StopMIDI; unloadmidi; midi:=false; end;
|
||
if dificultat=dificil then
|
||
begin
|
||
historia_final;
|
||
if not(mode_rosita=rosita_enabled) and not(mode_amic=job_enabled) then mode_hard:=pepe_dificil;
|
||
if (mode_rosita=rosita_enabled) and not(mode_amic=job_enabled) then mode_hard_r:=rosita_dificil;
|
||
if not(mode_rosita=rosita_enabled) and
|
||
(mode_easy=pepe_facil) and
|
||
(mode_normal=pepe_normal) and
|
||
(mode_hard=pepe_dificil) then
|
||
begin
|
||
mode_rosita:=rosita_enabled;
|
||
text_rosita;
|
||
end;
|
||
if (mode_rosita=rosita_enabled) and
|
||
(mode_easy_r=rosita_facil) and
|
||
(mode_normal_r=rosita_normal) and
|
||
(mode_hard_r=rosita_dificil) then
|
||
begin
|
||
mode_amic:=job_enabled;
|
||
text_amic;
|
||
end;
|
||
save_records;
|
||
end
|
||
else if dificultat=normal then
|
||
begin
|
||
final_fals;
|
||
if not(mode_rosita=rosita_enabled) and not(mode_amic=job_enabled) then mode_normal:=pepe_normal;
|
||
if (mode_rosita=rosita_enabled) and not(mode_amic=job_enabled) then mode_normal_r:=rosita_normal;
|
||
if not(mode_rosita=rosita_enabled) and
|
||
(mode_easy=pepe_facil) and
|
||
(mode_normal=pepe_normal) and
|
||
(mode_hard=pepe_dificil) then
|
||
begin
|
||
mode_rosita:=rosita_enabled;
|
||
text_rosita;
|
||
end;
|
||
if (mode_rosita=rosita_enabled) and
|
||
(mode_easy_r=rosita_facil) and
|
||
(mode_normal_r=rosita_normal) and
|
||
(mode_hard_r=rosita_dificil) then
|
||
begin
|
||
mode_amic:=job_enabled;
|
||
text_amic;
|
||
end;
|
||
save_records;
|
||
end
|
||
else begin
|
||
final_fals;
|
||
if not(mode_rosita=rosita_enabled) and not(mode_amic=job_enabled) then mode_easy:=pepe_facil;
|
||
if (mode_rosita=rosita_enabled) and not(mode_amic=job_enabled) then mode_easy_r:=rosita_facil;
|
||
if not(mode_rosita=rosita_enabled) and
|
||
(mode_easy=pepe_facil) and
|
||
(mode_normal=pepe_normal) and
|
||
(mode_hard=pepe_dificil) then
|
||
begin
|
||
mode_rosita:=rosita_enabled;
|
||
text_rosita;
|
||
end;
|
||
if not(mode_amic=job_enabled) and
|
||
(mode_rosita=rosita_enabled) and
|
||
(mode_easy_r=rosita_facil) and
|
||
(mode_normal_r=rosita_normal) and
|
||
(mode_hard_r=rosita_dificil) then
|
||
begin
|
||
mode_amic:=job_enabled;
|
||
text_amic;
|
||
end;
|
||
save_records;
|
||
end;
|
||
no_queden_vides:=true;
|
||
end;
|
||
|
||
until (eixir) or (no_queden_vides);
|
||
|
||
if no_queden_vides then
|
||
begin
|
||
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
|
||
missatge_game_over;
|
||
end;
|
||
if (eixir) then
|
||
begin
|
||
fadedown(0,0,0,0);
|
||
if midi then begin StopMIDI; unloadmidi; midi:=false; end;
|
||
end;
|
||
end;
|
||
/*──────────────────────────────────────────────────────────────────────────*/
|
||
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;
|
||
|
||
*/ |