#define B_CALL(xxxx) rst 28h \ .dw xxxx .org 9D95h set 7,(iY+20) ; FE6Eh fin de la memoire disponible ; VARIABLE mem .equ 0F000h dessine_hl .equ mem dessine_ix .equ mem-2d ecran_x .equ mem-4d ecran_y .equ mem-6d dessine_1 .equ mem-8d dessine_2 .equ mem-10d dessine_3 .equ mem-12d dessine_4 .equ mem-14d reman_flag .equ mem-15d heros_x .equ mem-17d heros_y .equ mem-19d heros_oriente .equ mem-20d heros_anime .equ mem-21d heros_anime2 .equ mem-22d map_y .equ mem-24d map_x .equ mem-26d map .equ mem-28d var_flag .equ mem-29d nb_entitee_max .equ 10d nb_octet_data .equ 10d nomb_entitee .equ mem-30d entitee .equ mem-130d perso_bouge .equ mem-131d entitee_type .equ mem-132d entite_zbuffer .equ mem-142d pointeur_entite .equ mem-152d heros_invisible .equ mem-153d heros_bouge_plus .equ mem-154d num_scene .equ mem-155d avance_scene .equ mem-157d entitee_coordx .equ mem-159d entitee_coordy .equ mem-161d entitee_flag .equ mem-163d entitee_flag2 .equ mem-165d heros_bouge_flag .equ mem-166d hauteur_bulle .equ mem-167d dialogue .equ mem-169d flag_entrer .equ mem-170d tete_sera_droite .equ mem-171d tete_sera_gauche .equ mem-172d tete_de_droite .equ mem-173d tete_dr_avance .equ mem-174d tete_de_gauche .equ mem-175d tete_ga_avance .equ mem-176d ligne_bulle .equ mem-177d ecran4 .equ mem-945d ecran3 .equ mem-1713d tete_retourne .equ mem-1932d flag_rafraichi_decor .equ mem-1933d flag_fondue_noir .equ mem-1934d fixe_fps .equ mem-1936d ; INTERRUPTION ET AUTRE textex .equ 86D7h textey .equ 86D8h affiche_texte .equ 4561h buffer_ecran .equ 9340h second_buffer .equ 86ECh KDown .equ 254d KLeft .equ 253d KRight .equ 251d KUp .equ 247d KClear .equ 191d KEnter .equ 254d ld bc,768 ld de,buffer_ecran ld hl,orbe1 ldir ld bc,768 ld de,second_buffer ld hl,orbe2 ldir ld a,1 ld (var_flag),a boucle_orbe: ld a,0ffh out (1),a ;met à 0 le clavier ld a,0fdh out (1),a ;groupe 1 actif in a,(1) cp kClear jp z,quit cp kEnter jp nz,rellache_entrer ld a,(var_flag) cp 1 jr z,entrer_enfonce jp debut_aventure rellache_entrer: xor a ld (var_flag),a entrer_enfonce: ld hl,buffer_ecran-12-(-(12*64)+1) call affiche ld hl,second_buffer-12-(-(12*64)+1) call affiche jp boucle_orbe debut_aventure: call fondue_au_noir ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; +++++++++++++++++++ DEBUT DE L'AVENTURE +++++++++++++++++++++++ ld bc,768 ; efface les images du titre qui seront utilisé pour les sprites superieurs ld de,ecran3 ld hl,buffer_ecran ldir ld bc,768 ld de,ecran4 ld hl,buffer_ecran ldir xor a ; INITIALISE LES VARIABLES ld (flag_rafraichi_decor),a ld hl,0 ld (ecran_x),hl ld hl,35 ld (ecran_y),hl ld hl,13 ld (heros_x),hl ld hl,10 ld (heros_y),hl ld (heros_oriente),a ld (heros_anime),a ld (heros_anime2),a ld hl,0 ld (avance_scene),hl ld a,1 ld (heros_invisible),a ld (heros_bouge_plus),a ld (num_scene),a ; repart toutes les cartes ld a,55+128 ld (a_reboucher),a ld a,54+128 ld (a_reboucher2),a ld a,5 ld (a_reboucher3),a ; ld hl,50 ld hl,10 ld (heros_y),hl ; passe tout ; ld a,0 ; ld (heros_invisible),a ; ld (heros_bouge_plus),a ; ld (num_scene),a ; ld hl,0 ; ld (ecran_y),hl ; ld a,254 ; ld (a_reboucher3),a ; prepare la map : carte_1 ; ld hl,maison_chauve_souris ; < carte_1 ld hl,carte_1 call charge_map call drawcarte BOUCLE_PRINCIPALE: ld a,0ffh out (1),a ;met à 0 le clavier ld a,0fdh out (1),a ;actif in a,(1) cp kClear jp z,quit ld a,0ffh out (1),a ;met à 0 le clavier ld a,0feh out (1),a ;actif in a,(1) ld b,a ld a,(heros_bouge_plus) cp 1 jp z,touche_desactive ld a,1 ld (heros_bouge_flag),a ld a,b cp kLeft jp z,gauche_enfonse cp kRight jp z,droite_enfonse cp kUp jp z,haut_enfonse cp kDown jp z,bas_enfonse pas_touche_enfonce2: ; si il n'y a aucun deplacement ld a,0 ld (heros_bouge_flag),a pas_touche_enfonce: #include "touche.txt" touche_desactive: ld a,(heros_anime2) ; lente animation inc a ld (heros_anime2),a cp 5 jr nz,anime_heros_lent ld a,0 ld (heros_anime2),a ld a,(heros_anime) ; animation de deplacement add a,13 cp 39 jr nz,boucle_pas_anime ld a,0 boucle_pas_anime: ld (heros_anime),a anime_heros_lent: passe_deplacement: ; REDESSINE L'ECRAN ld a,(flag_rafraichi_decor) cp 1 jr z,ne_raffraichi_pas ld bc,768 ld de,buffer_ecran ld hl,ecran3 ldir ld bc,768 ld de,second_buffer ld hl,ecran4 ldir ne_raffraichi_pas: ld hl,buffer_ecran-1444d ; sprite de premier plan ld (dessine_hl),hl ld hl,buffer_ecran-second_buffer ld (dessine_ix),hl #include "entitee.txt" ld hl,ecran4-1444d ; sprite de fond ld (dessine_hl),hl ld hl,ecran4-ecran3 ld (dessine_ix),hl ; Fondue noir > image ld a,(flag_fondue_noir) cp 1 jr nz,passe_fondue_au_blanc call fondue_au_blanc call drawcarte jp BOUCLE_PRINCIPALE passe_fondue_au_blanc: ; EFFET DE GRIS PAR REMANENCE ld a,(reman_flag) cp 0 jr z,remanence_0 ld hl,buffer_ecran-12-(-(12*64)+1) ld a,0 jr remanence_1 remanence_0: ld hl,second_buffer-12-(-(12*64)+1) ld a,1 remanence_1: ld (reman_flag),a call affiche ; SCENE ld a,(num_scene) cp 0 jp z,pas_de_scene ld hl,(avance_scene) inc hl ld (avance_scene),hl #include "scene1.txt" #include "scene2.txt" #include "scene3.txt" #include "scene4.txt" pas_de_scene: jp BOUCLE_PRINCIPALE ; FIN DU PROGRAMME quit: res 7,(iY+20) ret assigne: ld a,(hl) ld hl,entitee ld d,0 ld e,a add hl,de ld e,b add hl,de ld a,c ld (hl),a ret ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> #include "bulle.txt" ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> #include "noir.txt" ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> #include "foutoire.txt" ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> #include "sprite.txt" #include "dragon.txt" .end