Treasure Hunt – Atari 8bit Basic

HC Mein Home-Computer – Anno 1985 – Numero: 06 – Trascrizione: Fernando Coello

Grazie al lavoro di Fernando Coello, nostro lettore, siamo in grado di presentarvi questo ennesimo listato preservato dall’oblio. Si tratta di un gioco di avventura scritto in Basic per Atari 8bit.

Fernando ha digitato il listato ed ha voluto condividere con noi il suo lavoro. Ringraziandolo per il suo operato, invitiamo altri lettori a fare lo stesso.

Il listato originale é apparso sulla rivista tedesca HC Mein Home-Computer numero 06 del 1985.

Titolo: Treasure Hunt
Piattaforma: Atari 8bit
Linguaggio: Basic
Versione originale: Marcel Offermann
Pubblicazione: HC Mein Home-Computer 1985-06
Anno: 1985
Trascrizione: Fernando Coello
Anno: 2021
Download: Treasure_Hunt.atr
Note: Versione funzionante su tutte le macchine Atari 8bit. Un prodotto Interface-Software.

Scopo del gioco
Sei un cacciatore di tesori alle prese con fantasmi e mostri a guardia delle gemme e preziosi che si nascondono nei 6 livelli del gioco. Per prendere i tesori basterá passarci sopra, ma facendo attenzione a non venire colpiti dai guardiani ed evitando di cadere nelle botole. Guardiani e botole possono essere evitati saltando. Per passare al livello successivo deve essere racolta la chiave che ne sblocca l’accesso.
Joystick in porta 1 e via!
Il tasto Start é generalmente mappato sul tasto F2.

Qui di seguito trovate il codice da copiare sul vostro computer Atari ad 8 bit.
Il codice é pronto per essere copiato su un emulatore, consigliamo Altirra.

Di seguito riportiamo le istruzioni per copiare il listato sull’emulatore Altirra ed eseguire il gioco:
– lanciare l’emulatore Altirra
– avviare il Basic: File -> Boot Image... e selezionare ATARIBAS.ROM (se non l’avete potete cercarla qui)
– copiate il codice sotto riportato
– incollatelo nell’emulatore tramite la funzione: View -> Paste Text
– per velocizzare l’operazione di copia del codice potete usare la funzione: System -> Warp Speed
– terminata l’operazione di copia (disattivate il Warp nel caso, System -> Warp Speed)
– digitare RUN
– il gioco supporta il joystick in porta 1: Input -> Input Mappings…
– Buon divertimento!
– Il tasto Start é generalmente mappato sul tasto F2

Chi volesse provare il gioco direttamente puó scaricare il file ATR (si veda la voce Download).
Una volta montata l’immagine disco su Altirra, usare il comand RUN “D1:TREASURE.BAS” per eseguire il gioco.
Si ringrazia Filippo Santellocco per l’aiuto nella creazione del file .ATR.

Attenzione – Ci siamo resi conto che nel listato i caratteri ‘>’ e ‘<‘ potrebbero venir sostituiti dai rispettivi encoding html ‘&gt’ e ‘&lt’. Nel caso, sostituite questi valori nel listato prima di copiarlo sull’emulatore.

Listato: Treasure Hunt – Atari 8bit – Basic


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
10 CLR :GOSUB 2000
15 PAGE=PEEK(106)-8:CHS=PAGE*256:GOSUB 1500:GRAPHICS 17:NCHS=PAGE:POKE 756,NCHS
20 DIM WX(3),WY(3),PF$(99),PF1$(99),OC(3),AC(3):LIVES=3
30 PX=5:PY=19:GLD=0:KEY=0:TRE=0:TIME=200:X=19:PCHR=140:WCHR=141:N=1:OC=32:P=0:GOSUB 1210
40 REM {inv}*** Ghosts ***{inv}
50 RESTORE 55:FOR I=1 TO 3:READ WX,WY:WX(I)=WX:WY(I)=WY:COLOR WCHR:PLOT WX(I),WY(I):OC(I)=32:NEXT I
55 DATA 4,10,4,13,4,16
60 REM {inv}*** Player ***{inv}
70 COLOR PCHR:PLOT PX,PY:GOTO 305
80 REM {inv}*** Ghostmovement ***{inv}
90 FOR I=1 TO 3:SOUND 0,121,10,5
100 LOCATE WX(I)+N,WY(I),AC:AC(I)=AC
110 IF AC(I)=35 THEN POP :N=-N:WCHR=WCHR-N:GOTO 160
120 IF AC(I)=130 OR AC(I)=139 OR AC(I)=140 THEN GOTO 720
130 COLOR OC(I):PLOT WX(I),WY(I):WX(I)=WX(I)+N:COLOR WCHR:PLOT WX(I),WY(I):OC(I)=AC(I)
140 SOUND 0,0,0,0:NEXT I
150 REM {inv}*** Playermovement ***{inv}
160 ST=PEEK(632):P=0:PCHR=140
165 IF ST<>7 AND ST<>11 AND ST<>13 AND ST<>14 THEN COLOR 140:PLOT PX,PY:FOR I=1 TO 22:NEXT I:RETURN
170 X=(ST=7)-(ST=11)
180 Y=(ST=13)-(ST=14):PCHR=PCHR-(X=-1)-(2*(X=1))
190 IF PEEK(644)=0 THEN GOSUB 830
200 LOCATE PX+X,PY+Y,AC
210 IF AC=35 AND X<>0 THEN RETURN
220 IF AC<>165 AND Y<>0 AND AC<>0 AND Y<>0 THEN RETURN
230 IF AC=2 THEN GOSUB 380
240 IF AC=1 THEN GOSUB 450
260 IF AC=166 OR AC=167 THEN GOSUB 520
270 IF AC=168 OR AC=169 THEN GOTO 585
280 IF AC=141 OR AC=142 THEN GOTO 720
290 COLOR OC:PLOT PX,PY:PX=PX+X:PY=PY+Y:COLOR PCHR:PLOT PX,PY
295 LOCATE PX,PY+1,H:IF H=32 THEN GOTO 640
297 OC=AC:RETURN
300 REM {inv}*** Mainloop ***{inv}
305 POKE 756,NCHS:NCHS=NCHS+2:IF NCHS>PAGE+2 THEN NCHS=PAGE
310 SCORE=SCORE+P:TIME=TIME-1:IF TIME<1 THEN GOTO 690
320 POSITION 1,1:? #6;LEVEL:POSITION 18,1:? #6;LIVES
330 POSITION 11-LEN(STR$(SCORE)),22:? #6;SCORE
340 POSITION 17,22:? #6;"000":POSITION 20-LEN(STR$(TIME)),22:? #6;TIME
350 GOSUB 90
360 GOTO 305
370 REM {inv}*** Gold found ***{inv}
380 FOR I=1 TO 10
390 FOR I1=10 TO 1 STEP -1:SOUND 0,I1*10,10,I1:NEXT I1:SOUND 0,0,0,0
400 COLOR AC:PLOT PX+X,PY:FOR T=1 TO 30:NEXT T
410 COLOR 32:PLOT PX+X,PY:FOR T=1 TO 30:NEXT T
420 NEXT I
430 AC=32:GLD=GLD+1:P=100:RETURN
440 REM {inv}*** Key found ***{inv}
450 FOR I=1 TO 10
460 FOR T1=10 TO 1 STEP -1:SOUND 0,T1*5,10,T1:SOUND 1,T1*10,2,T1:NEXT T1:SOUND 0,0,0,0:SOUND 1,0,0,0
470 COLOR AC:PLOT PX+X,PY:FOR T=1 TO 30:NEXT T
480 COLOR 32:PLOT PX+X,PY:FOR T=1 TO 30:NEXT T
490 NEXT I
500 AC=32:KEY=1:P=250:RETURN
510 REM {inv}*** Treasure found ***{inv}
520 RESTORE 530:FOR I=0 TO 5
530 READ S1,S2,S3:SOUND 0,S1,14,S2
540 FOR I1=0 TO S3:NEXT I1:NEXT I:SOUND 0,0,0,0
550 DATA 160,15,25,130,8,25,100,10,25,70,6,75,100,10,50,130,8,50
560 COLOR 32:PLOT PX+X,PY:PLOT PX+(2*X),PY:AC=32
570 TRE=1:P=500:RETURN
580 REM {inv}*** Level won ***{inv}
585 IF GLD<>6 OR KEY<>1 OR TRE<>1 THEN 290
590 FOR I=15000 TO 0 STEP -300
600 SOUND 0,I,10,I/1000:SOUND 1,I+125,10,I/1000
610 POKE 712,PEEK(53770):NEXT I:SOUND 0,0,0,0:SOUND 1,0,0,0
620 SCORE=SCORE+1000:GOTO 30
630 REM {inv}*** Fallen in a hole ***{inv}
640 PCHR=140:LOCATE PX-1,PY,J:LOCATE PX+1,PY,J1:IF J=165 OR J1=165 THEN T1=1:GOTO 650
645 I1=3
650 FOR I=1 TO I1:COLOR 32:PLOT PX,PY:FOR T=1 TO 5:NEXT T
660 COLOR PCHR:PLOT PX,PY+1:PY=PY+1:FOR T=1 TO 5:NEXT T:NEXT I
670 GOTO 720
680 REM {inv}*** Time is out ***{inv}
690 POP :POSITION 0,22:? #6;"    TiMe Is OuT     "
700 GOTO 720
710 REM {inv}*** Level lost ***{inv}
720 PCHR=140:FOR I=1 TO 6
730 FOR I1=15 TO 0 STEP -1:SOUND 0,I1+10,10,I1:SOUND 1,I1+200,10,I1:NEXT I1
740 COLOR 32:PLOT PX,PY:FOR T=1 TO 30:NEXT T
750 COLOR PCHR:PLOT PX,PY:FOR T=1 TO 30:NEXT T:NEXT I
760 FOR T=1 TO 30:NEXT T
770 FOR I=0 TO 15
780 I1=ABS(I-15):SOUND 0,I*15,10,I:SOUND 1,I*10,10,I:SETCOLOR 3,0,I1
790 FOR T=1 TO 20:NEXT T:NEXT I:SOUND 0,0,0,0:SOUND 1,0,0,0
800 LIVES=LIVES-1:L=L-1:LEVEL=LEVEL-1
810 IF LIVES=0 THEN GOSUB 1040
815 GOTO 30
820 REM {inv}*** Player-Jump ***{inv}
830 LOCATE PX+X,PY-1,AC:IF AC=35 THEN 300
840 COLOR OC:PLOT PX,PY:COLOR PCHR:PY=PY-1:PX=PX+X:PLOT PX,PY:FOR T=1 TO 15:NEXT T:OC=AC
850 LOCATE PX+X,PY+1,AC:IF AC=35 THEN COLOR 32:PLOT PX,PY:PY=PY+1:COLOR PCHR:PLOT PX,PY:RETURN
860 COLOR OC:PLOT PX,PY:COLOR PCHR:PX=PX+X:PY=PY+1:PLOT PX,PY:FOR T=1 TO 15:NEXT T:IF AC=166 OR AC=167 THEN AC=32
870 OC=AC:RETURN
880 REM {inv}*** Game won ***{inv}
890 POKE 756,224
900 GRAPHICS 1:SETCOLOR 2,0,0
910 POSITION 2,3:? #6;"CoNgRaTulaTiOnS":POSITION 6,8:? #6;"game  WON"
930 POSITION 1,12:? #6;"YOUR score : 00000":POSITION 19-LEN(STR$(SCORE)),12:? #6;SCORE
940 RESTORE 940:FOR I=1 TO 6
950 READ S1,S2:SOUND 0,S1,10,10
960 FOR T=0 TO S2:NEXT T:NEXT I:SOUND 0,0,0,0
970 DATA 50,25,100,30,75,30,200,50,150,30,100,30
980 POKE 752,1
990 ? "         {inv}Press START to begin{inv}"
1000 IF PEEK(53279)<>6 THEN 1000
1010 CLR :PAGE=PEEK(106)-8:NCHS=PAGE:GRAPHICS 17:POKE 756,NCHS:GOTO 20
1030 REM {inv}*** GAme lost ***{inv}
1040 POKE 756,224
1050 GRAPHICS 1:SETCOLOR 2,0,0
1060 POSITION 6,6:? #6;"GaMe LoSt":POSITION 5,10:? #6;"IN level  ";LEVEL+1
1070 POSITION 1,15:? #6;"YOUR score : 00000":POSITION 19-LEN(STR$(SCORE)),15:? #6;SCORE
1080 FOR I=14 TO 0 STEP -2:FOR I1=100 TO 250 STEP 10
1090 SOUND 0,I1,10,I:NEXT I1:NEXT I
1100 GOTO 980
1200 REM {inv}*** Playfield-Offset ***{inv}
1210 SETCOLOR 1,1,12:SETCOLOR 0,0,8:SETCOLOR 3,0,15:SETCOLOR 2,14,9:SETCOLOR 4,0,0
1220 IF L>2 THEN L=0
1230 RESTORE 2100+10*(L*18)
1240 V=3:? #6;CHR$(125)
1250 V=V+1:READ PF$:IF PF$="LEVEL" THEN LEVEL=LEVEL+1:L=L+1:GOTO 1280
1260 POSITION 0,V:? #6;PF$:IF LEVEL=6 THEN 890
1270 GOTO 1250
1280 POSITION 3,0:? #6;"TrEaSuRe HuNt":POSITION 0,22:? #6;"score:00000 time: 000":RETURN
1500 REM {inv}*** Characterset ***{inv}
1520 FOR I=128 TO 471:POKE CHS+I,PEEK(57344+I):POKE CHS+512+I,PEEK(57344+I):NEXT I
1530 RESTORE 1560
1540 READ IC:IF IC=-1 THEN RETURN                                          
1550 FOR LI=0 TO 7:READ BY:POKE CHS+8*IC+LI,BY:NEXT LI:GOTO 1540
1555 REM {inv}*** Characterset-Data ***{inv}
1560 DATA 1,0,6,15,249,239,6,0,0
1570 DATA 2,34,148,65,58,124,62,122,60
1580 DATA 3,251,251,251,0,223,223,223,223
1590 DATA 4,255,0,118,118,0,94,94,94
1600 DATA 5,195,195,255,255,195,195,255,255
1610 DATA 6,15,27,55,0,55,54,55,55
1620 DATA 7,248,108,118,0,118,54,118,118
1630 DATA 8,1,3,7,11,10,11,11,11
1640 DATA 9,128,192,224,208,80,208,208,208
1650 DATA 10,62,123,251,255,110,26,114,67
1660 DATA 74,62,123,251,254,244,100,12,8
1670 DATA 11,124,222,223,255,118,88,78,194
1680 DATA 75,124,222,222,127,47,38,48,16
1690 DATA 12,126,219,219,254,232,92,22,48
1700 DATA 76,126,219,219,127,23,58,104,12
1710 DATA 13,12,30,181,127,59,63,126,212
1720 DATA 77,12,30,53,127,191,63,126,170
1730 DATA 14,48,120,173,254,220,252,126,39
1740 DATA 78,48,120,172,254,253,252,126,101
1750 DATA 65,0,6,15,249,239,6,0,0
1760 DATA 66,68,41,130,92,62,116,126,60
1770 DATA 67,251,251,251,0,223,223,223,223
1780 DATA 68,255,0,118,118,0,94,94,94
1790 DATA 69,195,195,255,255,195,195,255,255
1800 DATA 70,15,27,55,0,55,54,55,55
1810 DATA 71,248,108,118,0,118,54,118,118
1820 DATA 72,1,3,7,11,10,11,11,11
1830 DATA 73,128,192,224,208,80,208,208,208,-1
2000 REM {inv}*** Titel ***{inv}
2005 GRAPHICS 17:POSITION 1,7:? #6;"InTeRfAcE-sOfTwArE":POSITION 6,9:? #6;"PRESENTS..."
2010 POSITION 4,20:? #6;"('MCMLXXXIV')"
2020 FOR I=1 TO 300:NEXT I
2030 GRAPHICS 1:SETCOLOR 2,0,0:POSITION 3,3:? #6;"TrEaSuRe HuNt":POSITION 4,6:? #6;"  1985 BY"
2040 POSITION 2,8:? #6;"MARCEL OFFERMANN":POSITION 9,12:? #6;"AN":POSITION 1,14:? #6;"InTeRfAcE-sOfTwArE"
2050 POSITION 6,16:? #6;"PRODUCT"
2060 POKE 752,1:? " {inv}Please wait until{inv} {inv}the game is setup{inv}"
2070 RETURN
2090 REM *** PLAYFIELD DATA ***
2100 DATA $ $ $ $ $ $ $ $ $ $
2110 DATA ####################
2120 DATA #                  #
2130 DATA #  {^}a      {^},        #
2140 DATA ##### ####{inv}%{inv}#########
2150 DATA #         {inv}%{inv}        #
2160 DATA # {^}b  {^},    {inv}%{inv}      {^}b #
2170 DATA #####{inv}%{inv}###### #######
2180 DATA #    {inv}%{inv}             #
2190 DATA # {^}b  {inv}%{inv}     {inv}&'{inv}  {^}, {^}b #
2200 DATA ######### #####{inv}%{inv}####
2210 DATA #              {inv}%{inv}   #
2220 DATA # {^}b      {^},     {inv}%{inv} {^}b #
2230 DATA ###### ##{inv}%{inv}##########
2240 DATA #        {inv}%{inv}         #
2250 DATA #  {inv}(){inv}    {inv}%{inv}         #
2260 DATA ####################
2270 DATA LEVEL
2280 DATA $ $ $ $ $ $ $ $ $ $
2290 DATA ####################
2300 DATA #                  #
2310 DATA #     {^},   {^}a        #
2320 DATA ######{inv}%{inv}######## ####
2330 DATA #     {inv}%{inv}            #
2340 DATA # {^}b   {inv}%{inv}  {^},   {inv}&'{inv}  {^}b #
2350 DATA ####### #{inv}%{inv}##########
2370 DATA #        {inv}%{inv}         #
2380 DATA # {^}b      {inv}%{inv}     {^}, {^}b #
2390 DATA #### ##########{inv}%{inv}####
2400 DATA #              {inv}%{inv}   #
2410 DATA # {^}b       {^},    {inv}%{inv} {^}b #
2420 DATA ##########{inv}%{inv}# #######
2430 DATA #         {inv}%{inv}        #
2440 DATA #         {inv}%{inv}   {inv}(){inv}   #
2450 DATA ####################
2455 DATA LEVEL
2460 DATA $ $ $ $ $ $ $ $ $ $
2470 DATA ####################
2480 DATA #                  #
2490 DATA #         {^}a   {^},    #
2500 DATA ######## #####{inv}%{inv}#####
2510 DATA #             {inv}%{inv}    #
2520 DATA # {^}b      {^}, {inv}&'{inv} {inv}%{inv}  {^}b #
2530 DATA ###### ##{inv}%{inv}##########
2540 DATA #        {inv}%{inv}         #
2550 DATA # {^}b  {^},   {inv}%{inv}       {^}b #
2560 DATA #####{inv}%{inv}###### #######
2570 DATA #    {inv}%{inv}             #
2580 DATA # {^}b  {inv}%{inv}       {^},   {^}b #
2590 DATA ######### ###{inv}%{inv}######
2600 DATA #            {inv}%{inv}     #
2610 DATA #      {inv}(){inv}    {inv}%{inv}     #
2620 DATA ####################
2630 DATA LEVEL

Share

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.