Super Polpetta – Commodore 64 – Basic V2

Rivista: LIST – Numero: 6 – Anno 1984 – Trascrizione: Nello Galiano !NG73

Dopo un’avventura testuale per ZX81, che potete trovare sempre su RetroLiPS, Planet Raith ZX81 ed un porting dello stesso gioco su Commodore 64, Planet Raith per C64, é la volta di un gioco d’azione con caratteri ridefiniti e sprite per il nostro amato biscottone, trascritto da Nello Galiano !NG73.

Lasciamo la parola a Nello che ci racconta qualcosa su questo gioco per C64.

Avevo 11 anni quando mi capitò per le mani un numero di LIST; una meravigliosa rivista con tanti listati di giochi e programmi per le più diverse macchine: VIC20, ZX Spectrum, CBM64, Sharp MZ-700, TI-99/4A, ORIC1, SEGA SC3000. A quei tempi ero un fortunato possessore di un Commodore 64.
La mia copia di quel numero della rivista,però, aveva delle pagine strappate; in particolare c’era un gioco, “Super Polpetta”, di cui avevo solo la prima pagina e brandelli delle successive.
Ricordo che avrei voluto tanto poterlo scrivere quel gioco, che dalla descrizione sembrava davvero simpatico, ma ahimè non avevo tutte le righe del listato e allora fantasticavo su come potesse essere, leggendo e rileggendone la descrizione.
Tempo dopo, a 48 anni, ritrovavo su internet una scansione di quella rivista e di quel numero, il numero 6 di novembre/dicembre 1984, che, sorpresa, era completa e includeva le pagine con il codice completo di Superpolpetta! A undici anni, mai avrei potuto immaginare che un giorno avrei visto materializzarsi davanti a me quel listato tanto agognato.
Allora di botto, nel 2021, mi mettevo a scriverlo e non vi dico l’emozione di scoprire che quel gioco era proprio come lo avevo “visto” con la mia immaginazione da bambino.

Tecnicamente il gioco è interessante. E’ scritto in BASIC, ma è abbastanza veloce.
Fa uso di caratteri ridefiniti, sprite multicolor, suoni. Viene anche gestito lo spostamento degli sprites oltre la locazione x=255 dello schermo. Insomma è interessante da studiare per un principiante.
L’ho riscritto in CBM prg studio. Alla riga 9131 ho dovuto sostituire la variabile PI con PP perchè la prima veniva interpretata come pi greco.
Inoltre ho effettuato la modifica suggerita per giocare con joystick anzichè tastiera.
Certamente si potrebbero ottimizzare alcune cose, ma ho voluto lasciarlo come l’originale.
Mi piacerebbe conoscere l’autore MAURO CIFANI… Chissà…

Questo listato é stato pubblicato sulla rivista italiana LIST di Novembre/Dicembre 1984 Nr. 6.

Titolo: Super Polpetta
Piattaforma: Commodore 64
Linguaggio: Basic V2
Versione originale: Mauro Cifani
Pubblicazione: LIST
Anno: 1984
Trascrizione: Nello Galiano !NG73
Anno: 2022
Download: Super Polpetta
Note: il listato originale é stato rivisto e corretto da Nello Galiano.

Istruzioni
Sei pippo, una polpetta dotata di straordinari poteri, nello snack bar di Arnold’s. Devi evitare due tipi di pericoli: delle focacce che ti si scaglieranno contro dal bancone ed il cameriere che ti spruzzera’ del ketchup per condirti e servirti al prossimo cliente. Puoi muoverti per evitare questi pericoli e cercare di distruggere le focacce con uno schizzo di grasso bollente premendo [spazio]. Se le colpirai aumenterai il punteggio. attenzione! Il cameriere non puo’ essere distrutto. Hai 5 vite a disposizione.
Joystick in porta 2.

Come sempre, qui di seguito trovate il codice ottimizzato per essere copiato direttamente su CBM prg Studio.

Se invece siete ansiosi di provare il gioco su un C64 reale o su un emulatore, scaricate il file Super Polpetta dal nostro sito retromagazine.net.

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:  Super Polpetta – Commodore 64 – Basic V2


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
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
0 REM *** Tratto da LIST 6 1984, riscritto e adattato da NELLO GALIANO !NG73 ***
1 REM ******************
2 REM *                *
3 REM * SUPER POLPETTA *
4 REM *                *
5 REM * DI MAURO CIFANI*
6 REM *                *
7 REM ******************
8 REM ***SET COLORI SCHERMO***
9 POKE53281,1:POKE53280,13
10 GOSUB12000:REM ***STAMPA ISTRUZIONI***
15 PRINT"{clear}{down}{down}attendere,prego...sto caricando dati"
17 :
18 REM ***SET CARATTERI GRAFICI E SPRITE***
19 :
20 GOSUB40140
25 GOSUB62000:C=0
30 GOSUB40000
50 GOSUB42000
60 GOSUB300
70 POKEV+21,PEEK(V+21)OR32
77 :
78 REM ***MOVIMENTO FOCACCIA***
79 :
80 POKEV+8,X2:FORY2=74TO250STEP10:POKEV+9,Y2
100 REM ***ROUTINE PRINCIPALE***
105 PRINT"{black}{home}{down*23}punt.= "PU
110 TP=PEEK(56320):REM modifico per joy port2 invece di tasti
115 POKEV+30,0
119 REM ***MOVIMENTO A SINISTRA***
120 IF(TPAND4)=0THENX=X-10
124 REM ***FUOCO***
125 IF(TPAND16)=0THENGOSUB9100
129 REM ***MOVIMENTO A DESTRA***
130 IF(TPAND8)=0THENX=X+10
131 IFX<20ANDC=0THENX=20
132 IFX>45ANDC=1THENX=45
134 IFX<10THENX=250:POKEV,X:POKEV+12,X:POKEV+16,PEEK(V+16)AND190:C=0
136 IFX>250THENPOKEV+16,PEEK(V+16)OR65:X=10:C=1
139 REM ***POSIZIONE POLPETTA E OMBRA***
140 POKEV,X:POKEV+12,X:X1=X1+DX
144 REM ***ANALISI COLLISIONE POLPETTA-FOCACCIA***
145 J=PEEK(V+30):IF(JAND17)=17THENGOSUB2000
146 POKEV+30,0
149 REM ***MOVIMENTO CAMERIERE***
150 IFX1<40ANDC1=0THENDX=-DX:GOSUB500
160 IFX1=45ANDC1=1THENDX=-DX:GOSUB500
170 IFX1<5THENX1=250:POKEV+14,X1:POKEV+16,PEEK(V+16)AND127:C1=0
180 IFX1>250THENPOKEV+16,PEEK(V+16)OR128:X1=5:C1=1
185 POKEV+14,X1
200 IFX1=ACTHENGOSUB9000
205 IFC1=1ANDX1=BCTHENGOSUB9000
235 NEXT
236 GOTO60
300 REM ***ATTACCO DELLA POLPETTA***
301 POKEV+21,PEEK(V+21)OR16
305 FORJ=1146TO1182STEP5:POKEJ,64:POKEJ+1,65:NEXT
306 FORJ=1186TO1222STEP5:POKEJ,66:POKEJ+1,67:NEXT
310 FA=INT(6*RND(1))+1
320 IFFA=1THENX2=36:POKE1146,0:POKE1147,0:POKE1186,0:POKE1187,0
330 IFFA=2THENX2=76:POKE1151,0:POKE1152,0:POKE1191,0:POKE1192,0
340 IFFA=3THENX2=116:POKE1156,0:POKE1157,0:POKE1196,0:POKE1197,0
350 IFFA=4THENX2=156:POKE1161,0:POKE1162,0:POKE1201,0:POKE1202,0
360 IFFA=5THENX2=196:POKE1166,0:POKE1167,0 :POKE1206,0:POKE1207,0
370 IFFA=6THENX2=236:POKE1171,0:POKE1172,0:POKE1211,0:POKE1212,0
390 RETURN
500 REM ***FUOCO CASUALE DEL CAMERIERE***
510 AC=(INT(21*RND(1))+1)*10
520 BC=INT(3*RND(1)+1)*5
530 RETURN
1999 REM ***MORTE DELLA POLPETTA***
2000 NV=NV+1
2010 POKEV+21,PEEK(V+21)AND191
2020 POKE2040,253:POKEV+23,PEEK(V+23)OR1
2030 POKE54277,5:POKE54278,255
2035 POKE54276,33:POKE54272,1
2040 FORJ=255TO0STEP-5:POKE54273,J:FORG=1TO50:NEXT:NEXT
2045 POKE54276,0
2050 POKEV+23,PEEK(V+23)AND254:POKE2040,248
2060 POKEV+21,PEEK(V+21)OR64
2100 POKEV+5,0:POKEV+7,0
2105 POKEV+9,0
2110 POKEV+21,PEEK(V+21)AND243
2200 POKEV+16,PEEK(V+16)AND243
2210 POKEV+21,PEEK(V+21)AND239
2220 IFNV=5THEN15000
2299 RETURN
8998 :
8999 REM ***FUOCO DEL CAMERIERE***
9000 POKEV+4,PEEK(V+14)-4:POKEV+6,PEEK(V+14)+28
9005 IFC1=1THENPOKEV+16,PEEK(V+16)OR12
9010 POKEV+21,PEEK(V+21)OR12
9016 POKE54277+7,96:POKE54278+7,0
9017 POKE54276+7,33:POKE54272+7,37:POKE54273+7,17
9020 FORY3=120TO240STEP15:POKEV+5,Y3:POKEV+7,Y3
9024 J=PEEK(V+30)AND9:IFJ=9THENGOSUB2000:GOTO9026
9025 J=PEEK(V+30)AND5:IFJ=5THENGOSUB2000
9026 POKEV+30,0
9027 NEXT
9030 POKEV+21,PEEK(V+21)AND243
9040 POKEV+16,PEEK(V+16)AND243
9047 POKE54276+7,32
9050 RETURN
9100 REM ***FUOCO DELLA POLPETTA***
9110 IFX>240THENRETURN
9111 IFC=1THENPOKEV+16,PEEK(V+16)OR2
9112 POKEV+2,X+15:POKEV+3,176
9120 POKEV+21,PEEK(V+21)OR2
9130 FORY4=176TO80STEP-7:POKEV+3,Y4
9131 PP=PEEK(V+30):IF(PPAND18)=18THENGOSUB9170:REM SOSTITUITO PI CON PP
9135 NEXT
9140 POKEV+16,PEEK(V+16)AND253
9150 POKEV+21,PEEK(V+21)AND253
9160 RETURN
9170 REM ***DISTRUZIONE FOCACCIA***
9180 PU=PU+100
9185 POKE2044,253:POKE54277,9:POKE54278,0
9186 POKE54273,17:POKE54272,37:POKE54276,17
9187 FORK8=1TO1000:NEXT:POKE54276,0:POKE2044,252:POKEV+9,0
9190 POKEV+21,PEEK(V+21)AND239 :POKEV+30,0:RETURN
11998 :
11999 REM ***STAMPA ISTRUZIONI***
12000 PRINT "{clear}{black}{down*5}vuoi le istruzioni (s/n)?"
12001 GETA$:IFA$<>"s" ANDA$<>"n"THEN12001
12002 IFA$="n"THENRETURN
12010 PRINT"{clear}{black}{down}{right*4}s-u-p-e-r---p-o-l-p-e-t-t-a"
12030 PRINT"{cm o*38}"
12040 PRINT"{black}{down}ora sei pippo,una polpetta dotata di"
12050 PRINT"straordinari poteri,nello snack bar di"
12060 PRINT"arnold's.devi evitare due tipi di peri-"
12070 PRINT"coli:delle focacce che ti si scaglie-"
12080 PRINT"ranno contro dal bancone,ed il camerie-"
12090 PRINT"re,che ti spruzzera' del ketchup per"
12100 PRINT"condirti e servirti al prossimo clien-"
12110 PRINT"te. puoi muoverti per evitare questi pe-"
12120 PRINT"ricoli, e cercare di distruggere le fo-"
12130 PRINT"cacce con uno schizzo di grasso bollen-"
12140 PRINT"te premendo {yellow}[spazio]{black}.se le colpirai"
12150 PRINT"aumenterai il punteggio.{reverse on}attenzione!{reverse off}il"
12160 PRINT"cameriere non puo' essere distrutto.hai"
12170 PRINT"5 vite a disposizione. usa joystick 2"
12180 REM PRINT"{yellow}[<]{black}=sinistra {yellow}[>]{black}=destra"
12190 PRINT"per iniziare il gioco premi un tasto."
12200 GETA$:IFA$=""THEN12200
12210 PRINT"{clear}":RETURN
14998 :
14999 REM ***FINE DEL GIOCO***
15000 POKEV+21,0:PRINT"{clear}":POKE54296,15
15001 POKE54277+14,0:POKE54278+14,240
15002 POKE54273+14,8:POKE54272+14,147
15010 FORJ=1TO50:PRINT "{home}{down*10}        {blue}g-a-m-e--o-v-e-r"
15015 POKE54276+14,17
15020 FORG=1TO50:NEXT
15025 POKE54276+14,16
15030 PRINT "{home}{down*10}        {yellow}g-a-m-e--o-v-e-r"
15040 FORG=1TO50:NEXT:NEXT
15045 POKE54276+14,16
15050 PRINT"il tuo punteggio e' ";PU;" punti"
15060 IFPU<RETHEN15100
15070 IFPU>RETHENRE=PU:PRINT":e' il record di oggi!"
15075 FORP=1TO15:GETA$:NEXT
15080 INPUT"come ti chiami";NOME$
15090 PRINT"  {yellow}**c-o-n-g-r-a-t-u-l-a-z-i-o-n-i**"
15095 GOTO 15200
15100 PRINT"il record di oggi e' ";RE" di ";NOME$
15200 PRINT"un'altra partita (s/n)":A$=""
15210 GETA$:IFA$<>"s"ANDA$<>"n"THEN15210
15220 IFA$="s"THENNV=0:PU=0:GOTO30
15230 END
40000 :
40010 REM ***SET SCHERMO***
40020 :
40030 REM ***LOCAZIONI COLORE***
40040 FORJ=55296TO55535:POKEJ,0:NEXT
40050 FORJ=55576TO55775:POKEJ,3:NEXT
40060 FORJ=55776TO56295:POKEJ,7:NEXT
40070 FORJ=55418TO55494STEP5:POKEJ,10:POKEJ+1,10:NEXT
40080 REM ***LOCAZIONI SCHERMO***
40090 FORJ=1025TO1062:POKEJ,100 :NEXT
40091 FORJ=1065TO1083:POKEJ,69:NEXT
40092 FORJ=1083TO1102:POKEJ,68:NEXT
40093 FORJ=1104TO1143:POKEJ,32+128:NEXT
40094 FORJ=1144TO1222STEP5:POKEJ,32+128:NEXT
40095 FORJ =1224TO1263:POKEJ,32+128:NEXT
40096 POKE1064,70:POKE1344,70:POKE1103,71:POKE1383,71
40100 FORJ=1305TO1342:POKEJ,100:NEXT
40110 FORJ=1345TO1363:POKEJ,69:NEXT
40111 FORJ=1364TO1382:POKEJ,68:NEXT
40120 FORJ=1384TO1503:POKEJ,32+128:NEXT
40130 FORJ=1504TO2023:POKEJ,102:NEXT
40131 FORJ=1146TO1182STEP5:POKEJ,64:POKEJ+1,65:NEXT
40132 FORJ =1186TO1222STEP5:POKEJ,66:POKEJ+1,67:NEXT
40135 RETURN
40137 :
40138 REM ***SET CAPATTERI PERSONALI***
40139 :
40140 PRINTCHR$(142):POKE52,48:POKE56,48:CLR
40150 POKE56334,PEEK(56334)AND254:POKE1,PEEK(1)AND251
40160 FORI=0TO511:POKEI+12288,PEEK(I+53248):NEXT
40161 FORI=800TO800+7:POKEI+12288,PEEK(53248+I):NEXT
40162 FORI=1280TO1280+7:POKEI+12288,PEEK(53248+I):NEXT
40163 FORI=12288TO12288+7:POKEI,0:NEXT
40165 FORI=816TO816+7:POKEI+12288,PEEK(53248+I): NEXT
40170 POKE1,PEEK(1)OR4
40175 POKE56334,PEEK(56334)OR1
40180 POKE53272,(PEEK(53272)AND240)+12
40190 FOR I=12800TO12800+63:READA:POKEI,A:NEXT
40195 POKE53270,PEEK(53270)OR16:POKE53282,8
40200 GOTO25
41000 DATA0,0,1,5,21,21,85,255
41010 DATA0,0,64,80,84,84,85,255,255,85,21,21,5,1,0,0
41020 DATA255,85,84,84,80,64,0,0
41030 DATA136,68,34,17,136,68,34,17
41040 DATA17,34,68,136,17,34,68,136
41050 DATA1,2,4,8,17,34,68,136
41060 DATA128,64,32,16,136,68,34,17
42000 :
42005 POKEV+29,193:POKEV+23,128
42008 DX=10:X=50:X1=40
42010 POKEV+15,85
42015 POKEV+16,0:POKEV+21,223
42020 POKEV,X:POKEV+1,196:POKEV+12,X:POKEV+13,196+37
42025 POKEV+5,0:POKEV+7,0
42026 POKE54296,15
42030 RETURN
61997 :
61998 REM ***DATA PER GLI SPRITE***
61999 :
62000 V=53248
62005 B(0)=248:B(1)=249:B(2)=250:B(3)=251:B(4)=252:B(5)=253:B(6)=254:B(7)=255
62010 NS=7:IFNS=0THEN RETURN
62015 FORA=1TONS
62020 READSK,M1,M2:IFSK=0THENPOKEV+28,PEEK(V+28)AND255-2^(A-1):GOTO62030
62025 POKEV+28,PEEK(V+28)OR2^(A-1):POKEV+37,M1:POKEV+38,M2
62030 READCO:POKEV+38+A,CO:POKE2039+A,B(A-1)
62035 FORC=B(A-1)*64TOB(A-1)*64+63:READQ:POKEC,Q:NEXT:NEXT
62040 POKE2041,250:POKE2042,251:POKE2043,251:POKE2044,252
62041 POKEV+28,243
62045 POKE2046,249:POKE2047,254
62050 POKEV+46,10 :POKEV+45,12:POKEV+41,2:POKEV+42,2:POKEV+40,0:RETURN
63000 DATA1,2,6,8
63005 DATA0,40,0,0,170,0,2,170,128,2,235,128,10,235,160,42
63010 DATA170,168,42,170,168,170,190,170,170,190,170,170,170,170,102,170
63015 DATA153,105,105,105,90,150,165,22,170,148,22,170,148,5,170,80
63020 DATA1,105,64,1,85,64,0,85,0,0,20,0,0,0,0,0
63025 DATA1,2,6,12
63030 DATA0,40,0,0,170,0,2,170,128,2,170,128,10, 170,160,42
63035 DATA170,168,42,170,168,170,170,170,170,170,170,170,170,170,42,170
63040 DATA168,42,170,168,10,170,160,2,170,128,2,170,128,0, 170,0
63045 DATA0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0
63050 DATA0,2,6,0
63055 DATA0,24,0,0,24,0,0,60,0,0,60,0,0,24,0,0
63060 DATA24,0,0,24,0,0,24,0,0,24,0,0,24,0,0,24
63065 DATA0,0,24,0,0,60,0,0,36,0,0,102,0,0,66,0
63070 DATA0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
63075 DATA0,2,6,10
63080 DATA0,28,0,0,14,0,0,7,0,0,14,0,0,28,0,0
63085 DATA56,0,0,28,0,0,14,0,0,7,0,0,14,0,0,28
63090 DATA0,0,56,0,0,28,0,0,14,0,0,7,0,0,14,0
63095 DATA0,28,0,0,56,0,0,28,0,0,14,0,0,7,0,0
63100 DATA1,2,6,8
63105 DATA0,0,0,0,0,0,0,0,0,0,40,0,0,170,0,2
63110 DATA170,128,10,170,160,5,85,80,5,85,80,10,170,160,2,170
63115 DATA128,0,170,0,0,40,0,0,0,0,0,0,0,0,0,0
63120 DATA0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
63125 DATA1,2,6,4
63130 DATA12,12,0,64,0,130,0,32,8,1,129,0,32,0,0,12
63135 DATA192,4,0,0,0,0,4,2,48,2,48,1,48,0,0,3
63140 DATA3,128,4,64,12,128,0,0,8,8,0,1,0,19,0,12
63145 DATA0,0,0,0,16,192,200,0,0,0,3,3,3,0,48,0
63150 DATA1,2,6,10
63155 DATA5,85,64,1,85,0,2,170,0,10,238,128,10,154,128,2
63160 DATA170,0,2,102,0,2,154,0,0,168,0,255,255,252,255,255
63165 DATA252,255,223,252,243,255,60,243,255,60,240,0,60,240,0,60
63170 DATA240,0,60,160,0,40,160,0,40,80,0,20,16,0,16,0

Share

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

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