"Monstres & Merveilles" for Sharp PC-1500
 Hebdogiciel, Shift Editions.
Author : M. LAURENT
Published in Hebdogiciel #52 (October 1984).
BASIC program - 5132 bytes.

CLOAD "MONSTRES & MERVE"
RUN

Monsters & Marvels : A small Role Playing Game !

Commands:
1st and 2nd parts of the game:
  C : combat
  F : flee
  cursor up : throw arrow
  SPACE : grab health potion (be quick)

Last part of the game:
  Q : left
  P : right

----- BASIC program -----------------------------------------
1 "MONSTRES & MERVEILLES"
2 "Hebdogiciel no 52"
4 CLEAR :RANDOM : GOTO 10
5 T=1E4*TIME :CURSOR 23:IF T>60-S THEN 1900
6 PRINT "/";STR$ T:RETURN 
10 WAIT 25:PRINT "Des monstres et merveilles"
20 DIM C$(3),D$(3)*26,F$(4)*18,M$(5),H$(2)*22,N$(9)*14,J$(1)*20,B$(1),S$(0)*28
25 DIM X$(1)*6,Y$(1)*6,G$(24)*3
31 DATA "02446A1F634000","0008486A1F634000","20506A1F634000"
32 DATA "7D3B15601C3F7F"
36 DATA "000030402C5E5F56450A020000","30402C5E5F56450A060C14342A"
37 DATA "30402C5E5F56450A060C12","007F4F3F532120293A757D7F"
41 DATA "02000008486A1F6340","020000085C6A1F6340"
42 DATA "0200081C486A1F6340","02081408486A1F6340"
43 DATA "0A140008486A1F6340"
47 DATA "00084A7F03000000","486A1F2360"
49 DATA "0000037F4A08","60231F6A48","00084B7F02","10387E7E3810"
51 DATA "437C7F7C7F7C4728100804","437C7F7C7F7C43"
52 DATA "0010080408102010080C08"
54 DATA "412E363A41","7F3D003F7F","3D1E2E3639","3E3632344E","676B6D006F"
55 DATA "583A3A3A46","433536364F","7E7E067A7C","4936363649","7936365661"
60 FOR K=0 TO 3:READ C$(K):NEXT K:FOR K=0 TO 3:READ D$(K):NEXT K:FOR K=0 TO 4:READ F$(K):NEXT K
75 FOR K=0 TO 5:READ M$(K):NEXT K:READ H$(0),H$(1),H$(2):FOR K=0 TO 9:READ A$:N$(K)="7F"+A$+"7F":NEXT K
80 BEEP 2:PAUSE " Preux Chevalier...":WAIT 0:PRINT "Quelle sera la difficulte?"
85 IF VAL INKEY$ =0 THEN 85
90 O=VAL INKEY$ -3:GPRINT H$(0)
95 FOR K=1 TO 6:S$(0)=S$(0)+"0000":NEXT K
105 POKE &764E,17
110 U=122,V=30,N=9,Y=3,S=[5D]
120 CURSOR 21:PRINT V;"/";STR$ N:GCURSOR U:GPRINT M$(0)
140 R=RND 100:IF R<50+O*2 THEN 400
150 R=RND 100:IF R<50+O*3 THEN 630
155 IF F2 THEN 400
160 BEEP 1,200,50
170 WAIT 25:GCURSOR U:BEEP 1,7,200:GPRINT M$(4):WAIT 10:GCURSOR U:GPRINT M$(0)
175 WAIT 10
180 FOR K=U TO U-10 STEP -2
190 GCURSOR K:GPRINT M$(1)
195 BEEP 1,2,5
200 GCURSOR K-2:GPRINT M$(0)
210 NEXT K
220 U=U-12
225 N=N-1: GOSUB "km"
226 IF U=14 THEN 1250
230  GOTO 140
250 J=J+1:GCURSOR 39+J*11
260 GPRINT RIGHT$ (D$(3),22):IF S=X THEN 1500
270  GOTO 140
400 BEEP 2,50
410 Z=U-13,A=U-2,B=U-15,C=U-3
415 WAIT 0
420 P=RND 9
425  GOSUB "p"
430  GOSUB 780
432 WAIT 25
433 IF HLET H=0: GOTO 540
435 FOR K=1 TO 50-O*2:A$=INKEY$ :IF A$="" THEN 465
440 IF A$="C" THEN 470
450 IF A$="F" THEN 850
460 IF ASC A$=11 THEN 800
465 NEXT K: GOTO 530
470 F=0,R=RND 100:IF R<25LET F=1
480 GCURSOR A:GPRINT C$(1)
490 IF FGCURSOR B:WAIT 10:BEEP 1,2,10:GPRINT D$(0):WAIT 25
500 GCURSOR A:GPRINT C$(2)
510 IF F THEN 530
515 BEEP 1,15,250
520 GCURSOR Z:GPRINT D$(3)
522 R=RND 6,P=P-R:IF P<0LET P=0
524  GOSUB "p"
525 IF P=0 THEN 700
526 WAIT 25
530  GOSUB 780
540 GCURSOR B:GPRINT D$(0)
550 T=1,R=RND 100:IF R<33-O*2LET T=2
560 GCURSOR Z:GPRINT D$(T)
570 IF T=2 THEN 470
575 BEEP 1,1,1500
580 GCURSOR U:GPRINT C$(3)
590 R=RND 6,V=V-R
600  GOSUB "v"
620  GOTO 430
630 BEEP 4,2,200
636 IF F2GCURSOR U-2:GPRINT "0000"+M$(0)
640 WAIT 4
645 FOR K=U-15 TO U-10:GCURSOR K:BEEP 1,0,500:GPRINT H$(2):NEXT K
650 FOR K=10 TO 0 STEP -1:BEEP 1,K,15:NEXT K
655 GCURSOR U-11:GPRINT S$(0)
660 V=V-1,R=1: GOSUB "v":IF F2 THEN 140
670  GOTO 175
700 BEEP 3,75,50
701 WAIT 8:FOR K=1 TO 5:GCURSOR Z:GPRINT S$(0):GCURSOR Z:GPRINT D$(3):NEXT K
704 WAIT 0:GCURSOR Z:GPRINT S$(0)
705 WAIT 8:X=X+1
706 R=RND 100:IF R>20 THEN 710
707 FOR K=1 TO 5:GCURSOR U-9:BEEP 1,2*K,17:GPRINT M$(5):IF INKEY$ =" " THEN 709
708 GCURSOR U-14:GPRINT S$(0):NEXT K: GOTO 710
709 V=V+7: GOSUB "v":GCURSOR U-14:GPRINT S$(0)
710 WAIT 10:IF F2 THEN 250
715 GCURSOR U-1:GPRINT "00"+M$(0): GOSUB "km": GOTO 175
750 V=105:BEEP 2,V,300:BEEP 1,V,90:BEEP 1,V,270:BEEP 1,82,300:BEEP 1,93,90:BEEP 1,93,270:BEEP 1,V,90
755 BEEP 1,V,270:BEEP 1,112,90:BEEP 1,V,540
760 CURSOR 20:PRINT "Adieu!"
770 POKE &764E,65:WAIT :PRINT :END
780 GCURSOR Z:GPRINT D$(0);C$(0):RETURN 
800 IF Y=0BEEP 3: GOTO 530
820 Y=Y-1:WAIT 5:FOR K=0 TO 4:GCURSOR C:GPRINT F$(K):NEXT K
830 POKE &764E,(2^(7-Y))*(Y<>0)+1: GOTO 700
850 IF F2 THEN 530
860 GCURSOR U:GPRINT M$(2)
865 WAIT 5
866 D=U+24:IF D>122LET D=122
870 FOR K=U+2 TO D STEP 2:GCURSOR K:GPRINT M$(3):GCURSOR K:GPRINT M$(2):NEXT K
880 U=D,N=N+2:IF U=122LET N=9
890 H=0,R=RND 100:IF R<33+O*2LET H=1
900 GCURSOR U:GPRINT M$(0): GOSUB "km"
910 WAIT 15:BEEP 2,150,25
920 GCURSOR Z:GPRINT S$(0)
930 IF H=0 THEN 140
935 WAIT 5
940 BEEP 1,2,1000:FOR K=Z TO U-13:GCURSOR K:GPRINT D$(0):NEXT K
960  GOTO 410
970 "S"POKE &764E,65:END
1000 "p"WAIT 0:GCURSOR 149:GPRINT N$(P):RETURN 
1100 "v"E=STATUS 4:WAIT 5:F=1:IF E=709LET F=-F,R=-7
1101 FOR I=V+R TO V STEP -F:CURSOR 22-W:IF I<0 THEN 750
1102 BEEP 1,I,15
1105 IF I<10PRINT USING "*#";I: GOTO 1120
1110 PRINT STR$ I
1120 NEXT I:WAIT 0:IF V=0 THEN 750
1130 RETURN 
1200 "km"WAIT 0:FOR K=1 TO 3:CURSOR 24:PRINT "/ ":CURSOR 25:PRINT STR$ N:IF N=0BEEP 1,5,1500
1210 NEXT K
1220 RETURN 
1250 CURSOR 6:PAUSE "Ciel ! le Chateau...":F2=1,S=RND 7:WAIT 0
1290 CURSOR 5:PRINT USING ;"..garde par";S;"monstre";:IF S>1PRINT "s"
1300 IF S=1PRINT "!"
1310 WAIT 15:FOR K=1 TO S:CURSOR 17:PRINT " ":CURSOR 17:BEEP 1,6:PRINT STR$ S:NEXT K
1320 WAIT 2:FOR K=2 TO 21:CURSOR K:PRINT " ":NEXT K
1322 CURSOR 21:PRINT USING "*##";V;"/ "
1326 WAIT 5:FOR K=50 TO 49+11*S STEP 11
1327 GCURSOR K:GPRINT D$(0):NEXT K
1330 S=S+X:FOR K=0 TO 33:GCURSOR K:GPRINT "00"+H$(0):NEXT K
1340 GCURSOR 0:GPRINT H$(1):U=24:FOR K=0 TO 10:BEEP 1,K,15:NEXT K
1360 GCURSOR U:GPRINT M$(0)
1370  GOTO 140
1500 PAUSE :FOR K=1 TO 4:GCURSOR 16:WAIT 5:GPRINT S$(0)+"0000":WAIT 25:GCURSOR 16:GPRINT "7C46454D554D45467C"
1501 BEEP 2,85,25:NEXT K:W=1,R=0,O=O+3
1505 FOR K=16 TO 24:G$(K-8)=STR$ POINT K:NEXT K
1510 WAIT 2:FOR K=0 TO 12:GCURSOR 8+K:GPRINT &7F:BEEP 1,1,5:GCURSOR 32-K:GPRINT &7F:NEXT K
1520 WAIT 0:FOR K=0 TO 55:GCURSOR K+45:GPRINT 0:GCURSOR 155-K:GPRINT 0:NEXT K
1530  GOSUB "v":CURSOR 23:PRINT "/0"
1531 J$(0)="08380808082A2A1C0808",J$(1)="08081C2A2A0808083808"
1532 B$(0)="486A1F6340000000"
1535 B$(1)="00000040631F6A48",X$(1)="000000",Y$(0)=X$(1),Z=60,Y=79
1550 GCURSOR Z:GPRINT J$(0):GCURSOR Z+33:GPRINT J$(1)
1560 GCURSOR Y:GPRINT B$(0)
1570 IF INKEY$ ="" THEN 1570
1575 D=0,L=0,TIME =0
1580 A=RND 9+O/2
1600 FOR K=1 TO A
1610 IF D=0 AND Z>45LET Z=Z-3: GOTO 1630
1620 IF D=1 AND Z<78LET Z=Z+3: GOTO 1630
1625  GOTO 1760
1630 GCURSOR Z:GPRINT X$(D)+J$(0)+Y$(D):GCURSOR Z+33:GPRINT X$(D)+J$(1)+Y$(D)
1640 IF (POINT (Z+13)+POINT (Z+32))>0 THEN 1800
1670 W$=INKEY$ :IF W$="" THEN 1750
1680 IF W$<>"Q" THEN 1710
1690 IF L=1LET Y=Y+3
1700 Y=Y-3,L=0: GOTO 1740
1710 IF L=0LET Y=Y-3
1720 Y=Y+3,L=1
1740 GCURSOR Y:GPRINT B$(L)
1745 IF POINT (Z+13)<>0 OR POINT (Z+32)<>0 THEN 1800
1747  GOSUB 5
1750 NEXT K
1760 IF D=0LET D=1,Z=Z-3: GOTO 1580
1770 D=0,Z=Z+3: GOTO 1580
1800 BEEP 2,20,75:R=O,V=V-O: GOSUB "v":GCURSOR Y+3*L:GPRINT "0000000000"
1810 IF D=0LET Y=Y-6
1820 IF D=1LET Y=Y+6
1830 GCURSOR Y:GPRINT B$(L): GOSUB 5: GOTO 1750
1900 BEEP 5,4,500:WAIT 25:GCURSOR Z+D*3:GPRINT S$(0):GCURSOR Z+33+D*3:GPRINT S$(0):GCURSOR Y:GPRINT S$(0)
1905 GCURSOR 0:GPRINT LEFT$ (S$(0),16):GCURSOR 33:GPRINT S$(0)
1910 GCURSOR 33:GPRINT M$(0)
1920 FOR K=0 TO 12:GCURSOR 20-K:WAIT 0:GPRINT VAL G$(12-K):GCURSOR 20+K:WAIT 5:GPRINT VAL G$(12+K):NEXT K:WAIT 110
1940 CURSOR 15:PRINT "Chevalier, ":CURSOR 11:PRINT "Tu as aneanti ":BEEP 2:CURSOR 11:PRINT USING ;S;" Monstres.. "
1945 CURSOR 7:PRINT "Le Coffre est a toi":POKE &764E,65
1950 WAIT 50:CURSOR 7:PRINT "   Vive le Roy !   ":BEEP 3:GCURSOR 34:GPRINT "084A7F5728502040":WAIT :PRINT :END
