Web tarayıcısında WebAssembly ve OpenGL ile çalışan SimCity
(micropolisweb.com)- Maxis’in orijinal SimCity Classic’ine dayanan Micropolis Web, tarayıcıda çalışan bir sürüm olarak yayımlandı; böylece klasik şehir simülasyonu ayrı bir kurulum olmadan deneyimlenebiliyor
- Proje, Will Wright’ın tasarladığı oyunun Don Hopkins tarafından port edilen sürümü ve hâlâ tamamlanmış değil, deneysel bir durumda; değişmeye devam ediyor
- GitHub deposu, demo videoları, Chaim Gingold’un kitabı ve diyagramları birlikte sunularak SimCity’nin uygulanışını ve tarihini daha derinlemesine inceleme imkânı veriliyor
- Kontroller; fare sürükleme·tekerlek, yön tuşları, harf tuşları ve sayı tuşlarıyla sağlanıyor; hareket, yakınlaştırma, şehir yükleme, hız ayarı, vergi oranı değiştirme ve tileset değiştirme yapılabiliyor
- “Micropolis” adı, Micropolis Public Name License koşullarına göre kullanılıyor ve ek özellikler ile easter egg’ler henüz hazır değil
Tarayıcıda çalışan Micropolis Web
- Micropolis Web, WebAssembly ile çalışan bir Micropolis sürümüdür
- Temeli, Maxis’in orijinal SimCity Classic oyunudur ve Will Wright’ın tasarladığı oyunu Don Hopkins port etmiştir
- Mevcut durumu, tamamlanmış bir üründen çok sürekli değişen, bitmemiş deneysel bir çalışma niteliğindedir
- Ek geliştirme desteği kanalı olarak Patreon bağlantısı verilmiştir
- Kaynak deposuna MicropolisCore üzerinden ulaşılabilir
- İlgili videolar:
- Referanslar:
- “Micropolis” adı, Micropolis Public Name License koşullarına göre kullanılmaktadır
Kontroller ve kalan uyarılar
-
Fare kontrolleri
- Sol tuşla sürükleyerek ekranı hareket ettirebilirsiniz
- Fare tekerleği ile yakınlaştırma ve uzaklaştırma yapılabilir
-
Klavye kontrolleri
- Yön tuşlarıyla ekranı hareket ettirebilirsiniz
- Virgül ve nokta tuşlarıyla yakınlaştırma ve uzaklaştırma yapılır
- Harf tuşlarıyla çeşitli şehirler yüklenir
\tuşu ile oluşturma yapılır- Sayı tuşlarıyla hız ayarlanır
0tuşu ile duraklatma açılıp kapatılır- Köşeli parantez tuşlarıyla vergi oranı azaltılır veya artırılır
-ve=tuşlarıyla tileset değiştirilir- Üstteki “X” düğmesine basarak bilgilendirme penceresini gizleyebilirsiniz
- Ek özellikler ve easter egg’ler hazırlık aşamasındadır
- Uyarı metni boşluk tuşuna basmamanızı söyleyerek başlar, ancak verilen metinde devamındaki açıklama tamamlanmamıştır
1 yorum
Hacker News yorumları
Eski oyunları web’e port etmek eğlenceli. Bugünlerde sıradan web sayfalarından daha küçük birçok oyun var; bu yüzden hızlı yükleniyor ve iyi çalışıyorlar
Az önce Quake 3’ü port ettim ve keyifle kurcalıyorum: https://thelongestyard.link/
Micropolis Web demo 1: https://www.youtube.com/watch?v=wlHGfNlE8Os
Micropolis Web, açık kaynaklı SimCity olan Micropolis’in tarayıcı sürümü ve WebAssembly, WebGL, SvelteKit kullanıyor. Will Wright’ın tasarlayıp Don Hopkins’in port ettiği özgün SimCity Classic kodunu temel alıyor; ilk demoda WebAssembly simülatörü ve WebGL karo animasyonları çalışıyor, ancak kullanıcı arayüzünün büyük bölümü hâlâ yapım aşamasında
Canlı site: https://MicropolisWeb.com
Kaynak kodu ve belgeler: https://github.com/SimHacker/MicropolisCore
Chaim Gingold’un kitabı "Building SimCity": https://mitpress.mit.edu/9780262547482/building-simcity/
Chaim Gingold’un "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
Müzik Juho Hietala ve Blamstrain tarafından yapıldı; Space Inventory Cellular Automata ise Don Hopkins tarafından uygulandı: https://blamstrain.com/
Gingold, Chaim. “Play Design.” Ph.D. thesis, University of California Santa Cruz, 2016. https://www.proquest.com/docview/1806122688
Micropolis’in Wasm’e portu, geliştirme açısından yeni bir aşama olabilir gibi görünüyor. Macintosh’taki SimCity Classic, çocukken bilgisayarlar ve yazılımlar hakkında düşünme biçimim üzerinde büyük etki bırakmıştı; ona burada yeni bir hayat verildiğini görmek sevindirici
Oyuncu değilim ama çocukken SimCity oynadığımı hatırlıyorum. Son 25 yıl kadar içinde oynanış mı değişti, yoksa tarayıcı mı bozuldu bilmiyorum ama sanki hiçbir şey çalışmıyor gibi görünüyor.
Şehri yükleyip hareket ettiğini görebiliyorum, ama eski SimCity'de şehri kendin kurabiliyordun diye hatırlıyorum. Oyuncunun gerçekten oynayabileceği bir yol olması gerekmiyor mu?
"Space Inventory" aslında birkaç hücresel otomat kuralı. Biri "Heat" benzeri, dithering uygulanmış 8 bit kaotik sarmalamalı ısı yayılımı; diğeri ise Rudy Rucker'ın John Walker ile birlikte geliştirdiği Autodesk Cellab'da yayımladığı "EcoLibra" varyantı. "Anneal"("Vote 4/5") üzerine "Life" ve "Brian's Brain" eklenmiş hâli.
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'de bu hücresel otomat kurallarını SimCity'ye ekleyip hücre değerlerini SimCity karoları olarak göstermiştim. Tam işlevli ücretsiz demoyu anonim FTP üzerinden dağıttım, ama hücresel otomatı DRM gibi kullanarak birkaç dakika oynandıktan sonra lisans yoksa şehrin eriyip dağılmasını sağladım.
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...
Kurulum talimatlarında, lisans anahtarı alabileceğiniz ya da demo modunda çalıştırabileceğiniz, demo modunda ise 5 dakika sonra veya kaydetmeye çalıştığınızda şehrin eriyeceği ve bu yüzden lisans satın almanız gerektiği yazıyordu.
Mobilde pek beklentim yoktu ama Android'deki Firefox'ta bu sayfa tarayıcıyı kilitledi. Süreci öldürmem gerekti; böyle şeyler nadir olur
Bu arada doğrudan tarayıcıya port ettiğim küçük bir oyun var. Çalışır hale getirmek Emscripten+SDL2 kombinasyonu sayesinde çok kolaydı ama dürüst olmak gerekirse, telefonda gerçekten oynanabilir hale getirmek en çok emek isteyen kısım oldu: https://play.neverball.org/
https://github.com/SimHacker/MicropolisCore/issues/1
Bitip kusursuz olmasını beklemek yerine, başkalarının deneyebilmesi için mümkün olduğunca erken yayımlamak istedim. Bu yüzden kullanıcı arayüzü, kararlılık, çapraz platform desteği, mobil ve diğer konularda hâlâ yapılacak çok iş var
Simülatör ve tile renderer çalışır çalışmaz; temel yakınlaştırma/kaydırma, klavye kontrol arayüzü ve sağ üstteki "+" düğmesiyle kapatılabilen bir ipucu penceresi ekledim
Asıl heyecan duyduğum şey, bunu Snap! gibi görsel programlama dilleriyle entegre edip live coding, eklenti bölgeleri, robotlar, izleme ve kontrol sistemleri, veri görselleştirme ve dışa aktarma, Grafana dashboard'ları gibi alternatif arayüzler oluşturabilmek
Android telefonlar USB kablosuyla Mac veya PC'ye, iPhone'lar ise Mac'e bağlandıktan sonra Chrome ya da Mac'teki Safari hata ayıklayıcısıyla uzak konsolu görüntüleme, debug ve hatta live coding yapmak mümkün. Koşullar uygunsa Wi‑Fi üzerinden de olabilir ama Google bu özelliği kaldırmış ya da Apple baştan engellemiş olabilir
Daha önce RuneScape istemcisini web'e port etmiştim
https://play.rsps.app/
Wasm, TypeScript ve WebGL kullanıyor
Kaynak deposu: https://github.com/SimHacker/MicropolisCore
Boşluk tuşuna basınca olanlar gerçekten şaşırtıcı. Fraktal harika
https://www.youtube.com/watch?v=0Gy9hJauXns
Büyük dil modellerinin böyle bir oyunu anında port edip edemeyeceğini merak ediyorum
Geliştirmede ChatGPT kullanıyorum ve çok faydasını gördüm, ama çok fazla yineleme ve yönlendirme gerekiyor; yani anında olup biten bir şey olmaktan uzak. LLM'ler programcıların yerini almayacak, ama LLM kullanan programcılar kullanmayanların yerini alacak
Emscripten ve Embind gibi araçların dokümantasyonunu ve en iyi uygulamalarını açıklatmak, makefile'ı çalışır hale getirmek, kodu analiz etmek, metotları ve örnek değişkenlerini private/public olarak sınıflandırmak, Embind bildirim boilerplate'ini ve dokümantasyonu yazmak için faydalı oldu. Kod sözdizimini anlayan ve İngilizce sorguları kabul eden gelişmiş bir grep gibi de kullanılabildi
https://github.com/SimHacker/MicropolisCore/blob/main/Microp...
Bu süreç ne otomatikti ne de anlıktı; genel olarak 33 yıl sürdü ve hâlâ bitmiş değil. 1991'de Mac sürümü SimCity'yi NeWS pencere sisteminin HyperLook'una port edip ardından başka platformlara taşımış olma deneyimime dayanarak ChatGPT'ye çok fazla yön vermem gerekti
SimCity gibi bir oyun için Mac UI'dan vazgeçip simülatörü arayüzden ayırmak ve ardından NeWS'in HyperLook'u için yüksek kaliteli yeni bir UI yazmak buna değdi. Sonrasında X11'in TCL/Tk'si için de bir UI yaptım ve bu mimari sayesinde ağ üzerinden çok oyunculu SimCity de mümkün oldu
X11 SimCity Demo: https://www.youtube.com/watch?v=Jvi98wVUmQA
Linux üzerinde X11 için çok oyunculu SimCityNet: 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/...
Onlarca yıl sonra SimCity'yi açık kaynak olarak yayımlayıp OLPC ve Linux için TCL/Tk/X11 sürümünü çıkardıktan sonra, simülatör kodunu C++ ile düzenledim ve SWIG ile API ile callback'leri tanımlayıp Python'a bağladım. C++ refactoring, modülerleştirme, dokümantasyon ve birçok platforma port etme açısından çok yardımcı oldu
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/...
PyGTK/Cairo/X11 masaüstü arayüzü ile TurboGears/AMF/OpenLaszlo/Flash tabanlı web istemci/sunucu arayüzü de yaptım
Micropolis Online (SimCity) Web Demo (old): https://www.youtube.com/watch?v=8snnqQSI0GE
Bil Simser, simülatör motorunu SWIG ile C#'a entegre etti: https://github.com/SimHacker/micropolis/tree/master/Micropol...
Bu tür tasarım belgeleri ve uygulama deneyimi olduğu için Emscripten/Embind API tasarımını ChatGPT'ye iyi prompt'layabildim; boilerplate yazımı ve tasarım doğrulaması için yararlıydı, ama tasarımın kendisini ortaya çıkarmakta o kadar yardımcı değildi. TypeScript, SvelteKit, node, WebGL, canvas, CSS ve HTML'nin ayrıntılarını ve en iyi uygulamalarını öğrenmekte de çok faydalı oldu
Neden neredeyse her şehir bloğunda bir itfaiye istasyonu var?
Kontrol edilemiyor ve tarayıcı bir şey yüklemeye başlar başlamaz CPU fanı dönmeye başlıyor. Bunun sadece özensiz bir kripto para madencisi olmadığına emin miyiz? Değilse çalışmayan bir şeyi neden yayımladıklarını anlamıyorum.
Her tür bilgisayarı ve telefonu satın alacak param yok; olsa bile hepsini bizzat test edecek vaktim olmazdı. Bunu bana para ödeyen biri için yapmıyorum ama isterseniz Patreon üzerinden destek olabilirsiniz: https://www.patreon.com/DonHopkins
Yine de bu proje bir gelir kaynağı değil, sevgiyle yaptığım bir iş. Şu anda istediğiniz bir konuda ayda 5 dakika susmamı sağlayan özel bir ürün de sunuyorum.
Tüm kaynak kod GitHub'da görülebilir; hata bildirebilir veya kendiniz derleyebilirsiniz. Tarayıcıda da WebAssembly ikili dosyalarını ve derlenmiş JavaScript'i inceleyebileceğiniz hata ayıklama ve tersine mühendislik araçları var. WebGL shader'ları düz metin, bu yüzden depodaki kaynakla eşleşip eşleşmediğini de kontrol edebilirsiniz.
https://github.com/SimHacker/MicropolisCore
Özensiz bir madencilik yazılımına dair kanıt bulursanız FBI, Interpol veya GitHub'a bildirebilirsiniz. Kaynak kodu ve ikili dosyaları kendi adımla, kendi GitHub hesabımla ve kendi alan adımla yayımlıyorum; dolayısıyla kaynağını izlemek de kolay.
Faydalı bir hata raporu örneği; sistem bilgileri ve yığın izini içererek sorunu tespit etti ve bu sayede birkaç dakika içinde düzeltebildim: https://github.com/SimHacker/MicropolisCore/issues/1
Hız ayarı için sayı tuşlarına basmayı denediniz mi, bunu da merak ediyorum. Klavyenin üst sırasındaki sayılara göre, "1" saniyede 1 kare ve kare başına 1 simülatör tikine düşürüyor; "9" ise saniyede 120 kare ve kare başına 50 tik ile çalıştırıyor. M1 Mac'imde Chrome'da akıcı çalışıyor ve arayüz de oldukça iyi yanıt veriyor.
Hangi kontrollerin çalışmadığını, donanımınızın, işletim sisteminizin, tarayıcınızın ve GPU'nuzun ne olduğunu ve tarayıcı geliştirici konsolunda hata olup olmadığını paylaşırsanız sevinirim. Hata raporuna konsol yığın izini de eklerseniz faydalı olur.