SimCity yang berjalan di browser web dengan WebAssembly dan OpenGL
(micropolisweb.com)- Micropolis Web, yang berbasis SimCity Classic asli dari Maxis, telah dirilis dalam bentuk yang berjalan di browser, sehingga simulasi kota klasik ini bisa dicoba tanpa instalasi terpisah
- Proyek ini adalah versi port dari game yang dirancang oleh Will Wright oleh Don Hopkins, dan masih berstatus eksperimental, belum merupakan versi final, serta terus berubah
- Repositori GitHub, video demo, serta buku dan diagram karya Chaim Gingold juga disediakan untuk menelusuri implementasi dan sejarah SimCity lebih dalam
- Pengoperasian menggunakan drag dan wheel mouse, tombol arah, tombol huruf, dan tombol angka untuk berpindah, zoom, memuat kota, mengatur kecepatan, mengubah tarif pajak, dan mengganti tileset
- Nama “Micropolis” digunakan sesuai ketentuan Micropolis Public Name License, dan fitur tambahan serta easter egg masih belum siap
Micropolis Web yang berjalan di browser
- Micropolis Web adalah versi Micropolis yang berjalan dengan WebAssembly
- Dasarnya adalah SimCity Classic asli dari Maxis, dan game yang dirancang oleh Will Wright ini di-port oleh Don Hopkins
- Status saat ini lebih dekat ke eksperimen yang belum selesai dan terus berubah, bukan produk final
- Kanal dukungan untuk pengembangan lanjutan ditautkan ke Patreon
- Repositori sumber dapat dilihat di MicropolisCore
- Video terkait:
- Materi referensi:
- Nama “Micropolis” digunakan sesuai ketentuan Micropolis Public Name License
Cara pengoperasian dan catatan yang masih perlu diperhatikan
-
Kontrol mouse
- Seret tombol kiri untuk menggeser layar
- Gunakan wheel mouse untuk zoom in dan zoom out
-
Kontrol keyboard
- Gunakan tombol arah untuk menggeser layar
- Tombol koma dan titik untuk zoom in dan zoom out
- Tombol huruf untuk memuat berbagai kota
- Tombol
\untuk membuat - Tombol angka untuk mengatur kecepatan
- Tombol
0untuk mengaktifkan atau menonaktifkan jeda - Tombol kurung siku untuk menurunkan atau menaikkan tarif pajak
- Tombol
-dan=untuk mengganti tileset - Menekan tombol “X” di bagian atas dapat menyembunyikan jendela petunjuk
- Fitur tambahan dan easter egg sedang dipersiapkan
- Pesan peringatan dimulai dengan instruksi agar tidak menekan spasi, tetapi pada teks yang diberikan penjelasan lanjutannya tidak lengkap
1 komentar
Komentar Hacker News
Mem-porting game lama ke web itu menyenangkan. Sekarang bahkan banyak game yang ukurannya lebih kecil daripada halaman web biasa, jadi cepat dimuat dan berjalan dengan baik
Baru saja mem-porting Quake 3 dan sedang asyik mengutak-atiknya: https://thelongestyard.link/
Demo Micropolis Web 1: https://www.youtube.com/watch?v=wlHGfNlE8Os
Micropolis Web adalah versi browser dari Micropolis, SimCity open source, dan menggunakan WebAssembly, WebGL, serta SvelteKit. Ini didasarkan pada kode asli SimCity Classic yang dirancang oleh Will Wright dan di-porting oleh Don Hopkins, dan demo pertamanya sudah menjalankan simulator WebAssembly serta animasi tile WebGL, tetapi sebagian besar antarmuka pengguna masih dalam pengerjaan
Situs live: https://MicropolisWeb.com
Sumber dan dokumentasi: https://github.com/SimHacker/MicropolisCore
Buku Chaim Gingold "Building SimCity": https://mitpress.mit.edu/9780262547482/building-simcity/
"SimCity Reverse Diagrams" karya 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
Musik dibuat oleh Juho Hietala, Blamstrain, dan Space Inventory Cellular Automata diimplementasikan oleh Don Hopkins: https://blamstrain.com/
Gingold, Chaim. “Play Design.” Ph.D. thesis, University of California Santa Cruz, 2016. https://www.proquest.com/docview/1806122688
Porting Wasm untuk Micropolis tampak bisa menjadi tahap baru dalam pengembangan. SimCity Classic di Macintosh sangat memengaruhi cara aku memikirkan komputer dan perangkat lunak saat kecil, jadi senang melihatnya diberi kehidupan baru di sini
Saya bukan gamer, tapi saya ingat pernah memainkan SimCity waktu kecil. Saya tidak tahu apakah gameplay-nya berubah dalam sekitar 25 tahun terakhir, atau browser-nya yang rusak, tetapi kelihatannya tidak ada yang bisa dilakukan.
Saya bisa memuat kota dan melihatnya bergerak, tetapi sepertinya di SimCity dulu kita bisa membangun kota sendiri. Bukankah seharusnya ada cara untuk benar-benar bermain bagi pemain?
"Space Inventory" sebenarnya adalah beberapa aturan cellular automata. Salah satunya adalah difusi panas wrapping chaos 8-bit yang di-dither mirip "Heat", dan yang lainnya adalah variasi "EcoLibra" yang dipublikasikan Rudy Rucker dalam Autodesk Cellab yang ia buat bersama John Walker. Menggabungkan "Anneal" ("Vote 4/5") dengan "Life" dan "Brian's Brain"
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
Pada tahun 1991, saya menambahkan aturan cellular automata ini ke SimCity, sehingga nilai sel ditampilkan sebagai tile SimCity. Saya mendistribusikan demo gratis berfitur lengkap lewat anonymous FTP, tetapi menggunakan cellular automata seperti DRM sehingga setelah dimainkan beberapa menit, kota akan meleleh jika tidak ada lisensi.
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...
Petunjuk instalasinya menyebutkan bahwa Anda bisa mendapatkan kunci lisensi atau menjalankannya dalam mode demo, dan dalam mode demo kota akan meleleh setelah 5 menit atau saat Anda mencoba menyimpan, jadi Anda disuruh membeli lisensi
Awalnya saya tidak berharap banyak di perangkat seluler, tetapi di Firefox pada Android halaman ini membuat browser macet total. Saya sampai harus mematikan prosesnya, dan kejadian seperti ini jarang terjadi
Sebagai catatan, saya punya game kecil yang saya port sendiri ke browser. Membuatnya bisa berjalan sangat mudah berkat kombinasi Emscripten+SDL2, tetapi sejujurnya usaha terbesar justru ada pada membuatnya benar-benar nyaman dimainkan di ponsel: https://play.neverball.org/
https://github.com/SimHacker/MicropolisCore/issues/1
Daripada menunggu sampai semuanya selesai dan sempurna, saya ingin merilisnya secepat mungkin agar orang lain bisa langsung mencobanya. Jadi masih banyak yang harus dikerjakan untuk antarmuka pengguna, stabilitas, dukungan lintas platform, seluler, dan lainnya
Begitu simulator dan tile renderer mulai berfungsi, saya langsung menambahkan zoom/pan minimal, antarmuka kontrol keyboard, dan jendela petunjuk yang bisa ditutup dengan tombol "+" di kanan atas
Yang benar-benar saya nantikan adalah mengintegrasikannya dengan bahasa pemrograman visual seperti Snap! agar bisa membuat live coding, area plugin, robot, sistem pemantauan dan kontrol, visualisasi serta ekspor data, dan antarmuka alternatif seperti dashboard Grafana
Ponsel Android bisa dihubungkan ke Mac atau PC lewat kabel USB, sedangkan iPhone ke Mac, lalu Anda bisa memeriksa konsol jarak jauh, melakukan debugging, bahkan live coding melalui Chrome atau debugger Safari di Mac. Dalam kondisi tertentu mungkin juga bisa lewat Wi‑Fi, tetapi mungkin Google sudah menghapus fiturnya atau Apple memang dari awal memblokirnya
Saya pernah mem-port klien RuneScape ke web
https://play.rsps.app/
Menggunakan Wasm, TypeScript, dan WebGL
Repositori sumber: https://github.com/SimHacker/MicropolisCore
Hal yang terjadi saat menekan spasi benar-benar mengejutkan. Fraktalnya keren sekali
https://www.youtube.com/watch?v=0Gy9hJauXns
Penasaran apakah model bahasa besar bisa langsung mem-porting game seperti ini
Saya memakai ChatGPT untuk pengembangan dan itu sangat membantu, tetapi butuh banyak iterasi dan arahan, jadi masih jauh dari sesuatu yang instan. LLM tidak akan menggantikan programmer, tetapi programmer yang memakai LLM akan menggantikan programmer yang tidak memakainya
Ini berguna untuk menjelaskan dokumentasi dan praktik terbaik alat seperti Emscripten dan Embind, membuat makefile berjalan, menganalisis kode, mengelompokkan method dan instance variable sebagai private/public, serta menulis boilerplate deklarasi Embind dan dokumentasi. Saya juga bisa memakainya seperti grep tingkat lanjut yang memahami sintaks kode dan menerima kueri dalam bahasa Inggris
https://github.com/SimHacker/MicropolisCore/blob/main/Microp...
Proses ini tidak otomatis maupun instan; secara keseluruhan butuh 33 tahun dan sampai sekarang pun belum selesai. Berdasarkan pengalaman mem-porting SimCity versi Mac ke HyperLook pada sistem jendela NeWS pada 1991 dan kemudian memindahkannya ke berbagai platform lain, saya tetap harus banyak mengarahkan ChatGPT
Untuk game seperti SimCity, ada manfaat besar dari membuang UI Mac dan memisahkan simulator dari UI, lalu menulis ulang UI berkualitas tinggi untuk HyperLook milik NeWS. Setelah itu saya juga membuat UI untuk TCL/Tk di X11, dan berkat struktur ini SimCity multiplayer lewat jaringan juga jadi mungkin
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/...
Beberapa dekade kemudian, setelah merilis SimCity sebagai open source dan mengeluarkan versi TCL/Tk/X11 untuk OLPC dan Linux, saya merapikan kode simulator ke C++ dan mendefinisikan API serta callback dengan SWIG untuk dihubungkan ke Python. Refactoring C++ sangat membantu modularisasi, dokumentasi, dan porting ke berbagai platform
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/...
Saya juga membuat antarmuka desktop PyGTK/Cairo/X11 dan antarmuka klien/server web berbasis TurboGears/AMF/OpenLaszlo/Flash
Micropolis Online (SimCity) Web Demo (old): https://www.youtube.com/watch?v=8snnqQSI0GE
Bil Simser mengintegrasikan engine simulator ke C# dengan SWIG: https://github.com/SimHacker/micropolis/tree/master/Micropol...
Karena sudah ada dokumen desain dan pengalaman implementasi seperti ini, saya bisa memberi prompt yang bagus ke ChatGPT untuk perancangan API Emscripten/Embind. Itu berguna untuk menulis boilerplate dan memvalidasi desain, tetapi tidak terlalu membantu untuk memunculkan desain itu sendiri. Ini juga sangat berguna untuk mempelajari detail dan praktik terbaik TypeScript, SvelteKit, node, WebGL, canvas, CSS, dan HTML
Kenapa ada kantor pemadam kebakaran di hampir setiap blok kota?
Tidak bisa dikendalikan, dan begitu browser mulai memuat sesuatu, kipas CPU langsung berputar. Yakin ini bukan sekadar penambang kripto murahan? Kalau bukan, saya tidak paham kenapa sesuatu yang tidak berfungsi dipublikasikan
Saya tidak punya uang untuk membeli semua jenis komputer dan ponsel, dan kalaupun punya, saya juga tidak punya waktu untuk menguji semuanya sendiri. Ini juga bukan pekerjaan yang dibayar, tetapi kalau mau Anda bisa mendukung lewat Patreon: https://www.patreon.com/DonHopkins
Meski begitu, proyek ini bukan sumber penghasilan, melainkan kerja yang saya lakukan karena kecintaan. Saat ini saya juga menawarkan produk spesial berupa diam selama 5 menit per bulan tentang topik apa pun yang Anda inginkan
Semua kode sumber bisa dilihat di GitHub, dan Anda dapat melaporkan bug atau membangunnya sendiri. Browser juga memiliki alat debugging dan reverse engineering untuk memeriksa binary WebAssembly dan JavaScript yang telah dikompilasi. Shader WebGL berbentuk plain text, jadi Anda juga bisa memeriksa apakah itu sesuai dengan sumber di repositori
https://github.com/SimHacker/MicropolisCore
Jika Anda menemukan bukti perangkat lunak penambang murahan, silakan laporkan ke FBI, Interpol, atau GitHub. Saya memublikasikan source dan binary dengan nama saya, akun GitHub saya, dan domain saya, jadi asal-usulnya juga mudah dilacak
Contoh laporan bug yang membantu mencakup informasi sistem dan stack trace untuk mengidentifikasi masalah, sehingga saya bisa memperbaikinya dalam hitungan menit: https://github.com/SimHacker/MicropolisCore/issues/1
Saya juga penasaran apakah Anda sudah mencoba menekan tombol angka untuk mengatur kecepatan. Berdasarkan angka di baris atas keyboard, "1" memperlambatnya menjadi 1 frame per detik dan 1 tick simulator per frame, sedangkan "9" menjalankannya pada 120 frame per detik dan 50 tick per frame. Di Chrome pada M1 Mac saya, ini berjalan mulus dan antarmukanya juga cukup responsif
Akan sangat membantu jika Anda memberi tahu kontrol apa yang tidak berfungsi, serta perangkat keras, sistem operasi, browser, dan GPU yang digunakan, dan apakah ada error di konsol pengembang browser. Akan membantu jika laporan bug menyertakan stack trace dari konsol