MZ-UTOPIA ist ein Rust-Port von UTOPIA - einem HAMURABI-Klon aus dem CPC Sonderheft 1/86, programmiert in LOCOMOTIVE BASIC für den Amstrad Schneider CPC 464. Zehn Jahre als Herrscher eines Reiches, vier wirtschaftliche Entscheidungen pro Runde, Seuchen und Schimmel inklusive.
Das Original wurde 1986 von Rolf Jäger veröffentlicht. Alle Formeln und Spielmechaniken wurden 1:1 aus dem BASIC-Quellcode übernommen; die Kommentare im Rust-Code referenzieren die Original-Zeilennummern. Geschrieben in Rust mit egui/eframe, ohne externe Abhängigkeiten für Zufallszahlen.
Das Spiel.
Der Spieler regiert zehn Jahre lang das Reich UTOPIA. Jedes Jahr gibt es vier Entscheidungen:
- Landverkauf - Hektar verkaufen, um den Kornvorrat zu erhöhen.
- Landkauf - Hektar kaufen, sofern der Vorrat reicht.
- Saatfläche - Hektar bestellen. Begrenzt durch Land, Vorrat und Bevölkerung.
- Nahrungsverteilung - Korn an die Bevölkerung ausgeben. Zu wenig führt zur Seuche.
Jede Eingabe wird einzeln mit Enter bestätigt. Der Berater HAMURABI meldet sich bei ungültigen Werten und erklärt, was falsch liegt. Erst nach gültiger Eingabe wird das nächste Feld freigeschaltet.
Die Spielmechanik.
Nach jeder Eingaberunde wird das Jahr berechnet. Wetter und Erntebedingungen sind zufällig, alles andere folgt festen Formeln aus dem Original-BASIC:
- Das Wetter schwankt zwischen 0,8 und 1,2 - auf eine Nachkommastelle gerundet.
- Die Erntequalität hängt von Nahrungsverteilung und Bevölkerungsgröße ab.
- Wird zu wenig oder zu viel Nahrung verteilt, bricht eine Seuche aus; die Bevölkerung schrumpft um 30-50 Prozent.
- Ist der Vorrat nach der Ernte zu groß für den verfügbaren Lagerplatz, befällt Schimmel 20 Prozent des Korns.
Alle Formeln stammen aus dem BASIC-Listing von 1986. Jede Abweichung wäre kein Port mehr, sondern ein neues Spiel.
Der Landpreis schwankt zufällig zwischen 20 und 30 Scheffeln pro Hektar. Wer billig kauft und teuer verkauft, baut einen Vorrat auf - aber zu viel Land ohne Bevölkerung ist nicht bestellbar.
Der Jahresrapport.
Die Hauptansicht ist eine Tabelle mit der vollständigen Spielhistorie. Jede Spalte steht für ein Jahr, jede Zeile für einen Kennwert: Bevölkerungswachstum, Gesamtbevölkerung, Landfläche, Erntebedingungen, Ernteertrag, Kornvorrat, Landpreis - und darunter die vier Eingabefelder des aktuellen Jahres.
Abgeschlossene Jahre zeigen die bestätigten Werte in der Tabelle. Das laufende Jahr zeigt Eingabefelder, die nach und nach freigeschaltet werden.
Die Auswertung.
Nach zehn Jahren berechnet HAMURABI drei Noten:
- Bevölkerungsentwicklung - Wie stark ist die Bevölkerung gewachsen?
- Bevölkerungsdichte - Wie viel Land steht pro Kopf zur Verfügung?
- Gesamtnote - Gewichteter Durchschnitt, wobei Bevölkerungswachstum doppelt zählt.
Jeder Note ist ein HAMURABI-Kommentar zugeordnet - von uneingeschränktem Lob bis zur Absetzung durch den Stadtrat. Bei Note 5 veranlasst der Stadtrat eine Volksabstimmung; das Ergebnis ist absehbar.
Wer die Bevölkerung auf null fallen lässt, beendet das Spiel vorzeitig. Game Over, HAMURABI schweigt.
Themes - von hell bis CPC-Phosphorgrün.
Sechs Farbschemata, umschaltbar mit Ctrl+T:
- Hell - egui-Standard.
- Dunkel - Reines Schwarz als Hintergrund.
- CPC Grün - Dunkelgrün mit Phosphorgrün-Schrift, CRT-Scanlines simuliert. Amstrad GT65-Grünmonitor.
- CPC Rot - Rotmonitor-Variante des CPC 464.
- CPC Farbe - Blaues Panel mit gelber Schrift. Nachbildung des CTM644-Farbmonitors beim Boot.
- Omarchy - Liest Systemfarben aus
colors.toml, sofern Omarchy Linux installiert ist.
Die CRT-Themes sind kein reines Augenzwinkern: Auf älterer Hardware mit schwachen Monitoren ist der Kontrast bei Phosphorgrün und Rotmonitor tatsächlich angenehm. Und wer das Spiel auf einem Amstrad-Emulator daneben laufen hat, versteht den Vergleich sofort.
CRT-Scanlines
Im CPC-Grün-Theme werden nach dem UI-Rendering halbtransparente schwarze Streifen im 4px-Rhythmus als Foreground-Layer über den gesamten Bildschirm gelegt. Zwei Pixel dunkel, zwei Pixel offen - das simuliert den Zeileneffekt eines CRT-Röhrenmonitors. egui macht das mit einem Custom-Painter nach dem regulären Frame-Rendering möglich.
Hintergrund: HAMURABI und seine Verwandten.
Das HAMURABI-Spielprinzip stammt von 1968 - „The Sumerian Game", entwickelt für Bildungszwecke auf einem IBM-Mainframe. David Ahl veröffentlichte 1973 eine BASIC-Version in „BASIC Computer Games", die auf Heimcomputern der späten Siebziger und frühen Achtziger weit verbreitet war.
Rolf Jägers CPC-Version von 1986 trägt den Namen UTOPIA und erschien im CPC Sonderheft 1/86 auf den Seiten 22 bis 24. Sie erweitert das Grundprinzip um Seuchen in beide Richtungen - Hunger wie Wohlstand - um Schimmelbefall und um ein differenziertes Bewertungssystem mit HAMURABI-Kommentaren je nach Note.
Dieser Rust-Port überführt genau diese Version in eine moderne Desktop-App - ohne die Spiellogik zu ändern.
Kein rand-Crate, kein externe Abhängigkeit.
Zufallszahlen werden über einen eigenen Linear Congruential Generator erzeugt. Der Seed kommt aus der Systemzeit beim Spielstart. Das klingt nach Sparmaßnahme, ist aber schlicht angemessen: Für ein Spiel dieser Art braucht es keinen kryptografisch sicheren PRNG, und eine externe Abhängigkeit weniger bedeutet ein Binary weniger, das man erklären muss.
Die einzigen Abhängigkeiten der App sind eframe [Anwendungsrahmen] und egui [UI]. Alles andere ist Standardbibliothek.
MIT-Lizenz.
Der Code steht unter MIT-Lizenz. Das Original-BASIC-Listing von Rolf Jäger aus dem CPC Sonderheft 1/86 war die Vorlage; alle Formeln wurden übernommen, die Implementierung ist neu. Haftung und Gewährleistung sind ausgeschlossen.
Alle Dateien auf GitHub:
- Linux: mz-utopia-linux-x86_64.zip
- macOS: mz-utopia-macos-aarch64.zip
- Windows: mz-utopia-windows-x86_64.zip
- Quellcode: github.com/marcelzimmer/mz-utopia