23.08.2026
Meiner erster Computer war ein Schneider CPC 464 mit Grünmonitor. Später kam ein Diskettenlaufwerk sowie ein Farbmonitor dazu. Da es keine weiteren Besitzer von CPCs im unmittelbaren Umfeld gab, war meine einzige Quelle von neuer Software ein Bekannter, welcher uns selten besucht hat. Dieser hatte gelegentlich ein paar 3 Zoll Disketten dabei und wir haben uns ein paar Dateien kopiert.
(Bild von hier)
Eins der obskureren Spiele von damals an das ich mich noch vage erinnern konnte hatte etwas mit Pyramidenbau zu tun. Ich hatte hier noch alle Disketten von damals aufgehoben, allerdings keine Möglichkeit mehr diese auszulesen. Und ehrlich gesagt, hatte ich auch keine große Hoffnung mehr, dass da überhaupt noch irgendwelche Daten auslesbar waren. Dennoch habe ich auf cpcwiki gefragt, ob das jemand versuchen will:
Tatsächlich hat sich jemand gefunden und ein nur wenige Tage später hatte ich meine Disketten wieder per Post zurück und ein ZIP Archiv mit den Images. Die meisten Disketten waren tatsächlich noch auslesbar. Auf einer der Disketten habe ich dann neben vielen meiner schrottigen ersten Programmierversuchen auch das Pyramidenspiel (“PYRAMIDE.MSD”) gefunden:
Nach dem Start und der Lautstärkeeinstellung kommt der Startbildschirm mit Aufgabenstellung:
Wenn wir uns der Aufgabe annehmen, besteht der Game Loop aus einer Folge von 4 Fragen.
Hierbei muss drauf geachtet werden, dass z.B. nicht zuviel des verfügbaren Korns verwendet wird. Anschließend werden teilweise Zufallsevents ausgelöst, die den Bau aufhalten oder sogar zurücksetzen können. Am Ende der Runde gibt es dann eine Ansicht der Fortschritts:
Das ist im wesentlichen das komplette Spiel. Beim Testspielen gab es dann aber leider teilweise folgenden Fehler:
Ich konnte mich nicht erinnern, dass das damals auch passiert ist. Daher bin ich erstmal davon ausgegangen, dass das ein Bitflip oder ähnliches Problem ist, welches durch das Auslesen meiner alten Disketten entstanden ist. Also habe ich versucht, rauszufinden, wo das Spiel eigentlich herkommt.
Entgegen meiner bisherigen Annahme, dass das Programm von meinem Bekannten damals selbst entwickelt wurde, hat sich bei meiner Recherche herausgestellt, dass dieses Spiel über mehrere Plattformen hinweg immer ein wenig verändert wurde. Vermutlich lässt sich das alles bis zu einem Spiel namens Hamurabi von 1968 oder sogar The Sumerian Game von 1964 zurückverfolgen.
Der älteste Hinweis auf ein Spiel bei dem es konkret um eine Pyramide geht und welches sich direkt bis zu meiner CPC Version zurückverfolgen lässt habe ich in der Zeitschrift “Homecomputer”, Ausgabe 11 vom November 1983 auf Seite 25 gefunden.
Im alten Ägypten gibt der allmächtig herrschende Pharao seinen Untertanen den Auftrag, eine Pyramide zu bauen. Ihre Aufgabe ist es mittels des Computers, die zu verrichtende Arbeiten der Untertanen auszuführen. Der Bau der Pyramide muss innerhalb von 13 Jahren vollbracht sein, bevor der Pharao das Zeitliche segnet. Bis man dies jedoch geschafft hat, muß man viele Hindernisse bewältigen. Das Leben des Spielers und der Bau der Pyramide ist mehr als einmal gefährdet; wenn die Arbeiter meutern, ein Bürgerkrieg ausbricht, Attentate ausgeübt werden, Kreuzritter einmarschieren und so weiter. Wie Sie an Hand dieser kurzen Beschreibung bemerkt haben werden, verspricht dieses Spiel viel Spannung und Abwechslung. Also dann, viel Erfolg beim Pyramidenbau.
Wie damals üblich, folgen dann einige Heftseiten mit dem Sourcecode des Spiels:
Beim Überfliegen ist einiges ähnlich wie in meiner CPC Version, allerdings ist der Aufgabensteller “TUT-ENCH AMUN” und nicht “RAMSES II”. Und die Provinz ist “AL-PARASCHA” und nicht “KAFR-ES-SAJAT”. Der Basic Code unterscheidet sich zudem deutlich von dem aus meiner CPC Version. Bis dahin muss sich also noch einige verändert haben.
Das erste Suchergebnis bei meinen Recherchen (Im wesentlichen eine Google Suche nach “KAFR-ES-SAJAR”) war die Zeitschrift “Computer Kontakt” Ausgabe 6-7/84 auf Seite 18. Von dort hatte ich auch den Hinweis auf die obige Apple 2 Version. In dieser Version ist schon “RAMSES II” verantwortlich und der Basic Code ähnelt schon mehr der CPC Version. So wie es aussieht war das eine direkt durch die Appleversion inspirierte Version der grundsätzlich gleichen Spielidee und des gleichen Settings.
Trotz des ähnlichen Codes hat mich das nicht weitergebracht, weil die Unterscheide dann doch zu groß waren. z.B. ist die Pyramide im obigen Screenshot perspektivisch dargestellt. In meiner CPC Version war das ja, wie initial gezeigt, komplett 2D von der Seite. Der Code, welcher bei mit den Syntaxfehler in Zeile 1070 ausgelöst hat, war im abgelisteten Code auch nicht wirklich ähnlich genug, um mir weiterzuhelfen. Der Vollständigkeit halber hier das vollständige Listing ab Seite 46 der Zeitschrift:
Fast ein Jahr später kam dann vom gleichen Programmierer ebenfalls in “Computer Kontakt” in der Ausgabe 7/85 auf Seite 50 der erste Hinweis auf die CPC Version und dass es sich um das Genre der “Landverwalter”-Spiele handelt :-)
Hier dann das Listing startend mit Seite 53. Was wohl die im Text angekündigte Überraschung sein mag? :-)
Hier gibt es jetzt endlich Zeile 1070. Stellt sich heraus: Der Syntaxfehler war tatsächlich schon im Originalabdruck im Heft vorhanden:
Hm. Vermutlich sollte das eigentlich mal
1070 CLS:GOSUB 3180:GOSUB 3300 sein? Wundert mich schon
sehr, dass ich daran keine Erinnerung mehr habe. Das Spiel habe ich
schon ein paar Mal gespielt. Ich habe dann weitergesucht und einen Eintrag auf einer
französische CPC Seite gefunden. Der dort verfügbare Scan des
Listungs ist unvollständig und ausgerechnet Zeile 1070 fehlt. Zum Glück
gab’s auch noch ein Diskimage (DSK) des
Spiels.
Daraus habe ich dann den eigentlichen Basic Code extrahiert. Der Code selbst ist tokenisiert, d.h. liegt nicht direkt als menschlesbarer Text vor sondern ist binär codiert um Platz zu sparen. Ein mittels KI genierierter Konverter hat mir daraus die Textvariante erzeugt, welche dem obigen Listing entspricht. Damit ist auch dort Zeile 1070 falsch:
1070 CLS:GOSUB 3180,3300Anschließend habe ich noch die Variante von meiner Diskette zu lesbarem Code konvertiert:
10 MODE 1
20 nb=0: ta=0: et=0: is=0: ie=0: tt=0: weg=0: dazu=0
30 INK 0,13
40 INK 1,0
50 INK 2,25
60 INK 3,3
70 BORDER 13
80 PEN 1: PAPER 0
90 INPUT "Lautstaerke (0 - 15) ";la: IF la<0 OR la>15 THEN 90
100 CLS
110 GOSUB 2820
120 WINDOW #1,1,40,1,3
130 WINDOW #0,1,40,4,25
140 SYMBOL AFTER 251
150 SYMBOL 255,14,11,31,57,56,120,200,12
160 SYMBOL 254,1,5,13,26,52,40,112,192
170 SYMBOL 253,24,36,66,36,24,24,60,24
180 SYMBOL 252,48,24,190,251,190,0,85,170
190 REM --- ANFANG ---
200 CLS: GOSUB 3180
210 PRINT: PRINT
220 PRINT "Der Pharao RAMSES II. gibt Dir die"
230 PRINT: PRINT "ehrenvolle Aufgabe, der Erbauer seiner"
240 PRINT: PRINT "Pyramide zu sein."
250 PRINT: PRINT "Er gibt Dir 20 Jahre Zeit und die"
260 PRINT: PRINT "Provinz KAFR-ES-SAJAT, um die Arbeiter"
270 PRINT: PRINT "zu besorgen."
280 PRINT: PRINT: PRINT: PRINT "Wirst Du diese Aufgabe annehmen?"
290 i$=INKEY$: IF i$="" THEN 290
300 IF i$="n" OR i$="N" THEN 330
310 IF i$<>"j" AND i$<>"J" THEN 290
320 GOTO 410
330 REM --- NICHT BAUEN WOLLEN ---
340 CLS: LOCATE 1,8
350 GOSUB 3110
360 PRINT: PRINT: PRINT: PRINT "Der Pharao gibt nun Deine Hinrichtung"
370 PRINT: PRINT "bekannt. Du entkommst ihm nicht...."
380 GOSUB 3180
390 WHILE INKEY$="": WEND
400 CLEAR: MODE 1: END
410 REM --- RND ---
420 p=INT (RND*30000)+85000
430 g=INT (RND*p/1000)+120
440 f=INT (RND*800)+1000
450 pg=0: ja=1
460 ab=0: te=0
470 REM --- ANFANG ---
480 GOSUB 3300
490 GOSUB 3500
500 GOSUB 3180
510 REM --- EINGABE ---
520 PRINT: INPUT "Wieviele Personen sollen zum Arbeiten herangezogen werden ?",ab
530 IF ab<0 OR ab>p THEN 1670
540 p=p-ab: GOSUB 3500
550 PRINT: INPUT "Wieviele Speicher Korn bekommen die Ar- beiter zugeteilt ?",ak
560 IF ak<0 OR ak>g THEN 1670
570 g=g-ak: GOSUB 3500
580 PRINT: PRINT "Wieviele Speicher voll Korn bekommen"
590 PRINT "die ";p;" anderen Einwohner zugeteilt ?": INPUT ek
600 IF ek<0 OR ek>g THEN 1670
610 g=g-ek: GOSUB 3500
620 IF ek>=(p/1000) THEN et=0: GOTO 680
630 et=1
640 el=INT (ek*1000)
650 el=p-el
660 p=p-el
670 is=is+el
680 IF ak>=(ab/1000) THEN ta=0: GOTO 740
690 ta=1
700 al=INT (ak*1000)
710 al=ab-al
720 ab=ab-al
730 is=is+al
740 PRINT: INPUT "Wieviele Felder sollen bewirtschaftet werden?",fb
750 IF fb<0 OR fb>f THEN 1670
760 IF fb<=g*25 THEN 810
770 fb=INT (g*25)
780 CLS: GOSUB 3180: PRINT: PRINT "Du hast zuwenig Saatgut. Du kannst"
790 PRINT "nur ";fb;" Felder bewirtschaften."
800 GOTO 740
810 IF INT (fb*5)<=p THEN 860
820 fb=INT (p/5)
830 CLS: GOSUB 3180: PRINT: PRINT "Du hast zu wenig Bauern zum Arbeiten. Du "
840 PRINT "kannst nur ";fb;" Felder bewirtschaften."
850 GOTO 740
860 g=g-INT (fb/25)
870 pg=INT (RND*66+0.5)
880 pg=pg/100
890 CLS: GOSUB 3180
900 PRINT: PRINT "Die Ernte betrug dieses Jahr ";pg
910 PRINT "Speicher Korn pro Feld."
920 g=g+(pg*fb)
930 REM --- REBELLION ---
940 IF et=0 THEN 990
950 et=0
960 GOSUB 3110
970 PRINT: PRINT "Die Einwohner rebellieren wegen Nahrungsmangel..."
980 PRINT: PRINT "Es leben noch ";p;" Einwohner (ohne","Arbeiter)."
990 IF ta=0 THEN 1040
1000 ta =0
1010 GOSUB 3110
1020 PRINT: PRINT "Die Arbeiter rebellieren wegen Nahrungs- mangel."
1030 PRINT: PRINT "Es leben noch ";ab;" Arbeiter."
1040 g=INT (g): GOSUB 3500
1050 w=INT (11*RND(6)+1)
1060 WHILE INKEY$="": WEND
1070 CLS: GOSUB 3180,3300
1080 REM --- Verzweigung zu den Unterprogrammen ---
1090 ON w GOSUB 2010,2090,2160,2230,2300,2370,2450,2530,2610,2370,2950
1100 WHILE INKEY$="": WEND: CLS: GOSUB 3500: GOSUB 3180
1110 IF ab>=100 THEN 1160
1120 GOSUB 3110
1130 PRINT: PRINT "Du hast zuwenig Arbeiter zum Bauen...": nb=0
1140 WHILE INKEY$="": WEND
1150 GOTO 1200
1160 PRINT: PRINT "Der Bau der Pyramide geht weiter..."
1170 IF te<=1 THEN nb=(ab/80000): GOTO 1190
1180 nb=(ab/70000)*((ak*1000/ab)^0.4)
1190 te=te+nb
1200 WHILE INKEY$="": WEND
1210 IF te>=27 THEN 1890
1220 IF f>=500 THEN 1290
1230 PRINT: PRINT "Das Bauergebnis dieses Jahres :"
1240 PRINT: PRINT "Du ruinierst ja alles. Der Pharao ver-"
1250 PRINT: PRINT "flucht Dich und der Totengott ANUBIS"
1260 PRINT: PRINT "hat einen neuen Gast..."
1270 WHILE INKEY$="": WEND
1280 GOTO 1740
1290 REM --- JAHRESBERICHT ---
1300 PRINT: PRINT: PRINT " JAHRESBERICHT:"
1310 IF ab+p>=60000 THEN GOTO 1370
1320 PRINT: PRINT "Die Einwohner leiden sehr unter Dir."
1330 PRINT: PRINT "Eine Revolution ist die Folge. Du"
1340 PRINT: PRINT "verendest schmachvoll..."
1350 WHILE INKEY$="": WEND
1360 GOTO 1740
1370 ja=ja+1
1380 IF ja<>11 THEN 1410
1390 PRINT: PRINT "Das 11-te Jahr ist angebrochen. Die"
1400 PRINT "Haelfte Deiner Zeit ist bereits um..."
1410 nw=INT ((1000*te)*RND)+1
1420 PRINT: PRINT nw+dazu;" neue Einwohner kamen dieses Jahr"
1430 PRINT "in unsere Provinz."
1440 nt=INT ((400*te)*RND)+1
1450 PRINT: PRINT nt+weg+tt;" Einwohner starben dieses Jahr."
1460 p=p+nw
1470 p=p-nt
1480 tt=0
1490 weg=0
1500 dazu=0
1510 IF ja<=20 THEN 1600
1520 REM --- NICHT GESCHAFFT ---
1530 CLS: GOSUB 3180
1540 GOSUB 3110: PRINT: PRINT "Du hast nach 20 Jahren erst ";INT(te*10-1)
1550 PRINT: PRINT "Reihen der Pyramide fertiggestellt."
1560 PRINT: PRINT "Deswegen wirst Du den heiligen Kroko-"
1570 PRINT: PRINT "dilen vorgeworfen, welche Dich mit"
1580 PRINT: PRINT "sichtlichem Wohlgefallen verspeisen."
1590 GOTO 1740
1600 is=is+nt
1610 ie=ie+nw
1620 PRINT: PRINT: PRINT "Ein neues Jahr bricht an..."
1630 WHILE INKEY$="": WEND
1640 p=p+ab
1650 ab=0
1660 CLS: GOTO 470
1670 REM --- FEHLER ---
1680 CLS: GOSUB 3180
1690 GOSUB 3110
1700 PRINT: PRINT "Fehler liebt der Pharao nicht. Du hast"
1710 PRINT: PRINT "etwas von seinem Privateigentum ge-"
1720 PRINT: PRINT "nommen und wirst deshalb hingerichtet."
1730 WHILE INKEY$="": WEND
1740 REM --- TOT ---
1750 GOSUB 3110
1760 CLS: CLS#1: GOSUB 3180
1770 PRINT: PRINT: PRINT
1780 PRINT "Waehrend Deiner Herrschaft ueber"
1790 PRINT: PRINT "KAFR-ES-SAJAT"
1800 PRINT: PRINT "starben ";is;" Personen"
1810 PRINT: PRINT "und es wurden ";ie;" Personen geboren,"
1820 PRINT: PRINT "bzw. sind eingewandert."
1830 WHILE INKEY$="": WEND
1840 GOSUB 3300
1850 CLS
1860 PRINT: PRINT "Wollen Sie noch einen Versuch wagen?"
1870 i$=INKEY$: IF i$="" THEN 1870
1880 IF i$="n" OR i$="N" THEN END :ELSE CLEAR: RUN
1890 REM --- GESCHAFFT ---
1900 GOSUB 3140: CLS: GOSUB 3180
1910 PRINT: PRINT "Du hast es geschafft ! Du hast die"
1920 PRINT: PRINT "Pyramide gebaut ! Dir wird nun die ganz"
1930 PRINT: PRINT "besondere Ehre zuteil, mit Deinem Ge-"
1940 PRINT: PRINT "bieter darin begraben zu werden..."
1950 GOSUB 3110: GOSUB 3140: GOSUB 3110
1960 PRINT: PRINT "TUT MIR FURCHTBAR LEID !!!"
1970 WHILE INKEY$="": WEND
1980 te=27
1990 GOTO 1740
2000 END
2010 REM --- BESCHLAGNAHMUNG ---
2020 klau=INT (g/1.5*RND)+1
2030 GOSUB 3110
2040 PRINT: PRINT "Die Priester des Totengottes ANUBIS"
2050 PRINT: PRINT "beschlagnahmen ";klau;" Speicher voll"
2060 PRINT: PRINT "mit Korn..."
2070 g=g-klau
2080 RETURN
2090 REM --- KREUZRITTER ---
2100 klau=INT (f/2.5*RND)+1
2110 GOSUB 3110
2120 PRINT: PRINT "Einfallende Kreuzritter beschlagnahmen"
2130 PRINT: PRINT klau;" Felder unseres Heimatlandes..."
2140 f=f-klau
2150 RETURN
2160 REM --- SONDERSTEUER ---
2170 gib=INT (200*RND)
2180 GOSUB 3140
2190 PRINT: PRINT "Eine Sondersteuer erbringt ";gib
2200 PRINT: PRINT "Speicher voll mit Korn..."
2210 g=g+gib
2220 RETURN
2230 REM --- PHARAO SCHENKT ---
2240 gib=INT (RND*200)
2250 GOSUB 3140
2260 PRINT: PRINT "Der pharao zeigt seinen guten Willen"
2270 PRINT: PRINT "und schenkt Dir ";gib;" Felder..."
2280 f=f+gib
2290 RETURN
2300 REM --- FLUTWELLE ---
2310 klau=INT (RND*100)
2320 GOSUB 3110
2330 PRINT: PRINT "Die Flutwelle vernichtete ";klau
2340 PRINT: PRINT "Felder unserer Provinz..."
2350 f=f-klau
2360 RETURN
2370 REM --- EINWANDERUNG ---
2380 dazu=INT (RND*p*10)+1
2390 ie=ie+dazu
2400 GOSUB 3140
2410 PRINT: PRINT "Unsere Provinz ist so beliebt geworden,"
2420 PRINT: PRINT "dass ";dazu;" Leute einwanderten..."
2430 p=p+dazu
2440 IF RND>0.3 THEN RETURN
2450 REM --- PEST ---
2460 weg=INT (RND*p/1.7)+1
2470 GOSUB 3110
2480 PRINT: PRINT "Durch die Pestepedemie starben dieses"
2490 PRINT: PRINT "Jahr ";weg;" Leute..."
2500 p=p-weg
2510 is=is+weg
2520 RETURN
2530 REM --- ERDBEBEN ---
2540 IF te<5 THEN RETURN
2550 ein=INT ((te-1)*RND*0.4)+1
2560 GOSUB 3110
2570 PRINT: PRINT "Es gab ein Erdbeben. Dabei wurden ";INT (ein*10)
2580 PRINT: PRINT "Reihen der Pyramide vernichtet..."
2590 te=te-ein
2600 RETURN
2610 REM --- STREIK ---
2620 GOSUB 3110
2630 PRINT: PRINT "Deine Arbeiter streikten. Es kam zu"
2640 PRINT: PRINT "blutigen Auseinandersetzungen..."
2650 tt=INT (ab*RND*0.2)+1
2660 PRINT: PRINT "Es starben ";tt;" Arbeiter..."
2670 is=is+tt
2680 ab=ab-tt
2690 RETURN
2700 REM --- MORDANSCHLAG ---
2710 xx=INT (RND*100)
2720 IF xx<35 THEN 2760
2730 PRINT: PRINT "Du bist knapp einem Mordanschlag ent-"
2740 PRINT: PRINT "ronnen..."
2750 RETURN
2760 REM --- ERMORDET ---
2770 PRINT: PRINT "Du bist einem Mordanschlag zum Opfer ge-"
2780 PRINT: PRINT "fallen. Deine Leiche wurde gerade ge-"
2790 PRINT: PRINT "funden..."
2800 WHILE INKEY$="": WEND
2810 GOTO 1740
2820 REM --- TITEL ---
2830 LOCATE 12,5
2840 PRINT "P Y R A M I D E"
2850 ZONE 11
2910 LOCATE 5,20
2920 PRINT "EINE TASTE ZUM START DRUECKEN."
2930 WHILE INKEY$="": WEND
2940 RETURN
2950 REM --- SABOTEURE ---
2960 IF RND<0.4 THEN RETURN
2970 GOSUB 3090
2980 GOSUB 3110
2990 PRINT: PRINT "Der Bau der Pyramide wurde sabotiert."
3000 PRINT: PRINT "Die Pyramide ist in sich zusammenge-"
3010 PRINT: PRINT "stuerzt..."
3020 IF RND<0.85 THEN 3070
3030 GOSUB 3090
3040 PRINT: PRINT "Du wurdest unter den Truemmern begraben."
3050 WHILE INKEY$="": WEND
3060 GOTO 1740
3070 PRINT: PRINT "Du musst jetzt von vorne beginnen..."
3080 WHILE INKEY$="": WEND
3090 te=0
3100 RETURN
3110 REM --- BEEP MIES ---
3120 FOR i=750 TO 1300 STEP 50: SOUND 1,i,20,la: NEXT
3130 RETURN
3140 REM --- BEEP GUT ---
3150 FOR i=1 TO 5: SOUND 1,300,20,la: SOUND 1,200,20,la: NEXT
3160 SOUND 1,200,20,la: SOUND 1,150,20,la: SOUND 1,150,40,la: SOUND 1,100,50,la
3170 RETURN
3180 REM --- RANDVERZIERUNG ---
3190 PEN 3
3200 LOCATE 1,22
3210 FOR i=1 TO 40
3220 PRINT CHR$ (RND*5+250);
3230 NEXT i
3240 LOCATE 1,3
3250 FOR i=1 TO 40
3260 PRINT CHR$(RND*5+250);
3270 NEXT i
3280 PEN 1
3290 RETURN
3300 REM --- PYRAMIDE MALEN ---
3310 te=te*10
3320 CLS
3330 PLOT 180,120,2
3340 DRAW 460,120,2
3350 DRAW 320,266,2
3360 DRAW 180,120,2
3370 xx=te*146/270+120
3380 FOR y=xx TO 120 STEP -2
3390 d=(320-y)-55
3400 PLOT 320,y,2: DRAWR d,0,2
3410 PLOT 320,y,2: DRAWR - d,0,2
3420 NEXT y
3430 PEN 1
3440 LOCATE 1,18
3450 PRINT "Du hast ";INT (nb*10);" Reihen gebaut."
3460 PRINT "Die Pyramide besteht aus ";INT (te);" Reihen."
3470 PRINT "Es sind noch ";INT (270-te);" Reihen zu bauen."
3480 te=te/10
3490 WHILE INKEY$="": WEND: CLS: RETURN
3500 REM --- WINDOW #1 ---
3510 CLS #1: ZONE 20
3520 PRINT #1,"PROV. KAFR-ES-SAJAT",
3530 PRINT #1,"JAHR :";ja
3540 PRINT #1,"EINWOHNER :";INT (p+0.5),"SPEICHER :";INT (g+0.5)
3550 PRINT #1,"FELDER :";INT (f+0.5),"GEB.REIHEN :";INT (te*10+0.5)
3560 RETURNInteressanterweise entspricht dieser Code nicht ganz dem Listing der Zeitschrift. Er hat einige kleinere Änderungen erhalten, bevor ich mir PYRAMIDE.MSD damals auf meine Diskette kopiert hatte. So wurde z.B. neben den entfernten Credits (Zeile 2680 und Folgende im Zeitschriftenlisting oben) auch ein fehlendes Wort korrigiert:
1330 PRINT:PRINT "Eine Revolution ist die Folge. Du"
-1340 PRINT:PRINT "schmachvoll..."
+1340 PRINT: PRINT "verendest schmachvoll..."
1350 WHILE INKEY$ ="":WENDStatt “Du schmachvoll…” wird jetzt korrekt “Du verendest schmachvoll…” ausgegeben. Es spricht auch einiges dafür, dass es sich nicht um eine Kopie des obigen Diskettendumps handelt, sondern unabhängig aus dem Heftlisting abgetippt wurde. So ist in Zeile 1080 eine der durch ON GOSUB referenzierten Zielzeilen falsch abgeschrieben worden:
1070 CLS:GOSUB 3180,3300
-1080 REM --- VERZWEIGUNG ZU DEN UNTERPROGRAMMEN ---
-1090 ON w GOSUB 2010,2090,2160,2230,2300,2370,2450,2530,2610,2630,2950
+1080 REM --- Verzweigung zu den Unterprogrammen ---
+1090 ON w GOSUB 2010,2090,2160,2230,2300,2370,2450,2530,2610,2370,2950
1100 WHILE INKEY$="":WEND:CLS:GOSUB 3500:GOSUB 3180Die vorletzte Zeilennummer (2630) führt in meiner Version genau wie 2610 zum “STREIK” Event. Im Listing oben verweist diese stattdessen auf Zeile 2370, dem “EINWANDERUNG” Event. Damit dürften die dort ebenfalls gemachten Anpassungen (mehr als 3x soviele Einwanderer) nie ausgeführt werden:
2370 REM --- EINWANDERUNG ---
-2380 dazu=INT (RND*p*3)+1
+2380 dazu=INT (RND*p*10)+1
2390 ie=ie+dazuEin paar andere Balanceänderungen gibt es ebenfalls. Hier wird in meiner Version in den Baufortschritt neben den zugeteilten Arbeitern auch die zugewiesene Kornration berücksichtigt:
1170 IF te<=1 THEN nb=(ab/80000):GOTO 1190
-1180 nb=(ab/70000)
+1180 nb=(ab/70000)*((ak*1000/ab)^0.4)
1190 te=te+nbSaboteure und deren Auswirkungen treten dafür häufiger auf:
2950 REM --- SABOTEURE ---
-2960 IF RND<0.6 THEN RETURN
+2960 IF RND<0.4 THEN RETURN
2970 GOSUB 3090
2980 GOSUB 3110
-2990 PRINT:PRINT "Der Bau der Pyramide wurder sabotiert."
+2990 PRINT: PRINT "Der Bau der Pyramide wurde sabotiert."
3000 PRINT:PRINT "Die Pyramide ist in sich zusammenge-"
3010 PRINT:PRINT "stuerzt..."
-3020 IF RND<0.75 THEN 3070
+3020 IF RND<0.85 THEN 3070
3030 GOSUB 3090Es wurde auch der “BEEP GUT” Sound verändert (oder falsch abgetippt?):
3150 FOR i=1 TO 5:SOUND 1,300,20,la:SOUND 1,200,20,la:NEXT
-3160 SOUND 1,200,20,la:SOUND 1,150,20,la:SOUND 1,200,20,la:SOUND 1,150,40,la:SOUND 1,100,50,la
+3160 SOUND 1,200,20,la: SOUND 1,150,20,la: SOUND 1,150,40,la: SOUND 1,100,50,la
3170 RETURNStatt fünf Schlussnoten gibt es nur noch vier. Hier der Unterschied zwischen den Versionen. Zuerst die Originalversion mit den fünf Noten:
Und hier der gleiche Code mit den vier Noten meiner Version:
Fragt sich, was jetzt besser klingt. Abschließend kann ich also zusammenfassend sagen, dass die von meinen Disketten ausgelesene Version beim Übertragen korrekt digitalisiert wurde und sie diesen Syntaxfehler auch schon damals hatte. Auch handelt es sich um eine leicht modifizierte Fassung, die so vermutlich nirgendwo anders hochgeladen wurde.
Nachdem ich Zeile 1070 gefixed habe und mir mittels KI eine sinnvolle Strategie vorgeschlagen wurde, habe ich das Spiel jetzt nach fast 40 Jahren dann auch erstmalig durchgespielt und die angekündigte Überraschung wurde aufgelöst :-)