SimCity, das im Webbrowser mit WebAssembly und OpenGL läuft
(micropolisweb.com)- Micropolis Web, basierend auf dem ursprünglichen SimCity Classic von Maxis, wurde in einer im Browser lauffähigen Form veröffentlicht, sodass sich die klassische Städtebausimulation ohne separate Installation erleben lässt
- Das Projekt ist eine von Don Hopkins portierte Version des von Will Wright entworfenen Spiels und befindet sich weiterhin in einem experimentellen, noch nicht fertigen Zustand
- Zusammen mit dem GitHub-Repository, Demo-Videos sowie Chaim Gingolds Buch und Diagrammen lässt sich Implementierung und Geschichte von SimCity eingehender betrachten
- Die Bedienung erfolgt per Mausziehen und -rad, Pfeiltasten, Buchstabentasten und Zahlentasten; möglich sind Bewegung, Zoom, Laden von Städten, Geschwindigkeitsanpassung, Änderung des Steuersatzes und Wechsel des Tilesets
- Der Name „Micropolis“ wird gemäß den Bedingungen der Micropolis Public Name License verwendet; zusätzliche Funktionen und Easter Eggs sind noch in Vorbereitung
Micropolis Web im Browser
- Micropolis Web ist eine Micropolis-Version, die mit WebAssembly läuft
- Grundlage ist das ursprüngliche SimCity Classic von Maxis; Don Hopkins portierte das von Will Wright entworfene Spiel
- Der aktuelle Stand ist kein fertiges Produkt, sondern eher ein sich ständig veränderndes, unfertiges Experiment
- Als Kanal zur Unterstützung der weiteren Entwicklung ist Patreon verlinkt
- Das Quellcode-Repository ist unter MicropolisCore zu finden
- Zugehörige Videos:
- Referenzmaterialien:
- Der Name „Micropolis“ wird gemäß den Bedingungen der Micropolis Public Name License verwendet
Bedienung und verbleibende Hinweise
-
Mausbedienung
- Mit gedrückter linker Maustaste lässt sich die Ansicht verschieben
- Mit dem Mausrad kann hinein- und herausgezoomt werden
-
Tastaturbedienung
- Mit den Pfeiltasten wird die Ansicht bewegt
- Mit der Komma- und Punkt-Taste wird gezoomt
- Mit Buchstabentasten werden verschiedene Städte geladen
- Mit der
\-Taste wird etwas erzeugt - Mit den Zahlentasten wird die Geschwindigkeit eingestellt
- Mit der
0-Taste wird Pause umgeschaltet - Mit den eckigen Klammern wird der Steuersatz gesenkt oder erhöht
- Mit
-und=wird das Tileset gewechselt - Durch Drücken der „X“-Schaltfläche oben kann das Hinweisfenster ausgeblendet werden
- Zusätzliche Funktionen und Easter Eggs sind in Vorbereitung
- Der Warnhinweis beginnt mit der Aufforderung, nicht die Leertaste zu drücken, aber in dem bereitgestellten Text ist die anschließende Erklärung nicht vollständig
1 Kommentare
Hacker-News-Kommentare
Es macht Spaß, alte Spiele ins Web zu portieren. Viele sind heute sogar kleiner als normale Webseiten, laden also schnell und laufen gut.
Ich habe gerade Quake 3 portiert und spiele damit herum: https://thelongestyard.link/
Micropolis Web Demo 1: https://www.youtube.com/watch?v=wlHGfNlE8Os
Micropolis Web ist die Browser-Version von Micropolis, der Open-Source-Version von SimCity, und nutzt WebAssembly, WebGL und SvelteKit. Es basiert auf dem ursprünglichen SimCity-Classic-Code, den Will Wright entworfen und Don Hopkins portiert hat; in der ersten Demo laufen der WebAssembly-Simulator und die WebGL-Kachelanimationen, aber der Großteil der Benutzeroberfläche ist noch in Arbeit
Live-Seite: https://MicropolisWeb.com
Quellcode und Dokumentation: https://github.com/SimHacker/MicropolisCore
Chaim Gingolds Buch "Building SimCity": https://mitpress.mit.edu/9780262547482/building-simcity/
Chaim Gingolds "SimCity Reverse Diagrams": https://smalltalkzoo.thechm.org/users/Dan/uploads/SimCityRev...
Micropolis Web Space Inventory Cellular Automata Music 1: https://www.youtube.com/watch?v=BBVyCpmVQew
Die Musik stammt von Juho Hietala, Blamstrain, und Space Inventory Cellular Automata wurde von Don Hopkins umgesetzt: https://blamstrain.com/
Gingold, Chaim. “Play Design.” Ph.D. thesis, University of California Santa Cruz, 2016. https://www.proquest.com/docview/1806122688
Die Wasm-Portierung von Micropolis könnte wie eine neue Entwicklungsphase wirken. SimCity Classic auf dem Macintosh hat meine Denkweise über Computer und Software in meiner Kindheit stark geprägt, und es freut mich, diesem Projekt neues Leben eingehaucht zu sehen.
Ich bin kein Gamer, aber ich erinnere mich daran, als Kind SimCity gespielt zu haben. Ich weiß nicht, ob sich das Gameplay in den letzten etwa 25 Jahren geändert hat oder ob der Browser kaputt ist, aber es sieht so aus, als würde gar nichts funktionieren.
Man kann eine Stadt laden und ihr beim Laufen zusehen, aber ich meine mich zu erinnern, dass man in früheren SimCity-Versionen die Stadt selbst bauen konnte. Sollte es nicht eine Möglichkeit geben, dass der Spieler tatsächlich spielen kann?
"Space Inventory" sind tatsächlich ein paar Regeln für zelluläre Automaten. Eine davon ist eine geditherte 8-Bit-Chaos-Wärmediffusion mit Wraparound, ähnlich wie "Heat", und eine andere ist eine "EcoLibra"-Variante, die Rudy Rucker in Autodesk Cellab vorgestellt hat, das er zusammen mit John Walker entwickelt hat. Dabei werden "Anneal" ("Vote 4/5") mit "Life" und "Brian's Brain" kombiniert.
https://www.fourmilab.ch/cellab/
https://www.fourmilab.ch/cellab/manual/rules.html#EcoLiBra
https://www.fourmilab.ch/cellab/manual/rules.html#Life
https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
https://www.fourmilab.ch/cellab/manual/rules.html#Brain
https://en.wikipedia.org/wiki/Brian%27s_Brain
https://www.fourmilab.ch/cellab/manual/rules.html#Vote
https://conwaylife.com/wiki/List_of_Life-like_rules
https://www.fourmilab.ch/cellab/manual/rules.html#Heat
1991 habe ich diese Regeln für zelluläre Automaten zu SimCity hinzugefügt, sodass die Zellwerte als SimCity-Tiles dargestellt wurden. Ich habe eine kostenlose Demo mit vollem Funktionsumfang per anonymem FTP verteilt und dabei zelluläre Automaten wie DRM verwendet, sodass die Stadt nach ein paar Minuten Spielzeit ohne Lizenz wegschmolz.
https://www.donhopkins.com/home/catalog/simcity/simcity-anno...
https://www.donhopkins.com/home/catalog/simcity/simcity-revi...
https://www.donhopkins.com/home/HyperLook-SimCity-Manual.pdf
https://www.donhopkins.com/home/catalog/hyperlook/HyperLook-...
https://www.donhopkins.com/home/catalog/hyperlook/SimCity.IN...
In der Installationsanleitung stand sinngemäß, dass man einen Lizenzschlüssel erhalten oder im Demo-Modus laufen lassen könne und dass im Demo-Modus die Stadt nach 5 Minuten oder beim Speichern wegschmilzt, man also besser eine Lizenz kaufen sollte.
Von Mobile hatte ich mir nicht viel erhofft, aber in Firefox auf Android hat diese Seite den Browser komplett zum Stillstand gebracht. Ich musste den Prozess beenden, und so etwas kommt selten vor
Zur Einordnung: Ich habe ein kleines Spiel, das ich selbst direkt in den Browser portiert habe. Es zum Laufen zu bringen war dank der Kombination aus Emscripten+SDL2 sehr einfach, aber ehrlich gesagt hat die meiste Arbeit darin gesteckt, es auf dem Handy wirklich vernünftig spielbar zu machen: https://play.neverball.org/
https://github.com/SimHacker/MicropolisCore/issues/1
Ich wollte es lieber so früh wie möglich veröffentlichen, damit andere es ausprobieren können, statt zu warten, bis alles fertig und perfekt ist. Deshalb gibt es noch viel zu tun bei Benutzeroberfläche, Stabilität, Cross-Platform-Unterstützung, Mobile usw.
Sobald Simulator und Tile-Renderer liefen, habe ich ein minimales Interface für Zoomen/Verschieben, Tastatursteuerung und ein Hinweisfenster eingebaut, das sich mit dem "+"-Button oben rechts schließen lässt
Worauf ich mich wirklich freue, ist die Integration mit visuellen Programmiersprachen wie Snap!, damit man alternative Interfaces für Live-Coding, Plugin-Zonen, Roboter, Monitoring- und Steuerungssysteme, Datenvisualisierung und -export sowie Grafana-Dashboards bauen kann
Android-Handys kann man per USB-Kabel mit Mac oder PC verbinden, iPhones mit dem Mac, und dann mit Chrome oder dem Safari-Debugger auf dem Mac die Remote-Konsole ansehen, debuggen und sogar Live-Coding machen. Unter den richtigen Bedingungen könnte es auch über Wi‑Fi gehen, aber Google hat die Funktion vielleicht entfernt oder Apple hat sie von Anfang an blockiert
Ich habe früher einmal den RuneScape-Client ins Web portiert
https://play.rsps.app/
Verwendet Wasm, TypeScript und WebGL
Quell-Repository: https://github.com/SimHacker/MicropolisCore
Was passiert, wenn man die Leertaste drückt, ist wirklich erstaunlich. Das Fraktal ist großartig
https://www.youtube.com/watch?v=0Gy9hJauXns
Ich frage mich, ob ein großes Sprachmodell solche Spiele sofort portieren kann
Ich nutze ChatGPT für die Entwicklung, und es war eine große Hilfe, aber es brauchte viel Iteration und viele Anweisungen, also ist es weit von „sofort“ entfernt. LLMs werden Programmierer nicht ersetzen, aber Programmierer, die LLMs nutzen, werden Programmierer ersetzen, die sie nicht nutzen.
Es war nützlich, um mir die Dokumentation und Best Practices von Tools wie Emscripten und Embind erklären zu lassen, ein makefile zum Laufen zu bringen, Code zu analysieren, Methoden und Instanzvariablen als private/public einzuordnen sowie Embind-Deklarations-Boilerplate und Dokumentation zu schreiben. Ich konnte es auch wie ein fortgeschrittenes grep verwenden, das Codesyntax versteht und englische Anfragen entgegennimmt.
https://github.com/SimHacker/MicropolisCore/blob/main/Microp...
Dieser Prozess war weder automatisiert noch sofortig, und insgesamt hat er 33 Jahre gedauert und ist noch immer nicht abgeschlossen. Auf Grundlage meiner Erfahrung, die Mac-Version von SimCity 1991 auf das NeWS-Fenstersystem HyperLook zu portieren und danach auf weitere Plattformen zu bringen, musste ich ChatGPT stark anleiten.
Bei einem Spiel wie SimCity lohnte es sich, die Mac-UI aufzugeben, den Simulator von der UI zu trennen und dann eine hochwertige neue UI für NeWS' HyperLook zu schreiben. Danach habe ich auch eine UI für X11s TCL/Tk erstellt, und dank dieser Struktur wurde sogar Netzwerk-Multiplayer-SimCity möglich.
X11 SimCity Demo: https://www.youtube.com/watch?v=Jvi98wVUmQA
Multi Player SimCityNet for X11 on Linux: https://www.youtube.com/watch?v=_fVl4dGwUrA
TCL Doc: https://github.com/SimHacker/MicropolisCore/blob/main/notes/...
Callbacks: https://github.com/SimHacker/MicropolisCore/blob/main/notes/...
Jahrzehnte später habe ich SimCity als Open Source veröffentlicht und eine TCL/Tk/X11-Version für OLPC und Linux herausgebracht, danach den Simulator-Code in C++ aufgeräumt und mit SWIG APIs und Callbacks definiert und an Python angebunden. Das C++-Refactoring half enorm bei Modularisierung, Dokumentation und Portierungen auf verschiedene Plattformen.
Micropolis Core: https://github.com/SimHacker/micropolis/tree/master/Micropol...
Doxygen documentation (current): https://micropolisweb.com/doc/
Development Plan (old): https://github.com/SimHacker/MicropolisCore/blob/main/notes/...
OLPC Plan (old): https://github.com/SimHacker/MicropolisCore/blob/main/notes/...
To Do (old): https://github.com/SimHacker/MicropolisCore/blob/main/notes/...
User Interface Plan (old): https://github.com/SimHacker/MicropolisCore/blob/main/notes/...
OLPC Notes (old): https://github.com/SimHacker/MicropolisCore/blob/main/notes/...
Ich habe auch eine Desktop-Oberfläche mit PyGTK/Cairo/X11 und eine Web-Client/Server-Oberfläche auf Basis von TurboGears/AMF/OpenLaszlo/Flash gebaut.
Micropolis Online (SimCity) Web Demo (old): https://www.youtube.com/watch?v=8snnqQSI0GE
Bil Simser integrierte die Simulator-Engine mit SWIG in C#: https://github.com/SimHacker/micropolis/tree/master/Micropol...
Weil es diese Entwurfsdokumente und Umsetzungserfahrung gab, konnte ich ChatGPT gut mit Prompts zur Emscripten/Embind-API-Architektur versorgen; zum Schreiben von Boilerplate und zum Validieren des Designs war es nützlich, aber dabei, das Design selbst zu entwickeln, half es nicht besonders. Es war auch sehr nützlich, um die Details und Best Practices von TypeScript, SvelteKit, node, WebGL, canvas, CSS und HTML zu lernen.
Warum gibt es in fast jedem Häuserblock eine Feuerwache?
Nichts lässt sich bedienen, und sobald der Browser irgendetwas lädt, springt der CPU-Lüfter an. Ist das wirklich sicher kein schlampiger Krypto-Miner? Falls nicht, verstehe ich nicht, warum man etwas veröffentlicht, das nicht funktioniert.
Ich habe weder das Geld, um alle möglichen Computer und Handys zu kaufen, noch hätte ich selbst dann die Zeit, alles direkt zu testen. Niemand bezahlt mich dafür, aber wenn du möchtest, kannst du mich über Patreon unterstützen: https://www.patreon.com/DonHopkins
Trotzdem ist dieses Projekt keine Einnahmequelle, sondern ein Herzensprojekt. Derzeit gibt es sogar ein besonderes Angebot, bei dem ich für einen Monat lang 5 Minuten zu einem Thema deiner Wahl die Klappe halte.
Den gesamten Quellcode kann man auf GitHub ansehen, Bugs melden oder selbst Builds erstellen. Im Browser gibt es außerdem Debugging- und Reverse-Engineering-Tools, mit denen man das WebAssembly-Binary und das kompilierte JavaScript untersuchen kann. Die WebGL-Shader liegen als Klartext vor, sodass man auch prüfen kann, ob sie mit dem Quellcode im Repository übereinstimmen.
https://github.com/SimHacker/MicropolisCore
Wenn du Belege für schlampige Mining-Software findest, kannst du das dem FBI, Interpol und GitHub melden. Ich veröffentliche Quellcode und Binärdateien unter meinem Namen, meinem GitHub-Konto und meiner Domain, daher ist die Herkunft leicht zurückzuverfolgen.
Ein Beispiel für einen hilfreichen Bug-Report enthielt Systeminformationen und einen Stack-Trace, identifizierte das Problem und ermöglichte mir, es in wenigen Minuten zu beheben: https://github.com/SimHacker/MicropolisCore/issues/1
Mich würde auch interessieren, ob du die Zifferntasten zur Geschwindigkeitssteuerung ausprobiert hast. Bezogen auf die Zahlenreihe oben auf der Tastatur verlangsamt "1" auf 1 Frame pro Sekunde mit 1 Simulator-Tick pro Frame, und "9" läuft mit 120 Frames pro Sekunde und 50 Ticks pro Frame. In Chrome auf meinem M1 Mac läuft es flüssig und die Oberfläche reagiert ziemlich gut.
Es wäre gut zu wissen, was genau sich nicht bedienen lässt, welche Hardware, welches Betriebssystem, welcher Browser und welche GPU du hast und ob es Fehler in der Entwicklerkonsole des Browsers gab. Hilfreich wäre es, wenn der Bug-Report den Konsolen-Stack-Trace enthält.