mirror of
https://github.com/antoinevignau/source.git
synced 2025-01-01 15:30:02 +00:00
1105 lines
35 KiB
Plaintext
1105 lines
35 KiB
Plaintext
$C+
|
||
' ON BREAK GOSUB verif
|
||
'
|
||
'
|
||
RESERVE 270000
|
||
init
|
||
musique
|
||
RESERVE FRE(0)+MALLOC(-1)-170000 !cad reserver 170000 octets de buffers
|
||
init2
|
||
main
|
||
'
|
||
PROCEDURE main
|
||
'
|
||
LOCAL image$ !BLOC GRAPHIQUE DE LA DERNIERE IMAGE DE L'OBJET
|
||
'
|
||
DO !ON BOUCLE A PERPET'
|
||
teste_fin !TOUS LES TEXTES SONT-IL LUS?
|
||
demande_objet !QUEL OBJET EST CHOISI?
|
||
REPEAT
|
||
~FRE(0) !NETTOYAGE P<>RIODIQUE DE LA MEMOIRE
|
||
demande_peche !QUEL PECHE EST CHOISI?
|
||
IF fin_demande_peche!=FALSE !SI ON NE SORT PAS...
|
||
recherche_references !ON CHERCHE LE TEXTE A AFFICHER
|
||
' affiche_image !ON AFFICHE L'IMAGE CORRESP
|
||
ONDANTE
|
||
REPEAT !ON BOUCLE....
|
||
affiche_image
|
||
cree_fenetre(objet%,paragraphe%) !ON OUVRE LA FENETRE DE TEXTE
|
||
pre_scrolling !ON GERE LE SCROLLING
|
||
IF suite!=TRUE !UN AUTRE TEXTE A SUIVRE?
|
||
INC paragraphe% !OUI, ON PASSE AU SUIVANT
|
||
ENDIF
|
||
UNTIL suite!=FALSE !SINON ON SORT
|
||
ENDIF
|
||
UNTIL fin_demande_peche!=TRUE !JUSQU'A CE QU'ON CHANGE D'OBJET
|
||
LOOP
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE vigil(max_x%,max_y%,max_xx%,max_yy%,sauvegarde!)
|
||
'
|
||
REPEAT !ON ATTEND QU'ON RELACHE LA SOURIS
|
||
UNTIL NOT MOUSEK
|
||
'
|
||
'
|
||
REPEAT !ET ON ATTEND UN EVENEMENT SOURIS
|
||
IF MOUSEX>max_xx% !ET ON L'EMPECHE DE SORTIR DU
|
||
SETMOUSE max_xx%,MOUSEY !CADRE FIXE
|
||
ELSE IF MOUSEX<max_x%
|
||
SETMOUSE max_x%,MOUSEY
|
||
ELSE IF MOUSEY>max_yy%
|
||
SETMOUSE MOUSEX,max_yy%
|
||
ELSE IF MOUSEY<max_y%
|
||
SETMOUSE MOUSEX,max_y%
|
||
ENDIF
|
||
SHOWM
|
||
'
|
||
IF sauvegarde!=TRUE AND ASC(INKEY$)=27 !SI LA SAUVEGARDE EST PERMISE...
|
||
sauvegarde !ON LA FAIT EN TAPANT "ESC"
|
||
ENDIF
|
||
'
|
||
UNTIL MOUSEK
|
||
'
|
||
souris_x%=MOUSEX !ON MEMORISE LES COORDONN<4E>ES DE LA SOURIS
|
||
souris_y%=MOUSEY
|
||
souris_bouton%=MOUSEK !AINSI QUE L'ETAT DU BOUTON
|
||
HIDEM !ON REFAIT DISPARAITRE LE CURSEUR
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE teste_fin
|
||
'
|
||
IF paragraphes_lus%=pointeur_paragraphes%-1
|
||
the_end
|
||
ENDIF
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE demande_objet
|
||
ARRAYFILL icone_objets!(),FALSE !RAZ DE CHAQUE INDICATEUR D'AFFICHAGE
|
||
'
|
||
FOR i%=1 TO pointeur_paragraphes% !ON VOIT S'IL RESTE QUELQUE CHOSE A LIRE
|
||
'
|
||
' ON BASCULE LES INDICATEURS S'IL RESTE DES TEXTES CORESPONDANT A CETTE
|
||
' REFERENCE (SAUF "8"=INDICATEUR DE SUITE)
|
||
IF reference_peche%(i%)<>8 AND paragraphe_lu!(i%)=FALSE
|
||
IF indicateur!(indicateur_paragraphes_prealables%(i%))=TRUE
|
||
icone_objets!(reference_objet%(i%))=TRUE
|
||
ENDIF
|
||
ENDIF
|
||
NEXT i%
|
||
'
|
||
hide_screen2 !ON MASQUE PUDIQUEMENT L'ECRAN
|
||
CLS
|
||
palette(palette_bureau$)
|
||
SPUT bureau$ !AFFICHAGE DU FOND
|
||
FOR i%=1 TO nombre_objets% !AFFICHAGE DE L'ICONE DE CHAQUE
|
||
IF icone_objets!(i%)=TRUE !OBJET OU IL RESTE DES TEXTES A LIRE
|
||
PUT objet_x%(i%),objet_y%(i%),icone_objets$(i%)
|
||
ENDIF
|
||
NEXT i%
|
||
show_screen2 !ON REAFFICHE L'ECRAN D'UN SEUL COUP
|
||
'
|
||
CLR objet% !RAZ DU NUMERO DE L'ICONE OBJET DESIGNEE
|
||
REPEAT !ON SCANNE LA SOURIS POUR DESIGNER UNE ICONE OBJET
|
||
vigil(0,0,319,160,TRUE)
|
||
FOR i%=1 TO nombre_objets% !L'ENDROIT CLIQUE CORRESPOND A UNE ICONE???
|
||
IF icone_objets!(i%)=TRUE !(SEULEMENT SI CELLE-CI EST ALLUM<55>E)
|
||
IF souris_x%>=objet_x%(i%) AND souris_x%<=objet_xx%(i%) AND souris_y%>=o
|
||
bjet_y%(i%) AND souris_y%<=objet_yy%(i%) AND souris_bouton%=1
|
||
objet%=i% !OK? ON MEMORISE SON NUMERO...
|
||
ENDIF
|
||
ENDIF
|
||
NEXT i%
|
||
UNTIL objet%<>0 !ON CONTINUE JUSQU'A TEMPS QUE LA SOURIS DESIGNE UNE ICONE
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE demande_peche
|
||
'
|
||
ARRAYFILL icone_peches!(),FALSE !RAZ DE CHAQUE INDICATEUR D'AFFICHAGE
|
||
'
|
||
FOR i%=1 TO pointeur_paragraphes% !ON VOIT QUELS SONT LES ICONES PECHE QUE
|
||
IF reference_objet%(i%)=objet% AND paragraphe_lu!(i%)=FALSE !L'ON PEUT AFFIC
|
||
HER (SELON LES TEXTES A LIRE)
|
||
IF indicateur!(indicateur_paragraphes_prealables%(i%))=TRUE
|
||
icone_peches!(reference_peche%(i%))=TRUE
|
||
ENDIF
|
||
ENDIF
|
||
NEXT i%
|
||
'
|
||
hide_screen2 !ON CACHE L'ECRAN
|
||
palette(palette_bureau$)
|
||
SPUT bureau$ !ON REAFFICHE LE FOND DU BUREAU ET L'ICONE OBJET DEJA DESIGNEE
|
||
PUT objet_x%(objet%),objet_y%(objet%),icone_objets$(objet%)
|
||
'
|
||
fin_demande_peche!=TRUE
|
||
FOR i%=1 TO nombre_peches% !AFFICHAGE DES ICONES OU IL RESTE
|
||
IF icone_peches!(i%)=TRUE !DES TEXTES A LIRE
|
||
PUT peche_x%(i%),peche_y%(i%),icone_peches$(i%)
|
||
fin_demande_peche!=FALSE !OK,IL RESTE ENCORE QUELQUE CHOSE A LIRE...
|
||
ENDIF
|
||
NEXT i%
|
||
'
|
||
show_screen2 !ON REAFFICHE L'ECRAN D'UN SEUL COUP
|
||
'
|
||
IF fin_demande_peche!=FALSE !SI DES ICONES ONT ETE AFFICHEES...
|
||
REPEAT !ON ATTEND QU'ON AIT RELACHE LA SOURIS
|
||
UNTIL MOUSEK=0
|
||
CLR peche% !RAZ DU NUMERO DE L'ICONE CLIQEE
|
||
REPEAT
|
||
vigil(0,162,319,199,FALSE) !ON SCANNE LA SOURIS POUR DESIGNER UNE ICONE PE
|
||
CHE
|
||
FOR i%=1 TO nombre_peches% !ET ON VOIT SI L'ENDROIT CLIQUE CORRESPOND A
|
||
IF icone_peches!(i%)=TRUE !UNE ICONE ALLUM<55>E
|
||
IF souris_x%>=peche_x%(i%) AND souris_x%<=peche_xx%(i%) AND souris_y%>
|
||
=peche_y%(i%) AND souris_y%<=peche_yy%(i%) AND souris_bouton%=1
|
||
peche%=i%
|
||
ENDIF
|
||
ENDIF
|
||
NEXT i%
|
||
UNTIL peche%<>0 OR souris_bouton%=2 !ON SORT SI UNE ICONE EST CLIQU<51>E
|
||
ENDIF !OU SI ON A APPUY<55> SUR LE BOUTON DROIT DE LA SOURIS
|
||
'
|
||
IF peche%=0
|
||
fin_demande_peche!=TRUE !ON BASCULE L'INDICATEUR DE SORTIE SI BOUTON DROIT
|
||
ENDIF
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE recherche_references
|
||
'
|
||
CLR i%
|
||
REPEAT !ON CHERCHE DANS LA LISTE DES TEXTES LE PREMIER QUI CORRESPOND A
|
||
INC i% !L'OBJET ET AU PECHE CHOISI (SI LES INDICATEURS DU TEXTE SONT OK)
|
||
UNTIL objet%=reference_objet%(i%) AND peche%=reference_peche%(i%) AND indicate
|
||
ur!(indicateur_paragraphes_prealables%(i%))=TRUE AND paragraphe_lu!(i%)=FALS
|
||
E
|
||
'
|
||
IF i%>pointeur_paragraphes% !SI RIEN N'EST TROUVE
|
||
the_end !ON ARRETE TOUT (????)
|
||
ENDIF
|
||
'
|
||
paragraphe%=i% !SINON C'EST CE TEXTE QU'ON LIRA
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE affiche_image
|
||
IF ancien_objet%=objet% !SI L'OBJET CHOISI EST LE MEME QU'AVANT
|
||
palette(palette_image$)
|
||
SPUT image$ !PAS BESOIN DE RECHARGER L'IMAGE!
|
||
ELSE !SINON ON LA CHARGE NORMALEMENT
|
||
ancien_objet%=objet% !ON REACTUALISE LE DERNIER OBJET VU...
|
||
fichier$="IMAGES\"+RIGHT$("0"+STR$(objet%),2)+".pi1"
|
||
ice_load(fichier$) !ON CHARGE L'IMAGE...
|
||
ice_disp(adresse_image%) !ON L'AFFICHE...
|
||
palette_image$=palette$ !ON MEMORISE LA PALETTE
|
||
palette(palette$) !ON MET LA PALETTE...
|
||
SGET image$ !ET ON LA CAPTURE POUR LA PROCHAINE FOIS
|
||
ENDIF
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE sauvegarde
|
||
'
|
||
LOCAL a$,b$,fichier$
|
||
CLR a$,b$
|
||
CLS
|
||
'
|
||
FOR i%=1 TO pointeur_indicateurs% !ON RASSEMBLE TOUS LES INDICATEURS
|
||
IF indicateur!(i%)=FALSE !DANS UNE SEULE CHAINE DE CARACTERES
|
||
a$=a$+"0"
|
||
ELSE
|
||
a$=a$+"1"
|
||
ENDIF
|
||
NEXT i%
|
||
'
|
||
FOR i%=1 TO pointeur_paragraphes%
|
||
IF paragraphe_lu!(i%)=FALSE
|
||
b$=b$+"A"
|
||
ELSE
|
||
b$=b$+"B"
|
||
ENDIF
|
||
NEXT i%
|
||
'
|
||
fichier$="textes\page.sav"
|
||
OPEN "o",#1,fichier$
|
||
PRINT #1;a$
|
||
PRINT #1;b$
|
||
CLOSE
|
||
fin
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE chargement
|
||
'
|
||
LOCAL a$,b$,fichier$
|
||
'
|
||
CLR paragraphes_lus%
|
||
'
|
||
fichier$="textes\page.sav"
|
||
IF EXIST(fichier$)
|
||
OPEN "i",#1,fichier$
|
||
INPUT #1;a$
|
||
INPUT #1;b$
|
||
CLOSE
|
||
KILL fichier$
|
||
'
|
||
FOR i%=1 TO pointeur_indicateurs%
|
||
IF MID$(a$,i%,1)="0"
|
||
indicateur!(i%)=FALSE
|
||
ELSE
|
||
indicateur!(i%)=TRUE
|
||
ENDIF
|
||
NEXT i%
|
||
'
|
||
FOR i%=1 TO pointeur_paragraphes%
|
||
IF MID$(b$,i%,1)="A"
|
||
paragraphe_lu!(i%)=FALSE
|
||
ELSE
|
||
paragraphe_lu!(i%)=TRUE
|
||
INC paragraphes_lus%
|
||
ENDIF
|
||
NEXT i%
|
||
ENDIF
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE the_end
|
||
CLS
|
||
fichier$="textes\page.sav"
|
||
IF EXIST(fichier$)
|
||
KILL "fichier$)"
|
||
ENDIF
|
||
cree_fenetre(9,pointeur_paragraphes%)
|
||
pre_scrolling
|
||
CLS
|
||
DO
|
||
LOOP
|
||
RETURN
|
||
'
|
||
PROCEDURE pre_scrolling
|
||
' reference_objet%(paragraphe%)=0 !ON DETRUIT LES REFERENCES DU TEXTE
|
||
' reference_peche%(paragraphe%)=0 !(POUR NE PAS LE LIRE DEUX FOIS...)
|
||
paragraphe_lu!(paragraphe%)=TRUE
|
||
'
|
||
INC paragraphes_lus% !UN TEXTE LUS DE PLUS
|
||
'
|
||
' ON BASCULE L'INDICATEUR "=" (VOIR LE TEXTE ORIGINAL...)
|
||
indicateur!(indicateur_paragraphes%(paragraphe%))=TRUE
|
||
' LE TEXTE APPELLE T'IL UNE SUITE AUTOMATIQUEMENT?
|
||
IF UPPER$(indicateur$(indicateur_paragraphes%(paragraphe%)))="SUITE"
|
||
suite!=TRUE
|
||
ELSE
|
||
suite!=FALSE
|
||
ENDIF
|
||
'
|
||
scrolling
|
||
RETURN
|
||
'
|
||
PROCEDURE scrolling
|
||
LOCAL a$,mouvement%,souris_motif%
|
||
'
|
||
moyenne%=(y%+yy%)/2
|
||
moyenne1%=(y%+y%+yy%)/3
|
||
moyenne2%=(y%+yy%+yy%)/3
|
||
HIDEM
|
||
SETMOUSE (x%+xx%)/2,moyenne%
|
||
SHOWM
|
||
'
|
||
ecran2%=MALLOC(32257) !on ouvre un buffer de la taille de l'‚cran
|
||
ecran3%=INT(ecran2%/256)*256+256
|
||
'
|
||
DO
|
||
REPEAT
|
||
souris_y%=MOUSEY
|
||
souris_bouton%=MOUSEK
|
||
'
|
||
IF MOUSEX>xx%
|
||
SETMOUSE xx%,MOUSEY
|
||
ELSE IF MOUSEX<x%
|
||
SETMOUSE x%,MOUSEY
|
||
ELSE IF MOUSEY>yy%
|
||
SETMOUSE MOUSEX,yy%
|
||
ELSE IF MOUSEY<y%
|
||
SETMOUSE MOUSEX,y%
|
||
ENDIF
|
||
'
|
||
souris_y%=MOUSEY
|
||
'
|
||
UNTIL souris_bouton%
|
||
'
|
||
EXIT IF souris_bouton%>1
|
||
'
|
||
IF souris_y%>moyenne2%
|
||
mouvement%=souris_y%-moyenne2%
|
||
ELSE IF souris_y%>moyenne%
|
||
mouvement%=1
|
||
ELSE IF souris_y%<moyenne1%
|
||
mouvement%=souris_y%-moyenne1%
|
||
ELSE IF souris_y%<moyenne%
|
||
mouvement%=-1
|
||
ENDIF
|
||
'
|
||
'
|
||
'
|
||
' !on fait "monter" le texte
|
||
IF mouvement%>0 AND premiere_ligne%+max_lignes%<=nombre_lignes%
|
||
IF premiere_ligne%+max_lignes%+mouvement%>=nombre_lignes% OR mouvement%=0
|
||
mouvement%=1
|
||
ENDIF
|
||
'
|
||
BMOVE XBIOS(3),ecran3%,32000 !on copie l'‚cran dedans
|
||
~XBIOS(5,L:-1,L:ecran3%,L:-1)!on cache ce qui se passe … l'‚cran
|
||
VSYNC
|
||
'
|
||
GET x%+10,y%+2+mouvement%,xx%-8,yy%-2,a$ !on capture le bloc
|
||
PUT x%+10,y%+2,a$ !qu'on d‚cale vers le haut
|
||
FOR i%=1 TO mouvement% !puis on remplit la partie vide
|
||
display_text(premiere_ligne%+max_lignes%+i%-1,yy%-2-mouvement%+i%)
|
||
NEXT i%
|
||
~XBIOS(5,L:xb2%,L:xb2%,W:-1) !on r‚tablit l'affiche normal
|
||
ADD premiere_ligne%,mouvement% !on update le pointeur
|
||
ENDIF
|
||
'
|
||
'
|
||
' !on fait "descendre le texte"
|
||
IF mouvement%<0 AND premiere_ligne%>1
|
||
IF premiere_ligne%+mouvement%<=0
|
||
mouvement%=-1
|
||
ENDIF
|
||
'
|
||
BMOVE XBIOS(3),ecran3%,32000 !on copie l'‚cran dedans
|
||
~XBIOS(5,L:-1,L:ecran3%,L:-1)!on cache ce qui se passe … l'‚cran
|
||
VSYNC
|
||
'
|
||
GET x%+10,y%+2,xx%-8,yy%-2+mouvement%,a$
|
||
PUT x%+10,y%+2-mouvement%,a$
|
||
ADD premiere_ligne%,mouvement% !on update le pointeur
|
||
FOR i%=-1 DOWNTO mouvement% !puis on remplit la partie vide
|
||
display_text(premiere_ligne%-i%-1,y%+1-i%)
|
||
NEXT i%
|
||
~XBIOS(5,L:xb2%,L:xb2%,W:-1) !on r‚tablit l'affiche normal
|
||
'
|
||
ENDIF
|
||
LOOP
|
||
~MFREE(ecran2%)
|
||
'
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE verif
|
||
'
|
||
CLS
|
||
FOR i%=1 TO pointeur_indicateurs%
|
||
PRINT indicateur$(i%);TAB(22);indicateur!(i%)
|
||
NEXT i%
|
||
~INP(2)
|
||
'
|
||
CLS
|
||
FOR i%=1 TO pointeur_paragraphes%
|
||
PRINT paragraphe_lu!(i%);
|
||
NEXT i%
|
||
~INP(2)
|
||
'
|
||
CLS
|
||
PRINT paragraphes_lus%,pointeur_paragraphes%
|
||
~INP(2)
|
||
fin
|
||
RETURN
|
||
'
|
||
PROCEDURE init
|
||
' CLS !ON EFFACE L'ECRAN (INDISPENSABLE POUR LE COMPILATE
|
||
UR)
|
||
init_resolution !ON TESTE SI ON EST EN MOYENNE RESOLUTION...
|
||
mouse_off !ON DECONNECTE LA SOURIS
|
||
init_routines !ON CHARGE LES ROUTINES SON ET TINY
|
||
xb2%=XBIOS(2) !ADRESSE INVARIABLE DE L'ECRAN (POUR LE SCROLLING...)
|
||
RETURN
|
||
'
|
||
PROCEDURE init2
|
||
init_objets
|
||
init_peches
|
||
init_icones
|
||
init_indicateurs
|
||
init_fenetres
|
||
init_souris
|
||
' init_pub
|
||
init_texte
|
||
chargement
|
||
mouse_on
|
||
RETURN
|
||
'
|
||
PROCEDURE init_resolution
|
||
IF XBIOS(4)<>0 !SI ON EST PAS EN BASSE RESOLUTION...
|
||
ALERT 3,"basse r‚solution,| scrogneugneu!!",1,"fichtre!",a%
|
||
END
|
||
ENDIF
|
||
RETURN
|
||
'
|
||
PROCEDURE init_indicateurs
|
||
nombre_indicateurs%=30 !NOMBRE MAXI D'INDICATEURS
|
||
pointeur_indicateurs%=0 !CLEAR DU NOMBRE D'INDICATEURS
|
||
nombre_paragraphes%=115 !NOMBRE MAXI DE TEXTES
|
||
DIM indicateur$(nombre_indicateurs%) !NOM DES INDICATEURS UTILISES PAR MOI
|
||
DIM indicateur!(nombre_indicateurs%) !INDICATEUR EN LUI-MEME
|
||
DIM paragraphe_lu!(nombre_paragraphes%)
|
||
'
|
||
' !NUMERO DE L'INDIC CR<43>E A CHAQUE TEXTE:
|
||
DIM indicateur_paragraphes%(nombre_paragraphes%)
|
||
' !NUMERO DE L'INDIC NECESSAIRE POUR LIRE CE TEXTE:
|
||
DIM indicateur_paragraphes_prealables%(nombre_paragraphes%)
|
||
'
|
||
indicateur!(0)=TRUE !INDICATEUR VIRTUEL TOUJOURS POSITIF
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE init_objets
|
||
nombre_objets%=8 !NOMBRE D'OBJETS
|
||
DIM objet$(nombre_objets%) !NOM DE CHAQUE OBJET
|
||
RESTORE objets
|
||
FOR i%=1 TO nombre_objets% !QU'ON LIT DANS LES DATAS...
|
||
READ objet$(i%)
|
||
NEXT i%
|
||
CLR ancien_objet%
|
||
RETURN
|
||
'
|
||
PROCEDURE init_peches
|
||
nombre_peches%=7 !NOMBRE DE PECHES
|
||
DIM peche$(nombre_peches%+1) !NOM DE CHAQUE PECHE (+1 POUR L'INDIC SUITE...)
|
||
RESTORE peches
|
||
FOR i%=1 TO nombre_peches%+1 !QU'ON LIT DANS LES DATAS...
|
||
READ peche$(i%)
|
||
NEXT i%
|
||
RETURN
|
||
'
|
||
PROCEDURE init_icones
|
||
'
|
||
DIM icone_objets!(nombre_objets%) !ICONES ALLUM<55>ES OU ETEINTES
|
||
DIM icone_peches!(nombre_peches%+1) !(+1 POUR L'INDICATEUR DE SUITE...)
|
||
'
|
||
DIM icone_objets$(nombre_objets%) !BLOCS GRAPHIQUES DES ICONES
|
||
DIM icone_peches$(nombre_peches%)
|
||
'
|
||
DIM objet_x%(nombre_objets%) !COORDONN<4E>ES DES ICONES DES OBJETS
|
||
DIM objet_y%(nombre_objets%)
|
||
DIM objet_xx%(nombre_objets%)
|
||
DIM objet_yy%(nombre_objets%)
|
||
'
|
||
DIM peche_x%(nombre_peches%) !COORDONN<4E>E DES ICONES DES PECHES
|
||
DIM peche_y%(nombre_peches%)
|
||
DIM peche_xx%(nombre_peches%)
|
||
DIM peche_yy%(nombre_peches%)
|
||
'
|
||
RESTORE coordonnees_objets !LECTURE DES COORDONN<4E>ES DES OBJETS
|
||
FOR i%=1 TO nombre_objets%
|
||
READ objet_x%(i%),objet_y%(i%),objet_xx%(i%),objet_yy%(i%)
|
||
NEXT i%
|
||
'
|
||
RESTORE coordonnees_peches
|
||
FOR i%=1 TO nombre_peches% !CALCUL DES COORDONN<4E>ES DES PECHES
|
||
READ peche_x%(i%),peche_y%(i%),peche_xx%(i%),peche_yy%(i%)
|
||
NEXT i%
|
||
'
|
||
FOR i%=0 TO 15 !EFFACEMENT DE L'ECRAN
|
||
SETCOLOR i%,0,0,0
|
||
NEXT i%
|
||
'
|
||
fichier$="IMAGES\10.PI1" !CHARGEMENT DE L'IMAGE DE FOND
|
||
ice_load(fichier$)
|
||
ice_disp(adresse_image%)
|
||
SGET bureau$ !CAPTURE DU BUREAU
|
||
'
|
||
fichier$="IMAGES\11.PI1" !CHARGEMENT DES ICONES
|
||
ice_load(fichier$)
|
||
ice_disp(adresse_image%)
|
||
'
|
||
FOR i%=1 TO nombre_peches% !CAPTURE DES ICONES DES PECHES
|
||
GET peche_x%(i%),peche_y%(i%),peche_xx%(i%),peche_yy%(i%),icone_peches$(i%)
|
||
NEXT i%
|
||
'
|
||
FOR i%=1 TO nombre_objets% !CAPTURE DES ICONES DES OBJETS
|
||
GET objet_x%(i%),objet_y%(i%),objet_xx%(i%),objet_yy%(i%),icone_objets$(i%)
|
||
NEXT i%
|
||
'
|
||
CLS !ON EFFACE L'ECRAN AVANT D'APPELLER LA ROUTINE PALETTE
|
||
palette_bureau$=palette$ !ON MEMORISE LA PALETTE DE L'IMAGE...
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE init_routines
|
||
INLINE routine_decomp%,5000
|
||
RETURN
|
||
'
|
||
PROCEDURE init_fenetres
|
||
INC nombre_objets%
|
||
' !COORDONN<4E>ES DES FENETRES DE TEXTE (UNE PAR IMAGE)
|
||
DIM fenetre_x%(nombre_objets%),fenetre_y%(nombre_objets%)
|
||
DIM fenetre_xx%(nombre_objets%),fenetre_yy%(nombre_objets%)
|
||
'
|
||
RESTORE fenetres
|
||
FOR i%=1 TO nombre_objets% !QU'ON LIT DANS LES DATAS
|
||
READ fenetre_x%(i%),fenetre_y%(i%)
|
||
READ fenetre_xx%(i%),fenetre_yy%(i%)
|
||
NEXT i%
|
||
'
|
||
DEC nombre_objets% !ON RAMENE LE NOMBRE D'OBJETS A 8 (9=FIN)
|
||
RETURN
|
||
'
|
||
PROCEDURE init_souris
|
||
INLINE souris%,74
|
||
FOR i%=0 TO 73
|
||
souris$=souris$+CHR$(PEEK(souris%+i%))
|
||
NEXT i%
|
||
RETURN
|
||
'
|
||
PROCEDURE datas_init
|
||
fenetres:
|
||
DATA 10,100,310,190
|
||
DATA 10,100,310,190
|
||
DATA 10,100,310,190
|
||
DATA 120,10,310,190
|
||
DATA 10,100,310,190
|
||
DATA 120,10,310,190
|
||
DATA 120,10,310,190
|
||
DATA 10,10,200,190
|
||
DATA 10,100,310,190
|
||
'
|
||
objets:
|
||
DATA LUNETTES,CUILLERE,FLEUR,CARNET,DICO,BIJOUX,CLES,ARGENT,FIN
|
||
'
|
||
peches:
|
||
DATA ORGUEIL,AVARICE,GOURMANDISE,ENVIE,LUXURE,COLERE,PARESSE,suite
|
||
'
|
||
coordonnees_objets:
|
||
DATA 238,51,283,88
|
||
DATA 222,110,268,151
|
||
DATA 195,0,266,39
|
||
DATA 0,17,57,54
|
||
DATA 27,55,106,103
|
||
DATA 131,32,178,64
|
||
DATA 276,19,319,50
|
||
DATA 133,69,188,101
|
||
'
|
||
coordonnees_peches:
|
||
DATA 184,162,227,199
|
||
DATA 0,162,43,199
|
||
DATA 46,162,89,199
|
||
DATA 276,162,319,199
|
||
DATA 92,162,135,199
|
||
DATA 138,162,181,199
|
||
DATA 230,162,273,199
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE init_texte
|
||
LOCAL i%,j%,long%,temps
|
||
'
|
||
DIM bloc_text$(2000) !BLOCS GRAPHIQUES CONTENANT L'IMAGE DU TEXTE (1/LIGNE)
|
||
text%=MALLOC(110000) !BUFFER CONTENANT LE TEXTE
|
||
pointeur_text%=text% !POINTEUR DU BUFFER TEXTE
|
||
'
|
||
FOR k%=1 TO nombre_objets% !UN FICHIER TEXTE PAR OBJET
|
||
temps=TIMER
|
||
presentation !ON FAIT PATIENTER
|
||
fichier$="TEXTES\TXT_"+STR$(k%)+".TXT" !ON CHARGE LE FICHIER COMPACT<43>
|
||
e%=C:routine_ice%(W:0,L:V:fichier$,L:*buffer_text%,L:*long%)
|
||
IF e%<>0
|
||
STOP
|
||
ENDIF
|
||
'
|
||
BMOVE buffer_text%,pointeur_text%,long%-2 !ON MET LE TEXTE A LA FIN...
|
||
ADD pointeur_text%,long%-2 !DU BUFFER
|
||
'
|
||
POKE pointeur_text%,ASC("œ") !PETITE CORRECTION
|
||
POKE pointeur_text%+1,ASC("œ") !ON RAJOUTE UN PSEUDO RETURN ("œ")
|
||
ADD pointeur_text%,2 !A LA FIN DU BUFFER
|
||
'
|
||
~MFREE(buffer_text%) !ON SE DEBARASSE DU BUFFER PROVISOIRE
|
||
'
|
||
REPEAT
|
||
UNTIL temps+1000<TIMER
|
||
NEXT k%
|
||
'
|
||
init_indicateurs_texte !ET ON PASSE A LA SUITE
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE init_indicateurs_texte
|
||
'
|
||
LOCAL i%
|
||
'
|
||
DIM paragraphe%(nombre_paragraphes%) !INDEX DE DES DEBUTS DES PARAGRAPHES
|
||
paragraphe%(1)=0
|
||
CLR pointeur_paragraphes% !NOMBRE TOTAL DE PARAGRAPHES
|
||
CLR paragraphes_lus% !NOMBRE DE TEXTES DEJA LUS
|
||
'
|
||
' NUMERO DE L'OBJET ASSOCIE A CHAQUE PARAGRAPHE
|
||
DIM reference_objet%(nombre_paragraphes%)
|
||
' NUMERO DU PECHE ASSOCIE A CHAQUE PARAGRAPHE
|
||
DIM reference_peche%(nombre_paragraphes%)
|
||
'
|
||
FOR i%=1 TO nombre_objets% !ON CHARGE CHAQUE FICHIER INDEX...
|
||
fichier$="TEXTES\REF."+STR$(i%)
|
||
OPEN "I",#1,fichier$ !ON OUVRE LE FICH
|
||
IER
|
||
index$=SPACE$(LOF(#1)) !ON CREE UNE VARIABLE DE LA LONGUEUR
|
||
CLOSE !DU FICHIER INDEX (>256 SIGNES DONC PAS INPUT)
|
||
BLOAD fichier$,VARPTR(index$) !ON CHARGE LE FICHIER A PARTIR DE SON ADRE
|
||
SSE
|
||
j%=1 !ON SCANNE A PARTIR DU PREMIER CARACTERE
|
||
indicateur_fin!=FALSE
|
||
REPEAT
|
||
INC pointeur_paragraphes% !ON CREE UN NOUVEAU PARAGRAPHE
|
||
'
|
||
lookindex !INSTRUCTION (A$) SUIVANTE... (REFERENCES DU PARAGRAPHE)
|
||
reference_objet%(pointeur_paragraphes%)=i%
|
||
reference_peche%(pointeur_paragraphes%)=VAL(a$)
|
||
'
|
||
lookindex !LONGUEUR DU PARAGRAPHE...
|
||
paragraphe%(pointeur_paragraphes%)=paragraphe%(pointeur_paragraphes%-1)+VA
|
||
L(a$)
|
||
'
|
||
lookindex !INDICATEURS "&" (CF TEXTE) PREALABLES
|
||
indicateur$=a$
|
||
IF indicateur$<>"NADA" !SI CET INDICATEUR EXISTE...
|
||
indicateur_trouve!=FALSE !ON LE CHERCHE DANS LA LISTE DE CEUX
|
||
FOR k%=1 TO pointeur_indicateurs% !DEJA IDENTIFIES
|
||
IF indicateur$=indicateur$(k%) !IL EXISTE?
|
||
indicateur_trouve!=TRUE !OK!
|
||
indicateur_paragraphes_prealables%(pointeur_paragraphes%)=k%
|
||
' PRINT "&";indicateur$;" reference ";k%
|
||
ENDIF
|
||
NEXT k%
|
||
'
|
||
IF indicateur_trouve!=FALSE !IL N'EXISTE PAS?
|
||
INC pointeur_indicateurs% !ON LE CREE
|
||
indicateur$(pointeur_indicateurs%)=indicateur$
|
||
indicateur_paragraphes_prealables%(pointeur_paragraphes%)=pointeur_ind
|
||
icateurs%
|
||
' PRINT "&";indicateur$;" cr‚ation "
|
||
ENDIF
|
||
ENDIF
|
||
'
|
||
lookindex !INSTRUCTION SUIVANTE...(INDICATEUR "=")
|
||
indicateur$=a$ !ON CAPTURE SON NOM...
|
||
IF indicateur$<>"NADA" !LE CAS ECHEANT S'IL EXISTE
|
||
indicateur_trouve!=FALSE !ON LE CHERCHE DANS LA LISTE DE
|
||
FOR k%=1 TO pointeur_indicateurs% !CEUX DEJA IDENTIFIES
|
||
IF indicateur$=indicateur$(k%) !IL EXISTE?
|
||
indicateur_trouve!=TRUE !OK!
|
||
indicateur_paragraphes%(pointeur_paragraphes%)=k%
|
||
' PRINT "=";indicateur$;" r‚f‚rence ";k%
|
||
ENDIF
|
||
NEXT k%
|
||
'
|
||
IF indicateur_trouve!=FALSE !SINON ON LE CREE COMME AU DESSUS
|
||
INC pointeur_indicateurs%
|
||
indicateur$(pointeur_indicateurs%)=indicateur$
|
||
indicateur_paragraphes%(pointeur_paragraphes%)=pointeur_indicateurs%
|
||
' PRINT "=";indicateur$;" cr‚ation "
|
||
ENDIF
|
||
ENDIF
|
||
'
|
||
UNTIL indicateur_fin!=TRUE !ON S'ARRETE A LA FIN DU FICHIER INDEX
|
||
' depart%=paragraphe%(pointeur_paragraphes%)
|
||
NEXT i%
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE lookindex
|
||
j1%=INSTR(index$,"œ",j%) !ON CHERCHE LE PROCHAIN PSEUDO RETURN ("œ")
|
||
IF j1%<>0 AND j1%<>LEN(index$) !SI ON EST PAS A LA FIN DE LA CHAINE
|
||
a$=MID$(index$,j%,j1%-j%) !ON CAPTURE LE MOT ENTRE LES DEUX œ
|
||
j%=j1%+1 !ET ON DEPLACE LA POINTEUR
|
||
ELSE
|
||
indicateur_fin!=TRUE !SION LE FICHIER INDEX EST FINI
|
||
a$=MID$(index$,j%,LEN(index$)-j%) !ET ON CAPTURE LE DERNIER "MOT"
|
||
ENDIF
|
||
RETURN
|
||
'
|
||
PROCEDURE presentation
|
||
CLS
|
||
SELECT k% !K% EST LE NUMERO DU TEXTE EN TRAIN D'ETRE LU SUR DISQUETTE
|
||
CASE 1
|
||
carre("la belle zohra",100,80,"771")
|
||
carre("(morceaux de bravoure)",100,120,"704")
|
||
TEXT 0,180,319,"fran‡ois coulon"
|
||
TEXT 0,190,319,"les logiciels d'en face 1992.reproduction interdite"
|
||
CASE 2
|
||
carre("graphismes faustino ribeiro",25,20,"437")
|
||
CASE 3
|
||
carre("programmation pascal piat",25,180,"275")
|
||
CASE 4
|
||
carre("musique erik ecqier",100,0,"743")
|
||
CASE 5
|
||
carre("un grand merci …:",150,20,"743")
|
||
carre("emmanuel talmy",50,100,"743")
|
||
carre("sans qui ce logiciel... etc.",70,180,"177")
|
||
CASE 6
|
||
carre("miss zohra c‚lestibus est habill‚e...",0,100,"607")
|
||
carre("...par aristide aristibus",20,150,"607")
|
||
CASE 7
|
||
carre("‚crit et r‚alis‚ par fran‡ois coulon",0,99,"073")
|
||
CASE 8
|
||
carre("… la famille paspire...",100,180,"555")
|
||
ENDSELECT
|
||
RETURN
|
||
'
|
||
PROCEDURE carre(texte$,x%,y%,couleur$)
|
||
SETCOLOR 0,0,0,0 !FOND DE L'ECRAN EN NOIR
|
||
SETCOLOR 15,7,7,5 !TEXTE EN JAUNE
|
||
DEFTEXT 1,1,0,6 !ON CHOISIT UN TEXTE EN GRAS
|
||
IF y%>100 !SI LE TEXTE DOIT ETRE AFFICHE EN BAS...
|
||
SETCOLOR 1,VAL("&H"+couleur$) !ON CHOISIT LA DEUXIEME COULEUR
|
||
DEFFILL 2,1,1
|
||
ELSE
|
||
SETCOLOR 2,VAL("&H"+couleur$) !SINON C'EST LA PREMIERE
|
||
DEFFILL 3,1,1
|
||
ENDIF
|
||
PBOX x%,y%,x%+12,y%+12 !ON TRACE UN PETIT CARRE DE COULEUR...
|
||
TEXT x%+15,y%+8,LEN(texte$)*8,texte$ !ET LE T
|
||
EXTE A COTE...
|
||
RETURN
|
||
'
|
||
PROCEDURE shoot_text
|
||
'
|
||
LOCAL j%,ligne%,mot$,temps
|
||
'
|
||
timer=temps
|
||
ERASE bloc_text$()
|
||
DIM bloc_text$(1000)
|
||
'
|
||
CLR ligne%,nombre_lignes%,mot$
|
||
premiere_ligne%=1
|
||
hide_screen
|
||
CLS
|
||
FOR j%=paragraphe%(paragraphe%-1) TO paragraphe%(paragraphe%)-1
|
||
'
|
||
i%=PEEK(j%+text%)
|
||
mot$=mot$+CHR$(i%)
|
||
'
|
||
IF i%=156
|
||
mot$=LEFT$(mot$,LEN(mot$)-1)
|
||
IF ligne%+LEN(mot$)<max_colonnes%
|
||
PRINT mot$
|
||
shoot_ligne
|
||
CLR ligne%,mot$
|
||
ELSE
|
||
shoot_ligne
|
||
PRINT mot$
|
||
shoot_ligne
|
||
CLR mot$,ligne%
|
||
ENDIF
|
||
ENDIF
|
||
'
|
||
IF i%=32
|
||
IF ligne%+LEN(mot$)<max_colonnes%
|
||
PRINT mot$;
|
||
ADD ligne%,LEN(mot$)
|
||
CLR mot$
|
||
ELSE
|
||
PRINT
|
||
shoot_ligne
|
||
PRINT mot$;
|
||
ligne%=LEN(mot$)
|
||
CLR mot$
|
||
ENDIF
|
||
ENDIF
|
||
'
|
||
NEXT j%
|
||
'
|
||
show_screen
|
||
REPEAT
|
||
UNTIL TIMER>temps+200
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE shoot_ligne
|
||
LOCAL i%
|
||
FOR i%=0 TO 8 !on scanne toute la hauteur de la ligne
|
||
INC nombre_lignes% !et on capture chaque ligne de l'‚cran
|
||
GET 0,i%,max_colonnes%*8-1,i%,bloc_text$(nombre_lignes%)
|
||
NEXT i%
|
||
CLS !puis on efface l'‚cran
|
||
RETURN
|
||
'
|
||
PROCEDURE cree_fenetre(objet%,paragraphe%)
|
||
LOCAL i%
|
||
x%=fenetre_x%(objet%) !ON PREND LES COORDONNEES CORRESPONDANT A L'OBJET CHOISI
|
||
y%=fenetre_y%(objet%)
|
||
xx%=fenetre_xx%(objet%)
|
||
yy%=fenetre_yy%(objet%)
|
||
'
|
||
max_colonnes%=(xx%-x%-10)/8 !ON CALCUL LE NOMBRE DE SIGNES PAR COLONNE
|
||
max_lignes%=(yy%-y%)-3 !ON LAISSE UNE PETITE MARGE EN HAUT ET EN BAS
|
||
shoot_text !ON CAPTURE LE DESSIN DU TEXTE
|
||
GRAPHMODE 1
|
||
DEFFILL 1,1,1 !ON DESSINE UN RECTANGLE BLANC
|
||
PRBOX x%,y%-1,xx%,yy%
|
||
COLOR 0
|
||
RBOX x%,y%-1,xx%,yy% !ET UN CADRE NOIR AUTO
|
||
UR
|
||
RBOX x%-1,y%-1,xx%+1,yy%
|
||
COLOR 1
|
||
RBOX x%-2,y%-2,xx%+2,yy%+1
|
||
RBOX x%-3,y%-2,xx%+3,yy%+1
|
||
FOR i%=1 TO max_lignes%
|
||
display_text(i%,y%+1+i%) !ET ON AFFICHE LES PREMIERES LIGNES DU TEXTE
|
||
NEXT i%
|
||
RETURN
|
||
'
|
||
PROCEDURE display_text(ligne%,niveau%)
|
||
PUT x%+10,niveau%,bloc_text$(ligne%),12 !on l'affiche … l'endroit voulu
|
||
RETURN
|
||
'
|
||
PROCEDURE ice_load(fichier$)
|
||
LOCAL erreur%
|
||
INLINE routine_ice%,968
|
||
erreur%=C:routine_ice%(W:0,L:V:fichier$,L:*adresse_image%,L:*longueur_image%)
|
||
IF erreur%<>0
|
||
STOP
|
||
ENDIF
|
||
palette$=SPACE$(32)
|
||
BMOVE adresse_image%+2,VARPTR(palette$),32
|
||
RETURN
|
||
'
|
||
PROCEDURE ice_disp(adresse_image%)
|
||
BMOVE adresse_image%+34,XBIOS(3),32000
|
||
~MFREE(adresse_image%)
|
||
RETURN
|
||
'
|
||
PROCEDURE palette(palette$)
|
||
~XBIOS(6,L:VARPTR(palette$))
|
||
RETURN
|
||
'
|
||
PROCEDURE hide_screen
|
||
ecran%=MALLOC(32000) !ON OUVRE UN BUFFER DE LA TAILLE DE L'<27>CRN
|
||
BMOVE XBIOS(3),ecran%,32000 !ON COPIE L'<27>CRAN DEDANS
|
||
~XBIOS(5,L:ecran%,L:-1,L:-1)!ON CACHE CE QUI SE PASSE ¶ L'<27>CRAN
|
||
VSYNC
|
||
RETURN
|
||
'
|
||
PROCEDURE show_screen
|
||
~XBIOS(5,L:XBIOS(2),L:XBIOS(2),W:-1) !ON R<>TABLIT L'AFFICHAGE NORMAL
|
||
~MFREE(ecran%) !ON FERME LE BUFFER
|
||
RETURN
|
||
'
|
||
PROCEDURE hide_screen2
|
||
ecran2%=MALLOC(32257) !on ouvre un buffer de la taille de l'‚cran
|
||
ecran3%=INT(ecran2%/256)*256+256
|
||
BMOVE XBIOS(3),ecran3%,32000 !on copie l'‚cran dedans
|
||
~XBIOS(5,L:-1,L:ecran3%,L:-1)!on cache ce qui se passe … l'‚cran
|
||
VSYNC
|
||
RETURN
|
||
'
|
||
PROCEDURE show_screen2
|
||
~XBIOS(5,L:xb2%,L:xb2%,W:-1) !on r‚tablit l'affiche normal
|
||
~MFREE(ecran2%) !on ferme le buffer
|
||
RETURN
|
||
'
|
||
PROCEDURE mouse_on
|
||
OUT 4,8
|
||
DEFMOUSE souris$
|
||
RETURN
|
||
'
|
||
PROCEDURE mouse_off
|
||
OUT 4,18
|
||
HIDEM
|
||
RETURN
|
||
'
|
||
PROCEDURE musique
|
||
'
|
||
@init_musique
|
||
FOR beat%=1 TO 5
|
||
@rythme(beat%)
|
||
@charge_son
|
||
SETCOLOR 0,7,7,7
|
||
SETCOLOR 15,0,0,0
|
||
@clavier_sonore
|
||
SETCOLOR 0,0,0,0
|
||
NEXT beat%
|
||
@fin_musique
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE init_musique
|
||
son%=10 !NOMBRE MAXI DE SAMPLES
|
||
SPOKE &H484,PEEK(&H484) AND &HFE !PAS DE BIP CLAVIER
|
||
'
|
||
DIM son$(son%),frequence_son%(son%)
|
||
DIM sous_titre1$(son%),sous_titre2$(son%)
|
||
'
|
||
RESTORE musique
|
||
DEFFILL 0,2,8
|
||
PBOX 0,0,319,199
|
||
SETCOLOR 0,0,0,0
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE rythme(rythme%)
|
||
'
|
||
FOR i%=10 DOWNTO 1 !RAZ DES BUFFERS CONTENANT LES SAMPLES
|
||
son$(i%)=""
|
||
~FRE()
|
||
NEXT i%
|
||
CLR son%
|
||
'
|
||
stop_sample
|
||
~MFREE(adresse_rythme%)
|
||
'
|
||
fichier$="SONS\BEAT"+STR$(rythme%)+".CMP"
|
||
e%=C:routine_decomp%(L:0,L:VARPTR(fichier$),L:*adresse_rythme%,L:*longueur_ryt
|
||
hme%)
|
||
IF e%<>0
|
||
PRINT "pas assez de m‚moire"
|
||
END
|
||
ENDIF
|
||
'
|
||
f%=C:routine_decomp%(L:adresse_rythme%,L:longueur_rythme%,W:10000,W:65535,W:15
|
||
,L:*suiveuse%)
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE charge_son
|
||
REPEAT
|
||
READ nom_son$,frequence_son%(son%+1),sous_titre1$(son%+1),sous_titre2$(son%+
|
||
1)
|
||
IF nom_son$<>"FIN"
|
||
INC son%
|
||
fichier$="SONS\"+nom_son$+".CMP"
|
||
fichier2$=fichier$
|
||
e%=C:routine_decomp%(L:0,L:VARPTR(fichier$),L:*adresse%,L:*long%)
|
||
son$(son%)=SPACE$(long%)
|
||
' PRINT "1 ";FRE()''''''MALLOC(-1)
|
||
BMOVE adresse%,VARPTR(son$(son%)),long%
|
||
~MFREE(adresse%)
|
||
' PRINT "2 ";FRE()''''''MALLOC(-1)
|
||
ENDIF
|
||
UNTIL nom_son$="FIN"
|
||
'
|
||
RETURN
|
||
'
|
||
PROCEDURE clavier_sonore
|
||
REPEAT
|
||
~FRE()
|
||
UNTIL INKEY$=""
|
||
' PRINT FRE()''''''MALLOC(-1)
|
||
REPEAT
|
||
IF TIMER>temps_sous_titre+500 AND sous_titre!=TRUE !APRES UN PETIT TEMPS
|
||
t(23,SPACE$(40)) !ON EFFACE LE SOUS-TITRE
|
||
t(22,SPACE$(40))
|
||
sous_titre!=FALSE
|
||
ENDIF
|
||
'
|
||
a$=INKEY$ !ON SCANNE LE CLAVIER
|
||
IF ASC(a$)=27 !SI C'EST UN CODE ESCAPE, ON PASSE TOUS LES COUPLETS
|
||
beat%=10
|
||
stop_sample !ET ON ARRETE LE SON
|
||
ENDIF
|
||
'
|
||
a%=ASC(RIGHT$(a$,1))-58 !UNIQUEMENT LES TOUCHES DE FONCTION
|
||
IF a%<=son% AND a%>=0 !TOUCHE DE FONCTION CORRESPONDANT A UN SON??
|
||
@mix(a%) !ON EMET LE SAMPLE CORRESPONDANT
|
||
temps_sous_titre=TIMER !DEBUT DU D<>COMPTE DE L'AFFICHE DU SOUS_TITRE
|
||
sous_titre!=TRUE
|
||
t(22,SPACE$(40))
|
||
@t(23,SPACE$(40)) !ON EFFACE CELUI QU'IL Y AVAIT AVANT...
|
||
t(22,sous_titre1$(a%))
|
||
@t(23,sous_titre2$(a%)) !ON AFFICHE LE NOUVEAU...
|
||
sous_titre1$(a%)="" !POUR NE L'AFFICHER QU'UNE SEULE FOIS
|
||
sous_titre2$(a%)=""
|
||
'
|
||
ENDIF
|
||
UNTIL suiveuse%=0 OR a%=10 !ON SORT SI C'EST LA TOUCHE F10
|
||
'
|
||
REPEAT !ON VIDE LE BUFFER CLAVIER
|
||
UNTIL INKEY$=""
|
||
RETURN
|
||
'
|
||
PROCEDURE mix(numero_son%)
|
||
~C:routine_decomp%(L:-VARPTR(son$(numero_son%)),L:LEN(son$(numero_son%)),W:fre
|
||
quence_son%(numero_son%),W:100)
|
||
RETURN
|
||
'
|
||
PROCEDURE stop_sample
|
||
~C:routine_decomp%(L:-1) !FORCAGE DE LA FIN DU SAMPLE
|
||
RETURN
|
||
'
|
||
PROCEDURE fin_musique
|
||
@stop_sample
|
||
~MFREE(adresse_rythme%)
|
||
ERASE son$()
|
||
ERASE frequence_son%()
|
||
ERASE sous_titre$()
|
||
~FRE()
|
||
RETURN
|
||
'
|
||
PROCEDURE data_fichiers_musique
|
||
musique:
|
||
DATA 1cemonsi,7500,"ce monsieur!",""
|
||
DATA 1safemme,7500,"sa femme!",""
|
||
DATA 1lechame,7500,"le chameau!",""
|
||
DATA 1smala,7500,"et toute la smala!",""
|
||
DATA fx_batte,10000,"",""
|
||
DATA fx_flute,5000,"",""
|
||
DATA fx_synth,5000,"",""
|
||
DATA fx_tromp,7500,"",""
|
||
DATA fx_tromp,10000,"",""
|
||
DATA FIN,0,"",""
|
||
'
|
||
DATA 2coinfli,7500,"des coins o—","les flics ne vont plus"
|
||
DATA 2kararab,7500,"y'a des quartiers arab'",""
|
||
DATA 2karbret,7500,"si c'‚tait des quartiers bretons...",""
|
||
DATA 2gensnan,7500,"some people from Nanterre,","some people from Belleville!"
|
||
DATA fx_boing,5000,"",""
|
||
DATA fx_couic,5000,"",""
|
||
DATA fx_siren,5000,"",""
|
||
DATA fx_guita,5000,"",""
|
||
DATA fx_guita,7500,"",""
|
||
DATA FIN,0,"",""
|
||
'
|
||
DATA 3BOPARLE,7500,"ces beaux-parleurs","de la t‚l‚vision?"
|
||
DATA 3FAITFRA,7500,"qu'est-ce qu'ils ont fait","pour la france?"
|
||
DATA 3PASMILI,7500,"les trois quarts du temps, y z'ont","pas fait leur service
|
||
miliaire"
|
||
DATA 3UNPEUPE,7500,"y sont mˆme un peu p‚d‚ sur les bords!",""
|
||
DATA fx_hey,7500,"hey hey hey!",""
|
||
DATA fx_cuivr,7500,"",""
|
||
DATA fx_dzoin,7500,"",""
|
||
DATA fx_dehem,7500,"",""
|
||
DATA fx_dehem,10000,"",""
|
||
DATA FIN,0,"",""
|
||
'
|
||
DATA 4algefra,7500,"nous n'‚tions pas pour","l'alg‚rie francaise"
|
||
DATA 4algesah,7500,"nous ‚tions pour l'alg‚rie et","le sahara francais!"
|
||
DATA 4sousoff,7500,"les sous-off' de la coloniale,","dont j'‚tais"
|
||
DATA FIN,0,"",""
|
||
'
|
||
DATA 5haine,7500,"qui a la haine de l'‚tranger?",""
|
||
DATA 5terrfra,7500,"la terre de france, elle est","d'abord aux fran‡ais"
|
||
DATA 5collabo,7500,"on nous parle des collabos,","y z'en ont fait moins"
|
||
DATA 5clepen,7500,"c'est Le Pen (de ch'val)",""
|
||
DATA 5antifra,7500,"est anti-fran‡ais",""
|
||
DATA 5abrutis,7500,"nous sommes des a.....s",""
|
||
DATA fx_beat,7500,"",""
|
||
DATA fx_glin1,7500,"",""
|
||
DATA fx_glin2,7500,"",""
|
||
DATA FIN,0,"",""
|
||
RETURN
|
||
'
|
||
PROCEDURE t(ligne%,texte$)
|
||
TEXT 160-LEN(texte$)*4,ligne%*8,texte$
|
||
RETURN
|
||
'
|
||
PROCEDURE fin
|
||
~MFREE(text%)
|
||
~FRE(0)
|
||
mouse_on
|
||
SHOWM
|
||
SYSTEM
|
||
RETURN
|
||
'
|
||
' -----------------------------------------------------------------------------
|