antoine-source/folibus/zx81/res/folibus_diet.bas
2023-11-28 19:50:15 +01:00

502 lines
11 KiB
QBasic
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

0 REM [HEX:\
85,89,89,89,89,89,89,89,\
89,89,89,89,89,89,89,89,\
89,89,89,89,89,89,05,00,\
82,00,00,00,00,00,00,00,\
88,05,88,88,88,88,00,31,\
26,00,32,26,2E,38,34,33,\
00,88,88,88,88,85,88,00,\
80,82,00,00,00,00,00,00,\
88,05,88,88,00,29,3A,00,\
35,37,34,2B,2A,38,38,2A,\
3A,37,00,88,88,85,88,00,\
80,80,82,00,00,00,00,00,\
88,05,88,88,88,88,88,00,\
2B,34,31,2E,27,3A,38,00,\
88,88,88,88,88,85,88,00,\
80,80,80,05,00,00,00,00,\
85,8A,8A,8A,8A,8A,8A,8A,\
8A,8A,8A,8A,8A,8A,8A,8A,\
8A,8A,8A,8A,8A,8A,05,00,\
80,80,07,00,00,00,00,00,\
00,00,35,37,34,2C,37,26,\
32,32,2A,00,2A,28,37,2E,\
39,00,35,26,37,00,00,00,\
80,07,00,00,00,00,00,00,\
00,00,00,00,00,26,31,26,\
2E,33,00,27,37,2A,2C,2A,\
34,33,00,00,00,00,00,00,\
07,00,00,00,00,00,00,00,\
00,00,35,34,3A,37,00,32,\
2E,28,37,34,16,38,3E,38,\
39,2A,32,2A,38,1B,00,76,\
76,2A,16,40,ED,4B,7B,40,\
23,7E,FE,76,CA,5B,00,CB,\
7F,28,F5,0B,78,B1,20,F0,\
23,7E,CB,7F,20,0D,FE,0C,\
28,0F,FE,01,20,02,3E,0B,\
D7,18,ED,CB,BF,D7,C3,5B,\
00,ED,5B,0E,40,1A,FE,76,\
28,DE,3E,00,D7,13,18,F5,\
11,82,40,01,04,06,ED,43,\
7B,40,D5,CD,F5,08,D1,62,\
6B,01,17,00,D5,CD,6B,0B,\
D1,EB,01,20,00,09,EB,ED,\
4B,7B,40,04,ED,43,7B,40,\
78,FE,0E,28,02,18,DB,01,\
07,06,ED,43,7B,40,C9 ]
1 REM LES LIGNES 10 A 6040 \
ET 9000 A 9999 ONT \
ETE REPRODUITES DE L"OUVRAGE\
"LE PETIT LIVRE DU ZX81" \
(D"APRES ÀTHE ZX81 POCKET BOOK"\
DE PHIPPS ASSOCIATES) AVEC L"\
AUTORISATION D"EDITIONS DU PSI
3 GOSUB 8699
4 SAVE"FOLIBUS2"
5 RAND USR 16826
6 FOR Z=0 TO 1000
7 NEXT Z
8 POKE 16508,0
9 CLS
10 DIM S(10)
15 DIM C(5)
20 LET O=20
30 LET SALLE=1
40 DIM P$(2,2)
50 DIM O(O)
60 FOR X=1 TO O
70 LET O(X)=Q(X)
80 NEXT X
90 RAND
100 IF NOT S(2) THEN GOTO 200
110 IF C(2) THEN LET C(2)=C(2)-1
120 IF S(3) THEN GOTO 200
130 PRINT "ON NÀY VOIT RIEN,MIEUX VAUDRAIT","ALLUMER POUR EVITER LES ENNUIS."
140 IF C(3) THEN LET C(3)=C(3)-1
150 GOTO 1000
200 REM DESCRIPTION DE LA SALLE
210 PRINT,,
220 POKE 16507,SALLE
230 PRINT USR 16763;"«\
VOUS ETES DEVANT UNE MAISON£\
LA PORTE EST OUVERTE\
VOUS ETES DANS UN COULOIR,IL Y A\
UNE PORTE A LEST ET UNE PORTE£\
A LOUEST\
VOUS ETES DANS UN SALON,IL Y A£\
UNE PORTE A LOUEST\
IL Y A UNE DROLE DODEUR\
IL Y A UNE GROSSE MACHINE QUI£\
RESSEMBLE A 1 GENERATRICE AVEC \
UN BOUTON VERT, UN BOUTON ROUGE \
IL Y A UNE PORTE AU NORD\
UNE MACHINERIE DASCENCEUR,UNE£\
PORTE AU NORd\
IL Y A PLEIN DE MATERIEL\
VOUS ETES DANS UN ASCENCEUR.IL Y\
A UN BOUTON HAUT,UN BOUTON BAs\
LASCENCEUR VIENT DE SARRETER\
LA PIECE EST HUMIDE,IL Y A DES£\
FILS QUI TRAINENT PAR TERRE IL Y\
A UNE FENETRE ET UNE PORTE AU N\
LA PORTE VIENT DE SE REFERMER. \
BONJOUR..£\
COMMENT ECRIVEZ VOUS CECI£\
EN 4 LETTREs\
VOUS ETES DANS UNE MACHINE A£\
REMONTER LE TEMPS 3 BOUTONS:£\
PASSE,PRESENT ET AVENIr\
VOUS VOUS RETROUVEZ DANS LE£\
LABORATOIRE DU PROFESSEUR.IL Y A\
UNE PORTE EN FER A LOUEST£\
PORTE AU SUD MARQUE DANGER\
IL Y A UNE DOUCHE,UN TROU DANS£\
LE SOl\
IL Y A UN CUBE NOIR DAU MOINS£\
UNE TONNE,UNE ECHELLE MONTE.UNE \
PORTE A LESt\
VOUS ETES DANS UNE BIBLIOTHEQUe\
VOUS ETES DANS UNE SOUCOUPE SUR \
UNE TERRASSe"
240 PRINT
300 LET F=0
310 FOR X=1 TO O
320 IF O(X)<>SALLE THEN GOTO 500
330 IF F THEN GOTO 400
340 PRINT
345 PRINT ,,"IL Y A AUSSI:"
350 LET F=1
400 PRINT " ";O$(X)
500 NEXT X
#
1000 REM ACCEPTATION DE LA COMMANDE
1010 LET T=1
1020 GOTO 2000
1100 IF C(1) THEN LET C(1)=C(1)-1
1110 IF C(4) THEN LET C(4)=C(4)-1
1120 PRINT
1125 PRINT ,,"QUE FAITES-VOUS? >"
1130 INPUT Y$
1140 CLS
1150 LET Y=0
1160 PRINT ">";Y$
1170 LET P$(2)="00"
1200 FOR W=1 TO 2
1210 GOSUB 6000
1220 IF Y>=LEN Y$ THEN GOTO 1300
1230 IF P$(W)="00" THEN GOTO 1210
1240 NEXT W
1300 IF P$(1)<>"00" THEN GOTO 1600
1310 PRINT "PARDON?"
1320 GOTO 100
1600 REM CONTROLE DU MOUVEMENT
1610 LET Z=1
1620 LET T$=M$(SALLE)(Z TO Z+1)
1630 IF T$="00" THEN GOTO 1900
1640 IF T$<>P$(1) THEN GOTO 1700
1650 LET SALLE=VAL(M$(SALLE)(Z+2 TO Z+3))
1660 GOTO 100
1700 LET Z=Z+4
1710 GOTO 1620
1900 LET T=0
1910 LET CORRESP=0
2000 REM COTROLE DES CONDITIONS
2010 LET CP=0
2100 LET CP=CP+1
2110 IF NOT T THEN GOTO 2300
2120 LET E$=C$(CP)
2130 GOTO 2600
2300 IF CP<=A THEN GOTO 2400
2310 IF CORRESP THEN GOTO 1000
2320 PRINT"IMPOSSIBLE";
2330 IF VAL(P$(1))<13 THEN PRINT" DE PRENDRE CETTE","DIRECTION";
2340 PRINT "."
2350 GOTO 100
2400 IF A$(CP)(1 TO 2)<>P$(1) THEN GOTO 2100
2410 LET Y$=A$(CP)(3 TO 4)
2420 IF Y$<>"00" AND Y$<>P$(2) THEN GOTO 2100
2430 LET E$=A$(CP)(5 TO)
2600 REM CONDITIONS
2610 LET E=1
2700 IF E$(E)="." THEN GOTO 3000
2710 LET TYPE=CODE(E$(E))-38
2720 LET N=VAL(E$(E+1 TO E+2))
#
2800 GOSUB 2900+TYPE*10
#
2810 IF NOT OK THEN GOTO 2100
2820 LET E=E+3
2830 GOTO 2700
# A NN: SI NOUS SOMMES DANS LA SALLE NN
2900 LET OK=(N=SALLE)
2905 RETURN
# B NN: SI L OBJET NN EST PRESENT OU TRANSPORTE
2910 LET OK=(O(N)=SALLE OR O(N)<0)
2915 RETURN
# C NN: SI L OBJET NN EST NON PRESENT OU NON TRANSPORTE
2920 LET OK=(O(N)<>SALLE AND O(N)>=0)
2925 RETURN
# D NN: SI L OBJET NN EST TRANSPORTE
2930 LET OK=(O(N)<0)
2935 RETURN
# E NN: SI LE POINTEUR NN EST ACTIVE
2940 LET OK=S(N)
2945 RETURN
# F NN: SI LE POINTEUR NN N EST PAS ACTIVE
2950 LET OK=(NOT S(N))
2955 RETURN
# G NN: SI LE COMPTEUR NN A ATTEINT LA VALEUR 1
2960 LET OK=(C(N)=1)
2965 RETURN
# H NN: SI LE NOMBRE ALEATOIRE (1-99) EST INFERIEUR A NN
2970 LET OK=((INT(RND*100)+1)<=N)
2975 RETURN
3000 REM ACTIONS
3010 LET CORRESP=1
3020 LET E=E+1
3100 IF E$(E)="." THEN GOTO 2100
3110 LET TYPE=CODE(E$(E))-38
3120 IF E$(E+1)<>"." THEN LET N=VAL(E$(E+1 TO E+2))
3200 LET BREAK=0
###
3210 GOSUB 4000+TYPE*100
###
3220 IF BREAK THEN GOTO BREAK
3230 LET E=E+3
3240 GOTO 3100
# A NN: SI NOUS SOMMES DANS LA SALLE NN
## 4000 GOSUB 2910
## 4010 RETURN
### B NN : TRANSPORTES OBJETS NN
### OBJET DANS L'INVENTAIRE
## 4100 IF O(N)=-1 THEN GOTO 4110
## 4102 IF Q(SALLE)=0 THEN GOTO 4110
## 4103 LET OK=1
## 4105 RETURN
## 4110 PRINT "UN QUOI?"
## 4120 LET BREAK=100
## 4130 RETURN
4100 IF S(1)<5 THEN GOTO 4140
4110 PRINT "VOUS NE POUVEZ PORTER PLUS"
4120 LET BREAK=100
4130 RETURN
4140 IF O(N)=-1 THEN GOTO 4180
4150 LET O(N)=-1
4160 LET S(1)=S(1)+1
4170 RETURN
4180 PRINT "VOUS LÀAVEZ DEJA"
4190 GOTO 4120
### C NN : POSE OBJETS NN
4200 IF O(N)=-1 THEN GOTO 4240
4210 PRINT "VOUS NÀAVEZ PAS ";O$(N)
4220 LET BREAK=100
4230 RETURN
4240 LET O(N)=SALLE
4250 LET S(1)=S(1)-1
4260 RETURN
### D NN : AFFICHE LE MESSAGE EN 7000+(NN*10)
4300 POKE 16507,N
4310 PRINT USR 16763;"«\
LA GENERATRICE VIENT DEXPLOSER \
LA MAISON NEXISTE PLUS,VOUS NON\
PLUS\
LASCENSSEUR NE BOUGE PAS.£\
IL FAUT PEUT ETRE DU COURANTŠ\
LA PORTE VIENT DE SE FERMER£\
IMPOSSIBLE DE LOUVRIr\
VOUS AVEZ RAISON.LA CURIOSITE£\
EST UN VILAIN DEFAUT..\
LODEUR QUE VOUS SENTIEZ ETAIT£\
CELLE DUN GAZ EXPLOSIF.VOUS£\
ETES MORT\
IL FAUDRAIT PEUT ETRE DU FEU..\
AH,AH...VOUS ETES PRISONNIEr\
VOUS AVEZ DIT PAPIER?QUEL PAPIEr\
BRAVEZ LES INTERDITS\
ELLE A LAIR DE SEMBALLER..\
LA GENERATRICE SE MET EN MARCHe\
IMPOSSIBLE,ELLE NE VEUT RIEN£\
SAVOIR\
BRAVO,JE NE SAVAIS PAS QUE VOUS£\
AVIEZ DES DONS DELECTRICIEN\
VOTRE MACHINE EST REPAREE.MAIS£\
ELLE SENT LE CHAUD\
LA MACHINE EST REPAREE.DOMMAGE£\
QUIL NY AIT PAS DE COURANT\
IL FAUDRAIT PEUT-ETRE DES OUTILs\
LASCENSEUR SEMBLE MONTER..\
LASCENSEUR NE BOUGE PAs\
LE CABLE VIENT DE CASSER.VOUS£\
VOUS ECRASEZ EN BAS:MORt\
IL FAIT NOIR.IL FAUT ALLUMEr\
VOUS VOUS ECRASEZ AU SOl\
IL Y A UNE CLEF\
LA PORTE EST FERMEE A CLEf\
TIENS,LA PORTE DU PLACARD SE£\
REFERME\
LA GENERATRICE VIENT DEXPLOSER,\
LASCENSSEUR EST DETRUIT.£\
VOUS EN ECHAPPEZ DE JUSTESSe\
VOUS ETES MORT ELECTROCUTe\
VOUS AVEZ RAISON,RIEN NE SERT DE\
COURRIR\
DEHORS IL FAIT NOIR,ON NE VOIT \
PAS LE SOL\
CEST DEJA FAIT\
VOUS ETES AU BOUT DE LA CORDE\
VRAIMENT PAS AU POINT CETTE£\
MACHINE.£\
VOUS ETES MORt\
IL FAUDRAIT PEUT ETRE OUVRIR LA \
FENETRE\
TANT PIS.ON A ESSAYE\
BRAVO,QUEL TRAIT DE GENIE\
UNE TRAPPE SOUVRE SOUS VOS£\
PIEDS.VOUS ETES MORT\
SAGE PRECAUTION\
CEST DU POISON.VOUS ETES MORT\
VOUS APPRENEZ A PILOTER UNE£\
SOUCOUPE EN 1 LECOn\
CA NE SE PILOTE PAS COMME Ca\
CEST DE LACIDE.£VOUS ETES MORT\
IL Y A DE LEAU.VOUS VOUS NOYEz\
OUF,VOUS VOUS RETROUVEZ DEHORS.\
SAIN ET SAUF..\
CA MARCHE...MAIS IL NY AVAIT£\
PAS ASSEZ DE CARBURANT\
MAIS,VOUS ETES TOUT BLEU£\
CE DOIT ETRE LES PILLULEs\
ET IRRADIE.VOUS MOUREZ AU BOUT£\
DE QUELQUES JOURs"
4315 PRINT
4320 RETURN
### E NN : ACTIVE LE POINTEUR NN
4400 LET S(N)=1
4410 RETURN
### F NN : DESACTIVE LE POINTEUR NN
4500 LET S(N)=0
4510 RETURN
### G NNMM : FIXE LE COMPTEUR (-) NN A MM
4600 LET C(N)=VAL (E$(E+3 TO E+4))
4610 LET E=E+2
4620 RETURN
### H NN : INVERSE LES LIGNES NN ET NN+1 DANS LE TABEAU OBJET
4700 LET X=O(N)
4710 LET O(N)=O(N+1)
4720 LET O(N+1)=X
4730 RETURN
### I NN : POSE OBJET NN DANS LA SALLE EN COURS
4800 LET O(N)=SALLE
4810 RETURN
### J NN : MET LE NO DE SALLE CONTENANT L OBJET NN A 0
4900 IF O(N)<0 THEN LET S(1)=S(1)-1
4910 LET O(N)=0
4920 RETURN
### K NN : FIXE LE NO DE SALLE EN COURS A LA VALEUR NN
5000 LET SALLE=N
5010 RETURN
### L : AFFICHE D ACCORD ET ATTEND
5100 PRINT "DÀACCORD."
### M : ATTEND UNE NOUVELLE COMMANDE MAIS RESANNE LE TABLEAU DES ACTIONS
5200 LET BREAK=1000
5210 RETURN
### N : ATTEND UNE NOUVELLE COMMANDE
5300 LET BREAK=1100
5310 RETURN
### O : AFFICHE LA DESCRIPTION DE LA SALLE EN COURS
5400 LET BREAK=100
5410 RETURN
### P : ETES VOUS SURE ? >>> STOP
5500 PRINT "ETES VOUS SUR ?";
5510 INPUT W$
5520 PRINT W$
5530 IF CHR$ CODE W$<>"O" THEN RETURN
### Q : STOP
5600 GOTO 9999
### R : INVENTAIRE
### AFFICHE LA LISTE DES OBJETS TRANSPORTES
###
5700 PRINT
5710 PRINT "VOUS TENEZ:"
5720 LET F=1
5730 FOR X=1 TO O
5740 IF O(X)>=0 THEN GOTO 5770
5750 PRINT " ";O$(X)
5760 LET F=0
5770 NEXT X
5780 IF F THEN PRINT ,"RIEN."
5790 LET BREAK=100
5795 RETURN
### S PRENDRE UN OBJET
5800 IF S(1)<5 THEN GOTO 4140
5810 PRINT "VOUS NE POUVEZ PORTER PLUS"
5820 LET BREAK=100
5830 RETURN
5840 IF O(N)=-1 THEN GOTO 4180
5850 LET O(N)=-1
5860 LET S(1)=S(1)+1
5870 RETURN
5880 PRINT "VOUS LÀAVEZ DEJA"
5890 GOTO 4120
6000 REM ANALYSE LE MOT
6010 DIM W$(4)
6015 LET P$(W)="00"
6020 GOSUB 6600
6025 IF FIN THEN RETURN
6030 FOR Q=1 TO 4
6040 LET W$(Q)=Y$(Y)
6050 GOSUB 6500
6060 IF FIN THEN GOTO 6100
6070 NEXT Q
6080 GOSUB 6500
6090 IF NOT FIN THEN GOTO 6080
6100 IF W$=" " THEN RETURN
6110 FOR Q=1 TO V
6120 IF W$=V$(Q)(3 TO) THEN GOTO 6200
6130 NEXT Q
6140 RETURN
6200 LET P$(W)=V$(Q)(TO 2)
6210 RETURN
6500 LET Y=Y+1
6510 LET FIN=(Y>LEN Y$)
6520 IF FIN THEN RETURN
6530 LET FIN=(Y$(Y)=" ")
6540 RETURN
6600 LET Y=Y+1
6610 LET FIN=(Y>LEN Y$)
6620 IF FIN THEN RETURN
6630 IF Y$(Y)=" " THEN GOTO 6600
6640 RETURN
8699 LET V=73
8700 DIM V$(73,6)
8799 LET R=18
8800 DIM M$(18,14)
8819 LET O=20
8899 DIM Q(20)
8900 DIM O$(21,16)
8950 DIM Q(20)
8980 LET C=13
8981 LET CP=0
9000 DIM C$(13,21)
9014 LET A=92
9100 DIM A$(92,31)
9193 RETURN
9997 REM
9998 REM TAPEZ GOTO 10 POUR REJOUER.
9999 LIST 9997