SimCity ejecutándose en el navegador con WebAssembly y OpenGL
(micropolisweb.com)- Micropolis Web, basado en el SimCity Classic original de Maxis, se publicó en una versión que se ejecuta en el navegador, lo que permite experimentar este clásico simulador de ciudades sin instalar nada
- El proyecto es una versión portada por Don Hopkins del juego diseñado por Will Wright, y todavía está en un estado experimental, no como producto terminado, por lo que sigue cambiando
- Junto con el repositorio de GitHub, videos de demostración, y el libro y los diagramas de Chaim Gingold, se puede profundizar en la implementación y la historia de SimCity
- Los controles usan arrastre y rueda del mouse, flechas, teclas de letras y teclas numéricas, y permiten desplazarse, hacer zoom, cargar ciudades, ajustar la velocidad, cambiar la tasa de impuestos y alternar el tileset
- El nombre “Micropolis” se usa bajo los términos de la Micropolis Public Name License, y las funciones adicionales y los huevos de Pascua aún están en preparación
Micropolis Web ejecutándose en el navegador
- Micropolis Web es una versión de Micropolis que se ejecuta con WebAssembly
- Está basado en el SimCity Classic original de Maxis, y es un port del juego diseñado por Will Wright realizado por Don Hopkins
- Su estado actual no es el de un producto terminado, sino más bien el de un experimento incompleto que sigue cambiando
- Como canal para apoyar el desarrollo adicional, está vinculado Patreon
- El repositorio de código fuente puede consultarse en MicropolisCore
- Videos relacionados:
- Material de referencia:
- El nombre “Micropolis” se usa bajo los términos de la Micropolis Public Name License
Controles y avisos pendientes
-
Controles con el mouse
- Arrastra con el botón izquierdo para mover la pantalla
- Usa la rueda del mouse para acercar o alejar
-
Controles con el teclado
- Usa las flechas para mover la pantalla
- Usa las teclas de coma y punto para acercar o alejar
- Usa las teclas de letras para cargar distintas ciudades
- Usa la tecla
\para generar - Usa las teclas numéricas para configurar la velocidad
- Usa la tecla
0para alternar la pausa - Usa las teclas de corchetes para bajar o subir la tasa de impuestos
- Usa las teclas
-y=para cambiar el tileset - Al presionar el botón “X” de arriba se puede ocultar la ventana de ayuda
- Las funciones adicionales y los huevos de Pascua están en preparación
- El aviso comienza diciendo que no se debe presionar la barra espaciadora, pero en el texto proporcionado la explicación posterior no queda completa
1 comentarios
Opiniones en Hacker News
Portar juegos antiguos a la web es divertido. Hoy en día hay muchos juegos más pequeños que una página web común, así que cargan rápido y funcionan bien.
Acabo de portar Quake 3 y me estoy divirtiendo trasteando con él: https://thelongestyard.link/
Demo 1 de Micropolis Web: https://www.youtube.com/watch?v=wlHGfNlE8Os
Micropolis Web es la versión para navegador de Micropolis, el SimCity de código abierto, y usa WebAssembly, WebGL y SvelteKit. Está basado en el código original de SimCity Classic diseñado por Will Wright y portado por Don Hopkins; la primera demo ya ejecuta el simulador en WebAssembly y las animaciones de mosaicos en WebGL, pero la mayor parte de la interfaz de usuario todavía está en desarrollo.
Sitio en vivo: https://MicropolisWeb.com
Código fuente y documentación: https://github.com/SimHacker/MicropolisCore
Libro de Chaim Gingold "Building SimCity": https://mitpress.mit.edu/9780262547482/building-simcity/
"SimCity Reverse Diagrams" de Chaim Gingold: https://smalltalkzoo.thechm.org/users/Dan/uploads/SimCityRev...
Micropolis Web Space Inventory Cellular Automata Music 1: https://www.youtube.com/watch?v=BBVyCpmVQew
La música fue creada por Juho Hietala, Blamstrain, y Space Inventory Cellular Automata fue implementado por Don Hopkins: https://blamstrain.com/
Gingold, Chaim. “Play Design.” Ph.D. thesis, University of California Santa Cruz, 2016. https://www.proquest.com/docview/1806122688
El port a Wasm de Micropolis parece que podría ser una nueva etapa de desarrollo. SimCity Classic para Macintosh influyó mucho en mi forma de pensar sobre las computadoras y el software durante mi infancia, y me alegra ver que se le dé nueva vida.
No soy gamer, pero recuerdo haber jugado SimCity cuando era chico. No sé si el gameplay cambió en los últimos 25 años más o menos, o si el navegador está roto, pero parece que no se puede hacer nada
Puedo cargar una ciudad y verla moverse, pero creo que en el SimCity de antes uno podía construir su propia ciudad. ¿No debería haber alguna forma de que el jugador realmente juegue?
"Space Inventory" en realidad son algunas reglas de autómatas celulares. Una es una difusión térmica caótica envolvente, dithered, de 8 bits, parecida a "Heat"; otra es una variante de "EcoLibra", publicada en Autodesk Cellab, que Rudy Rucker creó con John Walker. Combina "Life" y "Brian's Brain" con "Anneal" ("Vote 4/5")
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
En 1991 agregaron estas reglas de autómatas celulares a SimCity, haciendo que los valores de las celdas se mostraran como tiles de SimCity. Distribuyeron por FTP anónimo una demo gratuita con todas las funciones, pero usaban los autómatas celulares como DRM: después de jugar unos minutos, si no había licencia, la ciudad se derretía
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...
Las instrucciones de instalación decían que podías obtener una clave de licencia o ejecutarlo en modo demo; en modo demo, después de 5 minutos, o cuando intentaras guardar, la ciudad se derretiría, así que te invitaban a comprar una licencia
No esperaba mucho en móviles, pero en Firefox de Android esta página congeló el navegador. Tuve que matar el proceso, y eso rara vez pasa.
Como referencia, tengo un juego pequeño que porté yo mismo al navegador. Hacer que corriera fue muy fácil gracias a la combinación Emscripten+SDL2, pero, sinceramente, lo que más trabajo me llevó fue lograr que se pudiera jugar bien en un teléfono: https://play.neverball.org/
https://github.com/SimHacker/MicropolisCore/issues/1
Quería publicarlo lo antes posible para que otras personas pudieran probarlo, en lugar de esperar a que estuviera terminado y perfecto. Por eso todavía hay mucho por hacer en la interfaz de usuario, estabilidad, soporte multiplataforma, móviles, etc.
En cuanto el simulador y el renderizador de tiles estuvieron funcionando, agregué un zoom/desplazamiento mínimo, una interfaz de control con teclado y una ventana de ayuda que se puede cerrar con el botón "+" de la esquina superior derecha.
Lo que realmente me entusiasma es integrarlo con un lenguaje de programación visual como Snap! para permitir live coding, zonas de plugins, robots, sistemas de monitoreo y control, visualización y exportación de datos, e interfaces alternativas como dashboards de Grafana.
Los teléfonos Android pueden conectarse con un cable USB a una Mac o PC, y los iPhone a una Mac; luego se puede revisar la consola remota, depurar e incluso hacer live coding con Chrome o con el depurador de Safari en Mac. Si se dan las condiciones, también podría funcionar por Wi-Fi, aunque puede que Google haya quitado la función o que Apple la haya bloqueado desde el principio.
Hace tiempo porté a la web el cliente de RuneScape.
https://play.rsps.app/
Usa Wasm, TypeScript y WebGL.
Repositorio fuente: https://github.com/SimHacker/MicropolisCore
Lo que pasa al presionar la barra espaciadora es realmente sorprendente. El fractal está genial.
https://www.youtube.com/watch?v=0Gy9hJauXns
Me pregunto si los modelos de lenguaje a gran escala podrían portar al instante juegos como este
Estoy usando ChatGPT para desarrollo y me ha ayudado mucho, pero requiere muchas iteraciones e instrucciones, así que está lejos de ser algo instantáneo. Los LLM no reemplazarán a los programadores, pero los programadores que usen LLM reemplazarán a los que no los usen
Me sirvió para que me explicara la documentación y las mejores prácticas de herramientas como Emscripten y Embind, hacer que el makefile funcionara, analizar código, clasificar métodos y variables de instancia como private/public, y escribir boilerplate y documentación de declaraciones de Embind. También pude usarlo como una especie de grep avanzado que entiende la sintaxis del código y acepta consultas en inglés
https://github.com/SimHacker/MicropolisCore/blob/main/Microp...
Este proceso no fue automático ni instantáneo; en total tomó 33 años y todavía no termina. Tuve que guiar mucho a ChatGPT, apoyándome en mi experiencia de haber portado SimCity para Mac al sistema de ventanas NeWS HyperLook en 1991 y luego a varias otras plataformas
En un juego como SimCity valía la pena descartar la UI de Mac, separar el simulador de la UI y escribir una nueva UI de alta calidad para HyperLook de NeWS. Más tarde también hice una UI para TCL/Tk en X11, y esa estructura hizo posible incluso un SimCity multijugador en red
Demo de SimCity en X11: https://www.youtube.com/watch?v=Jvi98wVUmQA
SimCityNet multijugador para X11 en Linux: https://www.youtube.com/watch?v=_fVl4dGwUrA
Doc de TCL: https://github.com/SimHacker/MicropolisCore/blob/main/notes/...
Callbacks: https://github.com/SimHacker/MicropolisCore/blob/main/notes/...
Décadas después, tras liberar SimCity como open source y publicar versiones TCL/Tk/X11 para OLPC y Linux, limpié el código del simulador en C++ y usé SWIG para definir la API y los callbacks y conectarlos con Python. La refactorización en C++ ayudó mucho con la modularización, la documentación y el port a varias plataformas
Micropolis Core: https://github.com/SimHacker/micropolis/tree/master/Micropol...
Documentación de Doxygen (actual): https://micropolisweb.com/doc/
Plan de desarrollo (viejo): https://github.com/SimHacker/MicropolisCore/blob/main/notes/...
Plan para OLPC (viejo): https://github.com/SimHacker/MicropolisCore/blob/main/notes/...
Pendientes (viejo): https://github.com/SimHacker/MicropolisCore/blob/main/notes/...
Plan de interfaz de usuario (viejo): https://github.com/SimHacker/MicropolisCore/blob/main/notes/...
Notas de OLPC (viejo): https://github.com/SimHacker/MicropolisCore/blob/main/notes/...
También hice una interfaz de escritorio PyGTK/Cairo/X11 y una interfaz cliente/servidor web basada en TurboGears/AMF/OpenLaszlo/Flash
Demo web de Micropolis Online (SimCity) (vieja): https://www.youtube.com/watch?v=8snnqQSI0GE
Bil Simser integró el motor del simulador en C# con SWIG: https://github.com/SimHacker/micropolis/tree/master/Micropol...
Como contaba con estos documentos de diseño y experiencia de implementación, pude darle buenos prompts a ChatGPT para diseñar la API de Emscripten/Embind, y fue útil para escribir boilerplate y validar el diseño, pero no tanto para imaginar el diseño en sí. También fue muy útil para aprender detalles y mejores prácticas de TypeScript, SvelteKit, node, WebGL, canvas, CSS y HTML
¿Por qué hay una estación de bomberos en casi cada manzana de la ciudad?
No se puede interactuar y, apenas el navegador empieza a cargar algo, el ventilador del CPU empieza a girar. ¿Seguro que esto no es simplemente un minero de criptomonedas mal hecho? Si no lo es, no entiendo para qué publicar algo que no funciona.
No tengo dinero para comprar todo tipo de computadoras y teléfonos, e incluso si lo tuviera, no tendría tiempo para probarlos todos personalmente. Nadie me paga por hacer esto, pero si quieres puedes apoyarme en Patreon: https://www.patreon.com/DonHopkins
Aun así, este proyecto no es una fuente de ingresos, sino algo que hago por cariño. Por ahora también estoy ofreciendo una promoción especial en la que me quedo callado durante 5 minutos al mes sobre el tema que quieras.
Todo el código fuente se puede ver en GitHub, y puedes reportar bugs o compilarlo tú mismo. El navegador también incluye herramientas de depuración e ingeniería inversa con las que puedes inspeccionar el binario WebAssembly y el JavaScript compilado. Los shaders de WebGL están en texto plano, así que también puedes verificar si coinciden con el código fuente del repositorio.
https://github.com/SimHacker/MicropolisCore
Si encuentras pruebas de software de minería mal hecho, puedes reportarlo al FBI, a Interpol y a GitHub. Estoy publicando el código fuente y los binarios con mi nombre, mi cuenta de GitHub y mi dominio, así que también es fácil rastrear su origen.
Un ejemplo de reporte de bug útil identificó el problema incluyendo información del sistema y un stack trace, y gracias a eso pude corregirlo en unos minutos: https://github.com/SimHacker/MicropolisCore/issues/1
También me da curiosidad si probaste presionar las teclas numéricas para controlar la velocidad. Tomando como referencia los números de la parte superior del teclado, "1" lo ralentiza a 1 frame por segundo con 1 tick del simulador por frame, y "9" lo ejecuta a 120 frames por segundo con 50 ticks por frame. En Chrome en mi Mac M1 corre fluido y la interfaz responde bastante bien.
Sería bueno que me contaras qué controles no funcionan, qué hardware, sistema operativo, navegador y GPU tienes, y si había errores en la consola de desarrollador del navegador. En un reporte de bug ayuda incluir el stack trace de la consola.