MicrosoftがZorkをオープンソース化!あの伝説的ゲームがついに公開か?
引用元:https://news.ycombinator.com/item?id=45995740
14歳くらいの頃、友達とZorkをプレイしてて、自分たちでもゲームを作ろうってInfocomに提案したんだ。ZILとZ-machineを使わせてってね。驚いたことに、彼らは丁寧に断ってくれたんだ。今思えば、BASICやアセンブリ言語はできたけど、ZILじゃ無理だったろうな。だから、Infocomの判断は正しかったって思うよ。でも、子どもたちを馬鹿にせず尊重してくれた会社には感動したな。あの手紙、まだ持っていたかったよ。
え、このコメント、俺が書いたのかと思ったよ!年齢も近いし、Apple IIでBASICと6502をいじってた(-151を呼ぶんだよね!)、俺もInfocomに手紙書いたんだ。イギリスにいたから、数週間後に似たような返事が来た時はさらに驚いたよ。残念ながら、俺の手紙も引っ越しのせいで失くしちゃったな。Grewに食べられちゃったのかも。
俺も手紙を書いたんだ。しばらくして、郵便受けにパンフレットが届いたんだけど、そこにこんなスタンプが押してあったんだよね。
—v—-v—-v—-v—-v—
| _______ |
> One / \ G <
| Lousy / \ U |
> Point | ___ | E <
| | () | |
> <–)(–>> P <
| / / \ \ o |
> / / \ \ s <
| |-|———|-| t |
> | | \ _ / | | a <
| | | –()– | | g |
> | | /| |\ | | e <
| |-|—||—|-| |
> \ _/_/ / <
| /______ |
> | f.m.l.c. | <
| ————- |
> <
| Donald Woods, Editor |
> Spelunker Today <
| |
—^—-^—-^—-^—-^—
https://news.ycombinator.com/item?id=23114927https://www.youtube.com/watch?v=A8Z1cKUxD9chttps://crpgadventures.blogspot.com/2016/05/zork-victory-sor…
ハハ!たぶん、次のゲームを作りたがってた子供たち全員に、インターンを割り当てて返事させてたんだろうね。面白すぎ!Infocomは品があったよ。
俺もだよ、ただ俺の手紙はSierra On-Line宛てで、TRS-80 6809で経験したことだけどね。学校を卒業したらまた手紙をくれって、すごく品のある返事だったんだ。
彼らの高解像度アドベンチャーゲームの画像圧縮方法について尋ねる手紙を送ったのを覚えてるよ。返事は来たけど、企業秘密だって言われたんだ。ちょっとがっかりしたな。でも12歳で6502すらほとんど理解してなかった俺には、どうせちんぷんかんぷんだったろうな。
InfocomとSOLの話を聞けて嬉しいな。前者は80年代中盤から後半にかけてAtari 800XLで夢中になったし、後者は89年に386SXを手に入れてからの数年間、どハマりしたよ。
当時の採用経路って長かったんだね、うん?
1980年代、俺はテキストアドベンチャーゲームに夢中だったんだ。どうやって作るかの本も持ってたな。もちろんBASICでだよ(うんざり)だって、当時手軽だったから。本で紹介されてた仕組み、世界の状況や物の場所を表す基本的なデータ構造とかを解明していったのを覚えてる。簡単なのは作れるようになったんだ。世界をナビゲートしたり、物を拾ったり置いたりとかね。でも、どんなゲームにするかのデザインがはっきりしてなくて、だんだんやる気なくしちゃったんだ。海賊版ゲームもいくつか(C64、Amigaの「Death in the Caribbean」とか「The Pawn」とか)持ってたけど、最初のパズルか二番目のパズルを過ぎると、全然やる気が続かなかったな。パズルって、ひらめきがないと論理的に解く方法が全然ないように思えたんだ。多分、当時の俺の脳みそがそこまで発達してなかったんだろうね。
良いね。うん、俺たちもBASICでアドベンチャーゲーム書いてたよ。ただ、いくつか問題があってさ。まず、Infocomみたいに洗練されたパーサーは作れなかったんだ。「動詞 オブジェクト」形式のパーサーになっちゃったな、Scott Adamsのアドベンチャーみたいに。それと、部屋数もあんまり作れなかったんだ。全部メモリに収めるのが難しかったし、InfocomのZ-machineみたいに洗練されたインクリメンタルローディングもできなかったからね。それでも、ちゃんと動いたけどさ。
ZX-81でBASICのミニADV作ったな。1KBのRAMしかなかったから、ゲームの各部屋は別々のプログラムにしなきゃならなかったんだ(最大で25行くらいのコードかな)。で、部屋の最後で、取った行動に応じてカセットテープを特定の位置まで巻いて、新しい部屋をロードするように促されたんだよ。やっと16KB RAMパックが買えた時、1つのアプリケーションとして全部書き直したんだ。あれだけメモリがあるって、どれだけ素晴らしいか信じられなかったよ。
> カセットテープを特定の位置まで巻いて、新しい部屋をロードするように促されたんだよ。
うわー、すごい情熱だな!俺はCommodore PET用に自分でアドベンチャーゲームを書いたんだけど、8KBのRAMがあったんだ。うまく動いたんだけど、3部屋分の内容でRAMを使い果たしちゃって、それで諦めたんだよ。
意志あるところに道は開けるって言うけど、ホントすごいよな!
俺が6歳くらいの頃、兄貴たちが「コンピューターゲームは文章形式で書くんだ」って俺を信じ込ませたんだ。それで、俺はたくさんのゲームを書いたよ!「Asteroids」はこんな感じだった。「お前は三角形の船に乗って飛び回る。小惑星を撃つと、もっと小さい小惑星に砕ける。」兄貴たちは俺のあの”プログラム”を読んで大爆笑してたな。あれから45年、さて、今笑ってるのは誰でしょう? :)
もしお前がvibe codingで特許を取ってたら、今頃は笑ってたのにおしいな。
それが特許可能だったとしても、45年前じゃ2000年には期限切れになっちゃってるって。
TRS-80 Model IIIで中学から高校まで、アドベンチャーゲームを作りまくったな。BASICでパーサーの再帰を実装したんだぜ、スタックも、まだ存在しなかったGOSUBもなしで、文字列をスタックとして使って、戻り先を文字で指定したんだ(つまり条件付きGOTOのフラグとしてね)。俺のパーサーにはマジで誇りを持ってる!たくさんの素晴らしい未完成ゲームを書いたけど、完成させることよりも、より良いコーディングに夢中だったんだ。でもゲームにはたくさんの面白さがあったよ。イースターエッグの一つは、「sh*t」ってタイプすると「YOU HAVE DROPPED THE DUNG」って返ってくるってやつ。どこでもできたから、迷路や森でグルグル回ったのを検知するのに最高の方法だったな。後には、文字列をヒープとして使って、ごくシンプルな3Dベクタージオメトリを定義したよ。(初期のMATLABでは、彼らが構造体を導入する前に、配列でツリーデータ構造を実装したコードをプロトタイプ化したんだ。その後のコードは出荷されたよ。)
BASICでひどい「動詞 オブジェクト」パーサーを書くのは、俺たちの多くにとってまさに通過儀礼だったな。俺もいくつか書いたのを覚えてるよ。一番良かったやつは、初歩的な「動詞 オブジェクト 前置詞 主語」のサポートがあったけど、当時のBASICじゃそれが限界だったな。でも、家ではTADSや初期のInformが使えたのに、BASICでもいくつか作ったんだ(だって学校のコンピューター室にはBASICしかなかったからね)。
それ、brainfuckでやったことあるよ。どうやら俺ってマゾらしい。
いや、お前だけじゃないよ。あの手のゲームにはめちゃくちゃなご都合主義が多かったんだ。ほとんどのデベロッパーが(有料の)ヒント電話サービスを持ってたのが笑えるよな。
それ、すごく良い話だね。8歳の頃、NASAに電話して宇宙船の設計図を描いたって伝えたら、優しく対応してくれたのを覚えてるよ。同じ1988年頃、HyperCardでゲームを作り始めて、すぐに結果が出たから、航空宇宙じゃなくてSWEになったんだろうな。
’子供の頃、俺は…’か。これ、思い出が蘇るな。当時のMUD用のシェルを書きたいって思って、BBSの世界に入り、真剣にプログラミングを始めたんだ。友達と自動マッピングやグラフィック追加のために、すごいものを作ったよ。シンプルなゲームって、問題を限定するのに役立つから、好奇心を簡単に育めるんだ。
これ、鳥肌が立ったよ。Zork(とInfocomの他のゲームも)が俺にとってどれだけ重要か、言葉では伝えきれないね。俺がCommodore 64でゲームを始めたきっかけはこれだったんだ。これらのゲームを世に出すことに携わった人たちへ、君たちはたくさんの人々の人生に楽しくて、意味のある、心温まる影響を与えたことを知ってほしい。
リポジトリへの直接リンク:https://github.com/historicalsource/zork1
俺だけかな?またGitHubがエラー出してる?ずっと500エラーが出るんだ。
俺も影響受けたよ。暗闇だった。グルーに食われそうになった。
俺のページは読み込まれるけど、”現時点では最新のコミットを取得できません”ってメッセージが出るよ。
これまで色々な場所で’Zorkのソースコード’と称されるものをいくつか見たことあるんだ(ゲームプログラミング本の付属CDにさえあったよ)。https://github.com/MITDDC/zorkみたいなコピーもあるけど、今回のやつはどんな系統なの?
Zorkは元々MITでMDLっていうLisp方言でPDP-10用に書かれたんだ。作者たちはInforcomを作って、ZILっていうLisp方言と仮想マシンを開発し、マイクロコンピューター用に移植したの。その時、ゲームは3つに分割されたよ。記事でリンクしてるのは元のMDLソースだけど、この記事で言ってるのは、3つに分割されたZorkのZILソースのことだよ。
MDLはSchemeやSICPの生みの親であるSussmanが関わったLispの方言なんだよ。これは研究の一環として生まれた多くの実験的な言語の一つで、obscureなんかじゃないんだ。Sussman以外にもAbelsonとかGuy Steeleとか、有名な人たちがこの研究に関わっていたんだぜ。
もっとコメントを表示(1)
言いたかったんだけど、MITとDEC-10だよ?多分obscureじゃないよね。
PDP-10、の方だね。
だいたいDEC-10とPDP-10は同じだよ。
今日Lispの記事を読むの、これで4回目だよ。もうLispがすごいのは分かったから、どこから始めればいいんだ?来週の仕事、Lisp以外やる気ないし…って感じ。
Lispを学ぶには、結構いいタイミングだよ。昔MITがLisp、特にSchemeでプログラミング入門を教えてたから、教材は豊富なんだ。有名な”SICP”はMITの教科書で、全部Lispの例題だったよ(今はJavaScript版もあるみたい)。オンラインの書籍やガイドもたくさんあるよ。
ここにランダムなオンラインブックがあるよ: https://gigamonkeys.com/book/
すぐにでも“my other car is a cdr”ってバンパーステッカーを貼るようになるさ!
>“my other car is a cdr”ってバンパーステッカーを貼るようになるさ!
それってLispを学ぶことで、新しいバンパーのブラケットを溶接する時間がなくなって、結局バンパーは物置の横に積みっぱなしになっちゃうってこと?笑
MDLのバンパーステッカーなら“my other 1 is a REST”になるけど、それだと響きが全然違うよね。
みんな本を勧めてるけど、僕は特定のLisp方言を勧めたいな。Clojureをインストールして、https://clojure.org/guides/getting_started を読んで、エディタを選んでみて。もしこだわりがなければ、NeoVimとLazyVimパッケージがいいよ。
パッケージマネージャーにはhttps://leiningen.org/ がおすすめ。これでClojureコードを.exeにコンパイルするのも簡単だよ。
準備ができたらhttps://clojure.org/guides/learn/clojure を読んだり、他のLispの本と併用するといいよ。方言で関数名は違うけど、概念は一緒さ。
Lisp書くならいいエディタサポートが超重要だよ。括弧のバランスとかインデントとかさ。EmacsはLispのために作られたから、キーバインドとか設定ファイルもLispで書かれてるし便利。でもVimもいいぞ。まあStallmanへの崇拝も込みでEmacsは3つの利点があるってことで…。
Lispの学習にはこれがおすすめ!『A Gentle Introduction to Symbolic Computation』って本、見てみて。URLはこれね:https://www.cs.cmu.edu/~dst/LispBook/book.pdf
大学院でLispを学んだよ。当時はAI系でよく使われてたけど、今はPythonに移ったらしいね。Common LispのインタプリタはSBCLを使ったと思う。教授もLispを学びたがってたから、俺はLispでプロジェクトやるって挑戦したんだ。URL:https://www.sbcl.org/
6.001受ける前に『The Little LISPer』を読んだよ。良い入門書だったな。俺が読んだのはこれ:https://www.abebooks.com/9780023397639/Little-LISPer-Third-E…
まずLispの構文に慣れることだね。最初はPythonの構文で考えるといいかも。
(f x) は [”f”, ”x”] みたいにね。
Lispコードはただのリストデータで、インタプリタが評価するんだ。自分でeval関数を実装するとマジで理解が深まるよ。これらの記事もすごく良いぞ:https://www.norvig.com/lispy.html
https://norvig.com/lispy2.html
面白いね、俺もPythonで似たようなコードを結構書いたことあるよ。独自の言語をASTとしてPythonのリストやタプルにパースして、それを評価器で処理するんだ。
Lispを始めるなら、正直Emacsをインストールしてelispをいじってみるのがいいんじゃない?たしかドキュメントにelispの初心者ガイドもついてたはずだよ。
SICPから始めろ!
MDLプログラミング言語の入門書だよ。MDLはLispの遠い親戚で、MITのMACプロジェクトで生まれたんだ。Lispの良いところはそのままに、型システムやイテレーション、強力なデータ構造、高速なコンパイラ、ユーザー定義型なんかでLispの欠点を克服してるって話だ。MDLは習慣性があるらしいから気をつけろよ!URL:https://donhopkins.com/home/archive/MDL_Programming_Primer.p…
> Since MDL is a distant relative of Lisp って言うけど、本当にそんなに遠い親戚なの?> The similarities between MDL and Lisp are such that in many cases a few minor changes to Lisp code will convert it into working MDL code。じゃないか。コードをちょっと見た感じ、変わった構文のLispみたいだったぞ。
MDLのユーザー定義型がLispより優れてるって話だけど、PFFの例だとLispの普通の型宣言と同じに見えるんだけど、詳しく説明してくれない?
Zorkは元々MITのDungeonってゲームで、作者がInfocomを創業してZorkとしてリリースしたんだ。ソースコードはMDLからCまでいろんなバージョンがあるよ。InfocomのファイルサーバからZILのソースコードが流出して、2019年には公開されてる。Microsoftが今回やってるのは、Zorkの3作の権利関係を整理することなんだって。
俺、DEC VAXでVT100使って、Dungeonとしてプレイしたことあるぜ。
パブリックドメインじゃなくて、無料(free as a free ber)で非営利目的なら使えるってことだね。
Zorkのソースコードのリンク集だよ。MDL版はこれ→https://github.com/MITDDC/zork
DECUS FORTRAN版→https://www.ifarchive.org/if-archive/games/source/dungeon-3….
Unix f77版→https://github.com/videogamepreservation/zork-fortran
GNU fortranポート→https://github.com/GOFAI/dungeon
f2c翻訳版はこれ→https://github.com/devshane/zork (READMEに歴史が載ってるよ)
Zorkのアーカイブの日付が1977年ってことは、当時はMulticsとかDEC-10/20で開発されてたはずだよ。数年後にこの人たちがInfocomを創業して、Apple IIとかCPM S-100バス向けにZorkを移植して販売したんだ。Colossal Cave Adventureに触発されて、MITの皆がZorkを作り直したんだね。
いい質問だね、俺も気になる。調べてみたら、新しい履歴ソースフォルダ版にはPLUGHイースターエッグがあるけど、古い方にはないみたい。でも古い方には”Tomb of the Unknown Implementor”があるけど、新しい方にはないんだ。
俺はDocker経由でZorkをプレイするのが好きだよ。コマンドはこれ!
https://github.com/clockworksoul/docker-zork1
> docker run -it clockworksoul/zork1
誰か使ってくれてる!やったー!今日一日が最高になったよ!
これ、作ってくれてありがとう!俺も公式ソースを使って自分ので作ったんだ。
https://github.com/MattCruikshank/zork1-source
フィードバックくれる?
> docker run -it –rm -v $(pwd)/saves:/home/zork/save mattcruikshank/zork1-source:latest
-vでセーブとリストアができるよ。Docker Composeでボリューム指定しようとしたけど、TTYサポートがひどくて困ってる。
これ作ってくれてありがとう!時間があるときにいつも遊んでるよ。めちゃくちゃ楽しい!
Z2とZ3もリリースされたみたいだけど、それらのコンテナも作る予定?
もっとコメントを表示(2)
もうあるよ!
https://github.com/clockworksoul/docker-zork2
https://github.com/clockworksoul/docker-zork3
いいね…これでBBSの設定をやり直して、ドアとして追加したいな。ユーザーごとに別のセーブディレクトリをマウントするだけで良さそう。
なんでMicrosoftがZorkの権利を持ってるの?
Activisionが1986年にInfocomを買収して、Microsoftが2023年にActivisionを買収したんだよ。
InfocomはActivisionに買収されて、Activision BlizzardはMicrosoftに買収されたんだ。
え、MicrosoftがBlizzardを所有してるって知らなかった!
君は今日のラッキーな10,000人の一人だね。当時はめちゃくちゃ大きなニュースだったんだよ。FTCは買収を認めないか検討してて、何ヶ月も延期されて、公の場で議論が飛び交ったんだ。
最近の大きな動きは忘れやすいよね、特にサービスに大きな変更がないからさ。先日、SonyがBungieを買収したことも忘れてたよ。もしSonyが『Destiny 3』をPS5の時限独占で発表したら、かなり記憶に残るだろうけどね。
巨大メディアやテック企業は頻繁に買収されるから、数年経つと「今Warner Bros.は誰が持ってるんだっけ?AOL?AT&T?Netflix?サウジアラビアの政府系ファンド?」って、わからなくなるよね。
SierraのゲームのソースコードもMSが公開してくれたら最高だね!昔Al LoweがSierraのソースコードを公開しようとしてたけど、Activisionに止められたらしい。MSが歴史的保存を進めてるなら、再検討してくれるかもね。
Space Quest IV最高!!!
Microsoftはたくさんのスタジオを所有してるんだ。https://en.wikipedia.org/wiki/List_of_Microsoft_Gaming_studi…Xboxだけの会社だと思ってる人は全然わかってないね。
MicrosoftがActivisionを買収したからだよ。Activisionは80年代から権利を持ってたんだ。
リンクされてるレポジトリが7年前のものってのが興味深いね。
多分バカげてるけど、Zork IからIIIをInform 6に移植してほしいんだ。
なんで惹かれるかはっきりしないけど、いじって理解を深めたいんだと思う。今Zork Iをゼロから書くなら、最新ツールを使いたいね。Inform 7は嫌なんだ。コードはLLMプロンプトじゃなくて、もっとコードらしくあってほしいからさ。
https://github.com/allengarvin/inform-zork1/blob/main/zork.i...Inform 6と7については全く同じ気持ちだよ。30年くらい前にInform 6で簡単なゲームを作ったけど、Inform 7は全く触ってない。「literate programming」全般に懐疑的でね。
俺も同感。INFSP6でスペイン語に翻訳されたら、もっといいね。非ネイティブが作ったスペイン語版はひどいからさ。
ちゃんとしたZorkの翻訳が現実になるかも。AdventureのIF6版は英語とスペイン語の両方があるんだけど、スペイン語版は制作秘話まで完璧に翻訳されてて本当に素晴らしいよ。
コードエージェントがコードの移植にどれだけうまくやれるか気になるね。
このリポジトリはhttps://github.com/historicalsourceの一部で、たくさんのInfocomゲームのコードがあるよ。ざっと見た感じだと、ほとんどはオープンソース化されてないけどね。それでも、すごくクールなリソースだ!
この発表が、素晴らしい芸術的努力のレガシーを称えているのに、LLMによって書かれたってのがかなり残念だよ。これを読むと、まるでレンガで頭を打ち続けられてるみたい。
ずっとHanselmanのブログを読んでるけど、あれは彼のいつもの書き方だよ。2013年のこのポスト(明らかにLLM登場前)と比較してみてよ。https://www.hanselman.com/blog/ipad-surface-ultrabook-are-we…
発表がLLMによって書かれたって、どこでそう思ったの?記事のページには著者の名前が載ってるよ。
「Zorkが登場した時、プレイヤーに求めたのは勝つことだけじゃなかった、想像することだったんだ。グラフィックスもジョイスティックもサウンドトラックもなく、画面上の言葉とプレイヤーの好奇心だけだった。でも、その言葉は同時代のほとんどのゲームよりも鮮やかな世界を築き上げたんだ。それを可能にしたのは、ただ clever writing だっただけじゃなく、clever engineering だったんだ。」
Wikipediaの「signs of AI generated writing」を見てごらん。ここにあるすべての文章は、その記事で使われてるフレーズだよ。「Not just X, but Y.」とか「No X, no Y, no X, just ABC.」って感じにね。https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing
「Zorkが登場した時、プレイヤーに求めたのは勝つことだけじゃなかった、想像することだったんだ」これが文字通り最初の文章だよ。