Webブラウザ上でWebAssemblyとOpenGLにより動作するSimCity
(micropolisweb.com)- Maxisのオリジナル版SimCity ClassicをベースにしたMicropolis Webがブラウザで動作する形で公開され、古典的な都市シミュレーションを別途インストールせずに体験できる
- このプロジェクトは、Will Wrightが設計したゲームをDon Hopkinsが移植したバージョンで、まだ完成版ではない実験的な状態として継続的に変化している
- GitHubリポジトリ、デモ動画、Chaim Gingoldの書籍と図表があわせて提供され、SimCityの実装と歴史をより深く知ることができる
- 操作はマウスドラッグ・ホイール、矢印キー、文字キー、数字キーなどを使い、移動、拡大・縮小、都市のロード、速度調整、税率変更、タイルセット切り替えが可能
- 「Micropolis」という名称はMicropolis Public Name Licenseの条件に従って使用されており、追加機能とイースターエッグはまだ準備中
ブラウザで動作するMicropolis Web
- Micropolis WebはWebAssemblyで動作するMicropolisのバージョン
- ベースはMaxisのオリジナル版SimCity Classicで、Will Wrightが設計したゲームをDon Hopkinsが移植したもの
- 現在の状態は完成した製品ではなく、継続的に変化する未完成の実験作に近い
- 追加開発の支援チャネルとしてPatreonがリンクされている
- ソースリポジトリはMicropolisCoreで確認できる
- 関連動画:
- 参考資料:
- 「Micropolis」という名称はMicropolis Public Name Licenseの条件に従って使用されている
操作方法と残っている注意事項
-
マウス操作
- 左ボタンのドラッグで画面を移動する
- マウスホイールで拡大・縮小できる
-
キーボード操作
- 矢印キーで画面を移動する
- カンマキーとピリオドキーで拡大・縮小する
- 文字キーで複数の都市をロードする
\キーで生成する- 数字キーで速度を設定する
0キーで一時停止を切り替える- 角括弧キーで税率を下げたり上げたりする
-と=キーでタイルセットを切り替える- 上部の**「X」ボタン**を押すと案内ウィンドウを非表示にできる
- 追加機能とイースターエッグが準備中
- 警告文はスペースバーを押さないようにという内容で始まるが、提供された本文では続く説明が完結していない
1件のコメント
Hacker Newsのコメント
古いゲームをWebに移植するのは面白い。最近の一般的なWebページより小さいゲームも多いので、読み込みが速く、よく動く。
さっきQuake 3を移植して、楽しくいじっているところ: https://thelongestyard.link/
Micropolis Web デモ 1: https://www.youtube.com/watch?v=wlHGfNlE8Os
Micropolis Webは、オープンソース版SimCityであるMicropolisのブラウザ版で、WebAssembly、WebGL、SvelteKitを使っている。Will Wrightが設計し、Don Hopkinsが移植したオリジナルのSimCity Classicコードベースを基にしており、最初のデモではWebAssemblyシミュレーターとWebGLタイルアニメーションは動くが、ユーザーインターフェイスの大半はまだ作業中。
ライブサイト: https://MicropolisWeb.com
ソースとドキュメント: https://github.com/SimHacker/MicropolisCore
Chaim Gingoldの本『Building SimCity』: https://mitpress.mit.edu/9780262547482/building-simcity/
Chaim Gingoldの「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
音楽はJuho Hietala、Blamstrainが制作し、Space Inventory Cellular AutomataはDon Hopkinsが実装した: https://blamstrain.com/
Gingold, Chaim. “Play Design.” Ph.D. thesis, University of California Santa Cruz, 2016. https://www.proquest.com/docview/1806122688
MicropolisのWasm移植は、開発の新しい段階になり得そう。MacintoshのSimCity Classicは、子どもの頃のコンピューターやソフトウェアについての考え方に大きな影響を与えたので、そこに新しい命が吹き込まれるのを見るのはうれしい。
ゲーマーではありませんが、子どものころにSimCityを遊んだ記憶があります。この25年ほどの間にゲームプレイが変わったのか、ブラウザが壊れているのか分かりませんが、何もできないように見えます
都市を読み込んで動いている様子を見ることはできますが、昔のSimCityでは自分で都市を作れたように思います。プレイヤーが実際にプレイする方法があるべきではないでしょうか?
「Space Inventory」は実際にはいくつかのセル・オートマトン規則です。1つは「Heat」に似た、ディザリングされた8ビットのカオスなラップアラウンド熱拡散で、もう1つはRudy RuckerがJohn Walkerと作ったAutodesk Cellabで発表した「EcoLibra」の変種です。「Anneal」(「Vote 4/5」)に「Life」と「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
1991年にこれらのセル・オートマトン規則をSimCityに追加し、セルの値をSimCityのタイルとして表示するようにしました。匿名FTPで無料の完全機能デモを配布しましたが、セル・オートマトンをDRMのように使い、数分プレイしたあとライセンスがなければ都市が溶けて崩れるようにしていました
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...
インストール手順には、ライセンスキーを取得するかデモモードで実行でき、デモモードでは5分後または保存しようとしたときに都市が溶けてしまうのでライセンスを購入するように、という趣旨の文言がありました
モバイルではあまり期待していなかったのですが、Android の Firefox ではこのページがブラウザを固まらせてしまいました。プロセスを終了する必要があり、こういうことは珍しいです。
ちなみに、自分でブラウザ向けに移植した小さなゲームがあります。動くようにするのは Emscripten+SDL2 の組み合わせのおかげでとても簡単でしたが、正直なところ、スマートフォンでまともに遊べるようにするのにいちばん手間がかかりました: https://play.neverball.org/
https://github.com/SimHacker/MicropolisCore/issues/1
完成して完璧になるまで待つより、他の人が試せるようにできるだけ早く公開したいと思いました。そのため、ユーザーインターフェース、安定性、クロスプラットフォーム対応、モバイルなど、まだやることがたくさんあります。
シミュレーターとタイルレンダラーが動き次第、最小限のズーム/移動、キーボード操作インターフェース、右上の「+」ボタンで閉じられるヒントウィンドウを付けました。
本当に期待しているのは、Snap! のようなビジュアルプログラミング言語と統合して、ライブコーディング、プラグイン区域、ロボット、監視・制御システム、データ可視化とエクスポート、Grafana ダッシュボードのような代替インターフェースを作れるようにすることです。
Android スマートフォンは USB ケーブルで Mac や PC に、iPhone は Mac に接続したうえで、Chrome または Mac の Safari デバッガーからリモートコンソールの確認、デバッグ、ライブコーディングまで可能です。条件が合えば Wi-Fi でもできるかもしれませんが、Google がその機能をなくしたか、Apple がそもそも塞いでいた可能性もあります。
以前、RuneScape クライアントを Web に移植しました。
https://play.rsps.app/
Wasm、TypeScript、WebGL を使っています。
ソースリポジトリ: https://github.com/SimHacker/MicropolisCore
スペースバーを押すと起きることが本当に驚きです。フラクタルが見事です。
https://www.youtube.com/watch?v=0Gy9hJauXns
大規模言語モデルでこうしたゲームを即座に移植できるのか気になる
開発にChatGPTを使っていて大いに助かっていますが、多くの反復と指示が必要で、即座にできるというには程遠いです。LLMがプログラマーを置き換えることはないでしょうが、LLMを使うプログラマーが使わないプログラマーを置き換えることになるでしょう
EmscriptenやEmbindのようなツールのドキュメントやベストプラクティスを説明してもらい、makefileを動くようにし、コードを解析し、メソッドやインスタンス変数をprivate/publicに分類し、Embind宣言のボイラープレートやドキュメントを書くのに役立ちました。コード構文を理解し、英語の問い合わせを受け付ける高度なgrepのようにも使えました
https://github.com/SimHacker/MicropolisCore/blob/main/Microp...
このプロセスは自動でも即時でもなく、全体としては33年かかっており、今もまだ終わっていません。1991年にMac版SimCityをNeWSウィンドウシステムのHyperLookへ移植し、その後さまざまなプラットフォームへ移した経験をもとに、ChatGPTをかなり誘導する必要がありました
SimCityのようなゲームは、Mac UIを捨て、シミュレーターをUIから分離したうえで、NeWSのHyperLook向けに高品質なUIを新たに書く価値がありました。その後、X11のTCL/Tk向けUIも作り、この構造のおかげでネットワーク・マルチプレイヤーのSimCityも可能になりました
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/...
数十年後、SimCityをオープンソースとして公開し、OLPCとLinux向けのTCL/Tk/X11版を出した後、シミュレーターのコードをC++で整理し、SWIGでAPIとコールバックを定義してPythonに接続しました。C++でのリファクタリングは、モジュール化、ドキュメント化、複数プラットフォームへの移植に大いに役立ちました
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のデスクトップインターフェースと、TurboGears/AMF/OpenLaszlo/FlashベースのWebクライアント/サーバーインターフェースも作りました
Micropolis Online (SimCity) Web Demo (old): https://www.youtube.com/watch?v=8snnqQSI0GE
Bil SimserはSWIGでシミュレーターエンジンをC#に統合しました: https://github.com/SimHacker/micropolis/tree/master/Micropol...
こうした設計文書と実装経験があったため、Emscripten/Embind API設計についてChatGPTにうまくプロンプトでき、ボイラープレートの作成や設計の検証には有用でしたが、設計そのものを思いつくことにはあまり役立ちませんでした。TypeScript、SvelteKit、node、WebGL、canvas、CSS、HTMLの細部やベストプラクティスを学ぶうえでも非常に有用でした
なぜほぼすべての街区に消防署があるんだろう?
操作できず、ブラウザが何かをロードした途端にCPUファンが回り始めた。これが単なる出来の悪い暗号資産マイナーではないと本当に言えるのか? そうでないなら、動かないものを公開する理由が分からない
あらゆる種類のコンピューターやスマートフォンを買うお金もありませんし、仮にあったとしても全部を自分でテストする時間はありません。誰かにお金をもらってやっている仕事でもありませんが、望むならPatronで支援できます: https://www.patreon.com/DonHopkins
それでもこのプロジェクトは収入源ではなく、愛着からやっているものです。現在は、希望するテーマについて月に5分間、私が黙っているという特別商品も提供中です。
すべてのソースコードはGitHubで閲覧でき、バグを報告したり自分でビルドしたりできます。ブラウザにはWebAssemblyバイナリやコンパイル済みJavaScriptを調べられるデバッグ・リバースエンジニアリング用ツールも入っています。WebGLシェーダーは平文なので、リポジトリのソースと一致しているかも確認できます。
https://github.com/SimHacker/MicropolisCore
出来の悪いマイニングソフトの証拠を見つけたなら、FBI、Interpol、GitHubに通報しても構いません。私の名前、私のGitHubアカウント、私のドメインでソースとバイナリを公開しているので、出所を追跡するのも簡単です。
役に立つバグレポートの例では、システム情報とスタックトレースを含めて問題を特定してくれたため、数分で修正できました: https://github.com/SimHacker/MicropolisCore/issues/1
速度調整用の数字キーを押してみたかも気になります。キーボード上部の数字キーで、「1」は毎秒1フレーム、1フレームあたりシミュレーター1ティックまで遅くなり、「9」は毎秒120フレーム、1フレームあたり50ティックで動作します。私のM1 MacのChromeでは滑らかで、インターフェースもかなり反応がよいです。
どの操作ができないのか、ハードウェア・OS・ブラウザ・GPUが何か、ブラウザの開発者コンソールにエラーがあったかを教えてもらえると助かります。バグレポートにはコンソールのスタックトレースを含めてもらえると助かります。