Google Chrome または Safari を使用される事を強くお薦めしますw
他のブラウザでは Javascript の処理が重いです(汗)


2023/09/28

古きを訪ねて

レトロゲーム好きを自称するからにはとんでもなく初期のゲームをブラウザで再現してみたい。
というわけでテレビゲームの歴史を紐解いてみた。

一般にはPONG(テレビテニス)が最も古いテレビゲームだと思われているっぽい。


いやいや、これはまだ新しい。

何をもってテレビゲームとするかの定義は諸説あるのだけれど、

  • コンピュータプログラムもしくはそれに準ずる仕組みで動作している
  • 画面に表示した図形を操作して遊ぶ

を基準としてみた。

とすると最古のテレビゲームとされている「陰極線管娯楽装置(Cathode Ray Tube Amusement Device)」はプログラミングされていないので除外される。
つか、作れと言われても何の資料もないし。

ちなみにこれが作られたのは1947年だ。

次に1950年のOXOがあるが、これはコンピュータ対戦する三目並べで、作ったところで何が楽しいねん、というものなのでこれも対象外。

次が1958年のTennis for Two。


なんと表示装置にオシロスコープを使っている。



テニスコートを横から見た絵面というのも斬新だが、これも何の資料もないので対象外。
作れたところで二人用のゲームなんて遊べんし。

次がSpacewar!。1962年。
PDP-1というコンピュータ上でプログラミングされた、これぞテレビゲームと言える一品。

ちなみにPDP-1とはこんなコンピュータ。


そして写真手前のモニターにこんなのが映し出される。


二人対戦で互いにロケットを操作して撃ち合うのだが、中央に太陽があり重力が働いているため操作は難しそう。

背景の宇宙は適当に点をちりばめているのではなく、ちゃんとプログラムされていて実際の夜空の星の配置となっているそう。

なかなかそそるゲームであるが、やっぱり資料がないし、二人対戦のゲームを作っても遊べない。

さらに時代は進んで、1971年、このSpacewar!にインスパイアされて作られたのがComputer Space。

これが世界初の商用アーケードマシンで、こんなイカす筐体だった。


ゲーム画面はこんなの。



確かにSpacewar!っぽい。背景はプラネタリウムではなく単なるランダムな点だけど。
が、これも資料なし。
あ、資料というのはゲームのルールが分かる何かや実際の動きが分かる動画とかのことね。

結局インベーダー登場以降のゲームでないとロクに資料がなく、これらのゲームを再現するのは困難だという結論となった。

さてインベーダ登場以降に現れたのがATARIのASTEROIDSである。1979年。




これは誰がなんと言おうとSpaewar!→Computer Space→と来た流れではないか。
一人用だし、それなりに資料もあるし、これは作れる。

で、作った。

実は上の画像は自分が作ったやつのスクショである。
よく見ると画面下部にあるはずのATARIのコピーライトの部分が別の文字になっている。

前に作ったBattle Zoneほどの複雑さはなく、Battle Zoneで作ったコードもかなり流用できたので作るのにさほど時間はかからなかった。
とは言え、動きを知るためにYouTubeは見まくったけど。

しかし、である。まだ公開できない。
なぜならサウンドが一切ないから。

これからサウンド探しの旅が始まる。
これが長いのだ。

このASTEROIDSの少し前にATARIはLunar Landerというゲームを出している。


これは実際に遊んだことがある。



非常に操作の難しいゲームだけれど、面白かった。
めっちゃハードなシミュレーションゲームなのであまり人気は出なかったが。

2023/06/30

スクロール問題解決

 今更ながらのDragon's Eye
13年前に作ったダンジョン型RPG風リドル。

こんな昔の作品を遊んでくださった方からエンディングのスクロールが止まってしまうとのご連絡が。

やってみたが、FireFoxでもChromeでも再現しない。

追加情報でブラウザの拡大率を変更すると起こると。

なるほど確かにChromeでは拡大率100%以上だとスクロールが途中で止まってしまう。
逆に75%に縮小するとスクロールそのものが行われない。

FireFoxではそのようなことはまったく無い。


調べてみたらChromeのバグだった。

作った当時はPCの画面が小さく、ブラウザの拡大率を変更して遊ぶなんてことは誰もしなかったが、今の大画面で遊ぼうとするとゲーム画面が小さいので拡大して遊ぶということは普通に有り得る。

なんとか解決したいなと思ってはいたものの、ググっても解決策らしき情報は得られなかった。

一旦は諦めたのだが、今日ふと思いついてやってみたらこれが見事に解決した次第。


気付いてみたら、なんでそれをやらなかったのかというくらい簡単な話で、相対移動でスクロールさせていたのを絶対移動でスクロールさせれば良かったのである。

具体的には scrollBy ではなく scrollTo を使うという、それだけ。

同じくEndingでタイトルロールをやっている疾走者たちへも同様の修正をしておいた。
誰も遊ばないと思うけどw


2023/03/07

13年ぶり4

 ひとます完成したので公開。

http://ajsriddle.web.fc2.com/bz/index.html

本家で遊んでたときもそうだったけど、ミサイルにやられっ放しで10万点に届かない^^;


ワイヤーフレーム大好きなので、次に作りたいのはこれ。

データ作成が大変すぎて死にそうwww

(2023/03/08 追記)
ようやく10万点突破。
10万点超えると名前の隣に戦車マークが付くのだ。



2023/03/05

13年ぶり3

 寝ても醒めてもBATTLE ZONE、BATTLE ZONEw

週末は朝から晩までやっとるわwww

ミサイルのジグザグな動きがどうやってもうまくいかず、考え方は合ってるのに何故だろうとずっと悩んでいたのだけれど、結局トレランスの問題だった。

衝突判定のためにトレランスを大きくしていたのがこっちの計算に悪影響を及ぼしていたので、ミサイル制御のためのトレランスを別に用意することで解決。


他にもいろいろ調整した。

全体に画面が暗かったので明るく。
13年前に思うところがあって暗くしていたのだけれど、それは杞憂だった。

フォントも本家に近い感じにやや修正。
小フォントが小さすぎて読みにくいけれど、本家もそう。
残機数は開始時3機だったのだが、本家の残機は5機っぽいので変更。

デモ画面に戦車が登場するようになった。
ずんぐり戦車もちょっとだけスマートに。

これが形が不明だったミサイル。
検索しまくってようやく判明。

ミサイル発射6発目以降は敵がスーパータンクに変わる。
砲身形状が通常タンクと共用なので本家と若干見栄えが異なる。
忘れていなければ後で変更。

随分と遊べるようになったけれど、まだまだ調整は続く。

2023/03/04

13年ぶり2

本家のROMを解析した資料を見つけた。

https://6502disassembly.com/va-battlezone/

見よう見まねで作っていたいろんな部分がそうではないことが判明。

・マップの大きさは256x256。
 自機の初期位置は中央(座標(0,0))で、北に月、火山は南西。
 障害物はランダム配置ではなく場所が決まっている。

・敵もスコアを持ち、自機がやられると敵は1000点獲得。
 彼我の得点差により敵の挙動が変わる。

・敵の出現位置は自機からの距離と角度で決定する。
 距離はマップ最大半径の3/4か3/8のどちらかを50:50の確率で決める。
 角度は敵スコアが高い場合は目に見える範囲、敵スコアが低い場合はランダム。

・敵出現後2秒間は敵は弾を撃たない。

・敵出現後3秒間はランダムな動きをする。
 敵出現後3秒経過すると敵は攻撃してくるがその攻撃は甘い。

・敵出現後17秒経過すると敵は攻撃モードになりガンガン攻めてくる。
 敵スコアとの得点差が7000点以上ある場合も攻撃モードになる。

・スコアが10000点(DIPスイッチにより20000点または30000点に切替可)を超えるとミサイルが出現するようになる。
 出現するのが戦車になるのかミサイルになるのかはランダム。

・敵から長時間(48~64秒)逃げ回っていると、その敵を倒した後に出現するのはミサイルになる。

・ミサイルを躱すと次もミサイルが出現する。
 このモードは一定時間(16~32秒)続く。

・ミサイル6発目から128発目の間はスーパータンクが出現する。
 128発目を超えると0からのカウントに戻り出現するのはスロータンクになる。

・スコアが2000点を超えるとUFOが出現するようになる。
 出現間隔はランダム(0~17秒)。
 初期位置と動きもランダム。


とまあ思いも寄らない細かな設定になっていたのだが、敵戦車の動きのアルゴリズムについては言及がなかった。

ROM内のソースも公開されていたが、6502のアセンブラを読むのは大変すぎるので諦めた。

とりあえず上に書いたことは全部コーディングした。

その他もろもろ微調整中(文字の大きさとか描画位置とか)。

2023/02/25

13年ぶり

 2010年の終わり頃にこんな記事を書いていた。

「レトロゲームをブラウザで作ってみる」第3弾(2010/11/28)

当たり判定完了(2010/11/30)

大地の怒り(2010/12/1)

で、13年ぶりに再開w


タイトルは本家の BATTLE ZONE をもじったものに変更。

画面全体(デモ中)。

フォントは本家とは異なるのだけれど、こっちのほうが「ベクタースキャン」って感じがして良いと思ってる。

プレイ中。

敵戦車を作ってから本家と見比べてみるとこっちはずいぶんずんぐりしてた^^;
面倒だからこのままとする。
敵戦車の動き(アルゴリズム)はYouTubeで実機プレイ動画を100万回見ても分からんかったので適当。
UFOも出現する。
が、こちらも出現の判断基準や動きのロジックがさっぱり分からない。

スコアトップ10。
初期値なので全員5000点。この内容はCookieに保存されるので次回ページを開いても前回と同じ結果が表示される。
点数の右にある名前はおそらく本家の開発者や営業などの人々。

ハイスコア達成時の名前入力画面。
と、ここまで紹介したらもう完成してるんじゃ?と思われるかもしれないがまだできてない。
敵戦車は3種類あるのだがまだ2種類しかできてない。
残りの1種類なのだが、こいつは動きが変な上に形もよく分からない。
YouTubeを100万回見ても(以下略)。

というわけで完成にはまだ時間を要する。