2024/08/20

スペースインベーダー 6

 なんてこった。また資料を見つけてしまった。

FSマイクロ株式会社>インベーダーゲームのソースの研究によると(正確にはここのブログで引用されているBSV (Bluespec SystemVerilog)によるスペースインベーダーの再設計およびComputerArcheology/Space Invaders)、敵弾の移動速度は1フレーム毎に1ピクセルではなく3フレームで4ピクセルなのだとか。さらに敵エイリアンの数が7匹以下になると3フレームで5ピクセルになるのだとか。
道理で動画を見たときに何か違和感があったわけだ。

早速修正。

それからエイリアン移動時の効果音(行進サウンド)の発音タイミングも違っていた。
ずっとエイリアン隊が1歩移動したときに1音鳴らすものと思い込んでいた。
なのでエイリアンの数が減ると移動速度が早くなるので効果音の発音間隔が短くなるのだと。
しかしそうではなく、歩行音の別タイマーがありエイリアンの残数に応じて発音しているのだとか。

表が長いので一部だけ載せるが、こんな感じ。


確かにエイリアンの1歩で1音だと最後の数匹の状態では音の間隔が短すぎてノイズになってしまう。
そこで5匹残った時点でそれ以上音の間隔を小さくしない処理を入れていた。つまり5フレームで1音を最小間隔としていた。
この表を見ると最後の1匹のときの発音間隔が5フレーム毎なので最小は5フレームで1音というのは間違ってはいなかったようだ。
とは言え、だんだん早くなる度合いが全く異なるので、この表に従って発音するように修正した。

エイリアンの移動は1フレームに2pixelだが、最後の1匹になったときに左から右への移動だけ1フレームに3ピクセルになる(だからレインボーと呼ばれる現象が起こる)、というのは動画を見てそうだろうなと思って実装していたのだけれど、今回の資料で正しいことが分かってちょっと嬉しかった。
レインボーは起こらないんだけど。

ところで前の記事で紹介した ししおどし>スペースインベーダーの謎 にはこうも書いてあった。

しかしこれは FSマイクロ株式会社>インベーダーゲームのソースの研究 の方が正しいようだ。
というのは、自分でもいくつかの動画を見てみたのだが、ジグザグ弾(ギザギザ弾)は必ずトーチカに半分(4ピクセル)しかめり込んでいない。
逆に言うとT字弾は必ず全部(8ピクセル)めり込む。
どちらも必ず起こっているので処理タイミングの問題とは思えない。

推測だがこれは貫通度というよりはジグザグ弾(ギザギザ弾)の爆発パターンの描画場所が上に4ピクセルずれてしまっている、もしくはジグザグ弾(ギザギザ弾)の爆発パターン位置は正しく、T字弾の爆発パターン位置が下に4ピクセルずれているのではないだろうか。
意図的か誤りかはともかく。
位置がずれているだけであればソースコードを見ても「貫通度」を示すようなものは見当たらないのは当然と思える。

爆発パターンの位置ではなくトーチカとの当たり判定の位置かもしれないが、何にせよ自分としてはT字弾の方が間違って4ピクセル下になってしまっているのかな、と考える。

そして、トーチカの幅が2ピクセル足りてないことに今頃気付いて修正。


左右対象でないのが気持ち悪いけど、実機の通り。





2024/08/16

スペースインベーダー 5

 今頃になってこんなブログを見つけた(ししおどし/スペースインベーダーの謎)。

そして驚愕の事実が。

えー、信じてた仕様は嘘だったんかい。


なんちゅーこっちゃ。

上記を踏まえ、ソースコードから読み取った敵弾の以下の振る舞いを実装した
  • 敵弾と自弾は必ず相殺
    (実機のバグ再現のために確率ですり抜けることも考えたがとりあえずやめた)
  • ギザギザ弾とT字弾(ピストン弾)は発射する列をテーブルから取得する
  • UFO出現中はギザギザ弾は発射しない
  • T字弾(ピストン弾)はエイリアンが最後の1匹のときは発射しない
  • T字弾(ピストン弾)は他の弾が画面にあるときは発射しない
  • 回転弾は自機の真上近くのエイリアンが発射する
  • 弾を撃つ頻度はスコアに連動して高くなり、高得点になるほど連射する
なるほど、実機の挙動に近くなったように思える。

ちなみにギザギザ弾、T字弾(ピストン弾)、回転弾というのはそれぞれこう。

       
ギザギザ弾    T字弾(ピストン弾)    回転弾

名前は誰かが勝手に付けたもので公式な名称ではない(たぶん)。
ギザギザ弾とT字弾(ピストン弾)はパターンをビットローテートして表現してる(たぶん)のが美しい。

もう一つ別のところで知った話だが、スペースインベーダーには隠しメッセージのあることが分かった。
そんな面白いフィーチャーを実装しない手はないよね。


2024/08/14

スペースインベーダー 4

久々にプレイ動画を見てみたら、色々違っていた。トーチカの間隔が狭かったのと、自機のY位置が1行低かったのを修正。

修正前

修正後

他にもエイリアンが行進する時の効果音の発声タイミングを見直したりもした。
また、自機の移動範囲は画面の両端までではなく、約エイリアン1列分の幅だけ内側になっているようだったので、これも修正した。



2024/08/13

XEVIOUS 18

連休だというのにずっとXEVIOUSのデバッグやっとる。
暑いし行きたいところもないのでいいけど。

さて今度はボザ・ログラムである。
周りに4つの砲台(ログラム)が接続された砲台。

こいつの得点計算がややこしかった。

中央を狙って爆撃すると周りの砲台も誘爆し、2000点が入る。

 中央を爆撃すると2000点

周りの砲台だけ爆撃すると1つにつき300点。

周りの砲台は1つ300点

そして、周りの砲台が1つでも欠けた状態での中央爆撃は600点。

砲台が欠けていたら中央爆破は600点

なので周りの砲台を全部潰してから中央爆撃すると 300x4 + 600 = 1800点となり、単に中央爆撃する方がお得という仕様。
周りの砲台を潰してから中央爆撃した方がお得というアンドア・ジェネシスとは正反対である。

ここまででもややこしいが、さらにややこしい事が起こる。
キャラが近接している場合は1発で複数を爆撃することができるわけだが、


複数キャラにまたがる爆撃

ボザ・ログラムでもそれが起こる。こんな状況。


この爆撃は中央のみならず左と下の砲台も破壊する。
この場合に何が起こるかと言うと、
中央爆破2000 + 砲台爆破300 x 2 = 2600点
になるんである。
ややこしい!面倒臭い!

面倒臭いけど実装した。多分実機のロジックはたまたまそうなるってだけなんだと思う。









XEVIOUS 17

 自機の前に飛んできてしばらくクルクル回った後に去っていく、ただの演出キャラであるシオナイト。

赤い部分は敵キャラと同じく明滅するのかなあ、でも自機(ソルバルウ)の赤い部分は明滅しないしなあ、シオナイトも味方だし明滅しなくてもいいか、と思ってたのだけど、改めて動画見たら明滅してた。
面倒臭いが明滅させるためにマスク画像を作る。
というわけで対応完了。










XEVIOUS 16 (戦場に架ける橋)

 XEVIOUSのキャラクタ画像は恐らくROMから吸い出したものがここにあって、こういうものである。


これを見るとゲームに登場しないキャラのあることが分かる。
戦車、戦闘機、ヘリコプター、ミサイル、爆弾なんかがあるが、これは元々現代兵器のキャラで空中+地上の敵を撃つゲームが企画されていて(そのゲームは結局没)、その名残らしい。
その他にもギャラクシアンのキャラ(ボス)やギャラガのキャラ(サソリ。別名オガワムシ)がいたり、橋が2種類あったりする。
このうちギャラクシアンのボスと橋は使う予定だったそうだ。

今まで読んでいなかったのだけれど、Wikipediaを読むと「スーパーゼビウス」の項に戦車、ヘリ、戦闘機、ギャラクシアンのボスが登場するとあった。

スーパーゼビウスとはファミコン版(のちにアーケードにも登場)の「ガンプの謎」ではなく、マップはそのままにキャラ配置を変えて難易度を鬼にしたやつである。
遠い昔に1回くらいはプレイした記憶がある。
やってられるか! ってくらい難しかったように思う。

で、どんな風に未使用キャラを使ってるのかといくつか動画を見てみたのだが、ゼビウスの世界観に現代兵器は違和感あり過ぎた。
戦車、ヘリ、戦闘機はいない方が良かった。
ギャラクシアンのボスはオリジナルの色ではなくグレー系にしていたのでそこまで違和感はなかったが。
オリジナルのボス

スーパーゼビウスに登場するボス

しかし、一方で目を見張るものがあった。橋である。
XEVIOUSには地上を動き回って時折弾を撃ってくるドモグラムというキャラがいるが、こいつが川を渡ってくることがある。
渡河できる車両なのだとかホバリングしてるから下が川でも関係ないのだ、と言うこともできるけれど、別の場面では川に行き当たったら引き返すという動きもしてるんである。
なので以前からなんとなく気になっていたのだけれど、このスーパーゼビウスでは橋が架かっていてドモグラムはそれを渡ってくる。
こちら側の岸までちゃんと架かっておらず浮いているのがちょっと気になる。

というわけで、これを採用することにした。オリジナルとは違ってしまうけれど、自己満足できればそれで良し。

こうだったのを →      こうした      
橋がちゃんと架かっていない所も同じ。

これはArea15なのだが、もう一箇所Area6でもドモグラムが川を超えてくる。
ところがスーパーゼビウスではこっちには橋が架かっていない。

気に入らないのでArea6も橋を架けた。どうせオリジナルとは異なってしまうのだからと別の方の橋を架けてみた。

こうだったのを →      こうした      







2024/08/10

XEVIOUS 15

 まだまだ不具合があった。
今回は2点修正。

1つ目。アンドア・ジェネシスの砲台を残したまま中央を爆撃した場合に残った砲台も爆発しなければならないのにそうなってなかった。

修正したのがこれ。

中央爆撃時に残った砲台も爆発する

2つ目。ブラグ・ザカートが扇形に放出する5個のスパリオの広がり方が足りなかった。
改めて動画を見たら90度の開きで放出しているようだったが、それが45度になってた。
どうりで避けにくいはずである。

修正したのがこれ。
広がりを90度に

(2024/08/12 追記)
得点もおかしく、1つ1000点のはずの砲台爆破に4000点も入っていた上に中央爆破時に残りの砲台の点数も入っていた。
上の動画だと残り砲台が2つなので中央爆破で中央4000+砲台4000x2=12000点も入っている。
修正した。




2024/08/02

Dragon's eyeのミニゲーム

 Dragon's eyeのミニゲームであるが、今更ながら改良した。


カゴの縁の部分でのボールの跳ね返りの判定がおかしくて、入るはずのボールが入らずに跳ね返っていたんである。

それでもやってみたら3分間で50個というのはやれないノルマではなかったので、ずっと放置してた。

とはいえ作った当初からずっと気になってはいたので直すことにした。
めっちゃ今更だけど。


そんなわけでサクサク入る。

適当にやっても79個入った。
もうノルマ50個なんて怖くないね! 誰もやらんと思うけど。

2024/08/01

XEVIOUS 14

 まだミスがあった。

スペシャルフラッグを出現させた時に得点してなかった。
さらに、ゾシー(歯車みたいな敵キャラ)を撃ったときも得点してなかった。

画像を見ても分からんけど、修正済み。