home *** CD-ROM | disk | FTP | other *** search
Wrap
File List | 1998-10-12 | 7.9 KB | 219 lines
' *-----------------------------------------------* ' ≡ WORMHOLE ≡ ' version 1.00 pour ATARI ** FALCON 030 ** ' RVB/VGA ' © FANTOMAS / Février-Mars 98 ' D'après un programme Quick Basic du groupe ' LUCIFER (Psycho BFG & 666) ' *-----------------------------------------------* ' http://perso.wanadoo.fr/michel.goux/ ' ON ERROR GOSUB fin ! Si erreur, fini. ON BREAK GOSUB fin ! Si Break, fini. ' RESERVE 50000 ! Réserve mémoire. super%=GEMDOS(32,L:0) ! Mode Superviseur. resol&=XBIOS(88,W:-1) ! Sauve la résolution. sauve_ecr%=XBIOS(2) ! Sauve l'écran. buffer%=MALLOC(77824) ! Réserve une zone mémoire image%=buffer%+1024 moniteur%=XBIOS(89) ! Type de moniteur. key|=BYTE{&H484} ! Bloque le clic clavier. IF moniteur%=2 ! Moniteur VGA ~XBIOS(5,L:image%,L:image%,W:3,W:&X100110011) ! VGA: 320x240 256c. ELSE ~XBIOS(5,L:image%,L:image%,W:3,W:&X11) ! TV: 320x200 256c. ENDIF OUT 4,18 ! Bloque la souris. CLS ! Efface l'écran. ' *--- Couleurs ---* {&HFFFF9800}=0 ! Couleur 0: noir. {&HFFFF9800+255*4}=&HFFFF00FF ! Couleur 255: blanc. FOR i=0 TO 15 ! Couleurs 16 à 31. @def_color(16+i,(i+48)*4,(i+48)*4,(i+48)*4) NEXT i FOR i=1 TO 5 ! Couleurs 46 à 50. @def_color(45+i,(i*12)*4,0,0) NEXT i FOR i=1 TO 50 ! Couleurs 151 à 200. @def_color(i+150,(i+13)*4,(i+13)*4,0) NEXT i ' **** Dessin du fond d'écran (Version escargot) *** IF NOT EXIST("\WORMHOLE\WORMHOLE.PI9") ! Si il existe déjà ... CLIP 0,0,320,200 n&=46 ! Couleur de début. x=5 FOR i&=200 DOWNTO 40 ! Tracé du 'tunnel'. INC n& IF n&=51 n&=46 ENDIF x=x/1.003 FOR j&=1 TO 10 @cercle(160,i&,x,n&) x=x*1.003 NEXT j& NEXT i& ' *--- Tracé de la sphère ---* FOR i&=1 TO 49 @cercle(159,70,i&,200-i&) @cercle(159,71,i&,200-i&) @cercle(159,72,i&,200-i&) NEXT i& ' *--- Tracé du logo 'FANTOMAS' ---* DEFFILL 0,2,8 PBOX 0,0,319,10 COLOR 1 PRINT AT(32,1);"FANTOMAS" DEFFILL 1,2,8 FOR i=248 TO 319 ! Le logo. FOR j=0 TO 10 IF PTST(i,j)>0 PBOX (i-200)*2,j*2+50,(i-200)*2+2,j*2+52 ENDIF NEXT j NEXT i FOR i=96 TO 224 ! Le contour. FOR j=49 TO 75 IF PTST(i,j)<>255 IF PTST(i+1,j+1)=255 PSET i,j,50 ENDIF IF PTST(i,j+1)=255 OR PTST(i+1,j)=255 PSET i,j,49 ENDIF IF PTST(i-1,j+1)=15 OR PTST(i+1,j-1)=255 PSET i,j,48 ENDIF IF PTST(i,j-1)=15 OR PTST(i-1,j)=255 PSET i,j,47 ENDIF IF PTST(i-1,j-1)=255 PSET i,j,46 ENDIF ENDIF NEXT j NEXT i FOR i=96 TO 224 ! L'interieur du logo. FOR j=49 TO 75 IF PTST(i,j)=255 PSET i,j,32-(j-49) ENDIF NEXT j NEXT i ' DEFFILL 0,2,8 PBOX 0,0,319,10 ! Efface ligne en haut. PBOX 0,190,319,239 ! Et en bas. ' COLOR 255 PRINT AT(12,1);"F A L C O N 030 !" BMOVE &HFFFF9800,buffer%,1024 BSAVE "\WORMHOLE\WORMHOLE.PI9",buffer%,77824 ELSE BLOAD "\WORMHOLE\WORMHOLE.PI9",buffer% BMOVE buffer%,&HFFFF9800,1024 ENDIF ' GET 50,0,250,7,ass$ DEFFILL 0,2,8 PBOX 50,0,250,8 ' **** Boucle principale **** REPEAT VSYNC ! Synchro avec l'écran. ' *--- Rotation des couleurs ---* INC tm& IF tm&>2 c%={&HFFFF98C8} ! Sauve couleur 50. BMOVE &HFFFF98B8,&HFFFF98BC,20 ! Décale 46/49 -> 47/50. {&HFFFF98B8}=c% ! Couleur 46 = ancienne 50. tm&=1 ENDIF ' *--- Affichage 'FALCON 030' ---* ADD ax&,av& ! Déplacement du texte, IF ax&<50 INC av& ELSE DEC av& ENDIF PUT ax&,0,ass$ ! Affiche le texte en haut. ' *--- Défilement du texte ---* RC_COPY image%,2,191,318,8 TO image%,0,191 ! Décale texte de 2 pixels. IF d&=4 ! Si 4 décalages (8pixels). DO ! Caractère suivant. at$=MID$(scr$,linep&,1) ! Prends caractère. INC linep& ! Caractère +1. IF linep&>LEN(scr$) ! Si fin de la ligne. linep&=1 ! 1er caractère. INC linen& ! Ligne suivante. IF linen&>2 ! Nbr lignes de DATA (ici 2). linen&=1 ! Retour 1ere ligne. RESTORE ! Restaure les DATA. ENDIF READ scr$ ! Lit la ligne. ENDIF IF at$="*" ! Si caractère= '*' clr&=46 ! couleur = 46. ENDIF IF at$="@" clr&=47 ENDIF IF at$="#" clr&=48 ENDIF IF at$="$" clr&=49 ENDIF IF at$="%" clr&=50 ENDIF IF at$="^" clr&=12 ENDIF IF at$="&" clr&=1 ENDIF LOOP WHILE INSTR("*@#$%^&",at$)>0 DEFTEXT clr&,0,0,6 ! Définit la couleur. TEXT 311,197,at$ ! Affiche le caractère. d&=1 ! Décalage à 1. ELSE INC d& ! Incrémente décalage. ENDIF UNTIL BYTE{&HFFFFFC02}=57 ! Test appui sur ESPACE @fin ! Fini. ' *--- Procédure de modification des couleurs ---* PROCEDURE def_color(t&,r&,v&,b&) r$=STRING$(2-LEN(HEX$(r&)),"0")+HEX$(r&) ! Valeur Rouge. v$=STRING$(2-LEN(HEX$(v&)),"0")+HEX$(v&) ! Valeur Vert. b$=STRING$(2-LEN(HEX$(b&)),"0")+HEX$(b&) ! Valeur Bleu. {ADD(&HFFFF9800,MUL(t&,4))}=VAL("&h"+r$+v$+"00"+b$) ! Modifie la couleur. RETURN ' *--- Tracé d'un cercle ---* PROCEDURE cercle(posx&,posy&,rayon&,coul&) DEFFILL coul&,2,8 ! Definit la couleur. old_x%=0 old_y%=0 FOR angle&=0 TO 360 ! 360 degrés. x%=posx&+rayon&*SINQ(angle&) y%=posy&+rayon&*COSQ(angle&) IF old_x%<>0 AND old_y%<>0 PBOX old_x%,old_y%,x%,y% ENDIF old_x%=x% old_y%=y% NEXT angle& RETURN ' *--- Fin du programme ---* PROCEDURE fin OUT 4,8 ! Réactive la souris. ~XBIOS(5,L:sauve_ecr%,L:sauve_ecr%,3,resol&) ! Anciens résol. / écrans. ~MFREE(buffer%) ! Libère la mémoire. BYTE{&H484}=key| ! Restaure le clavier. ~GEMDOS(32,L:super%) ! Mode utilisateur. END RETURN ' *--- Le texte à faire défiler ---* DATA " *H@e#l$l*o@,# $p*e@o#p$l*e$! &C'est moi, ^Fantomas&. Voici une petite demo pour *D@O#M$P*U@B# *0@3#0. &Encore quelques ^bugs &et ^améliorations &possibles, mais ca marche..." DATA " abcdefghij ............."