Planet Raith – Commodore 64 – Basic V2

Rivista: Popular Computing Weekly – Numero: 2 Vol. 1 – Anno 1982 – Trascrizione e Porting: Francesco Fiorentini

Devo ammettere che questo giochino, nella versione originale per ZX81, mi é proprio piaciuto. Dopo qver giocato qualche partita e capito il meccanismo, ho pensato che sarebbe stato interessante farne un porting per altre piattaforme e quindi mi sono deciso a farne uno per Commodore 64.

Il listato originale per ZX81 potete trovarlo sempre su RetroLiPS: Planet Raith ZX81

Quel listato per é stato pubblicato sulla rivista inglese Popular Computing Weekly del 29 Aprile 1982 Vol. 1 Nr. 2.

Titolo: Planet Raith
Piattaforma: Commodore 64
Linguaggio: Basic V2
Versione originale: Dave Middleton per ZX81
Pubblicazione: Popular Computing Weekly nr. 2 per ZX81
Anno: 1982
Trascrizione e Porting: Francesco Fiorentini
Anno: 2021
Download: raith.prg
Note: Il titolo del gioco sulla rivista é Planet Ruler, ma ho preferito intitolarlo Planet Raith dal nome usato per identificare il pianeta all’interno del gioco.

Istruzioni
Sei il comandante del pianeta Raith ed il tuo compito é assicurare il perfetto funzionamento delle miniere. La popolazione iniziale é di soli 100 abitanti ma, essendo le 1000 miniere operate roboticamente, ogni uomo puó controllare 10 miniere per volta. Durante il ciclo annuale devi decidere quante miniere costruire e vendere. Devi inoltre gestire la vendita di minerali per sfamare la popolazione. Se sei generoso altri immigranti verranno a lavorare per te, ma se sei tirchio la popolazione potrebbe assassinarti. Devi inoltre difenderti dagli attacchi Klingon e dalla tua stessa corruzione. Troppo denaro accumulato e sarai tentato di scappare…
Buon divertimento!

Il porting di Planet Raith é stato piuttosto semplice, sicuramente non difficile come i porting di Valley of Death o Super Star Trek che hanno richiesto tutt’altro impegno. Lo ZX81 Basic é un dialetto del Sinclair Basic che ha diverse affinitá con il Basic del C64, quindi sono state necessarie soltanto alcune piccole modifiche.
Nel listato ho lasciato il comando LET, inutile nel Basic del C64, come tributo al codice originale.

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 raith.prg.

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:  Planet Raith – 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
400 print"{clear}" : poke 53280,0: poke 53281,0:poke 646,7
405 print"***************************************"
410 print"*                                     *"
415 print"*             planet raith            *"
420 print"*                                     *"
425 print"***************************************"
430 print
435 print: print
438 print"         original zx81 version     "
440 print"       by dave middleton on 1982 "
441 print: print
443 print"{orange}         commodore 64 version"
444 print"         by f. fiorentini"
445 print"         on november 2021"
446 print"         for retrolips project{yellow}"
447 print: print
450 print"     >>> when ready press a key <<<"
460 poke198,0:wait198,1:poke198,0
465 print chr$(147)
1000 let p=100
1010 let i=5
1020 let d=0
1030 let s=3650
1040 let k=350
1050 let m=4000
1060 let l=1000
1070 let y=1    
1080 let c=4    
1090 let n=2576
1100 let d=0
1110 let b$=""
2000 print chr$(147)    
2010 print "annual controllers report for"      
2020 print "year ";n    
2025 let n=n+1  
2030 print      
2040 print "sir, during the last year:"
2050 print      
2060 print d;" workers died from starvation"    
2070 print "and ";i;" immigrants ";    
2080 print "came to raith."
2090 if y>0 then goto 2200
2100 let p=int(p/2)
2110 print      
2120 print "the klingons attacked and half of the people are dead"  
2200 print    
2210 print "the population  is now ";p  
2220 print "there are ";l;" mine shafts"        
2230 print "the mines produced ";m;" tonnes"    
2240 print "of minerals at ";c;" tonne/mine"    
2250 print "but klingons pirated ";k;" tonnes"
2255 print "leaving ";s; " tonnes in storage"  
2260 print      
2270 print "press c to continue"
2280 get a$  
2290 if a$<>"c" then goto 2280  
2300 print chr$(147)        
2310 print "there are ";s;" tonnes of"
2315 print "minerals in stock"  
2320 let c=int(rnd(1)*10+1)
2330 let v=c+17
2340 print      
2350 print "it currently costs ";
2360 print v;" tonnes "
2365 print "to open a mine"    
2370 print      
2380 print "how many mines do you want to"      
2390 print "build this year?"  
2400 input x
2410 let x=int(abs(x))    
2420 if x=0 then goto 2050      
2430 if v*x<=s then goto 2480  
2440 print "there is only enouigh stock to "
2450 print "buy haterials for "
2455 print int (s/v);" mines "
2460 goto 2370  
2480 let l=l+x
2485 let s=s-v*x
2500 for ii=1 to 200:next ii  
2510 print chr$(147)
2515 print "raith currently has "
2516 print l;" mine shafts"
2517 print
2520 print "how many mines will you sell?"
2530 input x
2560 let x=int(abs(x))
2570 if x=0 then goto 2670
2580 if x<l then goto 2640
2590 print "controller, you only have";l
2600 print "mines... try selling a few less"
2610 goto 2520
2640 let l=l-x
2650 let s=s+v*x
2660 for ii=1 to 200:next ii
2670 print chr$(147)
2675 print "there are ";s;" tonnes of "
2676 print "minerals in stock"
2677 print      
2680 print "how much stock will you sell to"    
2690 print "feed the hork force?"
2700 input f
2710 let f=int(abs(f))
2720 if f<=s then goto 2770    
2725 print      
2730 print "such generosity commander but"
2740 print "there are only";s;" tonnes of"
2750 print "minerals in stock"  
2755 print      
2760 goto 2680  
2770 let s=s-f
2780 let d=p-int(f/20)
2790 let i=0
2800 if d>=0 then goto 2830    
2810 let i=-d/2
2820 let d=0    
2830 for ii=1 to 200:next ii
2835 print chr$(147)        
2850 print "raith has ";l;" mine shafts"        
2860 print
2900 print "how man mines will be worked?"
2910 input g    
2920 let g=int(abs(g))    
2930 if g=0 then goto 3100      
2940 if g<=l then goto 2990
2950 print "imaginative thinking sir but"
2960 print "we only have ";l;" mine shafts"    
2965 print      
2970 goto 2900
2990 if int (g/2)<=s then goto 3050    
2995 print      
3000 print "0.5 tonne of stock has to be"
3010 print "sold to purchase equipment for"    
3020 print "each active mine. we have enough"  
3030 print "stock to operate ";int (s/2); " mines"      
3035 print      
3040 goto 2900  
3050 if g<=10*p then goto 3100
3055 print      
3060 print "commander, one worker can "
3070 print "supervise only 10 mines. we can"    
3080 print "only have a maximum of "; int (10*p)        
3090 print "mines operating at present"
3094 print      
3095 goto 2900
3100 let c=int(rnd(1)*5+1)
3110 let m=g*c  
3115 let k=0
3120 let q=int(rnd(1)*5+1)
3130 if int(q/2)<>q/2 then goto 3150
3140 let k=int(s/q)    
3150 let s=s-k+m        
3160 let q=int(rnd(1)*5+1)
3170 let i=int(c*(20*l+s)/p/100+1)    
3180 let p=p+i
3190 let q=int(f/20)  
3200 let y=int(10*((rnd(1)*3+1)-.3))
3210 if p<q then goto 1100      
3220 let d=p-q  
3230 if d>.5*p then goto 6000
3240 if d>.35*p then goto 6100
3250 if d>.2*p then goto 6200
3260 let p=q    
3290 if s>=100*p then goto 6300
3300 goto 2000
6000 print chr$(147)
6005 print "you have been assassinated..."
6020 for ii=1 to 1000:next ii
6030 print "would you like to try again y/n"    
6040 input b$
6050 if b$="y" then goto 465
6060 goto 9999
6100 print chr$(147)
6110 goto 3260
6200 print chr$(147)
6205 print "the workers are hungry and"
6210 print "there is talk of rebellion"
6220 goto 3260  
6300 print "you have gone to another planet"    
6310 print "with the contents of the"  
6320 print "treasury..."        
6330 goto 6030  
9999 print "good bye..."

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.