[Type_ins] The Valley of adventure: Poster Programs 1

Any discussions related to the creation of new hardware or software for the ZX80 or ZX81
User avatar
XavSnap
Posts: 1940
Joined: Sat May 10, 2008 4:23 pm
Location: 'Zx81 France' Fb group.

Re: A 15.999K Adventure game: The Valley of adventure.

Post by XavSnap »

Thank's Greg !

It the worth type-in program ever typed by a French guy...
I have typed more than thousand programs, never more five hours to debug time per programs !

Code: Select all

# *** THE VALLEY OF ADVENTURE ***
# *******************************
#  (C) ZX81 POSTER PROGRAM
#      ZX81 + 16K RAMPAK.
#
#        TYPED BY XAVSNAP
#            AND YOU.
# 
#
# ERRORS : 
#          LINE 2   : OFFSET DECAY.
#                     (23 REPEATED TWICE)=>ORIGINAL 
#          LINE 5   : OK (END OF LINE=BUFFER)
#          LINE 490 : S$=??? => INIT TO " " 
#
#
# RESERVED REM 36 BYTES.
#1 REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
     1  REM [HEX:\
0E,06,2A,0C,40,06,20,23,\
71,10,FC,23,23,11,1F,00,\
06,0D,71,19,71,23,23,10,\
F9,11,DF,FF,19,06,1E,23,\
71,10,FC,C9 ]
#
#
# RESERVED REM 41 BYTES.(REAL LENGHT 41 <>42)
#2 REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
     2  REM [HEX:\
3E,80,2A,0C,40,23,06,16,\
23,77,10,FC,06,0C,11,0C,\
00,ED,5A,77,11,15,00,ED,\
5A,77,10,F2,11,0C,00,ED,\
5A,06,16,77,23,10,FC,C9,\
3D ]
#
#
# RESERVED REM 240 BYTES. (<>239)
#3 REM XXXXXXXXXXXXXXXXXXXXXXXXXXXIT MISSESXXXXXXXXXXXXYOU AVOID THE BLOWXXXXXXXXXXXXIT HESITATESXXXXXXXXXXXXIT STRIKES YOUR HEADXXXXXXXXXXXXXXXXYOUR CHEST IS STRUCKXXXXXXXXXXXXXXXXYOUR ARM IS HITXXXXXXXXXXXXA BODY BLOWXXXXXXXXYOUR LEG IS HITXXXXX
     3  REM [HEX:\
E1,7E,23,E5,FE,FF,C8,D7,\
18,F6,06,0A,3A,34,40,90,\
30,FD,80,3C,FE,01,20,11,\
CD,DB,40,2E,39,00,32,2E,\
38,38,2A,38,FF,01,00,00,\
C9,FE,02,20,1A,CD,DB,40,\
3E,34,3A,00,26,3B,34,2E,\
29,00,39,2D,2A,00,27,31,\
34,3C,FF,01,00,00,C9,FE,\
03,20,14,CD,DB,40,2E,39,\
00,2D,2A,38,2E,39,26,39,\
2A,38,FF,01,00,00,C9,FE,\
04,20,1C,CD,DB,40,2E,39,\
00,38,39,37,2E,30,2A,38,\
00,3E,34,3A,37,00,2D,2A,\
26,29,FF,01,03,00,C9,FE,\
05,28,04,FE,06,20,1C,CD,\
DB,40,3E,34,3A,37,00,28,\
2D,2A,38,39,00,2E,38,00,\
38,39,37,3A,28,30,FF,01,\
02,00,C9,FE,07,28,04,FE,\
08,20,17,CD,DB,40,3E,34,\
3A,37,00,26,37,32,00,2E,\
38,00,2D,2E,39,FF,01,01,\
00,C9,FE,09,20,13,CD,DB,\
40,26,00,27,34,29,3E,00,\
27,31,34,3C,FF,01,02,00,\
C9,CD,DB,40,3E,34,3A,37,\
00,31,2A,2C,00,2E,38,00,\
2D,2E,39,FF,01,01,00,C9,\
 ]
#
#
# RESERVED REM 98 BYTES (<>103)
#4 REM XXXXXXXXXXXGOLD =XXXXXXXCOMBAT STR=      SKILL=XXXXXXXPSI.POWER =      TURNS=XXXXXXXSTAMINA   =XXX
     4  REM [HEX:\
06,09,3E,00,D7,10,FD,C9,\
CD,DB,40,2C,34,31,29,00,\
14,FF,CD,D1,41,CD,DB,40,\
28,34,32,27,26,39,00,38,\
39,37,14,00,00,00,00,00,\
00,38,30,2E,31,31,14,FF,\
CD,D1,41,CD,DB,40,35,38,\
2E,1B,35,34,3C,2A,37,00,\
14,00,00,00,00,00,00,39,\
3A,37,33,38,14,FF,CD,D1,\
41,CD,DB,40,38,39,26,32,\
2E,33,26,00,00,00,14,FF,\
C9,00 ]
#
#
# RESERVED REM 109 BYTES
#5 REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
     5  REM [HEX:\
01,01,01,05,07,05,01,02,\
08,05,04,03,03,06,02,03,\
01,01,05,04,07,08,01,3A,\
34,40,90,30,FD,80,3C,C9,\
06,64,CD,50,42,06,32,90,\
38,04,06,11,18,02,06,09,\
CD,50,42,4F,FE,0F,28,07,\
FE,10,28,0E,06,00,C9,3A,\
4F,42,06,04,90,38,D9,06,\
00,C9,06,64,CD,50,42,06,\
32,90,38,CC,06,00,C9,CD,\
78,42,21,38,42,09,7D,BB,\
C8,15,28,ED,23,18,F7 ]
#
#
#
# XAVSNAP --->

    10 LET V=PEEK 16396+256*PEEK 16397
    15 IF J$="n" THEN GOTO 50
    20 PRINT"cONTINUE OR nEW GAME?"
    30 GOSUB 600
    40 IF G$="C" THEN GOTO 240
    50 LET EX=K+H
    60 DIM T(B)
    70 LET TS=O
    75 LET TN=O
#    80 LET TM=B 
    85 LET CF=O
   115 LET G(H)=O
   116 LET S(H)=O
   120 PRINT ,,"HWO DARES THE VALLEY?"
   123 INPUT J$
   126 CLS
   130 PRINT "CHARACTER TYPE",,,,"WIZARD...(1)",,"THINKER..(2)",,"BARBARIAN(3)","KEY 1-5","WARRIOR..(4)",,"CLERIC...(5)",,,,"        CHOOSE CAREFULLY"
   140 GOSUB 600
   150 IF G$<"1" OR G$>"5" THEN GOTO 140
   155 LET A=VAL(G$)
   160 GOSUB 160+A*10
   162 PRINT AT H+A,CODE"@0A";CHR$ (A+CODE "@9C")
   165 GOTO 230

   168 PRINT "MAY THY GOD PROTECT THREE...."
#
   170 LET P$="WIZARD"
   174 LET P1=H1
   175 LET PS=CODE"0"
   176 LET C1=H/H1
   178 LET CS=R+H 
   179 RETURN
#
   180 LET P$="THINKER"
   184 LET P1=B/H1
   185 LET C1=B/K
   186 LET CS=R+B
   188 LET PS=CODE","
   189 RETURN
#
   190 LET P$="BARBARIAN"
   194 LET P1=H/H1
   195 LET C1=H1
   196 LET CS=CODE"0"
   198 LET PS=R+H
   199 RETURN
#
   200 LET P$="WARRIOR"
   204 LET P1=H
   205 LET C1=H+H/K
   206 LET CS=CODE","
   208 LET PS=R+B
   209 RETURN
#
   210 LET P$="CLERIC"
   214 LET C1=H
   215 LET CS=R-H
   216 LET P1=H+H/K
   218 LET PS=CS
   219 RETURN
#
   220 LET P$="DOLT"
   224 LET P1=H
   225 LET C1=H
   226 LET CS=R-H
   228 LET PS=CS
   229 RETURN
   
#
   235 LET C=CODE"’"
   236 LET RX=77-INT(H1*P1**2.5)
   237 LET RY=INT(42*(P1*H)**LN(P1**3.7))+75
   238 LET RZ=125-INT(INT(P1)*12.5)
   250 POKE 16418,O
   275 GOSUB 5000
   285 GOSUB 380
   290 GOTO 2000
   300 LET TV=O
   303 LET G$=""
   305 FOR I=H TO R*H1
   310 IF INKEY$="" THEN GOTO 330
   315 LET G$=INKEY$
   320 GOTO 350
   330 NEXT I
   340 LET TV=H
   350 GOSUB 490
   355 RETURN
   360 FOR I=H TO K+K
   365 NEXT I
   370 RETURN
   380 PRINT AT R-K-H,O;
   385 LET PZ=USR 16857
   390 IF CS>RX THEN LET CS=RX
   395 IF PS<K+B THEN LET PS=K+B
   400 IF PS>RY THEN LET PS=RY
   410 IF C>RZ THEN LET C=RZ
   420 PRINT AT R-B-K,B+B;J$;",THE ";P$
   425 IF T(H)=H THEN PRINT "AMULET+";T(2)
   430 PRINT AT R-K-H,O;TAB B+B;TS,TAB(R+B);CS;" ",TAB B+B;EX,TAB R+B;PS;" ",TAB B+B;TN,TAB R+B;C;" ";
   460 IF CF=H THEN GOTO 480
   465 PRINT AT R-H,O;S$
   475 GOTO 490
   480 PRINT AT R-H,O;K$;" STR.=";MS;";";N;" "
   490 PRINT AT R,O;S$;AT R,O;
   499 RETURN

   500 IF T(H1)<>B+B THEN GOTO 520
   505 PRINT AT R,O;"THE AMULET PROTECTS YOU"
   510 GOTO 60
   520 GOSUB 550
   525 GOSUB 490
   530 LET G$="«go«meet«your«god«–"
   533 LET F$=G$(H)
   535 LET D$=G$(H1 TO )
   536 LET G$=D$+F$
   537 PRINT AT R,K;G$
   540 GOTO 533
   550 LET XR=INT(.067*(EX+TS/B)**(H/H1)+LN(EX/((TN+H)**(B/H1)))) 
   560 PRINT AT R-H,O;S$;AT R-H,K;"your«rating«is ";XR
   570 RETURN
   600 LET G$=INKEY$


   605 IF G$="" THEN GOTO 600
   610 RETURN
#
   650 PRINT AT R,O;"SAFE CASTLE:QUIT(Y/N)"
   660 IF CS<R+H1 THEN LET CS=R+H1
   670 POKE M+V,PK
   680 LET PK=PEEK (W+V)
   690 LET M=W
   700 POKE M+V,QX
   710 GOSUB 550
   720 GOSUB 600
   730 IF G$="Y" THEN GOTO 780
   740 LET C=CODE"’"
   750 PRINT AT R,O;"REFRESHED AND READY  "
   760 GOSUB 390
   770 GOTO 2020
#
   780 CLS
   782 PRINT "SAVE GAME TO SAVE CHARACTER",,,"«goto« ———«",,,,,,"GOTO 10 TO PLAY AGAIN"
   788 STOP
   800 GOSUB 490
   805 PRINT "SPELL NO.˜ OR ™"
   810 GOSUB 300
   815 IF TV=H THEN GOTO 3600
   820 IF G$>"2" THEN GOTO 880
   825 GOSUB 900+(80 AND G$="2")
   830 GOSUB 390
   833 IF C<=O THEN GOTO 3660
   835 GOTO 830+(10*F)
   840 GOTO 2020
   850 GOTO 3830   
#
#
   860 GOTO 3575
   870 PRINT"IT IS BEYOND YOUR POWER"
   875 GOTO 3830
   880 PRINT"NO SUCH SPELL"
   885 GOTO 3830
   890 PRINT"THE SPELL FAILS"
   895 GOTO 3830
#
   900 GOTO 928
   902 PRINT"SLEEP YE BEAST"
   906 IF RND>H/H1 THEN GOTO 918
   907 GOSUB 430
   908 PRINT"IT COLLAPSES"
   910 LET EX=INT(EX+U/H1)
   912 LET CF=O
   914 LET F=H
   916 RETURN
#
   918 LET F=B+B
   920 RETURN
#
   922 IF C<=21 THEN GOTO 966
   924 LET C=C-(R+B)
   926 GOTO 982
#
   928 IF C<=6 THEN GOTO 966
   930 LET C=C-K-H
   932 GOTO 902
   940 PRINT"MISSED IT.."
   942 GOTO 3830
   950 IF MS<=O THEN LET MS=O
   952 IF N<=O THEN LET N=O
   954 GOSUB 410
   956 GOTO 991
   966 LET F=K
   968 RETURN
   970 LET F=H1
   972 RETURN
#
   980 IF PS<55 OR EX<2000 THEN GOTO 966
   981 GOTO 922
#
   982 PRINT"BURN YE DAMNED BEAST...."
   983 IF RND<H/B THEN GOTO 918
   984 LET D=INT((CS+PS*RND)-(10*N*RND))
   985 IF D<=O THEN GOTO 982
   986 IF MS=O THEN LET N=N-D
   987 IF MS=O THEN GOTO 990
   988 LET MS=MS-D
   989 IF D>10 THEN LET N=INT(N-(D/B))
   990 GOTO 950
#
   991 PRINT"YOU INFLICT ";D;" DAMAGE"
   992 IF MS+N>O THEN GOTO 970
   993 GOSUB 410
   994 PRINT"IT EXPIRES IN FLAMES"
   995 LET EX=EX+U
   996 LET CF=O
   997 GOTO 914
#
   1000 LET F=INT(H+RND*6)
   1005 IF F=H1 OR F=K THEN LET F=F+H
   1010 GOSUB 1020+(20*F)
   1025 GOSUB 390
   1030 GOTO 2020
#
   1040 PRINT"CIRCLE OF EVIL"
   1045 LET CS=CS+INT((FL+H)/H1)
   1050 LET PS=PS-INT((FL+H)/H1)
   1055 LET C=C-R+B
   1060 IF C<=O THEN GOTO 500
   1070 RETURN
#
   1080 PRINT"A HOARD OF GOLD"
   1090 LET TS=TS+INT(FL*RND*100+100)
   1100 RETURN
#

   1120 PRINT"A MAGICAL AREA"
   1125 GOTO 1150
#
   1140 PRINT"AN ANCIENT POWER AREA"
   1150 LET PS=PS+H+H+INT(FL*P1)
   1160 LET CS=CS+H+INT(FL*C1)
   1170 LET C=C+R
   1180 RETURN
#
   1505 POKE M+V,O
   1506 LET M=W
   1507 LET PK=O
   1508 POKE M+V,52
   1510 LET RN=RND
   1520 GOSUB 490
   1535 IF S=B+B AND RN>.95 AND T(H1)=S AND T(B)=O THEN GOTO 1580 
   1545 IF S=K+H AND RN>.85 AND T(H)=O THEN GOTO 1590
   1550 IF S=K AND RN>.7 AND T(H)=H AND T(H1)<B+B AND FL>T(H1) THEN GOTO 1600
   1555 IF RN>.43 THEN PRINT "A WORTHLESS STONE"
   1560 IF RN>.43 THEN GOTO 1650
   1570 PRINT"A PRECIOUS STONE";
   1575 GOTO 1630
#
   1580 LET T(B)=H
   1583 PRINT"the«helm«of«evanna"
   1585 GOTO 1630
#
   1590 LET T(H)=H
   1593 PRINT"AMULET OF ALARIAN."
   1595 GOTO 1630
#
   1600 PRINT"AN AMULET STONE";
   1610 IF RN>.85 THEN PRINT" WRONG ONE"
   1615 IF RN>.85 THEN GOTO 1640
   1620 PRINT" IT FITS."
   1625 LET T(H1)=T(H1)+H
   1630 LET TS=TS+100*(T(H)+T(H1)+T(B)+FL)
   1660 GOTO 2370
#
   2000 LET M=W
   2010 LET PK=PEEK(W+V)
   2015 POKE M+V,CODE"O"
   2020 LET C=C+K+B+B
   2024 GOSUB 490
   2025 IF PK=CODE "." THEN GOTO 2040
   2030 PRINT "WHICH DIRECTION ?"
   2035 GOTO 2050
   2040 PRINT "ON THE PATH: WHICH WAY ?"
   2050 GOSUB 600
   2055 IF G$<"1" OR G$>"9" THEN GOTO 2050
   2060 LET A=VAL G$
   2065 IF (G$="1" OR G$="4" OR G$="7") AND PEEK(W+V-1)=118 THEN GOTO 2050
   2070 IF A>B THEN LET A=A-B
   2075 IF A>B THEN GOTO 2070
   2080 LET W=M+A-H1-33*(INT((VAL(G$)-H)/B)-H)
   2090 LET TN=TN+H
   2095 GOSUB 490
   2100 LET QX=CODE"O"
   2110 LET Q=PEEK(W+V)
   2120 IF Q=O OR Q=K+K+H THEN GOTO 2250
   2130 IF Q=CODE"" THEN GOTO 650
   2135 IF S>B AND Q=CODE"«" THEN LET Q=B+B
   2140 IF Q=B+B OR Q=K+K OR Q=CODE"T" THEN LET TN=TN-H
   2145 IF Q=B+B OR Q=K+K OR Q=CODE"T" THEN GOTO 2030
   2150 IF Q=CODE"W" OR Q=CODE"t" OR Q=CODE"S" OR Q=CODE"H" THEN GOTO 4500
   2160 IF Q=CODE"X" OR Q=CODE"³" THEN GOTO 4600
   2180 IF Q=R-B THEN GOTO 6000
   2185 IF Q=CODE"«" OR (G$="5" AND PK=CODE"«") THEN LET QX=CODE"o"
   2190 IF Q=CODE"«" OR (G$="5" AND PK=CODE"«") THEN LET C=C-R+B
   2200 IF C<=O THEN GOTO 500
   2260 POKE M+V,PK
   2265 LET PK=PEEK(W+V)
   2270 LET M=W
   2280 POKE M+V,QX
   2295 IF PK=CODE"." THEN GOTO 2350
   2300 LET F=RND
   2305 GOSUB 490
   2310 IF F<H/(H+K) THEN GOTO 3000
   2320 IF F>B/K THEN GOTO 1000
#
  2350 PRINT"THERES NOTHING HERE"
  2370 GOSUB 410
  2380 GOTO 2020
  3000 PRINT "BEWARE......."
  3010 LET CF=H
  3020 IF Q=CODE"«" OR PK=CODE"«" THEN GOTO 3050
  3030 POKE 16975,FL
  3040 LET F=USR 16985
  3045 GOTO 3051

  3050 LET F=INT(R-K-H+RND*H1)
  3051 LET CX=H
  3052 FOR I=H TO F-H
  3053 LET CX=CX+CODE M$(CX)
  3054 NEXT I
  3110 LET K$=M$(CX+K TO CX+CODE M$(CX)-H) 
  3115 LET MS=CODE M$(CX+H)
  3120 IF MS=O THEN GOTO 3140
  3130 LET MS=INT((CS/B)+MS*FL**.2/(RND+H))
  3140 LET N=CODE M$(CX+H1)
  3145 IF N=O THEN GOTO 3160
  3150 LET N=INT(N*FL**.2/(RND+H))
  3160 LET U=INT((F+H)*(FL**(B/H1)))
  3180 PRINT AT R,O;"AN EVIL ";K$
  3190 LET E=39*LN(EX)/3.14
  3195 GOSUB 480
  3500 IF RND>.6 THEN GOTO 4000
  3510 PRINT "aTTACK(hbls)/rETREAT ?"
  3520 GOSUB 300
  3530 IF G$="R" THEN GOTO 3900
  3540 IF TV=H THEN GOTO 3600
  3550 IF G$<>"A" THEN GOTO 4000
  3570 GOSUB 490
  3575 PRINT AT R,K+B;"’«strike«quickly«’"
  3580 GOSUB 300
  3590 IF TV=O THEN GOTO 3620
  3600 PRINT"TOO SLOW....TOO SLOW.."
  3610 LET HF=O
  3615 GOTO 3830
  3620 IF G$="S" THEN GOTO 800
  3640 IF MS=O THEN PRINT "YOUR SWORD IS USELESS"
  3645 IF MS=O THEN GOTO 3830
  3650 LET C=C-H
  3660 IF C<=O THEN PRINT "YOU ARE EXHAUSTED"
  3665 IF C<=O THEN GOTO 500
  3670 LET F=RND*10
  3675 LET Z=O
  3680 IF G$="H" AND (F<5 OR CS>MS*K) THEN LET Z=H1
  3690 IF G$="B" AND (F<7 OR CS>MS*K) THEN LET Z=H   
  3700 IF G$="L" AND (F<9 OR CS>MS*K) THEN LET Z=.3
  3705 IF Z<>O THEN GOTO 3730
  3710 PRINT "YOU MISSED IT"
  3720 LET HF=O
  3725 GOTO 3830
  3730 IF HF=O THEN GOTO 3740
  3732 LET D=MS+INT(RND*9)
  3734 LET HF=O
  3735 GOTO 3760
  3740 LET D=INT((((CS*50*RND)-(10*MS)+E)/100)*Z)
  3745 IF D<O THEN LET D=O
  3750 IF CS>(MS-D)*K THEN LET HF=H
  3760 LET MS=MS-D
  3765 IF MS<=O THEN LET MS=O
  3770 PRINT "A HIT ..."
  3790 IF D<>O THEN  GOTO 3600
  3792 PRINT "BUT NO DAMAGE"
  3793 LET HF=O
  3795 GOTO 3830
  3800 PRINT D;" DAMAGE"
  3802 GOSUB 390
  3805 IF MS<=O THEN GOTO 3860
  3820 IF HF=H THEN PRINT"THE ";K$;" STAGGERS..."
  3830 GOSUB 390
  3840 IF HF=H THEN GOTO 3570
  3850 GOTO 4000
#
  3860 PRINT "....KILLING THE MONSTER"
  3870 LET EX=EX+U
  3875 LET HF=O
  3876 LET CF=O
  3890 GOTO 2370
#
  3900 PRINT "KNAVISH COWARD"
  3905 LET CF=O
  3910 GOTO 2370
#
  4000 GOSUB 490
  4005 PRINT "THE CREATURE ATTACKS"
  4010 GOSUB 360
  4020 IF MS=O THEN GOTO 4300
  4030 IF MS<N AND N>B+B AND RND<H/H1 THEN GOTO 4300
  4040 LET MS=MS-H
  4045 IF MS<=O THEN GOTO 4240
  4060 GOSUB 490
  4070 LET Z=USR 16613
  4080 IF Z=O THEN GOTO 4280
  4160 LET G=INT((((MS*75*RND)-(10*CS)-E)/100)*Z)
  4164 GOSUB 360 
  4165 GOSUB 490
  4170 IF G<=O THEN LET G=O
  4175 IF G=O THEN PRINT"...SAVED BY YOUR ARMOUR"
  4177 IF G=O THEN GOTO 4280
  4180 LET C=C-G
  4190 IF G>9 THEN LET CS=INT(CS-G/6)
  4210 PRINT "YOUR TAKE ";G;" DAMAGE"
  4220 IF CS<=O OR C<=O THEN GOTO 500
  4230 GOTO 4280
  4240 PRINT AT R,O;"IN ITS DYING ATTEMPT"
  4250 LET EX=INT(EX+U/H1)
  4255 LET CF=O
  4270 GOTO 2370
  4280 GOSUB 390
  4290 GOTO 2370
  4300 PRINT AT R,O;"HURLING A LIGHTNING BOLT"
  4310 LET G=INT (((180*N*RND)-(PS+E))/100)
  4313 LET N=N-K-H
  4315 IF G>9 THEN LET N=N-INT(G/5)
  4320 GOSUB 360
  4325 GOSUB 490
  4330 IF N<=O THEN LET N=O
  4335 IF N=O THEN GOTO 4240
  4340 IF RND<H/K THEN GOTO 4410
  4350 IF G<=O THEN LET G=O
  4355 IF G=O THEN GOTO 4400
  4360 PRINT "IT STRIKES HOME"
  4370 GOSUB 390
  4380 LET C=C-G
  4385 IF G>9 THEN LET PS=INT(PS-G/K)
  4390 GOTO 4210
  4400 PRINT"YOUR PSI SHIELD PROTECTS YOU"
  4405 GOTO 4280
  4410 PRINT "MISSED YOU"
  4415 GOTO 4280
  4500 IF Q=CODE"H" AND PK=CODE"«" THEN GOTO 2020
  4510 FOR I=B TO K+K
  4520 LET N(I)=INT (K+RND*5)
  4530 IF N(I)=K+H THEN GOTO 4520
  4540 NEXT I
  4550 IF S=H THEN LET MP=H
  4560 LET P(B)=INT(R*RND+H1)
  4650 LET C=C-K-B-B
  4660 POKE M+V,O
  4670 POKE W+V,QX
  4680 IF Q=CODE"³" THEN LET S=H 
  4685 IF Q=CODE"³" THEN LET FL=H
  4690 IF Q<>CODE"X" THEN GOTO 4720
  4693 IF S=K THEN LET S=H
  4695 IF S=K THEN LET FL=H
  4700 IF S=K+H OR S=B+B THEN LET S=S-B
  4705 IF S=K+H OR S=B+B THEN LET FL=FL-K
  4710 IF S=K+H OR S=B+B THEN LET M=MW
  4715 LET XP=O
  4720 IF Q<>CODE"W" AND Q<>CODE"S" THEN GOTO 4750
  4726 IF Q=CODE"W" THEN LET S=B
  4728 IF Q=CODE"W" THEN LET FL=B
  4730 IF Q=CODE"S" THEN LET S=H1
  4732 IF Q=CODE"S" THEN LET FL=S
  4734 LET X=INT(H+5*RND)
  4740 LET Y=P(B)
  4750 IF Q=CODE"t" THEN LET S=K
  4755 IF Q=CODE"t" THEN LET FL=H1
  4760 IF Q<>CODE"H" THEN GOTO 4780
  4763 LET S=S+B
  4765 LET FL=FL+K
  4770 LET MW=M
  4780 IF FL>K+K THEN LET FL=FL-K
  4781 GOSUB 5000+\
(300 AND S=H1)+\
(310 AND S=B)+\
(500 AND S=K)+\
(510 AND S>=K+H)
  
  4793 GOSUB 380
  4795 GOTO 2000
  5000 CLS
  5001 POKE ZZ,H
  5002 POKE ZZ+H,K+H
  5003 POKE ZZ+H1,K
  5004 POKE ZZ+B,K+B
  5005 POKE ZZ+K,K+K
  5006 LET S=H
  5007 LET FL=H
  5010 POKE 16515,6
  5020 LET ZP=USR 16514
  5040 IF G(H)<>O THEN GOTO 5160
  5050 LET M=H+(33*INT(11*RND+H))
  5051 LET L=M
  5052 LET MP=M
  5053 LET W=M
  5054 LET G(H)=M
  5060 POKE M+V,149
  5070 FOR I=B TO 33
  5075 IF RND>H/H1 THEN GOTO 5090
  5080 LET L1=L+34
  5085 GOTO 5100
  5090 LET L1=L-32
  5100 IF L1<34 OR L1>396 THEN GOTO 5075
  5110 LET G(I)=L1
  5120 LET L=L1
  5130 POKE G(I)+V,27
  5140 NEXT I
  5150 POKE G(33)+V,149
  5155 GOTO 5200
  5165 POKE G(H)+V,149
  5170 FOR I=B TO 33
  5175 POKE G(I)+V,27
  5180 NEXT I
  5190 POKE G(33)+V,149
  5200 IF S(H)<>O THEN GOTO 5250
  5210 FOR I=H TO K+H
  5220 LET S(I)=33*INT(H+RND*11)+INT (H1+RND*28)
  5230 IF PEEK(S(I)+V)<>O OR PEEK(S(I)+H+V)<>O THEN GOTO 5220
  5240 NEXT I
  5250 POKE S(H)+V,60
  5255 POKE S(H)+H+V,60
  5260 POKE S(H+H)+V,60
  5265 POKE S(H+H)+H+V,60
  5270 POKE S(B)+V,56
  5275 POKE S(B)+H+V,56
  5280 POKE S(K)+V,56
  5285 POKE S(K)+V,56
  5290 POKE S(K+1)+V,185
  5292 LET M=MP
  5294 LET W=M
  5297 RETURN
  5300 POKE ZZ,H
  5301 POKE ZZ+H,B+B
  5302 POKE ZZ+H1,O
  5303 POKE ZZ+B,O
  5304 POKE ZZ+K,O
  5307 LET PD=O
  5308 LET PC=CODE"¾"
  5309 GOTO 5320
  5310 POKE ZZ,H
  5311 POKE ZZ+H,H+K
  5312 POKE ZZ+H1,B+B
  5313 POKE ZZ+B,K+K
  5314 POKE ZZ+K,O
  5315 LET PC=CODE"T"
  5320 LET PK=O
  5325 CLS
  5330 FOR I=H TO 50
  5335 LET N=33*INT(H1+RND*11)+INT(H1+RND*28)
  5340 POKE N+V,PC
  5345 NEXT I
  5350 PRINT AT X,Y;"««®";AT X+H,Y-H;"®««®«";AT X+H1,Y-H1;"«« ®««";AT X+B,Y-H1; "««H®®««";AT X+K,Y-H;"««««®««";AT X+K+H,Y;" ««®";AT X+B+B,Y+H1;"«"
  5385 POKE 16515,136
  5390 LET ZP=USR 16514
  5399 POKE 345+V,O
  5400 LET W=345
  5405 IF Q=CODE"X" THEN LET M=MW
  5407 IF Q=CODE"X" THEN LET W=H
  5410 RETURN
#
  5500 POKE ZZ,H
  5501 POKE ZZ+H,H+K
  5502 POKE ZZ+H1,B
  5503 POKE ZZ+B,B+K
  5504 POKE ZZ+B,O
  5505 GOTO 5515
#
  5510 POKE ZZ,K+H
  5511 POKE ZZ+H,H1
  5512 POKE ZZ+H1,B
  5513 POKE ZZ+B,O
  5514 LET P(FL)=P(B)
  5515 LET HX=N(FL)
  5516 LET PK=O
  5518 LET P=O
  5520 CLS
  5540 LET PZ=USR 16556
  5560 LET L1=CODE"9"
  5570 FOR J=H TO B
  5575 IF P(FL)>32 OR P(FL)<H THEN LET P(FL)=H
  5580 LET D(J)=VAL Z$(P(FL))
  5585 LET P(FL)=P(FL)+H
  5590 IF D(J)<>9 THEN GOTO 5595
  5592 LET P(FL)=H
  5593 LET D(J)=B
  5595 LET P=P+H
  5600 NEXT J
  5610 FOR I=O TO HX
  5615 LET PC=CODE"«"
  5620 LET L=L1+(33*I)
  5625 IF L>386 THEN GOTO 5720
  5630 IF I=H THEN LET PC=O
  5640 IF D(H)=O THEN LET PC=CODE"«"
  5645 IF D(H)=O THEN GOTO 5660
  5650 POKE L+D(H)+V,PC
  5655 LET PC=CODE"«"
  5660 IF I=B THEN LET PC=O
  5670 POKE L+D(H)+D(H1)+V,PC
  5675 LET PC=CODE"«"
  5680 IF I=K THEN LET PC=O
  5690 POKE L+D(H)+D(H1)+D(B)+V,PC
  5695 LET PC=CODE"«"
  5700 NEXT I
  5710 LET L1=L1+(33*HX)+33
  5715 GOTO 5610
  5720 LET L1=CODE"9"
  5730 FOR J=H TO K 
  5740 LET L=L1+(33*J*(HX+H))
  5750 FOR I=H TO R-K
  5760 IF L>353 THEN GOTO 5810
  5770 IF I=H1 OR I=B*HX OR I=R-B-B THEN GOTO 5790
  5780 POKE L+I+V,PC
  5790 NEXT I
  5800 NEXT J
  5810 IF S=K+H OR S=B+B THEN GOTO 5840
  5820 IF FL/H1=INT(FL/H1) THEN POKE 418+V,R-B
  5825 IF FL/H1=INT(FL/H1) THEN GOTO 5840
  5830 POKE 36+V,R-B
  5840 IF FL=H1 OR S=K+H OR S=B+B THEN POKE 446+V,61
  5850 IF XP=O THEN LET W=413
  5855 LET XP=H
  5860 PRINT AT K*B+H1,H;
  5865 IF S=K+H THEN GOTO 5930
  5870 IF S=B+B THEN GOTO 5910
  5880 PRINT "ZAEXON/S TOWER,L=";FL-H
  5890 GOTO 5940
  5910 PRINT "VOUNIM/S LAIR"
  5920 GOTO 5960
  5930 PRINT "Y/NAGIOTH TEMPLE"
  5940 LET P(FL+H)=P(FL)+P
  5960 IF FL<K OR RND<.3 THEN RETURN
  5970 FOR I=H TO INT(RND*5+H1)
  5980 LET N1=33*INT(H+RND*12)+INT(K+RND*17)
  5992 IF PEEK(V+N1)<>O THEN GOTO 5980
  5993 POKE N1+V,23
  5995 NEXT I
  5997 RETURN
  6000 POKE W+V,52
  6010 POKE M+V,O
  6020 PRINT AT R,O;"STAIRS u/d ?"
  6030 LET TV=FL
  6040 GOSUB 600
  6050 IF G$="U" THEN LET FL=FL+H
  6055 IF G$="U" THEN GOTO 6070
  6056 IF G$<>"D" THEN GOTO 6040
  6060 LET FL=FL-H
  6070 IF FL>K+B OR FL<H1 THEN GOTO 6090
  6080 GOTO 4780
  6090 PRINT AT R,O;"IT/S BLOCKED"
  6092 GOSUB 360
  6095 LET FL=TV
  6099 GOTO 6020

#<--- XAVSNAP.
#
#
#
# 7000 REM ** LOAD MC CODES **
 7000 FAST
#.
#---------------------
# 7002 REM INIT REM 1
#---------------------
# 7003 LET OFFSET=16514
# 7004 LET  C=256
# 7005 LET C$="\
#0E062A0C40062023\
#7110FC2323111F00\
#060D711971232310\
#F911DFFF19061E23\
#7110FCC9"
# CHECK OK.
#.

# 7006 FOR R=OFFSET TO OFFSET+35
# 7007 POKE R,CODE C$(1)*16+CODE C$(2)-476
# 7008 LET C$=C$(3 TO )
# 7009 NEXT R
#.
#---------------------
# 7010 REM INIT REM 2
#---------------------
# 7011 LET OFFSET=16556
# TWO REDUNDENT "23"
# 7012 LET C$="\
#3E802A0C402306\
#16237710FC060C11\
#0C00ED5A77111500\
#ED5A7710F2110C00\
#ED5A0616772310FC\
#C9"
# CHECK OK.
# 7013 FOR R=OFFSET TO OFFSET+39
# 7014 POKE R,CODE C$(1)*16+CODE C$(2)-476
# 7015 LET C$=C$(3 TO )
# 7016 NEXT R
#.
#---------------------
# 7020 REM INIT REM 3
#---------------------
# 7021 LET OFFSET=16603
# 7022 LET C$="\
#E17E23E5FEFFC8D7\
#18F6060A3A344090\
#30FD803CFE022011\
#CDDB40$$$$00$$$$$$$$$$$$FF\
#010000C9FE02201A\
#CDDB40$$$$$$00$$$$$$$$$$00$$$$$$00$$$$$$$$FF\
#010000C9FE032014\
#CDDB40$$$$00$$$$$$$$$$$$$$$$$$FF\
#010000C9FE04201C\
#CDDB40$$$$00$$$$$$$$$$$$$$00$$$$$$$$00$$$$$$$$FF\
#010300C9FE052804\
#FE06201CCDDB40\
#$$$$$$$$00$$$$$$$$$$00$$$$00$$$$$$$$$$$$FF010200\
#C9FE072804FE0820\
#17CDDB40$$$$$$$$00$$$$$$00$$$$00$$$$$$\
#FF010100C9FE0920\
#13CDDB40$$00$$$$$$$$00$$$$$$$$FF\
#010200C9CDDB40\
#$$$$$$$$00$$$$$$00$$$$00$$$$$$FF010100C9"
# CHECK OK.
#.
# 7023 FOR R=OFFSET TO OFFSET+239
# 7024 IF C$(1)+C$(2)="$$" THEN GOTO 7026
# 7025 POKE R,CODE C$(1)*16+CODE C$(2)-476
# 7026 LET C$=C$(3 TO )
# 7027 NEXT R
#.
#---------------------
# 7030 REM INIT REM 4
#---------------------
#7031 LET OFFSET=16849
# 7032 LET C$="\
#06093E00D710FDC9\
#CDDB40$$$$$$$$00$$FFCDD1\
#41CDDB40$$$$$$$$$$$$00$$$$$$$$000000000000\
#$$$$$$$$$$$$FFCDD141CDDB\
#40$$$$$$$$$$$$$$$$$$00$$000000000000$$$$$$$$$$$$FF\
#CDD141CDDB40$$$$$$$$$$$$$$000000$$\
#FFC9"
# CHECK OK.
#.
# 7033 FOR R=OFFSET TO OFFSET+96
# 7034 IF C$(1)+C$(2)="$$" THEN GOTO 7026
# 7035 POKE R,CODE C$(1)*16+CODE C$(2)-476
# 7036 LET C$=C$(3 TO )
# 7037 NEXT R
#.
#---------------------
# 7040 REM INIT REM 5
#---------------------
# 7041 LET OFFSET=16953
# 7042 LET C$="\
#0101010507050102\
#0805040303060203\
#010000000000013A\
#34409030FD803CC9\
#0664CD5042063290\
#3804061118020609\
#CD50424FFE0F2807\
#FE10280E0600C93A\
#4F4206049038D906\
#00C90664CD504206\
#329038CC0600C9\
#0000000000000000\
#0000000000000000\
#000000000000"
# CHECK OK.
#.
# 7043 FOR R=OFFSET TO OFFSET+108
# 7045 POKE R,CODE C$(1)*16+CODE C$(2)-476
# 7046 LET C$=C$(3 TO )
# 7047 NEXT R
#.
#..
 8010 LET O=PI-PI
 8020 LET H=PI/PI
 8030 LET B=INT PI
 8040 LET K=CODE"¹"
 8050 LET H1=CODE"·"
 8060 LET R=CODE"*"
 8065 LET XP=O
 8070 LET ZZ=16970
 8080 DIM D(4)
 8090 DIM G(33)
 8100 DIM P(9)
 8110 DIM N(9)
 8120 DIM S(5)
 8121 DIM S$(32)
 8122 LET J$="n"
 8130 LET Z$="47364465360384355383450636464749"

 8140 LET M$="\
@0A¾ AWOLFEN\
@0E¾ AHOB-GOBLIN\
@07¾ AORC\
@0C¼¸EFIRE-IMP\
@0E< GROCK-TROLL\
@09¿£EHARPY\
@08* AOGRE\
@10 ;BBARROW-WIGHT\
@0A>:HLIZARD\
@0E,=EFIRE-GIANT\
@12H VTHUNDER-LIZARD\
@0C7;CMINOTAUR\
@0A 2CWRAITH\
@0A8£FWYVERN\
@0AM=BDRAGON\
@0F HCRING-WRAITH\
@0AMMABALROG\
@0D??LWATER-IMP\
@0AM LKRAKEN"
8200 SLOW 
9000 SAVE "VALLEY"
9001 GOTO 10
I had to check the ASM data to see if an ASM storage offset destroy the BASIC integrity.
I ever run the game and checked the code for the $5600 memory offset... no problems.
Attachments
VALLEY.P
(14.42 KiB) Downloaded 50 times
Xavier ...on the Facebook groupe : "Zx81 France"(fr)
User avatar
XavSnap
Posts: 1940
Joined: Sat May 10, 2008 4:23 pm
Location: 'Zx81 France' Fb group.

Re: A 15.999K Adventure game: The Valley of adventure.

Post by XavSnap »

Code: Select all

;------- TASM ASM mnemonics. -------
; Compile this file using:
; Set TASMOPTS = -b
; tasm -80 ThisCode.tas MyBinary.BIN
;-----------------------------------
; Zx81 Program name: VB81 XuR [VALLEY.P] :
; REM   line   name: 1 REM:    36 Bytes@4082-40A5

#define ORG  .org       ; TASM cross-assembler definitions
#define equ  .equ
;-----------------------------------

;------------------------------------
;-BASIC sub-routine entry.          -
;+----------------------------------+
; Lb4082  ;  <- USR BASIC Enty.
;+----------------------------------+

;------- ROM and RAM Symbols -------
RAM_D_FILE equ $400C


ORG $4082 ; [@16514/@h4082]
Lb4082:
	LD C,$06 
	LD HL,(RAM_D_FILE) ; GET D-FILE
	LD B,$20 
Lb4089:
	INC HL 
	LD (HL),C 
	DJNZ Lb4089 ; [$4089:16521]
	INC HL 
	INC HL 
	LD DE,$001F 
	LD B,$0D 
Lb4094:
	LD (HL),C 
	ADD HL,DE 
	LD (HL),C 
	INC HL 
	INC HL 
	DJNZ Lb4094 ; [$4094:16532]
	LD DE,$FFDF 
	ADD HL,DE 
	LD B,$1E 
Lb40A1:
	INC HL 
	LD (HL),C 
	DJNZ Lb40A1 ; [$40A1:16545]
	RET ; ==========================



;------------------------------------
;-BASIC sub-routine entry.          -
;+----------------------------------+
; Lb40AC  ;  <- USR BASIC Enty.
;+----------------------------------+

;------- ROM and RAM Symbols -------
RAM_D_FILE equ $400C


ORG $40AC ; [@16556/@h40AC]
Lb40AC:
	LD A,$80 
	LD HL,(RAM_D_FILE) ; GET D-FILE
	INC HL 
	LD B,$16 
Lb40B4:
	INC HL 
	LD (HL),A 
	DJNZ Lb40B4 ; [$40B4:16564]
	LD B,$0C 
Lb40BA:
	LD DE,$000C 
	ADC HL,DE 
	LD (HL),A 
	LD DE,$0015 
	ADC HL,DE 
	LD (HL),A 
	DJNZ Lb40BA ; [$40BA:16570]
	LD DE,$000C 
	ADC HL,DE 
	LD B,$16 
Lb40CF:
	LD (HL),A 
	INC HL 
	DJNZ Lb40CF ; [$40CF:16591]
	RET ; ==========================

Lb40D4: ; <16596>
	DEC A 


;-----------------------------------
;- ZX81 CARACTERS CODES ------------
;-----------------------------------
_   .equ $00
_0  .equ $1C
A   .equ $26
B   .equ $27
C   .equ $28
D   .equ $29
E   .equ $2A
G   .equ $2C
H   .equ $2D
I   .equ $2E
K   .equ $30
L   .equ $31
M   .equ $32
O   .equ $34
R   .equ $37
S   .equ $38
T   .equ $39
U   .equ $3A
V   .equ $3B
W   .equ $3C
Y   .equ $3E
;-----------------------------------

;------------------------------------
;-BASIC sub-routine entry.          -
;+----------------------------------+
; Lb40E5  ;  <- USR BASIC Enty.
;+----------------------------------+

;------- ROM and RAM Symbols -------
RAM_FRAMES equ $4034


ORG $40DB ; [@16603/@h40DB]
Lb40DB:
	POP HL 
	LD A,(HL) 
	INC HL 
	PUSH HL 
	CP $FF ; [255]
	RET Z 
	RST 10H ; Display= A reg.
	JR Lb40DB ; [$40DB:16603]
Lb40E5:
	LD B,$0A 
	LD A,(RAM_FRAMES) ; GET FRAMES
Lb40EA:
	SUB B 
	JR NC, Lb40EA ; [$40EA:16618]
	ADD A,B 
	INC A 
	CP $01 ; [1]
	JR NZ, Lb4104 ; [$4104:16644]
	CALL Lb40DB ; [16603]
.db I,T,_,M,I,S,S,E; ZX-TEXT
.db S; ZX-TEXT
	RST 38H 
	LD BC,$0000 
	RET ; ==========================

Lb4104:
	CP $02 ; [2]
	JR NZ, Lb4122 ; [$4122:16674]
	CALL Lb40DB ; [16603]
.db Y,O,U,_,A,V,O,I; ZX-TEXT
.db D,_,T,H,E,_,B,L; ZX-TEXT
.db O,W; ZX-TEXT
	RST 38H 
	LD BC,$0000 
	RET ; ==========================

Lb4122:
	CP $03 ; [3]
	JR NZ, Lb413A ; [$413A:16698]
	CALL Lb40DB ; [16603]
.db I,T,_,H,E,S,I,T; ZX-TEXT
.db A,T,E,S; ZX-TEXT
	RST 38H 
	LD BC,$0000 
	RET ; ==========================

Lb413A:
	CP $04 ; [4]
	JR NZ, Lb415A ; [$415A:16730]
	CALL Lb40DB ; [16603]
.db I,T,_,S,T,R,I,K; ZX-TEXT
.db E,S,_,Y,O,U,R,_; ZX-TEXT
.db H,E,A,D; ZX-TEXT
	RST 38H 
	LD BC,$0003 
	RET ; ==========================

Lb415A:
	CP $05 ; [5]
	JR Z, Lb4162 ; [$4162:16738]
	CP $06 ; [6]
	JR NZ, Lb417E ; [$417E:16766]
Lb4162:
	CALL Lb40DB ; [16603]
.db Y,O,U,R,_,C,H,E; ZX-TEXT
.db S,T,_,I,S,_,S,T; ZX-TEXT
.db R,U,C,K; ZX-TEXT
	RST 38H 
	LD BC,$0002 
	RET ; ==========================

Lb417E:
	CP $07 ; [7]
	JR Z, Lb4186 ; [$4186:16774]
	CP $08 ; [8]
	JR NZ, Lb419D ; [$419D:16797]
Lb4186:
	CALL Lb40DB ; [16603]
.db Y,O,U,R,_,A,R,M; ZX-TEXT
.db _,I,S,_,H,I,T; ZX-TEXT
	RST 38H 
	LD BC,$0001 
	RET ; ==========================

Lb419D:
	CP $09 ; [9]
	JR NZ, Lb41B4 ; [$41B4:16820]
	CALL Lb40DB ; [16603]
.db A,_,B,O,D,Y,_,B; ZX-TEXT
.db L,O,W; ZX-TEXT
	RST 38H 
	LD BC,$0002 
	RET ; ==========================

Lb41B4:
	CALL Lb40DB ; [16603]
.db Y,O,U,R,_,L,E,G; ZX-TEXT
.db _,I,S,_,H,I,T; ZX-TEXT
	RST 38H 
	LD BC,$0001 
	RET ; ==========================

;-----------------------------------
;- ZX81 CARACTERS CODES ------------
;-----------------------------------
_   .equ $00
A   .equ $26
B   .equ $27
C   .equ $28
D   .equ $29
E   .equ $2A
G   .equ $2C
I   .equ $2E
K   .equ $30
L   .equ $31
M   .equ $32
N   .equ $33
O   .equ $34
P   .equ $35
R   .equ $37
S   .equ $38
T   .equ $39
U   .equ $3A
W   .equ $3C
;-----------------------------------

;------------------------------------
;-BASIC sub-routine entry.          -
;+----------------------------------+
; Lb41D9  ;  <- USR BASIC Enty.
;+----------------------------------+


ORG $41D1 ; [@16849/@h41D1]
Lb41D1:
	LD B,$09 
	LD A,$00 
Lb41D5:
	RST 10H ; Display= A reg.
	DJNZ Lb41D5 ; [$41D5:16853]
	RET ; ==========================

Lb41D9:
	CALL $40DB ; [16603]
.db G,O,L,D,_,$14; ZX-TEXT
	RST 38H 
	CALL Lb41D1 ; [16849]
	CALL $40DB ; [16603]
C,O,M,B,A,T,_,S; ZX-TEXT
.db T,R,$14,_,_,_,_,_; ZX-TEXT
.db _,S,K,I,L,L,$14; ZX-TEXT
	RST 38H 
	CALL Lb41D1 ; [16849]
	CALL $40DB ; [16603]
P,S,I,$1B,P,O,W,E; ZX-TEXT
.db R,_,$14,_,_,_,_,_; ZX-TEXT
.db _,T,U,R,N,S,$14; ZX-TEXT
	RST 38H 
	CALL Lb41D1 ; [16849]
	CALL $40DB ; [16603]
S,T,A,M,I,N,A,_; ZX-TEXT
.db _,_,$14; ZX-TEXT
	RST 38H 
	RET ; ==========================

Lb4232: ; <16946>
	NOP 

;------------------------------------
;-BASIC sub-routine entry.          -
;+----------------------------------+
; Lb4259  ;  <- USR BASIC Enty.
;+----------------------------------+

;------- ROM and RAM Symbols -------
RAM_FRAMES equ $4034


ORG $4239 ; [@16953/@h4239]

.db $01,$01,$01,$05,$07,$05,$01,$02; DATA
.db $08,$05,$04,$03,$03,$06,$02,$03; DATA
.db $01,$01,$05,$04,$07,$08; DATA

Lb424F:
.db $01; DATA
Lb4250:
	LD A,(RAM_FRAMES) ; GET FRAMES
Lb4253:
	SUB B 
	JR NC, Lb4253 ; [$4253:16979]
	ADD A,B 
	INC A 
	RET ; ==========================

Lb4259:
	LD B,$64 
	CALL Lb4250 ; [16976]
	LD B,$32 
	SUB B 
	JR C, Lb4267 ; [$4267:16999]
	LD B,$11 
	JR Lb4269 ; [$4269:17001]
Lb4267:
	LD B,$09 
Lb4269:
	CALL Lb4250 ; [16976]
	LD C,A 
	CP $0F ; [15-"?"]
	JR Z, Lb4278 ; [$4278:17016]
	CP $10 ; [16-"("]
	JR Z, Lb4283 ; [$4283:17027]
	LD B,$00 
	RET ; ==========================

Lb4278:
	LD A,(Lb424F) 
	LD B,$04 
	SUB B 
	JR C, Lb4259 ; [$4259:16985]
	LD B,$00 
	RET ; ==========================

Lb4283:
	LD B,$64 
	CALL Lb4250 ; [16976]
	LD B,$32 
Lb428A:
	SUB B 
	JR C, Lb4259 ; [$4259:16985]
	LD B,$00 
	RET ; ==========================

Lb4290: ; <17040>
	CALL Lb4278 ; [17016]
	LD HL,$4238 
	ADD HL,BC 
Lb4297:
	LD A,L 
	CP E 
	RET Z 
	DEC D 
	JR Z, Lb428A ; [$428A:17034]
	INC HL 
	JR Lb4297 ; [$4297:17047]

Xavier ...on the Facebook groupe : "Zx81 France"(fr)
David G
Posts: 387
Joined: Thu Jul 17, 2014 7:58 am
Location: 21 North, 156 West

The Valley of Adventure: published corrections

Post by David G »

Here are the corrections from the article "Poster problems?"s in ZX Computing Magazine February-March 1983 page 47 (scan posted previously by Fwapp). The article makes it sound like they are suggestions, but they are actually bug fixes. The program will soon error without these
Post problems?

In our recent publication, Poster Programs - the Valley of Adventure, some readers are experiencing difficulty with the machine code listing that more experienced users would not come across.

To make the machine code easier to RUN and test (and harder to crash!), our author, Ray Elder, suggests you make the following changes:

2 REM followed by 41 zeros (instead of 42)

3 REM followed by 240 zeros (instead of 239)

4 REM followed by 98 zeros (instead of 103)

In addition change line 3040 to read 3040 LET F = USR 16985.

To make testing Figure 5 hex dump easier, enter PRINT USR 16985. S$ is an empty string, 32 bytes long ie., 32 spaces. It is used to clear a line. All the machine code and BASIC listings work as published.
David G
Posts: 387
Joined: Thu Jul 17, 2014 7:58 am
Location: 21 North, 156 West

Valley of Adventure: BASIC listing

Post by David G »

Here is the BASIC listing type-in. I like some of Xav's improvements, but they are not included in the listing. The purpose of this is not to get a P file, but to get the basic Type-in established.

Makes it easier to compare

* Includes the corrections from ZX Computing magazine article'
* Includes typo corrections and necessary bugfixes (see below)

Code: Select all

   1 REM 000000000000000000000000000000000000
   2 REM 00000000000000000000000000000000000000000
   3 REM 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
   4 REM 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
   5 REM 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  10 LET V=PEEK 16396+256*PEEK 16397
  20 PRINT "CONTINUE ? Y/N"
  30 GOSUB 600
  40 IF G$="Y" THEN GOTO 240
  50 LET EX=K+H
  60 DIM T(B)
  70 LET TS=O
  75 LET TN=O
  80 LET TM=B
  85 LET CF=O
 115 LET G(H)=O
 116 LET S(H)=O
 120 PRINT ,,"WHO DARES THE VALLEY?"
 123 INPUT J$
 126 CLS 
 130 PRINT "CHARACTER TYPE"
 133 PRINT 
 140 PRINT "WIZARD...(1)"
 145 PRINT "THINKER..(2)"
 150 PRINT "BARBARIAN(3)","KEY 1-5"
 155 PRINT "WARRIOR..(4)"
 160 PRINT "CLERIC...(5)"
 161 PRINT 
 163 PRINT "        CHOOSE CAREFULLY"
 165 GOSUB 600
 166 IF CODE G$>CODE "9" THEN GOTO 165
 167 LET A=VAL (G$)
 168 PRINT "MAY THY GOD PROTECT THREE...."
 170 IF A<>H THEN GOTO 180
 172 LET P$="WIZARD"
 174 LET P1=H1
 175 LET PS=CODE "0"
 176 LET C1=H/H1
 178 LET CS=R+H
 180 IF A<>H1 THEN GOTO 190
 182 LET P$="THINKER"
 184 LET P1=B/H1
 185 LET C1=B/K
 186 LET CS=R+B
 188 LET PS=CODE ","
 190 IF A<>B THEN GOTO 200
 192 LET P$="BARBARIAN"
 194 LET P1=H/H1
 195 LET C1=H1
 196 LET CS=CODE "0"
 198 LET PS=R+H
 200 IF A<>K THEN GOTO 210
 202 LET P$="WARRIOR"
 204 LET P1=H
 205 LET C1=H+H/K
 206 LET CS=CODE ","
 208 LET PS=R+B
 210 IF A<>K+H THEN GOTO 220
 212 LET P$="CLERIC"
 214 LET C1=H
 215 LET CS=R-H
 216 LET P1=H+H/K
 218 LET PS=CS
 220 IF A>O AND A<B+B THEN GOTO 230
 222 LET P$="DOLT"
 224 LET P1=H
 225 LET C1=H
 226 LET CS=R-H
 228 LET PS=CS
 235 LET C=CODE "Ï"
 236 LET RX=77-INT (H1*P1**2.5)
 237 LET RY=INT (42*(P1*H)**LN (P1**3.7))+75
 238 LET RZ=125-INT (INT (P1)*12.5)
 250 POKE 16418,0
 275 GOSUB 5000
 285 GOSUB 380
 290 GOTO 2000
 300 LET TV=O
 303 LET G$=""
 305 FOR I=H TO R*H1
 310 IF INKEY$ ="" THEN GOTO 330
 315 LET G$=INKEY$ 
 320 GOTO 350
 330 NEXT I
 340 LET TV=H
 350 GOSUB 490
 355 RETURN 
 360 FOR I=H TO K+K
 365 NEXT I
 370 RETURN 
 380 PRINT AT R-K-H,O;
 385 LET PZ=USR 16857
 390 IF CS>RX THEN LET CS=RX
 395 IF PS<K+B THEN LET PS=K+B
 400 IF PS>RY THEN LET PS=RY
 410 IF C>RZ THEN LET C=RZ
 420 PRINT AT R-B-K,B+B;J$;",THE ";P$
 425 IF T(H)=H THEN PRINT "AMULET+";T(2)
 430 PRINT AT R-K-H,O;TAB B+B;TS,TAB (R+B);CS;" ",TAB B+B;EX,TAB R+B;PS;" ",TAB B+B;TN,TAB R+B;C;" ";
 460 IF CF=H THEN GOTO 480
 465 PRINT AT R-H,O;S$
 475 GOTO 490
 480 PRINT AT R-H,O;K$;" STR.=";MS;";";N;" "
 490 PRINT AT R,O;S$
 495 PRINT AT R,O;
 499 RETURN 
 500 IF T(H1)<>B+B THEN GOTO 520
 505 PRINT AT R,O;"THE AMULET PROTECTS YOU"
 510 GOTO 60
 520 GOSUB 550
 525 GOSUB 490
 530 LET G$="±èð±îææõ±ûð÷ó±èðå±Ó"
 533 LET F$=G$(H)
 535 LET D$=G$(H1 TO )
 536 LET G$=D$+F$
 537 PRINT AT R,K;G$
 540 GOTO 533
 550 LET XR=INT (.067*(EX+TS/B)**(H/H1)+LN (EX/((TN+H)**(B/H1))))
 550 LET RX=INT (.067*(EX+TS/B)**(H/H1)+LN (EX/((TN+H)**(B/H1))))
 560 PRINT AT R-H,O;S$;AT R-H,K;"ûð÷ó±óáõêïè±êô ";XR
 570 RETURN 
 600 LET G$=INKEY$ 
 605 IF G$="" THEN GOTO 600
 610 RETURN 
 650 PRINT AT R,O;"SAFE CASTLE:QUIT(Y/N)"
 660 IF CS<R+H1 THEN LET CS=R+H1
 670 POKE M+V,PK
 680 LET PK=PEEK (W+V)
 690 LET M=W
 700 POKE M+V,QX
 710 GOSUB 550
 720 GOSUB 600
 730 IF G$="Y" THEN GOTO 780
 740 LET C=CODE "Ï"
 750 PRINT AT R,O;"REFRESHED AND READY  "
 760 GOSUB 390
 770 GOTO 2020
 780 CLS 
 782 PRINT "SAVE GAME TO SAVE CHARACTER"
 784 PRINT 
 786 PRINT "GOTO 10 TO PLAY AGAIN"
 788 STOP 
 800 GOSUB 490
 805 PRINT "SPELL NO.1 OR 2"
 810 GOSUB 300
 815 IF TV=H THEN GOTO 3600
 820 IF CODE G$>CODE "2" THEN GOTO 880
 825 GOSUB 900+(80 AND G$="2")
 830 GOSUB 390
 833 IF C<=O THEN GOTO 3660
 835 GOTO 830+(10*F)
 840 GOTO 2020
 850 GOTO 3830
 860 GOTO 3575
 870 PRINT "IT IS BEYOND YOUR POWER"
 875 GOTO 3830
 880 PRINT "NO SUCH SPELL"
 882 GOTO 3830
 890 PRINT "THE SPELL FAILS"
 895 GOTO 3830
 900 GOTO 928
 902 PRINT "SLEEP YE BEAST"
 906 IF RND>H/H1 THEN GOTO 918
 907 GOSUB 430
 908 PRINT "IT COLLAPSES"
 910 LET EX=INT (EX+U/H1)
 912 LET CF=O
 914 LET F=H
 916 RETURN 
 918 LET F=B+B
 920 RETURN 
 922 IF C<=21 THEN GOTO 966
 924 LET C=C-(R+B)
 926 GOTO 982
 928 IF C<=6 THEN GOTO 966
 930 LET C=C-K-H
 932 GOTO 902
 940 PRINT "MISSED IT.."
 942 GOTO 3830
 950 IF MS<=O THEN LET MS=O
 952 IF N<=O THEN LET N=O
 954 GOSUB 410
 956 GOTO 991
 966 LET F=K
 968 RETURN 
 970 LET F=H1
 972 RETURN 
 980 IF PS<55 OR EX<2000 THEN GOTO 966
 981 GOTO 922
 982 PRINT "BURN YE DAMNED BEAST...."
 983 IF RND<H/B THEN GOTO 918
 984 LET D=INT ((CS+PS*RND)-(10*N*RND))
 985 IF D<=O THEN GOTO 982
 986 IF MS=O THEN LET N=N-D
 987 IF MS=O THEN GOTO 990
 988 LET MS=MS-D
 989 IF D>10 THEN LET N=INT (N-(D/B))
 990 GOTO 950
 991 PRINT "YOU INFLICT ";D;" DAMAGE"
 992 IF MS+N>O THEN GOTO 970
 993 GOSUB 410
 994 PRINT "IT EXPIRES IN FLAMES"
 995 LET EX=EX+U
 996 LET CF=O
 997 GOTO 914
1000 LET F=INT (H+RND*6)
1005 IF F=H1 OR F=K THEN LET F=F+H
1010 GOSUB 1020+(20*F)
1025 GOSUB 390
1030 GOTO 2020
1040 PRINT "CIRCLE OF EVIL"
1045 LET CS=CS+INT ((FL+H)/H1)
1050 LET PS=PS-INT ((FL+H)/H1)
1055 LET C=C-R+B
1060 IF C<=O THEN GOTO 500
1070 RETURN 
1080 PRINT "A HOARD OF GOLD"
1090 LET TS=TS+INT (FL*RND*100+100)
1100 RETURN 
1120 PRINT "A MAGICAL AREA"
1125 GOTO 1150
1140 PRINT "AN ANCIENT POWER AREA"
1150 LET PS=PS+H+H+INT (FL*P1)
1160 LET CS=CS+H+INT (FL*C1)
1170 LET C=C+R
1180 RETURN 
1505 POKE M+V,O
1506 LET M=W
1507 LET PK=O
1508 POKE H+V,52
1510 LET RN=RND
1520 GOSUB 490
1535 IF S=B+B AND RN>.95 AND T(H1)=S AND T(B)=O THEN GOTO 1580
1545 IF S=K+H AND RN>.85 AND T(H)=O THEN GOTO 1590
1550 IF S=K AND RN>.7 AND T(H)=H AND T(H1)<B+B AND FL>T(H1) THEN GOTO 1600
1555 IF RN>.43 THEN PRINT "A WORTHLESS STONE"
1560 IF RN>.43 THEN GOTO 1650
1570 PRINT "A PRECIOUS STONE.."
1575 GOTO 1630
1580 LET T(B)=H
1583 PRINT "õéæ±éæíî±ðç±æøáïïá"
1585 GOTO 1630
1590 LET T(H)=H
1593 PRINT "AMULET OF ALARIAN."
1595 GOTO 1630
1600 PRINT "AN AMULET STONE";
1610 IF RN>.85 THEN PRINT " WRONG ONE"
1615 IF RN>.85 THEN GOTO 1640
1620 PRINT " IT FITS."
1625 LET T(H1)=T(H1)+H
1630 LET TS=TS+100*(T(H)+T(H1)+T(B)+FL)
1660 GOTO 2370
2000 LET M=W
2010 LET PK=PEEK (W+V)
2015 POKE M+V,CODE "O"
2016 POKE M+V+1,CODE "S"
2020 LET C=C+K+B+B
2024 GOSUB 490
2025 IF PK=CODE "." THEN GOTO 2040
2030 PRINT "WHICH DIRECTION ?"
2035 GOTO 2050
2040 PRINT "ON THE PATH: WHICH WAY ?"
2050 GOSUB 600
2055 IF CODE G$>CODE "9" THEN GOTO 2050
2060 LET A=VAL G$
2065 IF A=O THEN GOTO 2050
2070 IF A>B THEN LET A=A-B
2075 IF A>B THEN GOTO 2070
2080 LET W=M+A-H1-33*(INT ((VAL (G$)-H)/B)-H)
2090 LET TN=TN+H
2095 GOSUB 490
2100 LET QX=CODE "O"
2110 LET Q=PEEK (W+V)
2120 IF Q=O OR Q=K+K+H THEN GOTO 2250
2130 IF Q=CODE "Í" THEN GOTO 650
2135 IF S>B AND Q=CODE "±" THEN LET Q=B+B
2140 IF Q=B+B OR Q=K+K OR Q=CODE "T" THEN LET TN=TN-H
2145 IF Q=B+B OR Q=K+K OR Q=CODE "T" THEN GOTO 2030
2150 IF Q=CODE "W" OR Q=CODE "õ" OR Q=CODE "S" OR Q=CODE "H" THEN GOTO 4500
2160 IF Q=CODE "X" OR Q=CODE "±" THEN GOTO 4600
2170 IF Q=R-B THEN GOTO 6000
2180 IF Q=CODE "±" OR (G$="5" AND PK=CODE "±") THEN LET QX=CODE "ð"
2185 IF Q=CODE "±" OR (G$="5" AND PK=CODE "±") THEN LET C=C-R+B
2190 IF C<=O THEN GOTO 500
2200 IF Q=R THEN GOTO 1500
2260 POKE M+V,PK
2265 LET PK=PEEK (W+V)
2270 LET M=W
2280 POKE M+V,QX
2295 IF PK=CODE "." THEN GOTO 2350
2300 LET F=RND
2305 GOSUB 490
2310 IF F<H/(H+K) THEN GOTO 3000
2320 IF F>B/K THEN GOTO 1000
2350 PRINT "THERES NOTHING HERE"
2370 GOSUB 410
2380 GOTO 2020
3000 PRINT "BEWARE......."
3010 LET CF=H
3020 IF Q=CODE "±" OR PK=CODE "±" THEN GOTO 3050
3030 POKE 16975,FL
3040 LET F=USR 16985
3045 GOTO 3051
3050 LET F=INT (R-K-H+RND*H1)
3051 LET CX=H
3052 FOR I=H TO F-H
3053 LET CX=CX+CODE M$(CX)
3054 NEXT I
3110 LET K$=M$(CX+K TO CX+CODE M$(CX)-H)
3115 LET MS=CODE M$(CX+H)
3120 IF MS=O THEN GOTO 3140
3130 LET MS=INT ((CS/B)+MS*FL**.2/(RND+H))
3140 LET N=CODE M$(CX+H1)
3145 IF N=O THEN GOTO 3160
3150 LET N=INT (N*FL**.2/(RND+H))
3160 LET U=INT ((F+H)*(FL**(B/H1)))
3180 PRINT AT R,O;"AN EVIL ";K$
3190 LET E=39*LN (EX)/3.14
3195 GOSUB 480
3500 IF RND>.6 THEN GOTO 4000
3510 PRINT "ATTACK/RETREAT ?"
3520 GOSUB 300
3530 IF G$="R" THEN GOTO 3900
3540 IF TV=H THEN GOTO 3600
3550 IF G$<>"A" THEN GOTO 4000
3570 GOSUB 490
3575 PRINT AT R,K+B;"*STRIKE QUICKLY*"
3580 GOSUB 300
3590 IF TV=O THEN GOTO 3620
3600 PRINT "TOO SLOW....TOO SLOW.."
3610 LET HF=O
3615 GOTO 3830
3620 IF G$="S" THEN GOTO 800
3640 IF MS=O THEN PRINT "YOUR SWORD IS USELESS"
3645 IF MS=O THEN GOTO 3830
3650 LET C=C-H
3660 IF C<=O THEN PRINT "YOU ARE EXHAUSTED"
3665 IF C<=O THEN GOTO 500
3670 LET F=RND*10
3675 LET Z=O
3680 IF G$="H" AND (F<5 OR CS>MS*K) THEN LET Z=H1
3690 IF G$="B" AND (F<7 OR CS>MS*K) THEN LET Z=H
3700 IF G$="L" AND (F<9 OR CS>MS*K) THEN LET Z=.3
3700 IF G$="L" AND (F<9 OR CS>MS*K) THEN LET Z=.3
3705 IF Z<>O THEN GOTO 3730
3710 PRINT "YOU MISSED IT"
3720 LET HF=O
3725 GOTO 3830
3730 IF HF=O THEN GOTO 3740
3732 LET D=MS+INT (RND*9)
3734 LET HF=O
3735 GOTO 3760
3740 LET D=INT ((((CS*50*RND)-(10*MS)+E)/100)*Z)
3745 IF D<O THEN LET D=O
3750 IF CS>(MS-D)*K THEN LET HF=H
3760 LET MS=MS-D
3765 IF MS<=O THEN LET MS=O
3770 PRINT "A HIT ..."
3790 IF D<>O THEN GOTO 3600
3792 PRINT "BUT NO DAMAGE"
3793 LET HF=O
3795 GOTO 3830
3800 PRINT D;" DAMAGE"
3802 GOSUB 390
3805 IF MS<=O THEN GOTO 3860
3820 IF HF=H THEN PRINT "THE ";K$;" STAGGERS..."
3830 GOSUB 390
3840 IF HF=H THEN GOTO 3570
3850 GOTO 4000
3860 PRINT "....KILLING THE MONSTER"
3870 LET EX=EX+U
3875 LET HF=O
3876 LET CF=O
3890 GOTO 2370
3900 PRINT "KNAVISH COWARD"
3905 LET CF=O
3910 GOTO 2370
4000 GOSUB 490
4005 PRINT "THE CREATURE ATTACKS"
4010 GOSUB 360
4020 IF MS=O THEN GOTO 4300
4030 IF MS<N AND N>B+B AND RND<H/H1 THEN GOTO 4300
4040 LET MS=MS-H
4045 IF MS<=O THEN GOTO 4240
4060 GOSUB 490
4070 LET Z=USR 16613
4080 IF Z=O THEN GOTO 4280
4160 LET G=INT ((((MS*75*RND)-(10*CS)-E)/100)*Z)
4164 GOSUB 360
4165 GOSUB 490
4170 IF G<=O THEN LET G=O
4175 IF G=O THEN PRINT "...SAVED BY YOUR ARMOUR"
4177 IF G=O THEN GOTO 4280
4180 LET C=C-G
4190 IF G>9 THEN LET CS=INT (CS-G/6)
4210 PRINT "YOUR TAKE ";G;" DAMAGE"
4220 IF CS<=O OR C<=O THEN GOTO 500
4230 GOTO 4280
4240 PRINT AT R,O;"IN ITS DYING ATTEMPT"
4250 LET EX=INT (EX+U/H1)
4255 LET CF=O
4270 GOTO 2370
4280 GOSUB 390
4290 GOTO 3570
4300 PRINT AT R,O;"HURLING A LIGHTNING BOLT"
4310 LET G=INT (((180*N*RND)-(PS+E))/100)
4313 LET N=N-K-H
4315 IF G>9 THEN LET N=N-INT (G/5)
4320 GOSUB 360
4325 GOSUB 490
4330 IF N<=O THEN LET N=O
4335 IF N=O THEN GOTO 4240
4340 IF RND<H/K THEN GOTO 4410
4350 IF G<=O THEN LET G=O
4355 IF G=O THEN GOTO 4400
4360 PRINT "IT STRIKES HOME "
4370 GOSUB 390
4380 LET C=C-G
4385 IF G>9 THEN LET PS=INT (PS-G/K)
4390 GOTO 4210
4400 PRINT "YOUR PSI SHIELD PROTECTS YOU"
4405 GOTO 4280
4410 PRINT "MISSED YOU"
4415 GOTO 4280
4500 IF Q=CODE "H" AND PK=CODE "±" THEN GOTO 2020
4510 FOR I=B TO K+K
4520 LET N(I)=INT (K+RND*5)
4530 IF N(I)=K+H THEN GOTO 4520
4540 NEXT I
4550 IF S=H THEN LET HP=H
4560 LET P(B)=INT (R*RND+H1)
4650 LET C=C-K-B-B
4660 POKE M+V,O
4670 POKE W+V,QX
4680 IF Q=CODE "±" THEN LET S=H
4685 IF Q=CODE "±" THEN LET FL=H
4690 IF Q<>CODE "X" THEN GOTO 4720
4693 IF S=K THEN LET S=H
4695 IF S=K THEN LET FL=H
4700 IF S=K+H OR S=B+B THEN LET S=S-B
4705 IF S=K+H OR S=B+B THEN LET FL=FL-K
4710 IF S=K+H OR S=B+B THEN LET M=HW
4715 LET XP=O
4720 IF Q=CODE "S" THEN LET S=H1
4725 IF Q=CODE "S" THEN LET FL=S
4730 IF Q=CODE "W" THEN LET S=B
4735 IF Q=CODE "W" THEN LET FL=B
4740 IF Q=CODE "W" OR Q=CODE "S" THEN LET X=INT (H+5*RND)
4745 IF Q=CODE "W" OR Q=CODE "S" THEN LET Y=P(B)
4750 IF Q=CODE "õ" THEN LET S=K
4755 IF Q=CODE "õ" THEN LET FL=H1
4760 IF Q<>CODE "H" THEN GOTO 4780
4763 LET S=S+B
4765 LET FL=FL+K
4770 LET HW=M
4780 IF FL>K+K THEN LET FL=FL-K
4781 GOSUB 5000+(300 AND S=H1)+(310 AND S=B)+(500 AND S=K)+(510 AND S>=K+H)
4793 GOSUB 380
4795 GOTO 2000
5000 CLS 
5001 POKE ZZ,H
5002 POKE ZZ+H,K+H
5003 POKE ZZ+H1,K
5004 POKE ZZ+B,K+B
5005 POKE ZZ+K,K+K
5006 LET S=H
5007 LET FL=H
5010 POKE 16515,6
5020 LET ZP=USR 16514
5040 IF G(H)<>O THEN GOTO 5160
5050 LET M=H+(33*INT (11*RND+H))
5051 LET L=M
5052 LET MP=M
5053 LET W=M
5054 LET G(H)=M
5060 POKE M+V,149
5070 FOR I=B TO 33
5075 IF RND>H/H1 THEN GOTO 5090
5080 LET L1=L+34
5085 GOTO 5100
5090 LET L1=L-32
5100 IF L1<34 OR L1>396 THEN GOTO 5075
5110 LET G(I)=L1
5120 LET L=L1
5130 POKE G(I)+V,27
5140 NEXT I
5150 POKE G(33)+V,149
5155 GOTO 5200
5165 POKE G(H)+V,149
5170 FOR I=B TO 33
5175 POKE G(I)+V,27
5180 NEXT I
5190 POKE G(33)+V,149
5200 IF S(H)<>O THEN GOTO 5250
5210 FOR I=H TO K+H
5220 LET S(I)=33*INT (H+RND*11)+INT (H1+RND*28)
5230 IF PEEK (S(I)+V)<>O OR PEEK (S(I)+H+V)<>O THEN GOTO 5220
5240 NEXT I
5250 POKE S(H)+V,60
5255 POKE S(H)+H+V,60
5260 POKE S(2)+V,60
5265 POKE S(2)+H+V,60
5270 POKE S(B)+V,56
5275 POKE S(B)+H+V,56
5280 POKE S(K)+V,56
5285 POKE S(K)+V,56
5290 POKE S(5)+V,185
5292 LET M=MP
5294 LET W=M
5297 RETURN 
5300 POKE ZZ,H
5301 POKE ZZ+H,B+B
5302 POKE ZZ+H1,O
5303 POKE ZZ+B,O
5304 POKE ZZ+K,O
5307 LET PD=O
5308 LET PC=CODE "ª"
5309 GOTO 5320
5310 POKE ZZ,H
5311 POKE ZZ+H,H+K
5312 POKE ZZ+H1,B+B
5313 POKE ZZ+B,K+K
5314 POKE ZZ+K,O
5315 LET PC=CODE "T"
5320 LET PK=O
5325 CLS 
5330 FOR I=H TO 50
5335 LET N=33*INT (H1+RND*11)+INT (H1+RND*28)
5340 POKE N+V,PC
5345 NEXT I
5350 PRINT AT X,Y;"±±"
5355 PRINT AT X+H,Y-H;"±±±±±"
5360 PRINT AT X+H1,Y-H1;"±±  ±±"
5365 PRINT AT X+B,Y-H1;"±±H ±±±"
5370 PRINT AT X+K,Y-H;"±±±± ±±"
5375 PRINT AT X+K+H,Y;" ±±"
5380 PRINT AT X+B+B,Y+H1;"±"
5385 POKE 16515,136
5390 LET ZP=USR 16514
5399 POKE 345+V,O
5400 LET W=345
5405 IF Q=CODE "X" THEN LET M=HW
5407 IF Q=CODE "X" THEN LET W=H
5410 RETURN 
5500 POKE ZZ,H
5501 POKE ZZ+H,H+K
5502 POKE ZZ+H1,B
5503 POKE ZZ+B,B+K
5504 POKE ZZ+B,O
5505 GOTO 5515
5510 POKE ZZ,K+H
5511 POKE ZZ+H,H1
5512 POKE ZZ+H1,B
5513 POKE ZZ+B,O
5514 LET P(FL)=P(B)
5515 LET HX=N(FL)
5516 LET PK=O
5518 LET P=O
5520 CLS 
5540 LET PZ=USR 16556
5560 LET L1=CODE "9"
5570 FOR J=H TO B
5575 IF P(FL)>32 OR P(FL)<H THEN LET P(FL)=H
5580 LET D(J)=VAL Z$(P(FL))
5585 LET P(FL)=P(FL)+H
5590 IF D(J)<>9 THEN GOTO 5595
5592 LET P(FL)=H
5593 LET D(J)=B
5595 LET P=P+H
5600 NEXT J
5610 FOR I=O TO HX
5615 LET PC=CODE "±"
5620 LET L=L1+(33*I)
5625 IF L>386 THEN GOTO 5720
5630 IF I=H THEN LET PC=O
5640 IF D(H)=O THEN LET PC=CODE "±"
5645 IF D(H)=O THEN GOTO 5660
5650 POKE L+D(H)+V,PC
5655 LET PC=CODE "±"
5660 IF I=B THEN LET PC=O
5670 POKE L+D(H)+D(H1)+V,PC
5675 LET PC=CODE "±"
5680 IF I=K THEN LET PC=0
5690 POKE L+D(H)+D(H1)+D(B)+V,PC
5695 LET PC=CODE "±"
5700 NEXT I
5710 LET L1=L1+(33*HX)+33
5715 GOTO 5610
5720 LET L1=CODE "9"
5730 FOR J=H TO K
5740 LET L=L1+(33*J*(HX+H))
5750 FOR I=H TO R-K
5760 IF L>353 THEN GOTO 5810
5770 IF I=H1 OR I=B*HX OR I=R-B-B THEN GOTO 5790
5780 POKE L+I+V,PC
5790 NEXT I
5800 NEXT J
5810 IF S=K+H OR S=B+B THEN GOTO 5840
5820 IF FL/H1=INT (FL/H1) THEN POKE 418+V,R-B
5825 IF FL/H1=INT (FL/H1) THEN GOTO 5840
5830 POKE 36+V,R-B
5840 IF FL=H1 OR S=K+H OR S=B+B THEN POKE 446+V,61
5850 IF XP=O THEN LET W=413
5855 LET XP=H
5860 PRINT AT K*B+H1,H;
5865 IF S=K+H THEN GOTO 5930
5870 IF S=B+B THEN GOTO 5910
5880 PRINT "ZAEXON/S TOWER,L=";FL-H
5890 GOTO 5940
5910 PRINT "VOUNIM/S LAIR"
5920 GOTO 5960
5930 PRINT "Y/NAGIOTH TEMPLE"
5940 LET P(FL+H)=P(FL)+P
5960 IF FL<K OR RND<.3 THEN RETURN 
5970 FOR I=H TO INT (RND*S+H1)
5980 LET N1=33*INT (H+RND*12)+INT (K+RND*17)
5992 IF PEEK (V+H1)<>O THEN GOTO 5980
5993 POKE H1+V,23
5995 NEXT I
5997 RETURN 
6000 POKE W+V,52
6010 POKE M+V,O
6020 PRINT AT R,O;"STAIRS U/D ?"
6030 LET TV=FL
6040 GOSUB 600
6050 IF G$="U" THEN LET FL=FL+H
6055 IF G$="U" THEN GOTO 6070
6056 IF G$<>"D" THEN GOTO 6040
6060 LET FL=FL-H
6070 IF FL>K+B OR FL<H1 THEN GOTO 6090
6080 GOTO 4780
6090 PRINT AT R,O;"IT/S BLOCKED"
6092 GOSUB 360
6095 LET FL=TV
6099 GOTO 6020
Here is a scan of the BASIC from the Poster Program put together from the individual scans from the first post
3-6 BASIC scan.jpg
The scan on archive.org is slightly clearer, but unfortunately missing several columns (pages do not overlap, so parts are missing)

Typo fixes:
* Greg's reported typos
* 2320 IF F>B/K THEN GOTO 1000

Necessary bug fixes requiring changes from the Poster Program listing:
* (not implemented) crashes/distorts screen when moving moving the player into the main gamefield border wall

Questionable lines:
* 966 LET F=K //typo??? F=R???
* 1520 GOSUB 490 //???typo??? 490 is the "print blank line" subroutine

By the way, my P file based on this listing seems to run quite well (no observed bugs except the one listed above)
User avatar
GCHarder
Posts: 427
Joined: Sat Dec 14, 2013 7:46 pm

Re: A 15.999K Adventure game: The Valley of adventure.

Post by GCHarder »

Here's the "patched" together listing from Internet Archive, it's probably the cleanest version.

Also, the VARS list from the original version published in "Computing Today, May 1982". The link is listed in an earlier post and is still active if you want the full article, it's an interesting read.

I think the VARS are the same in both version. It may help in debugging, especially those pesky M and H vars.

Regards;

Greg
Attachments
Valley VARS.jpg
Valley Listing.jpg
User avatar
XavSnap
Posts: 1940
Joined: Sat May 10, 2008 4:23 pm
Location: 'Zx81 France' Fb group.

Re: A 15.999K Adventure game: The Valley of adventure.

Post by XavSnap »

Zaexon's tower bug:

Code: Select all

8150 LET N(H)=H
8155 LET N(H1)=B
Xavier ...on the Facebook groupe : "Zx81 France"(fr)
David G
Posts: 387
Joined: Thu Jul 17, 2014 7:58 am
Location: 21 North, 156 West

Re: A 15.999K Adventure game: The Valley of adventure.

Post by David G »

GCHarder wrote: Fri Dec 30, 2022 11:17 pm Here's the "patched" together listing from Internet Archive, it's probably the cleanest version.
Thanks Greg. That is the"clearer" one and the problem is not that it's missing some characters, but that each page is a slightly different size so they don't quite align

I see your put-together is good. You have inspired me to try again. Here it is in original resolution and quality from ZX Computing Magazine Poster Programs #1 from archive.org


[edit:] ... drat. Looks like the Attachment feature of this forum is reducing the size to the same size as yours. Not clear at all

Here it is on Google Drive at 1346x2110 resolution: BASIC listing
Attachments
low-resolution
low-resolution
User avatar
GCHarder
Posts: 427
Joined: Sat Dec 14, 2013 7:46 pm

Re: A 15.999K Adventure game: The Valley of adventure.

Post by GCHarder »

More corrections

430 () not needed, this matches the listing

4210 YOUR should be YOU

5285 +H missing

If you post an updated version I'll go through it again. I think the listing and type-in match. Any other bugs may be programming logic.

Regards;

Greg
David G
Posts: 387
Joined: Thu Jul 17, 2014 7:58 am
Location: 21 North, 156 West

Re: A 15.999K Adventure game: The Valley of adventure.

Post by David G »

GCHarder wrote: Sun Jan 01, 2023 9:07 pm More corrections

430 () not needed, this matches the listing

4210 YOUR should be YOU

5285 +H missing

If you post an updated version I'll go through it again.
changes applied:
[edit 9 January 2023: change line 1508 from POKE H+V,52 to POKE M+V,52]

Code: Select all

   1 REM 000000000000000000000000000000000000
   2 REM 00000000000000000000000000000000000000000
   3 REM 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
   4 REM 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
   5 REM 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  10 LET V=PEEK 16396+256*PEEK 16397
  20 PRINT "CONTINUE ? Y/N"
  30 GOSUB 600
  40 IF G$="Y" THEN GOTO 240
  50 LET EX=K+H
  60 DIM T(B)
  70 LET TS=O
  75 LET TN=O
  80 LET TM=B
  85 LET CF=O
 115 LET G(H)=O
 116 LET S(H)=O
 120 PRINT ,,"WHO DARES THE VALLEY?"
 123 INPUT J$
 126 CLS 
 130 PRINT "CHARACTER TYPE"
 133 PRINT 
 140 PRINT "WIZARD...(1)"
 145 PRINT "THINKER..(2)"
 150 PRINT "BARBARIAN(3)","KEY 1-5"
 155 PRINT "WARRIOR..(4)"
 160 PRINT "CLERIC...(5)"
 161 PRINT 
 163 PRINT "        CHOOSE CAREFULLY"
 165 GOSUB 600
 166 IF CODE G$>CODE "9" THEN GOTO 165
 167 LET A=VAL (G$)
 168 PRINT "MAY THY GOD PROTECT THREE...."
 170 IF A<>H THEN GOTO 180
 172 LET P$="WIZARD"
 174 LET P1=H1
 175 LET PS=CODE "0"
 176 LET C1=H/H1
 178 LET CS=R+H
 180 IF A<>H1 THEN GOTO 190
 182 LET P$="THINKER"
 184 LET P1=B/H1
 185 LET C1=B/K
 186 LET CS=R+B
 188 LET PS=CODE ","
 190 IF A<>B THEN GOTO 200
 192 LET P$="BARBARIAN"
 194 LET P1=H/H1
 195 LET C1=H1
 196 LET CS=CODE "0"
 198 LET PS=R+H
 200 IF A<>K THEN GOTO 210
 202 LET P$="WARRIOR"
 204 LET P1=H
 205 LET C1=H+H/K
 206 LET CS=CODE ","
 208 LET PS=R+B
 210 IF A<>K+H THEN GOTO 220
 212 LET P$="CLERIC"
 214 LET C1=H
 215 LET CS=R-H
 216 LET P1=H+H/K
 218 LET PS=CS
 220 IF A>O AND A<B+B THEN GOTO 230
 222 LET P$="DOLT"
 224 LET P1=H
 225 LET C1=H
 226 LET CS=R-H
 228 LET PS=CS
 235 LET C=CODE "Ï"
 236 LET RX=77-INT (H1*P1**2.5)
 237 LET RY=INT (42*(P1*H)**LN (P1**3.7))+75
 238 LET RZ=125-INT (INT (P1)*12.5)
 250 POKE 16418,0
 275 GOSUB 5000
 285 GOSUB 380
 290 GOTO 2000
 300 LET TV=O
 303 LET G$=""
 305 FOR I=H TO R*H1
 310 IF INKEY$ ="" THEN GOTO 330
 315 LET G$=INKEY$ 
 320 GOTO 350
 330 NEXT I
 340 LET TV=H
 350 GOSUB 490
 355 RETURN 
 360 FOR I=H TO K+K
 365 NEXT I
 370 RETURN 
 380 PRINT AT R-K-H,O;
 385 LET PZ=USR 16857
 390 IF CS>RX THEN LET CS=RX
 395 IF PS<K+B THEN LET PS=K+B
 400 IF PS>RY THEN LET PS=RY
 410 IF C>RZ THEN LET C=RZ
 420 PRINT AT R-B-K,B+B;J$;",THE ";P$
 425 IF T(H)=H THEN PRINT "AMULET+";T(2)
 430 PRINT AT R-K-H,O;TAB B+B;TS,TAB R+B;CS;" ",TAB B+B;EX,TAB R+B;PS;" ",TAB B+B;TN,TAB R+B;C;" ";
 460 IF CF=H THEN GOTO 480
 465 PRINT AT R-H,O;S$
 475 GOTO 490
 480 PRINT AT R-H,O;K$;" STR.=";MS;";";N;" "
 490 PRINT AT R,O;S$
 495 PRINT AT R,O;
 499 RETURN 
 500 IF T(H1)<>B+B THEN GOTO 520
 505 PRINT AT R,O;"THE AMULET PROTECTS YOU"
 510 GOTO 60
 520 GOSUB 550
 525 GOSUB 490
 530 LET G$="±èð±îææõ±ûð÷ó±èðå±Ó"
 533 LET F$=G$(H)
 535 LET D$=G$(H1 TO )
 536 LET G$=D$+F$
 537 PRINT AT R,K;G$
 540 GOTO 533
 550 LET XR=INT (.067*(EX+TS/B)**(H/H1)+LN (EX/((TN+H)**(B/H1))))
 550 LET RX=INT (.067*(EX+TS/B)**(H/H1)+LN (EX/((TN+H)**(B/H1))))
 560 PRINT AT R-H,O;S$;AT R-H,K;"ûð÷ó±óáõêïè±êô ";XR
 570 RETURN 
 600 LET G$=INKEY$ 
 605 IF G$="" THEN GOTO 600
 610 RETURN 
 650 PRINT AT R,O;"SAFE CASTLE:QUIT(Y/N)"
 660 IF CS<R+H1 THEN LET CS=R+H1
 670 POKE M+V,PK
 680 LET PK=PEEK (W+V)
 690 LET M=W
 700 POKE M+V,QX
 710 GOSUB 550
 720 GOSUB 600
 730 IF G$="Y" THEN GOTO 780
 740 LET C=CODE "Ï"
 750 PRINT AT R,O;"REFRESHED AND READY  "
 760 GOSUB 390
 770 GOTO 2020
 780 CLS 
 782 PRINT "SAVE GAME TO SAVE CHARACTER"
 784 PRINT 
 786 PRINT "GOTO 10 TO PLAY AGAIN"
 788 STOP 
 800 GOSUB 490
 805 PRINT "SPELL NO.1 OR 2"
 810 GOSUB 300
 815 IF TV=H THEN GOTO 3600
 820 IF CODE G$>CODE "2" THEN GOTO 880
 825 GOSUB 900+(80 AND G$="2")
 830 GOSUB 390
 833 IF C<=O THEN GOTO 3660
 835 GOTO 830+(10*F)
 840 GOTO 2020
 850 GOTO 3830
 860 GOTO 3575
 870 PRINT "IT IS BEYOND YOUR POWER"
 875 GOTO 3830
 880 PRINT "NO SUCH SPELL"
 882 GOTO 3830
 890 PRINT "THE SPELL FAILS"
 895 GOTO 3830
 900 GOTO 928
 902 PRINT "SLEEP YE BEAST"
 906 IF RND>H/H1 THEN GOTO 918
 907 GOSUB 430
 908 PRINT "IT COLLAPSES"
 910 LET EX=INT (EX+U/H1)
 912 LET CF=O
 914 LET F=H
 916 RETURN 
 918 LET F=B+B
 920 RETURN 
 922 IF C<=21 THEN GOTO 966
 924 LET C=C-(R+B)
 926 GOTO 982
 928 IF C<=6 THEN GOTO 966
 930 LET C=C-K-H
 932 GOTO 902
 940 PRINT "MISSED IT.."
 942 GOTO 3830
 950 IF MS<=O THEN LET MS=O
 952 IF N<=O THEN LET N=O
 954 GOSUB 410
 956 GOTO 991
 966 LET F=K
 968 RETURN 
 970 LET F=H1
 972 RETURN 
 980 IF PS<55 OR EX<2000 THEN GOTO 966
 981 GOTO 922
 982 PRINT "BURN YE DAMNED BEAST...."
 983 IF RND<H/B THEN GOTO 918
 984 LET D=INT ((CS+PS*RND)-(10*N*RND))
 985 IF D<=O THEN GOTO 982
 986 IF MS=O THEN LET N=N-D
 987 IF MS=O THEN GOTO 990
 988 LET MS=MS-D
 989 IF D>10 THEN LET N=INT (N-(D/B))
 990 GOTO 950
 991 PRINT "YOU INFLICT ";D;" DAMAGE"
 992 IF MS+N>O THEN GOTO 970
 993 GOSUB 410
 994 PRINT "IT EXPIRES IN FLAMES"
 995 LET EX=EX+U
 996 LET CF=O
 997 GOTO 914
1000 LET F=INT (H+RND*6)
1005 IF F=H1 OR F=K THEN LET F=F+H
1010 GOSUB 1020+(20*F)
1025 GOSUB 390
1030 GOTO 2020
1040 PRINT "CIRCLE OF EVIL"
1045 LET CS=CS+INT ((FL+H)/H1)
1050 LET PS=PS-INT ((FL+H)/H1)
1055 LET C=C-R+B
1060 IF C<=O THEN GOTO 500
1070 RETURN 
1080 PRINT "A HOARD OF GOLD"
1090 LET TS=TS+INT (FL*RND*100+100)
1100 RETURN 
1120 PRINT "A MAGICAL AREA"
1125 GOTO 1150
1140 PRINT "AN ANCIENT POWER AREA"
1150 LET PS=PS+H+H+INT (FL*P1)
1160 LET CS=CS+H+INT (FL*C1)
1170 LET C=C+R
1180 RETURN 
1505 POKE M+V,O
1506 LET M=W
1507 LET PK=O
1508 POKE M+V,52
1510 LET RN=RND
1520 GOSUB 490
1535 IF S=B+B AND RN>.95 AND T(H1)=S AND T(B)=O THEN GOTO 1580
1545 IF S=K+H AND RN>.85 AND T(H)=O THEN GOTO 1590
1550 IF S=K AND RN>.7 AND T(H)=H AND T(H1)<B+B AND FL>T(H1) THEN GOTO 1600
1555 IF RN>.43 THEN PRINT "A WORTHLESS STONE"
1560 IF RN>.43 THEN GOTO 1650
1570 PRINT "A PRECIOUS STONE.."
1575 GOTO 1630
1580 LET T(B)=H
1583 PRINT "õéæ±éæíî±ðç±æøáïïá"
1585 GOTO 1630
1590 LET T(H)=H
1593 PRINT "AMULET OF ALARIAN."
1595 GOTO 1630
1600 PRINT "AN AMULET STONE";
1610 IF RN>.85 THEN PRINT " WRONG ONE"
1615 IF RN>.85 THEN GOTO 1640
1620 PRINT " IT FITS."
1625 LET T(H1)=T(H1)+H
1630 LET TS=TS+100*(T(H)+T(H1)+T(B)+FL)
1660 GOTO 2370
2000 LET M=W
2010 LET PK=PEEK (W+V)
2015 POKE M+V,CODE "O"
2016 POKE M+V+1,CODE "S"
2020 LET C=C+K+B+B
2024 GOSUB 490
2025 IF PK=CODE "." THEN GOTO 2040
2030 PRINT "WHICH DIRECTION ?"
2035 GOTO 2050
2040 PRINT "ON THE PATH: WHICH WAY ?"
2050 GOSUB 600
2055 IF CODE G$>CODE "9" THEN GOTO 2050
2060 LET A=VAL G$
2065 IF A=O THEN GOTO 2050
2070 IF A>B THEN LET A=A-B
2075 IF A>B THEN GOTO 2070
2080 LET W=M+A-H1-33*(INT ((VAL (G$)-H)/B)-H)
2090 LET TN=TN+H
2095 GOSUB 490
2100 LET QX=CODE "O"
2110 LET Q=PEEK (W+V)
2120 IF Q=O OR Q=K+K+H THEN GOTO 2250
2130 IF Q=CODE "Í" THEN GOTO 650
2135 IF S>B AND Q=CODE "±" THEN LET Q=B+B
2140 IF Q=B+B OR Q=K+K OR Q=CODE "T" THEN LET TN=TN-H
2145 IF Q=B+B OR Q=K+K OR Q=CODE "T" THEN GOTO 2030
2150 IF Q=CODE "W" OR Q=CODE "õ" OR Q=CODE "S" OR Q=CODE "H" THEN GOTO 4500
2160 IF Q=CODE "X" OR Q=CODE "±" THEN GOTO 4600
2170 IF Q=R-B THEN GOTO 6000
2180 IF Q=CODE "±" OR (G$="5" AND PK=CODE "±") THEN LET QX=CODE "ð"
2185 IF Q=CODE "±" OR (G$="5" AND PK=CODE "±") THEN LET C=C-R+B
2190 IF C<=O THEN GOTO 500
2200 IF Q=R THEN GOTO 1500
2260 POKE M+V,PK
2265 LET PK=PEEK (W+V)
2270 LET M=W
2280 POKE M+V,QX
2295 IF PK=CODE "." THEN GOTO 2350
2300 LET F=RND
2305 GOSUB 490
2310 IF F<H/(H+K) THEN GOTO 3000
2320 IF F>B/K THEN GOTO 1000
2350 PRINT "THERES NOTHING HERE"
2370 GOSUB 410
2380 GOTO 2020
3000 PRINT "BEWARE......."
3010 LET CF=H
3020 IF Q=CODE "±" OR PK=CODE "±" THEN GOTO 3050
3030 POKE 16975,FL
3040 LET F=USR 16985
3045 GOTO 3051
3050 LET F=INT (R-K-H+RND*H1)
3051 LET CX=H
3052 FOR I=H TO F-H
3053 LET CX=CX+CODE M$(CX)
3054 NEXT I
3110 LET K$=M$(CX+K TO CX+CODE M$(CX)-H)
3115 LET MS=CODE M$(CX+H)
3120 IF MS=O THEN GOTO 3140
3130 LET MS=INT ((CS/B)+MS*FL**.2/(RND+H))
3140 LET N=CODE M$(CX+H1)
3145 IF N=O THEN GOTO 3160
3150 LET N=INT (N*FL**.2/(RND+H))
3160 LET U=INT ((F+H)*(FL**(B/H1)))
3180 PRINT AT R,O;"AN EVIL ";K$
3190 LET E=39*LN (EX)/3.14
3195 GOSUB 480
3500 IF RND>.6 THEN GOTO 4000
3510 PRINT "ATTACK/RETREAT ?"
3520 GOSUB 300
3530 IF G$="R" THEN GOTO 3900
3540 IF TV=H THEN GOTO 3600
3550 IF G$<>"A" THEN GOTO 4000
3570 GOSUB 490
3575 PRINT AT R,K+B;"*STRIKE QUICKLY*"
3580 GOSUB 300
3590 IF TV=O THEN GOTO 3620
3600 PRINT "TOO SLOW....TOO SLOW.."
3610 LET HF=O
3615 GOTO 3830
3620 IF G$="S" THEN GOTO 800
3640 IF MS=O THEN PRINT "YOUR SWORD IS USELESS"
3645 IF MS=O THEN GOTO 3830
3650 LET C=C-H
3660 IF C<=O THEN PRINT "YOU ARE EXHAUSTED"
3665 IF C<=O THEN GOTO 500
3670 LET F=RND*10
3675 LET Z=O
3680 IF G$="H" AND (F<5 OR CS>MS*K) THEN LET Z=H1
3690 IF G$="B" AND (F<7 OR CS>MS*K) THEN LET Z=H
3700 IF G$="L" AND (F<9 OR CS>MS*K) THEN LET Z=.3
3700 IF G$="L" AND (F<9 OR CS>MS*K) THEN LET Z=.3
3705 IF Z<>O THEN GOTO 3730
3710 PRINT "YOU MISSED IT"
3720 LET HF=O
3725 GOTO 3830
3730 IF HF=O THEN GOTO 3740
3732 LET D=MS+INT (RND*9)
3734 LET HF=O
3735 GOTO 3760
3740 LET D=INT ((((CS*50*RND)-(10*MS)+E)/100)*Z)
3745 IF D<O THEN LET D=O
3750 IF CS>(MS-D)*K THEN LET HF=H
3760 LET MS=MS-D
3765 IF MS<=O THEN LET MS=O
3770 PRINT "A HIT ..."
3790 IF D<>O THEN GOTO 3600
3792 PRINT "BUT NO DAMAGE"
3793 LET HF=O
3795 GOTO 3830
3800 PRINT D;" DAMAGE"
3802 GOSUB 390
3805 IF MS<=O THEN GOTO 3860
3820 IF HF=H THEN PRINT "THE ";K$;" STAGGERS..."
3830 GOSUB 390
3840 IF HF=H THEN GOTO 3570
3850 GOTO 4000
3860 PRINT "....KILLING THE MONSTER"
3870 LET EX=EX+U
3875 LET HF=O
3876 LET CF=O
3890 GOTO 2370
3900 PRINT "KNAVISH COWARD"
3905 LET CF=O
3910 GOTO 2370
4000 GOSUB 490
4005 PRINT "THE CREATURE ATTACKS"
4010 GOSUB 360
4020 IF MS=O THEN GOTO 4300
4030 IF MS<N AND N>B+B AND RND<H/H1 THEN GOTO 4300
4040 LET MS=MS-H
4045 IF MS<=O THEN GOTO 4240
4060 GOSUB 490
4070 LET Z=USR 16613
4080 IF Z=O THEN GOTO 4280
4160 LET G=INT ((((MS*75*RND)-(10*CS)-E)/100)*Z)
4164 GOSUB 360
4165 GOSUB 490
4170 IF G<=O THEN LET G=O
4175 IF G=O THEN PRINT "...SAVED BY YOUR ARMOUR"
4177 IF G=O THEN GOTO 4280
4180 LET C=C-G
4190 IF G>9 THEN LET CS=INT (CS-G/6)
4210 PRINT "YOU TAKE ";G;" DAMAGE"
4220 IF CS<=O OR C<=O THEN GOTO 500
4230 GOTO 4280
4240 PRINT AT R,O;"IN ITS DYING ATTEMPT"
4250 LET EX=INT (EX+U/H1)
4255 LET CF=O
4270 GOTO 2370
4280 GOSUB 390
4290 GOTO 3570
4300 PRINT AT R,O;"HURLING A LIGHTNING BOLT"
4310 LET G=INT (((180*N*RND)-(PS+E))/100)
4313 LET N=N-K-H
4315 IF G>9 THEN LET N=N-INT (G/5)
4320 GOSUB 360
4325 GOSUB 490
4330 IF N<=O THEN LET N=O
4335 IF N=O THEN GOTO 4240
4340 IF RND<H/K THEN GOTO 4410
4350 IF G<=O THEN LET G=O
4355 IF G=O THEN GOTO 4400
4360 PRINT "IT STRIKES HOME "
4370 GOSUB 390
4380 LET C=C-G
4385 IF G>9 THEN LET PS=INT (PS-G/K)
4390 GOTO 4210
4400 PRINT "YOUR PSI SHIELD PROTECTS YOU"
4405 GOTO 4280
4410 PRINT "MISSED YOU"
4415 GOTO 4280
4500 IF Q=CODE "H" AND PK=CODE "±" THEN GOTO 2020
4510 FOR I=B TO K+K
4520 LET N(I)=INT (K+RND*5)
4530 IF N(I)=K+H THEN GOTO 4520
4540 NEXT I
4550 IF S=H THEN LET HP=H
4560 LET P(B)=INT (R*RND+H1)
4650 LET C=C-K-B-B
4660 POKE M+V,O
4670 POKE W+V,QX
4680 IF Q=CODE "±" THEN LET S=H
4685 IF Q=CODE "±" THEN LET FL=H
4690 IF Q<>CODE "X" THEN GOTO 4720
4693 IF S=K THEN LET S=H
4695 IF S=K THEN LET FL=H
4700 IF S=K+H OR S=B+B THEN LET S=S-B
4705 IF S=K+H OR S=B+B THEN LET FL=FL-K
4710 IF S=K+H OR S=B+B THEN LET M=HW
4715 LET XP=O
4720 IF Q=CODE "S" THEN LET S=H1
4725 IF Q=CODE "S" THEN LET FL=S
4730 IF Q=CODE "W" THEN LET S=B
4735 IF Q=CODE "W" THEN LET FL=B
4740 IF Q=CODE "W" OR Q=CODE "S" THEN LET X=INT (H+5*RND)
4745 IF Q=CODE "W" OR Q=CODE "S" THEN LET Y=P(B)
4750 IF Q=CODE "õ" THEN LET S=K
4755 IF Q=CODE "õ" THEN LET FL=H1
4760 IF Q<>CODE "H" THEN GOTO 4780
4763 LET S=S+B
4765 LET FL=FL+K
4770 LET HW=M
4780 IF FL>K+K THEN LET FL=FL-K
4781 GOSUB 5000+(300 AND S=H1)+(310 AND S=B)+(500 AND S=K)+(510 AND S>=K+H)
4793 GOSUB 380
4795 GOTO 2000
5000 CLS 
5001 POKE ZZ,H
5002 POKE ZZ+H,K+H
5003 POKE ZZ+H1,K
5004 POKE ZZ+B,K+B
5005 POKE ZZ+K,K+K
5006 LET S=H
5007 LET FL=H
5010 POKE 16515,6
5020 LET ZP=USR 16514
5040 IF G(H)<>O THEN GOTO 5160
5050 LET M=H+(33*INT (11*RND+H))
5051 LET L=M
5052 LET MP=M
5053 LET W=M
5054 LET G(H)=M
5060 POKE M+V,149
5070 FOR I=B TO 33
5075 IF RND>H/H1 THEN GOTO 5090
5080 LET L1=L+34
5085 GOTO 5100
5090 LET L1=L-32
5100 IF L1<34 OR L1>396 THEN GOTO 5075
5110 LET G(I)=L1
5120 LET L=L1
5130 POKE G(I)+V,27
5140 NEXT I
5150 POKE G(33)+V,149
5155 GOTO 5200
5165 POKE G(H)+V,149
5170 FOR I=B TO 33
5175 POKE G(I)+V,27
5180 NEXT I
5190 POKE G(33)+V,149
5200 IF S(H)<>O THEN GOTO 5250
5210 FOR I=H TO K+H
5220 LET S(I)=33*INT (H+RND*11)+INT (H1+RND*28)
5230 IF PEEK (S(I)+V)<>O OR PEEK (S(I)+H+V)<>O THEN GOTO 5220
5240 NEXT I
5250 POKE S(H)+V,60
5255 POKE S(H)+H+V,60
5260 POKE S(2)+V,60
5265 POKE S(2)+H+V,60
5270 POKE S(B)+V,56
5275 POKE S(B)+H+V,56
5280 POKE S(K)+V,56
5285 POKE S(K)+H+V,56
5290 POKE S(5)+V,185
5292 LET M=MP
5294 LET W=M
5297 RETURN 
5300 POKE ZZ,H
5301 POKE ZZ+H,B+B
5302 POKE ZZ+H1,O
5303 POKE ZZ+B,O
5304 POKE ZZ+K,O
5307 LET PD=O
5308 LET PC=CODE "ª"
5309 GOTO 5320
5310 POKE ZZ,H
5311 POKE ZZ+H,H+K
5312 POKE ZZ+H1,B+B
5313 POKE ZZ+B,K+K
5314 POKE ZZ+K,O
5315 LET PC=CODE "T"
5320 LET PK=O
5325 CLS 
5330 FOR I=H TO 50
5335 LET N=33*INT (H1+RND*11)+INT (H1+RND*28)
5340 POKE N+V,PC
5345 NEXT I
5350 PRINT AT X,Y;"±±"
5355 PRINT AT X+H,Y-H;"±±±±±"
5360 PRINT AT X+H1,Y-H1;"±±  ±±"
5365 PRINT AT X+B,Y-H1;"±±H ±±±"
5370 PRINT AT X+K,Y-H;"±±±± ±±"
5375 PRINT AT X+K+H,Y;" ±±"
5380 PRINT AT X+B+B,Y+H1;"±"
5385 POKE 16515,136
5390 LET ZP=USR 16514
5399 POKE 345+V,O
5400 LET W=345
5405 IF Q=CODE "X" THEN LET M=HW
5407 IF Q=CODE "X" THEN LET W=H
5410 RETURN 
5500 POKE ZZ,H
5501 POKE ZZ+H,H+K
5502 POKE ZZ+H1,B
5503 POKE ZZ+B,B+K
5504 POKE ZZ+B,O
5505 GOTO 5515
5510 POKE ZZ,K+H
5511 POKE ZZ+H,H1
5512 POKE ZZ+H1,B
5513 POKE ZZ+B,O
5514 LET P(FL)=P(B)
5515 LET HX=N(FL)
5516 LET PK=O
5518 LET P=O
5520 CLS 
5540 LET PZ=USR 16556
5560 LET L1=CODE "9"
5570 FOR J=H TO B
5575 IF P(FL)>32 OR P(FL)<H THEN LET P(FL)=H
5580 LET D(J)=VAL Z$(P(FL))
5585 LET P(FL)=P(FL)+H
5590 IF D(J)<>9 THEN GOTO 5595
5592 LET P(FL)=H
5593 LET D(J)=B
5595 LET P=P+H
5600 NEXT J
5610 FOR I=O TO HX
5615 LET PC=CODE "±"
5620 LET L=L1+(33*I)
5625 IF L>386 THEN GOTO 5720
5630 IF I=H THEN LET PC=O
5640 IF D(H)=O THEN LET PC=CODE "±"
5645 IF D(H)=O THEN GOTO 5660
5650 POKE L+D(H)+V,PC
5655 LET PC=CODE "±"
5660 IF I=B THEN LET PC=O
5670 POKE L+D(H)+D(H1)+V,PC
5675 LET PC=CODE "±"
5680 IF I=K THEN LET PC=0
5690 POKE L+D(H)+D(H1)+D(B)+V,PC
5695 LET PC=CODE "±"
5700 NEXT I
5710 LET L1=L1+(33*HX)+33
5715 GOTO 5610
5720 LET L1=CODE "9"
5730 FOR J=H TO K
5740 LET L=L1+(33*J*(HX+H))
5750 FOR I=H TO R-K
5760 IF L>353 THEN GOTO 5810
5770 IF I=H1 OR I=B*HX OR I=R-B-B THEN GOTO 5790
5780 POKE L+I+V,PC
5790 NEXT I
5800 NEXT J
5810 IF S=K+H OR S=B+B THEN GOTO 5840
5820 IF FL/H1=INT (FL/H1) THEN POKE 418+V,R-B
5825 IF FL/H1=INT (FL/H1) THEN GOTO 5840
5830 POKE 36+V,R-B
5840 IF FL=H1 OR S=K+H OR S=B+B THEN POKE 446+V,61
5850 IF XP=O THEN LET W=413
5855 LET XP=H
5860 PRINT AT K*B+H1,H;
5865 IF S=K+H THEN GOTO 5930
5870 IF S=B+B THEN GOTO 5910
5880 PRINT "ZAEXON/S TOWER,L=";FL-H
5890 GOTO 5940
5910 PRINT "VOUNIM/S LAIR"
5920 GOTO 5960
5930 PRINT "Y/NAGIOTH TEMPLE"
5940 LET P(FL+H)=P(FL)+P
5960 IF FL<K OR RND<.3 THEN RETURN 
5970 FOR I=H TO INT (RND*S+H1)
5980 LET N1=33*INT (H+RND*12)+INT (K+RND*17)
5992 IF PEEK (V+H1)<>O THEN GOTO 5980
5993 POKE H1+V,23
5995 NEXT I
5997 RETURN 
6000 POKE W+V,52
6010 POKE M+V,O
6020 PRINT AT R,O;"STAIRS U/D ?"
6030 LET TV=FL
6040 GOSUB 600
6050 IF G$="U" THEN LET FL=FL+H
6055 IF G$="U" THEN GOTO 6070
6056 IF G$<>"D" THEN GOTO 6040
6060 LET FL=FL-H
6070 IF FL>K+B OR FL<H1 THEN GOTO 6090
6080 GOTO 4780
6090 PRINT AT R,O;"IT/S BLOCKED"
6092 GOSUB 360
6095 LET FL=TV
6099 GOTO 6020
tested, as you said Line 430 works the same with or without the parenthesis
Attachments
Line 430 status update.png
Poster Programs 1 Line 430.jpg
Last edited by David G on Tue Jan 10, 2023 7:00 am, edited 2 times in total.
User avatar
XavSnap
Posts: 1940
Joined: Sat May 10, 2008 4:23 pm
Location: 'Zx81 France' Fb group.

Re: A 15.999K Adventure game: The Valley of adventure.

Post by XavSnap »

Something to loot here ?
Cap0000.jpg
VALLEY.P
(14.48 KiB) Downloaded 59 times
Xavier ...on the Facebook groupe : "Zx81 France"(fr)
Post Reply