;E-Mail : CandyMan@I-France.com include "doorsos.h" include "graphlib.h" include "userlib.h" xdef _main xdef _comment xdef _ti89 writestr MACRO move.w \4,-(a7) ;int x, int y, char *str, int mode move.l \3,-(a7) ;int x move.w \2,-(a7) ;int y move.w \1,-(a7) ; jsr doorsos::DrawStrXY ; lea 10(a7),a7 ;Remet la pile comme avant ENDM wait MACRO move.l d1,-(a7) move.l \1,d1 \waitloop nop nop nop nop nop nop dbra d1,\waitloop move.l (a7)+,d1 ENDM ;=============================================================================== ;commencement du programme ;=============================================================================== _main jsr graphlib::clr_scr move.w want_nfile,save_want move.w #65535,want_nfile ;65535 = -1, on ne veut que compter ;le nombre de fichiers de données bsr parse_folder tst.w n_file beq no_file_found move.w save_want,want_nfile move.w want_nfile,d0 cmp.w n_file,d0 bls re_start move.w #1,want_nfile re_start: SetFont #1 move.l #title,a0 move.w #0,d0 move.w #0,d1 move.b #%11111111,d3 jsr graphlib::put_sprite_mask writestr #20,#25,#autor,#4 writestr #40,#35,#nick,#4 bra check_arrow select_file: writestr #0,#70,#folder_str,#4 writestr #0,#80,#file_str,#4 bsr parse_folder writestr #54,#70,#foldername,#4 writestr #67,#80,#filename,#0 move.l #level_str,a0 move.w #3,d1 \loop move.b #32,(a0)+ dbra d1,\loop moveq #0,d0 move.w n_level,d0 bsr writed0 writestr #0,#90,#level_str,#4 wait_select: jsr userlib::idle_loop cmp.w #338,d0 beq dec_file cmp.w #344,d0 beq inc_file cmp.w #13,d0 beq start_load cmp.w #264,d0 bne wait_select rts ;---------------------------- inc_file: move.w n_file,d0 cmp.w want_nfile,d0 beq select_file add.w #1,want_nfile bra check_arrow ;---------------------------- dec_file: cmp.w #1,want_nfile beq select_file sub.w #1,want_nfile bra check_arrow ;---------------------------- check_arrow: move.l #file_str,a0 add.l #20,a0 move.w n_file,d0 cmp.w want_nfile,d0 bne put_rarrow move.b #32,(a0) bra next_arrow put_rarrow: move.b #26,(a0) bra next_arrow next_arrow: move.l #file_str,a0 add.l #9,a0 cmp.w #1,want_nfile bne put_larrow move.b #32,(a0) bra select_file put_larrow: move.b #25,(a0) bra select_file ;---------------------------- start_load: jsr graphlib::clr_scr bra load_level end_load: SetFont #0 tst.w completed beq not_completed writestr #114,#92,#c_level,#4 bra complete_ready not_completed: writestr #100,#92,#nc_level,#0 complete_ready: move.l #nlevel_str,a0 add.l #8,a0 move.b #32,(a0)+ move.b #32,(a0)+ move.b #32,(a0)+ move.b #32,(a0)+ moveq #0,d0 move.w current_level,d0 add.w #1,d0 bsr writed0 writestr #0,#92,#nlevel_str,#4 bsr draw_screen move.l #level,a0 move.w #0,blocky \loopy move.w #0,blockx \loopx tst.b (a0)+ beq pos_found add.w #1,blockx move.w blockx,d0 cmp.w #16,d0 bne \loopx add.w #1,blocky move.w blocky,d0 cmp.w #10,d0 bne \loopy pos_found: add.w #1,blockx add.w #1,blocky bsr prepare_block bsr draw_neg_block bsr change_int main_loop: move.w #0,shift_mode move.w #%11111110,d0 ;pour les touches de directions bsr getkey btst #4,d0 bne no_shift btst #1,d0 ;touche direction gauche beq s_left btst #3,d0 ;touche direction droite beq s_right bra after_shift no_shift: btst #1,d0 ;touche direction gauche beq m_left btst #3,d0 ;touche direction droite beq m_right btst #0,d0 beq m_top btst #2,d0 beq m_bottom after_shift: move.w #%11111101,d0 ;pour la touche Clear, + et - bsr getkey btst #1,d0 ;pour + beq level_up btst #2,d0 ;pour - beq level_down btst #6,d0 ;pour Clear beq clear_level move.w #%10111111,d0 ;pour la touche Esc bsr getkey btst #0,d0 beq end_game bra main_loop ;=============================================================================== ;Lecture des fichiers pour trouver le(s) level(s) ;=============================================================================== ;----------- Regarde les repertoires ------------ parse_folder: move.w #0,n_file move.l #0,want_file move.w #8,d0 DEREF d0,a0 ;a0 pointe sur les infos des folders lea 2(a0),a0 move.w (a0)+,d1 ;d1 -> nombre de repertoire next_folder: tst.l want_file bne no_foldername move.l #foldername,a4 ;on va copier le nom du folder moveq #7,d7 copy_foldername: move.b #32,(a4) tst.b (a0) beq \no_car move.b (a0),(a4) \no_car add.l #1,a0 add.l #1,a4 dbra d7,copy_foldername sub.l #8,a0 ;on repositionne a0 no_foldername: lea 12(a0),a0 move.w (a0)+,file_handle bsr get_file sub.w #1,d1 tst.w d1 bne next_folder rts ;------------ Regarde les fichiers ------------- get_file move.w file_handle,d0 DEREF d0,a2 ;a2 pointe sur les infos du fichier lea 2(a2),a2 tst.w (a2) ;regarde s'il y a au moins 1 fichier bne test_files rts test_files: move.w (a2)+,d2 ;d2 -> nombre de fichiers dans le folder courant next_file: tst.l want_file bne no_filename move.l #filename,a4 ;on va copier le nom du fichier moveq #7,d7 copy_filename: move.b #32,(a4) tst.b (a2) beq \no_car move.b (a2),(a4) \no_car add.l #1,a2 add.l #1,a4 dbra d7,copy_filename sub.l #8,a2 ;on repositionne a2 no_filename: lea 12(a2),a2 move.w (a2)+,data_handle ;data_handle : pointeur sur donnees du fichier bsr check_data sub.w #1,d2 tst.w d2 bne next_file rts ;-------------- Regarde les donnees ------------- check_data: move.w data_handle,d0 DEREF d0,a3 move.w (a3)+,d0 ;on recupere la taille de la variable cmp.w #5,d0 ;y a-t-il au moins les 5 octets de l'entete ? bls not_good_file ;si non ce n'est pas un fichier de level cmp.w #22104,(a3)+ ;regarde l'ID ('VX' = #86#88 = 86*256+88 = 22104) bne not_good_file cmp.w #1,(a3)+ ;regarde la version (1) bne not_good_file add.w #1,n_file ;on a trouve un fichier de level tst.w (a3) ;y a-t-il au moins un tableau ? beq not_good_file ;si non -> fichier incorrect move.w n_file,d0 cmp.w want_nfile,d0 ;le fichier est celui qu'on a selectionne ? bne not_good_file ;si oui le handle sera sur ce fichier move.w (a3)+,n_level move.w (a3)+,current_level move.l a3,want_file not_good_file: ;le fichier n'est pas bon, au suivant rts ;=============================================================================== ;Charge un niveau pointe want_file ;=============================================================================== load_level: move.l want_file,a0 sub.l #2,a0 move.w (a0)+,current_level moveq #0,d0 move.w current_level,d0 mulu #58,d0 add.l d0,a0 move.w (a0)+,completed move.l #level,a2 add.l #17,a2 moveq #7,d7 \loopy moveq #6,d6 \loopx moveq #0,d0 move.b (a0),d0 and #15,d0 move.b d0,(a2)+ move.b (a0)+,d0 asr #4,d0 move.b d0,(a2)+ dbra d6,\loopx add.l #2,a2 dbra d7,\loopy bra end_load writed0: moveq #0,d1 divu #10,d0 ;apres, d0->prochain nombre,d1->chiffre voulu swap d0 move.w d0,d1 clr.w d0 swap d0 ;d0 -> prochain nombre; d1 -> chiffre a afficher add.b #48,d1 ;on affiche le chiffre move.b d1,(a0) ;on le met dans la chaine sub.l #1,a0 ;on modifie le pointeur sur la chaine cmp.w #0,d0 ;on regarde s'il reste encore des chiffres bne writed0 rts ;=============================================================================== ;passe au niveau current_level+1 ;=============================================================================== next_level: move.w n_level,d0 sub.w #1,d0 cmp.w current_level,d0 beq jump_to_first add.w #1,current_level bra level_ready1 jump_to_first move.w #0,current_level level_ready1: move.l want_file,a0 sub.l #2,a0 move.w current_level,(a0) ;on ecrit le level courant bra start_load ;=============================================================================== ;passe au niveau current_level-1 ;=============================================================================== previous_level: tst.w current_level beq jump_to_last sub.w #1,current_level bra level_ready2 jump_to_last: move.w n_level,d0 sub.w #1,d0 move.w d0,current_level level_ready2: move.l want_file,a0 sub.l #2,a0 move.w current_level,(a0) ;on ecrit le level courant bra start_load ;=============================================================================== ;Passe au level superieur ;=============================================================================== level_up: bsr restore_int bra next_level ;=============================================================================== ;Passe au level inferieur ;=============================================================================== level_down: bsr restore_int bra previous_level ;=============================================================================== ;Recommence le tableau ;=============================================================================== clear_level: bsr restore_int bra start_load ;=============================================================================== ;quitte au menu ;=============================================================================== end_game: wait #50000 bsr restore_int jsr graphlib::clr_scr bra re_start ;=============================================================================== ;on a fini le niveau, on passe au suivant ;=============================================================================== win_game: wait #50000 bsr restore_int move.l want_file,a0 moveq #0,d0 move.w current_level,d0 mulu #58,d0 add.l d0,a0 move.w #1,(a0) ;on met le flag de reussite a 1 bra next_level ;=============================================================================== ;Mouvements (sans shift) ;=============================================================================== m_left: bsr get_block sub.l #1,a2 move.b (a2),d0 cmp.b #8,d0 bgt main_loop bsr prepare_block bsr draw_block sub.w #1,blockx bsr prepare_block bsr draw_neg_block wait #40000 bra main_loop m_right: bsr get_block add.l #1,a2 move.b (a2),d0 cmp.b #8,d0 bgt main_loop bsr prepare_block bsr draw_block add.w #1,blockx bsr prepare_block bsr draw_neg_block wait #40000 bra main_loop m_top: bsr get_block sub.l #16,a2 move.b (a2),d0 cmp.b #8,d0 bgt main_loop bsr prepare_block bsr draw_block sub.w #1,blocky bsr prepare_block bsr draw_neg_block wait #40000 bra main_loop m_bottom: bsr get_block add.l #16,a2 move.b (a2),d0 cmp.b #8,d0 bgt main_loop bsr prepare_block bsr draw_block add.w #1,blocky bsr prepare_block bsr draw_neg_block wait #40000 bra main_loop ;=============================================================================== ;Obtient l' adresse et la valeur du bloc courant (en blockx, blocky) ;=============================================================================== get_block: move.l #level,a2 moveq #0,d0 move.w blocky,d0 sub.w #1,d0 mulu #16,d0 add.w blockx,d0 sub.w #1,d0 add.w d0,a2 rts prepare_block: bsr get_block move.w blockx,d0 move.w blocky,d1 move.b (a2),d2 rts ;=============================================================================== ;Mouvements (avec shift) ;=============================================================================== s_right: bsr get_block tst.b (a2) beq main_loop add.l #1,a2 tst.b (a2) bne main_loop bsr prepare_block move.l a2,a4 bsr draw_block move.w #8,d3 \loop move.b #0,d2 bsr draw_block_deca move.b (a4),d2 add.w #1,d3 bsr draw_block_deca wait #10000 cmp.w #16,d3 bne \loop add.w #1,blockx move.b (a4),d0 move.b #0,(a4)+ move.b d0,(a4) \s_r_loop bsr drop_block bsr kill tst.w move_block bne \s_r_loop bra check_win ;on va regarder si on a gagne s_left: bsr get_block tst.b (a2) beq main_loop sub.l #1,a2 tst.b (a2) bne main_loop bsr prepare_block move.l a2,a4 bsr draw_block move.w #8,d3 \loop move.b #0,d2 bsr draw_block_deca move.b (a4),d2 sub.w #1,d3 bsr draw_block_deca wait #10000 tst.w d3 bne \loop sub.w #1,blockx move.b (a4),d0 move.b #0,(a4) move.b d0,-(a4) \s_l_loop: bsr drop_block bsr kill tst.w move_block bne \s_l_loop bra check_win ;on va regarder si on a gagne ;=============================================================================== ;regarde s'il reste des blocs speciaux sur l'ecran ;=============================================================================== check_win: move.l #level,a0 move.w #0,d7 winy: move.w #0,d6 winx: move.b (a0)+,d0 tst.b d0 beq not_found cmp.b #8,d0 bhi not_found bra main_loop not_found: add.w #1,d6 cmp.w #16,d6 bne winx add.w #1,d7 cmp.w #10,d7 bne winy bra win_game ;=============================================================================== ;fait descendre les blocs pour "boucher" les trous ;=============================================================================== drop_block: move.l #level,a0 add.l #16,a0 move.w #0,d0 continue: tst.b (a0) beq no_block move.b (a0),d1 cmp.b #8,d1 bgt no_block move.l a0,a2 add.l #16,a2 tst.b (a2) bne no_block move.w d0,d2 move.l a0,a3 move_loop: move.b (a3),d1 move.b #0,(a3) move.b d1,(a2) sub.l #16,a2 sub.l #16,a3 sub.w #16,d2 cmp.b #8,(a3) bhi no_block cmp.w #15,d2 bhi move_loop no_block: add.l #1,a0 add.w #1,d0 cmp.w #128,d0 blt continue bsr draw_screen bsr prepare_block bsr draw_neg_block rts ;=============================================================================== ;Detruit les blocs (recursif) ;=============================================================================== kill_blocks: move.b #0,(a0) test_left: sub.l #1,a0 cmp.b (a0),d0 bne test_right add.w #1,nblock move.b #0,(a0) move.l a0,-(a7) bsr kill_blocks move.l (a7)+,a0 test_right: add.l #2,a0 cmp.b (a0),d0 bne test_top add.w #1,nblock move.b #0,(a0) move.l a0,-(a7) bsr kill_blocks move.l (a7)+,a0 test_top: sub.l #17,a0 cmp.b (a0),d0 bne test_bottom add.w #1,nblock move.b #0,(a0) move.l a0,-(a7) bsr kill_blocks move.l (a7)+,a0 test_bottom: add.l #32,a0 cmp.b (a0),d0 bne dead_end add.w #1,nblock move.b #0,(a0) move.l a0,-(a7) bsr kill_blocks move.l (a7)+,a0 dead_end: rts kill: move.w #0,move_block move.l #level,a0 add.l #17,a0 moveq #0,d7 \loopy: moveq #0,d6 \loopx: move.b (a0),d0 tst.b d0 beq \no_block cmp.b #8,d0 bhi \no_block move.w #0,nblock move.l a0,-(a7) bsr kill_blocks move.l (a7)+,a0 tst.w nblock bne \block_drop move.b d0,(a0) bra \no_block \block_drop move.w #1,move_block \no_block: add.l #1,a0 add.w #1,d6 cmp.w #14,d6 bne \loopx add.l #1,a0 add.l #1,d7 cmp.w #8,d7 bne \loopy bsr draw_screen bsr prepare_block bsr draw_neg_block rts ;=============================================================================== ;Affiche un bloc a l'ecran ;=============================================================================== ;d0.w Position X (1-??) ;d1.w Position Y (1-??) ;d2.b ID du bloc (0-??) ;=============================================================================== draw_block: movem d0-d3/a0,-(a7) move.l #block_data,a0 moveq #0,d3 move.b d2,d3 mulu #12,d3 add.l d3,a0 sub.w #1,d0 asl #3,d0 add.w #16,d0 sub.w #1,d1 asl #3,d1 move.b #%11111111,d3 jsr graphlib::put_sprite_mask movem (a7)+,d0-d3/a0 rts ;=============================================================================== ;Affiche un bloc a l'ecran (en inverse) ;=============================================================================== ;d0.w Position X (1-??) ;d1.w Position Y (1-??) ;d2.b ID du bloc (0-??) ;=============================================================================== draw_neg_block: movem d0-d4/a0-a2,-(a7) move.l #block_data,a0 moveq #0,d3 move.b d2,d3 mulu #12,d3 add.l d3,a0 sub.w #1,d0 asl #3,d0 add.w #16,d0 sub.w #1,d1 asl #3,d1 move.w #7,d3 move.l a0,a2 add.l #4,a2 \neg_loop1: move.b #255,d4 sub.b (a2),d4 move.b d4,(a2)+ dbra d3,\neg_loop1 move.b #%11111111,d3 jsr graphlib::put_sprite_mask move.w #7,d3 move.l a0,a2 add.l #4,a2 \neg_loop2: move.b #255,d4 sub.b (a2),d4 move.b d4,(a2)+ dbra d3,\neg_loop2 movem (a7)+,d0-d4/a0-a2 rts ;=============================================================================== ;Affiche un bloc a l'ecran (avec un decalage) ;=============================================================================== ;d0.w Position X (1-??) ;d1.w Position Y (1-??) ;d2.b ID du bloc (0-??) ;d3.w Decalage + 8 en pixels (0-??) ;=============================================================================== draw_block_deca: movem d0-d4/a0-a2,-(a7) move.l #block_data,a0 moveq #0,d4 move.b d2,d4 mulu #12,d4 add.l d4,a0 move.w blockx,d0 sub.w #1,d0 asl #3,d0 add.w #16,d0 add.w d3,d0 sub.w #8,d0 move.w blocky,d1 sub.w #1,d1 asl #3,d1 tst.b d2 beq no_neg move.w #7,d3 move.l a0,a2 add.l #4,a2 \neg_loop1: move.b #255,d4 sub.b (a2),d4 move.b d4,(a2)+ dbra d3,\neg_loop1 no_neg: move.b #%11111111,d3 jsr graphlib::put_sprite_mask tst.b d2 beq no_reverse_neg move.w #7,d3 move.l a0,a2 add.l #4,a2 \neg_loop2: move.b #255,d4 sub.b (a2),d4 move.b d4,(a2)+ dbra d3,\neg_loop2 no_reverse_neg: movem (a7)+,d0-d4/a0-a2 rts ;=============================================================================== ;=============================================================================== draw_screen: move.l #level,a2 add.l #160,a2 moveq #10,d1 \loopy moveq #16,d0 \loopx move.b -(a2),d2 bsr draw_block sub.w #1,d0 tst.w d0 bne \loopx sub.w #1,d1 tst.w d1 bne \loopy rts ;=============================================================================== ;Dit a l'utilisateur qu'il y a aucun fichier level ;=============================================================================== no_file_found: writestr #0,#0,#no_level,#4 jsr userlib::idle_loop rts ;fin du programme ;=============================================================================== ;Recupere la valeur du port clavier ;=============================================================================== getkey: move.w d0,($600018) nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop clr.w d0 move.b ($60001B),d0 rts ;=============================================================================== ;Détourne l'interruption du timer ;=============================================================================== change_int: clr.l d0 move.w #$0700,d0 trap #1 bclr.b #2,($600001) move.l ($64),old_int move.l #new_int,($64) bset.b #2,($600001) trap #1 rts restore_int: clr.l d0 move.w #$0700,d0 trap #1 bclr.b #2,($600001) move.l old_int,($64) bset.b #2,($600001) trap #1 rts new_int: add.w #1,timer rte title: dc.w 21 dc.w 20 dc.b %00111000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000 dc.b %00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000 dc.b %01111000,%00000000,%11100000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000 dc.b %00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000 dc.b %00111000,%00000000,%11101111,%11111111,%11100000,%11000000,%01110001,%11111111,%11111100,%00000111 dc.b %11111110,%00000000,%00000000,%00000000,%00000000,%00000000,%11000000,%00000000,%00000000,%11111110 dc.b %00111000,%00000001,%11011111,%11111111,%11000001,%11000000,%11100011,%11111111,%11111000,%00111111 dc.b %11111111,%10000000,%00000000,%00000000,%00000000,%00000011,%10000000,%00000000,%00000011,%11111111 dc.b %00111000,%00000001,%10110011,%10000000,%00000001,%11000000,%11100110,%01110000,%00000000,%11111100 dc.b %00001111,%11000000,%00000000,%00000000,%00000000,%01111111,%00000000,%00000000,%00000111,%10001111 dc.b %00111000,%00000011,%10000111,%00000000,%00000001,%11000001,%11000000,%11100000,%00000001,%11100000 dc.b %00000011,%11100000,%00000001,%11100000,%00000000,%01111111,%00000000,%00000000,%00011110,%00000111 dc.b %00111000,%00000111,%00000111,%00000000,%00000001,%11000011,%10000000,%11100000,%00000011,%10111000 dc.b %00000001,%11100000,%00000001,%11100000,%00000000,%00001110,%00000000,%00000000,%00111100,%00000111 dc.b %00111000,%00001110,%00001110,%00000000,%00000001,%11000111,%00000001,%11000000,%00000111,%00111000 dc.b %00000001,%11100000,%00000001,%11100000,%00111000,%00001110,%00000000,%00000000,%01111000,%00000111 dc.b %00111000,%00011100,%00001110,%00000110,%00000001,%11101100,%00000001,%11000000,%11000000,%00110000 dc.b %00000001,%11100000,%00000000,%11100000,%01111000,%00011100,%00000000,%00000000,%01110000,%00000111 dc.b %00111000,%00111000,%01111111,%11111100,%00000001,%11111000,%00001111,%11111111,%10000000,%01110000 dc.b %00000001,%11000000,%00000000,%11100000,%01110000,%00011100,%00000000,%00000000,%11100000,%00001110 dc.b %01111000,%01110000,%01111111,%11111000,%00000001,%11110000,%00001111,%11111111,%00000000,%11100000 dc.b %00000001,%11000000,%00000000,%11100000,%11100000,%00111000,%00000000,%00000001,%11000000,%00001110 dc.b %01110000,%11100000,%11011000,%00000000,%00000001,%11100000,%00011011,%00000000,%00000000,%11100000 dc.b %00000001,%10000000,%00000000,%11100001,%11000000,%00111000,%00000000,%00000001,%11000000,%00001100 dc.b %01110001,%11000000,%00111000,%00000000,%00000111,%11100000,%00000111,%00000000,%00000001,%11000000 dc.b %00000011,%10000000,%00000000,%11100011,%10000000,%01110000,%00000000,%00000011,%10000000,%00011100 dc.b %01110011,%10000000,%00110000,%00000000,%00001110,%11110000,%00000110,%00000000,%00000001,%11000000 dc.b %00000111,%00000000,%00000000,%11100011,%00000000,%01110000,%00000000,%00000011,%10000000,%00111000 dc.b %01110111,%00000000,%01110000,%00000000,%00111100,%11110000,%00001110,%00000000,%00000011,%10000000 dc.b %00001110,%00000000,%00000000,%11100110,%00000000,%11100000,%00000000,%00000011,%10000000,%00110000 dc.b %11101110,%00000000,%01110000,%00000000,%01110000,%11111000,%00001110,%00000000,%00000011,%10000000 dc.b %00011100,%00000000,%00000000,%11101100,%00000000,%11100000,%00000000,%00000011,%10000000,%01100000 dc.b %11111100,%00000000,%11100000,%00000000,%11100000,%01111000,%00011100,%00000000,%00000111,%00000000 dc.b %00111000,%00000000,%00000001,%11111000,%00000001,%11000000,%00000000,%00000011,%10000000,%11000000 dc.b %11111000,%00000000,%11100000,%00111001,%11100000,%01111100,%00011100,%00000111,%00000111,%00000000 dc.b %11100000,%00000000,%00000001,%11110000,%00000001,%11000000,%00000111,%10000011,%10000001,%10000000 dc.b %11100000,%00000000,%11111111,%11110001,%11000000,%00111111,%00011111,%11111110,%00000111,%00000111 dc.b %10000000,%00000000,%00000001,%11100000,%00011111,%11111100,%00000111,%00000011,%10000111,%00000000 dc.b %11000000,%00000000,%11111111,%10000001,%10000000,%00011110,%00011111,%11110000,%00001111,%11111110 dc.b %00000000,%00000000,%00000011,%11000000,%00011111,%11111100,%00001111,%00000001,%11111100,%00000000 dc.b %00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000111,%11110000 dc.b %00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000,%00000000 level: dc.b 09,13,13,13,13,13,13,13,13,13,13,13,13,13,13,10 dc.b 14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,14 dc.b 14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,14 dc.b 14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,14 dc.b 14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,14 dc.b 14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,14 dc.b 14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,14 dc.b 14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,14 dc.b 14,00,00,00,00,00,00,00,00,00,00,00,00,00,00,14 dc.b 11,13,13,13,13,13,13,13,13,13,13,13,13,13,13,12 block_data: dc.w 8 dc.w 1 dc.b %00000000 ;case vide dc.b %00000000 dc.b %00000000 dc.b %00000000 dc.b %00000000 dc.b %00000000 dc.b %00000000 dc.b %00000000 dc.w 8 dc.w 1 dc.b %01111110 ;bloc 1 dc.b %10001001 dc.b %10011001 dc.b %10111101 dc.b %10111101 dc.b %10011001 dc.b %10010001 dc.b %01111110 dc.w 8 dc.w 1 dc.b %01111110 ;bloc 2 dc.b %10011001 dc.b %10100101 dc.b %11000011 dc.b %11000011 dc.b %10100101 dc.b %10011001 dc.b %01111110 dc.w 8 dc.w 1 dc.b %01111110 ;bloc 3 dc.b %11000011 dc.b %10100101 dc.b %10000001 dc.b %10000001 dc.b %10100101 dc.b %11000011 dc.b %01111110 dc.w 8 dc.w 1 dc.b %01111110 ;bloc 4 dc.b %10011001 dc.b %10011001 dc.b %11100111 dc.b %11100111 dc.b %10011001 dc.b %10011001 dc.b %01111110 dc.w 8 dc.w 1 dc.b %01111110 ;bloc 5 dc.b %10000001 dc.b %10100101 dc.b %10011001 dc.b %10011001 dc.b %10100101 dc.b %10000001 dc.b %01111110 dc.w 8 dc.w 1 dc.b %01111110 ;bloc 6 dc.b %10111101 dc.b %11000011 dc.b %10100101 dc.b %10011001 dc.b %10011001 dc.b %10011001 dc.b %01111110 dc.w 8 dc.w 1 dc.b %01111110 ;bloc 7 dc.b %10000001 dc.b %10111101 dc.b %10100101 dc.b %10100101 dc.b %10111101 dc.b %10000001 dc.b %01111110 dc.w 8 dc.w 1 dc.b %01111110 ;bloc 8 dc.b %10000001 dc.b %10011001 dc.b %10111101 dc.b %10111101 dc.b %10011001 dc.b %10000001 dc.b %01111110 dc.w 8 dc.w 1 dc.b %11111111 ;coin en haut a gauche dc.b %10001000 dc.b %10001000 dc.b %11111111 dc.b %10000000 dc.b %10000000 dc.b %10000000 dc.b %11111111 dc.w 8 dc.w 1 dc.b %11111111 ;coin en haut a droite dc.b %00001001 dc.b %00001001 dc.b %11111111 dc.b %01000001 dc.b %01000001 dc.b %01000001 dc.b %11111111 dc.w 8 dc.w 1 dc.b %10001001 ;coin en bas a gauche dc.b %10001000 dc.b %10001000 dc.b %11111111 dc.b %10000000 dc.b %10000000 dc.b %10000000 dc.b %11111111 dc.w 8 dc.w 1 dc.b %10001001 ;coin en bas a droite dc.b %00001001 dc.b %00001001 dc.b %11111111 dc.b %01000001 dc.b %01000001 dc.b %01000001 dc.b %11111111 dc.w 8 dc.w 1 dc.b %11111111 ;bord haut et bas dc.b %00000100 dc.b %00000100 dc.b %11111111 dc.b %01000000 dc.b %01000000 dc.b %01000000 dc.b %11111111 dc.w 8 dc.w 1 dc.b %10001001 ;bord gauche et droite dc.b %10001001 dc.b %10001001 dc.b %11111111 dc.b %10000001 dc.b %10000001 dc.b %10000001 dc.b %11111111 dc.w 8 dc.w 1 dc.b %10101010 ;case pleine dc.b %01010101 dc.b %10101010 dc.b %01010101 dc.b %10101010 dc.b %01010101 dc.b %10101010 dc.b %01010101 current_level dc.w 0 file_handle dc.w 0 data_handle dc.w 0 n_file dc.w 0 n_level dc.w 0 ;nombre de niveau dans le fichier completed dc.w 0 save_want dc.w 1 ;sauvegarde du n° de fichier want_nfile dc.w 1 ;n° du fichier que l'on veut want_file dc.l 0 ;pointeur sur les infos du fichier que l'on veut want_dirstr dc.b 32,32,32,32,32,32,32,32,32,0 ;nom du dossier ou est le fichier want_filestr dc.b 32,32,32,32,32,32,32,32,32,0 ;nom du fichier move_block dc.w 0 nblock dc.w 0 blockx dc.w 0 blocky dc.w 0 shift_mode dc.w 0 old_int dc.l 0 timer dc.w 0 filename dc.b 32,32,32,32,32,32,32,32,0,0 foldername dc.b 32,32,32,32,32,32,32,32,0,0 nlevel_str dc.b "Level : ",0 c_level dc.b " completed ",0 nc_level dc.b " Not completed ",0 folder_str dc.b "Folder : ",32,32,32,32,32,32,32,32,0 file_str dc.b "File : ",25,32,32,32,32,32,32,32,32,32,32,26,0 level_str dc.b " Level(s) ",0 no_level dc.b "No level file found !!",0 autor dc.b "by GeRvAiSe PhIlIpPe",0 nick dc.b "- CandyMan -",0 _comment dc.b "Vexed V1.0 by CandyMan",0 end