たれながし.info

とあるITエンジニアの備忘録

当時12歳のイーロン・マスクが作ったゲーム「Blastar」で遊んでみる(Playing Elon Musk's Game "Blastar" with MSX Emulator)

当時12歳のイーロン・マスクが作ったゲーム「Blastar」で遊んでみる
(Playing Elon Musk's Game "Blastar" with MSX Emulator)


はじめに

イーロン・マスクは、言わずと知れた航空宇宙メーカー「スペースX」の創設者、電気自動車メーカー「テスラ」の共同創設者です。現在は約21兆円の資産があり、世界1位の富豪です(タイミングによってはAmazonジェフ・ベゾスの方が金持ちの時がある。)

そんな彼が、1984年(当時12歳)に制作したゲームが「Blastar」です。
ゲームのソースコードがネットに公開されていたので、MSXエミュレータで動かしてみます。

(ちなみに、「Blastar」のHTML5版が下記サイトで遊べます。)
moretesla.com

「Blastar」について

「Blastar」は1984年、当時12歳のイーロンが制作したゲームで、SV-318/SV-328というコンピュータ向けにBASICで書かれています。侵略に来たエイリアンの宇宙船を打ち落とすというシンプルなシューティングゲームになっています。

「PC and Office Technology」という雑誌に掲載され、500ドルを貰ったとのこと(1ドル=250円位)。
当時の雑誌のスキャンが下記サイトで公開されています。
archive.org

イーロン・マスクのプログラミングスキル

イーロン・マスクの伝記「イーロン・マスク 未来を創る男」から読み取れる、彼のプログラミングの素養について抜き出してみます。

  • 10歳の時:南アフリカ ヨハネスブルグのショッピングモールで、父にコモドールの「VIC-20」を買ってもらう。6ヵ月掛けて学ぶ想定の「BASICの入門書」を脅迫観念により一睡もせず3日で読了する
  • 高校時代:BASIC、COBOLPascalなどを習得できるコンピュータ教育プログラムに積極的に参加する
  • 大学の時:インターン先の企業でマウスやジョイスティックのドライバを書いていた(多分、C言語アセンブラを使用)
  • 1995年:弟のキンバル・マスクと創業した会社Zip2では、自身でコーディングもしていた。
  • 1999年に創業したX.com以降、自身でコーディングはしてなさそう。
    2000年、クーデターによりイーロンはCEOを追われるが、会社のシステム(オンラインバンク)をマイクロソフトC++(Visual C++)にするかLinuxにするかで他の取締役と意見が合わなかったことも原因のひとつとイーロンは考えている(開発環境が整っている、実行速度が速い、優秀なプログラマが多いという点でイーロンはマイクロソフトC++を推進していた)。

イーロンの従兄弟のリーブ兄弟(母親同士が双子)もEverdreamというソフトウェア会社を設立しており(後にDellに買収された)、プログラミングの素養はありそう。
リーブ兄弟はその後SolarCity(太陽光発電の会社)を設立し、テスラに買収されている。

「Blastar」をMSXで動かしてみる

ディスクイメージの作成

WebMSXを使って、ソースコードをディスクイメージに書き込みます。
※WebMSXを使う理由はコピペが使えるからです。

ソースコードの書き込み

WebMSX(https://webmsx.org)にアクセスする

MSXが起動するので、[Alt+v]を押下する
「PASTE NOW」と表示されるので、[Ctrl+v]を押下しゲームのソースコードをコピペする

ソースコードの修正

「Blastar」はSV-318/SV-328向けに書かれているので、MSXで動くようにソースコードを修正する
再度[Alt+v]を押下し、下記の<修正後>のコード10行をペースト[Ctrl+v]する

<修正前>
20 CLICKOFF
250 SCREEN1:CIRCLE(45,90),0:DRAW"u80r180d80l180"

170 LOCATE10,5:PRINT"              BLASTAR":PRINT:PRINT"         DO YOU NEED INSTRUCTIONS"
260 PRINT:PRINT:PRINT:PRINT"        <       USE JOYSTICK        >":PRINT:PRINT"               FOR CONTROL AND":PRINT:PRINT"                 FIRE BUTTON":PRINT:PRINT"                  TO SHOOT"
265 PRINT:PRINT:PRINT:PRINT"    MISSION:DESTROY ALIEN FREIGHTER":PRINT:PRINT"    CARRYING DEADLY HYDROGEN BOMBS":PRINT:PRINT"    AND STATUS BEAM MACHINES"
580 PRINT"   SCORE";SC;"           SHIPS";SH
1030 SC=SC+80:FORA=1TO20:PUTSPRITE4,(H,G),14,4:NEXTA:CLS:LOCATE3,0:PRINT"SCORE";SC;"            SHIPS ";SH:SPRITEOFF:G=20+INT(150*RND(-TIME)):GOTO620
1100 LOCATE15,15:PRINT"            STATUS BEAM"
1180 SH=SH-1:FORT=1TO60:NEXTT:CLS:LOCATE0,3:PRINT"SCORE ";SC;"             SHIPS ";SH:PUTSPRITE5,(128,205),14,5:PUTSPRITE4,(P,C),8,5:G=20+INT(170*RND(-TIME)):H=0: SPRITEOFF:IFSH<0THEN1200
1200 CLS:LOCATE0,0:PRINT"                  BLASTAR":PRINT:PRINT"             FLEET DESTROYED":PRINT:PRINT"      WOULD YOU LIKE ANOTHER GAME"

<修正後>
20 REM CLICKOFF
250 SCREEN1

170 LOCATE10,5:PRINT"BLASTAR":PRINT:PRINT"DO YOU NEED INSTRUCTIONS"
260 PRINT:PRINT:PRINT:PRINT"< USE JOYSTICK >":PRINT:PRINT"FOR CONTROL AND":PRINT:PRINT"FIRE BUTTON TO SHOOT"
265 PRINT:PRINT:PRINT:PRINT"MISSION:DESTROY ALIEN FREIGHTER":PRINT:PRINT"CARRYING DEADLY HYDROGEN BOMBS":PRINT:PRINT"AND STATUS BEAM MACHINES"
580 PRINT"SCORE";SC;"           SHIPS";SH
1030 SC=SC+80:FORA=1TO20:PUTSPRITE4,(H,G),14,4:NEXTA:CLS:PRINT"SCORE";SC;"           SHIPS ";SH:SPRITEOFF:G=20+INT(150*RND(-TIME)):GOTO620
1100 LOCATE15,15:PRINT"STATUS BEAM"
1180 SH=SH-1:FORT=1TO60:NEXTT:CLS:PRINT"SCORE ";SC;"           SHIPS ";SH:PUTSPRITE5,(128,205),14,5:PUTSPRITE4,(P,C),8,5:G=20+INT(170*RND(-TIME)):H=0: SPRITEOFF:IFSH<0THEN1200
1200 CLS:LOCATE0,0:PRINT"BLASTAR":PRINT:PRINT"FLEET DESTROYED":PRINT:PRINT"WOULD YOU LIKE ANOTHER GAME"
ディスクイメージの出力

左下のアイコンから「Drive A」 > 「Add Blank Disk」を選択(ブランクディスクの挿入)

「save "blastar.bas"」を実行し、プログラムをディスクに書き込む
※日本語キーボードだとうまく入力できないので、ペースト機能([Alt+v][Ctrl+v])を使ってコピペで入力する

「Save Disk Image」を実行し、ディスクイメージをファイル出力する

MSX環境の準備

blueMSXのダウンロード

プログラムを動かすMSXエミュレータを準備します。
ジョイスティックのエミュレートを使いたいので、blueMSXを使います。

blueMSXのダウンロードにアクセスし、ZIP版「blueMSXv28full.zip」をDLする

適当な場所に解凍し「blueMSX.exe」を起動する

マシン構成

「ツール」 > 「マシン構成編集」からマシン構成「 MSX2 - Japanese」を選択
「起動」をクリックする

MSXが起動する

ジョイスティックの設定

「ツール」 > 「コントローラー/キーボード構成編集」を選択
「Joystick 1」で「2ボタン ジョイスティック」を選択し、ジョイコンのテンキーをキーボードの「上下左右」、ボタン2を「スペース」に割り当てる

ゲームの起動

「ファイル」 > 「ディスクドライブ A」 > 「挿入」から、WebMSXで作成したディスクイメージを読込む

「load "blastar.bas"」コマンドを実行し、プログラムを読込む
※「blastar」と「blaster」を間違わないよう注意!!!

「run」コマンドでゲーム起動する

ゲームプレイ

起動画面

ゲームの説明

キーボードの「上下左右」で味方の宇宙船を操作し、「スペース」でボムを発射する。
敵の宇宙船を打ち落とすと80点取得できる。

敵の宇宙船は、STATUS BEAMを発射してくるもよう。
STATUS BEAMからは逃げられないようです。

ゲームオーバー画面

おわりに(問題点)

MSXで動かすといくつか問題があって、1つは敵の宇宙船にボムを当てると本来消えるはずの爆発の残像が残ってしまう。そして、残像を打っても80点獲得できてしまいます。
多分、SV-318/SV-328とMSXの動作の違いによって発生していると思われます。

他にも問題があるはずで、解決策は2つあるかなと思います。

問題解決案1 :SVI-318/SVI-328のエミュレートを利用する

今回使用したblueMSXでは、マシン構成「SVI-318/SVI-328」の選択が可能なので、「SVI-318/SVI-328」でエミューレートすれば、「Blustar」のオリジナルソースが動くかもしれません。
ただし、blueMSXではコピペできない&「SVI-318/SVI-328」のエミュレートではWebMSXで作成したディスクイメージを読めないので、手打ちでコードを入力する必要がありそうです。

問題解決案2 :完全移植

SVI-328のマニュアルのコピーが公開されているので、SVI-328とMSXの差分を見つけて、MSX向けにソースコードを直せばいけるかもしれません。
hansotten.file-hunter.com