2024/09/16

ゲームパッドに対応する5

 また面倒なことを発見。

FireFoxではゲームパッドはセキュアな状況でないと動かない。具体的には navigator.getGamepads がエラーになる。

調べたところ、FireFoxではURLがhttpsでないとダメらしい。

幸いにもFC2では無料でhttpsに変更でき、これまでのhttpでのURLアクセスはhttpsのアドレスにリダイレクトされるので、単にFC2での設定で「httpsに変更」にチェックを入れるだけで良かった。

2024/09/08

ゲームパッドに対応する4

 ゲームパッドに対応できたことが嬉しくて、結局スティック付きも買ってしまった。

さすがにこっちは高かったけれど、型落ちなのか定価6380円のところAmazonで2000円(送料別)だった。
振動用モーターは付いていないけれど不要だしその分軽いのがいい。

というわけで疾走者たちへ、インベーダー、バトルゾーン、アステロイド、ゼビウスをスティック対応にした。

とりわけバトルゾーンは2スティックで実機と同じ用に操作できるようになったのは嬉しい、というかこれがやりたくて買ったんだけどね。


2024/09/06

ゲームパッドに対応する3

スタートボタンの問題は置いておいて、バトルゾーンと疾走者たちへもゲームパッドに対応した。

バトルゾーンは本来はこんな風にスティック2本で操作するゲームだけど

今の750円パッドにはスティックが無いので、スティックのついたゲームパッドを入手したときには改めて対応したい。

疾走者たちへはまだrequestAnimationFrameが無かった時代のコードなのでちょっと悩んだ。しばらくして、使ってないならゲームパッド専用にrequestAnimationFrame使えばいいやんと思い付いて解決。


2024/09/05

ゲームパッドに対応する2

残念!!

ゲームパッドの対応はすんなりできたわけだが、残念なことが起きた。

スタートボタンで開始すると効果音やBGMが鳴らない

javascriptでのサウンドオブジェクトは単にPlayしただけでは鳴らない。
これはページを開いた途端に音が鳴るのを防ぐためのもので、必ずユーザーのアクション、すなわちクリックやキーボード操作を行った後でないと鳴らない仕様なんである。

ところがゲームパッドでの入力はサウンドオブジェクトにとってユーザー操作とみなされないらしく、スタートボタンを押してゲームが始まっても無音。
先に画面をクリックとかしておいてからスタートボタンを押せば鳴るんだけどね。

というわけで残念ながらゲーム開始は今まで通り S キーを押すことにした。
Sキーを押してゲームが始まったらもちろんゲームパッドで操作できるんだけど、せっかくスタートボタンがあるのに変な感じである。

なんとかならんもんかねえ。


2024/09/04

ゲームパッドに対応する

自分にとってゲームとは
  1. ゲーセンでやるもの
  2. パソコンでやるもの
なのでゲーム機は範疇に入っておらず、従って作るゲームもパソコンで動かすものなのでマウスやキーボードでの操作しか考えていなかったのだが、インベーダーやゼビウスなんかはやっぱりジョイスティックがないと遊びにくいとは感じていた。

で、調べてみたらjavascriptでもゲームパッド用のオブジェクトがあることが分かった。
(もう「ジョイスティック」という言葉はほぼ死語なのね…)

ゲームパッドというのはファミコンを始め様々な家庭用ゲーム機についてくるアレであるが、でもアレって操作しにくいよね。

こういうアレとか

こういうアレ

そういえばアレってコントローラーとか言わなかったっけ。

自分としてはこういうのが良いんだけど。
往年の名機、アスキースティック
もう売ってないのね。

ともかくゲームパッドの実物が無ければ話にならないのだけれど、どれもこれも高いんじゃああ。それにでかくて邪魔。

別にそれでゲームしたいわけじゃなくてプログラム組みたいだけなので、邪魔にならなくてかつ安いのが欲しいのだけれど。

というわけで探しまくってたらあった!750円だ!しかも送料無料だ!
なにこれ、素敵!
で、ポチったらなんと翌日に届いた。
大丈夫か、たった750円のものを送るのにそんなに頑張って。送料も取らずに。
予想はしてたけど、かなり安っぽい。ボタンを押した感触も微妙ですぐに壊れそうではある。

1つ不安だったのは、ボタンのマッピングが標準仕様ではなくメーカー独自かもしれないこと。結構メーカー独自のものがあるらしいのだ。
これに750円パッドが準拠しているかは出たとこ勝負。ダメなら他のパッドをまた買わないといけない。
はてさて…





おっけーだった \(^o^)/
ボタンの数が少ないので当然すべてのボタンはマッピングされないけれど、存在するボタンの番号は全部一致した。

ひとまずインベーダーとゼビウスはゲームパッドに対応させた。
これまでは「PRESS "S" KEY TO START」と表示されていたが、
ゲームパッドを繋いでいると「PUSH START BUTTON」と表示される

で、遊んでみる…

使いにくいんじゃああああ!!
キーボードでやった方がずっと得点するわ!






2024/09/02

XEVIOUS 19

 全く持って蛇足だが、実機のバグを敢えて再現した。

アンドア・ジェネシスのコアを破壊すると4000点だが実機ではそれ以上に点が入る。
これは参照するテーブルの初期化忘れにより直前の地上キャラの点数も加算されるためらしい。

こっちの実装ではそんなテーブルはそもそも持っていないが、加算される点数は毎回決まっているのでそのようにした。
具体的には4面:+800点、9面:+200点、14面:+400点である。
ただしその面でミスをして再出撃した場合は+10点

その他にも実機には不具合があるので整理してみる。

不具合 原因 実装状況
ギドスパリオの爆発時に赤い板がチラチラする 未定義の領域も表示しているためらしい 実装したくない
ミスする場所によってはエリアが2つ進む メインCPUとサブCPUで進行が重複するためらしい 実装したくない
スコアが 1,000 万点弱になると何か得点する度に常にエクステンドする 次のエクステンド点数がオーバーフローするため オーバーフローしない
ミス後のリスタート時、森の中に地上物が出現することがある メインCPUとサブCPUの処理の行き違いが原因らしい 実装したくない
データ上は46本目のソルがあるが出現しない スプライト番号の同じボザログラムが消える直前に出そうとしているため無効化されているそうだ 46本目のソルが出る
ボザログラムは下部分が突然7ドット現れる 上部は画面外に32ドットあるが、ボザログラムは少し大きいため 実装してもいいけどあまり意味がないので保留
14面最後に空中物停止コマンドがあるが機能していない Y座標が間違っているため どういうものか全く不明。機能していたらどんな風だったのか興味ある
タイトルロゴのVの字の左上が欠けている デザインのミス? ドッターのミス? ちゃんと欠けてる。見映えを実機に合わせることにはこだわってる^^
出撃時の残機数が9を超えるとアルファベットになり、Zを超えるといろいろなキャラクタ(ゴミ)の表示になる 残機数表示に1文字分しか確保していない。10機以上の残機を想定していないというのはちょっとお粗末 255まで数字で表示する
残機が255を超えると0に戻る 残機数に1バイトしか確保していない上にオーバーフローを考慮していないため 255でカンストする
条件によっては想定外の空中キャラが大量に発生する 空中キャラテーブルの最大値127を超えて参照することがあるため。超えたら何が起こるかは不明 0~127の範囲に収まるようにしている
ミスしてソルバルウが消えた後、敵が画面右上に向かって攻撃する 画面右上が恐らくVRAMの原点で、ソルバルウが消えた後はそこがソルバルウの位置になっている 実装済み。見た目は大事
エリア12の最後のグロブダは動かないのに200点ではなく1500点 ブラスター着弾点を感知して後退・停止するグロブダなのだが、画面右上にブラスター着弾点があるものとして感知して画面外で後退し、停止してから画面に現れている 停止しているが点数は1500点のグロブダとして実装