忍者ブログ
ホムペもみてね。 かにかにクラブ http://kani.no.coocan.jp/
上段メニュー開閉(JAVAスクリプト有効時のみ)
カレンダー
11 2017/12 01
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
最新記事
最新コメント
タイトル横の画像は管理人から返信ありマークです
無題  [10/29 AWJ]
無題  [10/29 AWJ]
無題  [10/28 AWJ]
無題  [10/28 AWJ]
無題  [10/27 AWJ]
無題  [10/25 yasu]
無題  [07/15 まい''ん]
無題  [04/17 まい'ん]
無題  [03/13 km]
無題  [03/13 km]
アーカイブ
[235] [234] [233] [232] [231] [230] [229] [228] [227] [226] [225]
u8の改造を公開しようとしたら、公式がu9になってたでござる。
作業やり直すので、前の話題でお茶を濁す。

ソースを公開した時にブログでは一行で説明していましたが、
ソースの添付ファイルにこんな説明をつけていました。

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

● ループレバーなどの入力ルーチンを修正

まずは誤動作の確認方法。
SNKの「怒」を、P1STARTを押さえながら起動するとテストモードになる。
青い四角がたくさん並んでいる画面になったらP1STARTを2回押すと入力テスト画面になる。
そのなかの「P1 DAIAL」と「P2 DAIAL」がループレバーの項目。(つづりはキニスンナ)
「X」キーをチョンチョンと短く何度も押して数字の動作をよく見ると、
 正しくは「9,10,11,12,1,2,3,4」になるはずのところ、
 ときどき「9,10,11,12,(空白),1,2,3,4」になることがある。

原因は2つある。
1つ目。
数字の繰り返し構造を再現する処理において最小値の算出を間違っている。
2つ目。
個別のゲームのドライバーを作る都合で、MAMEが発生した数値の増減の向きを
逆転させると作りやすい場合があるが、その逆転させる処理に使うための基準となる数値の
算出を間違っている。

普通は一瞬のことなので気づかれにくいが、トラックボール、パドルなどの
無限回転の構造をもったデバイスすべてが同じ状態である。

これを修正した。

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

● アナログジョイスティックなどの入力ルーチンを改善

アナログジョイスティックを使用するゲームで
(スペースハリアー、ナイトストライカーなど)、
PCにアナログジョイスティックをつないでプレイする時、
ユーザーの設定で
 「Analog Controls」
  「AD Stick X Digital Speed」= 0
  「AD Stick X Autocenter Speed」= 0
  「AD Stick Y Digital Speed」= 0
  「AD Stick Y Autocenter Speed」= 0
 「Input (This Game)」
  「AD Stick X Analog Dec」= None
  「AD Stick X Analog Inc」= None
  「AD Stick Y Analog Dec」= None
  「AD Stick Y Analog Inc」= None
にするなど、かなり工夫しないと、スティックを途中まで傾けて静止しようとすると
 傾きが小さいと中央に戻されそうなる
 傾きが大きいと画面端まで引っ張られそうになる
という現象がおきる。

原因は、アナログジョイスティックを静止させることは、ユーザーがそれを使った入力を
していないこととみなす設計をしてある(と想像できる構造をしている)ため、次の段に
用意された、デジタルジョイスティックをアナログジョイスティックの代わりに使う
ための処理が誤動作してしまう。
PCでは、ジョイスティックのデジタルとアナログの使い方に違いはなく、デジタルは、
アナログが使える数字の最小値・中央値・最大値の3種類で返せばいいんじゃないか
という作りになっている。
MAMEはその3種類以外の半端な数値は近いほうの数値に読み替えて処理する。

これを、ユーザーが上記の設定をしなくてもすぐにプレイできるようにした。
改造内容は、
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
ユーザーが手を放すと定位置に戻る機能がついてるアナログ入力デバイスは
(ジョイスティック、ハンドル、ペダルなど)、
その戻る定位置(ハンドルなら中央)とその近辺のアソビの範囲から外れている場合は、
静止していても、ユーザーがその状態を入力しているものとして受け付けるようにした。
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

それで、公式のu9での更新では
前回の日記
http://kani.blog.shinobi.jp/Entry/229/
に書いた間違いを無くすために、
このアナログジョイスティックのほうの処理をu7の時の状態に戻されています。
ループレバーのほうの処理は入ったまま続行のようです。

間違いに気づいて修正の記事を書いたのにそっちが採用されていないのは
おそらく、もっと念入りに検査せえや、てことだと思います。
PR
この記事へのコメント
無題
アナログジョイスティックの問題ですが、そもそもジョイスティックがデフォで実物アナログ・擬似アナログ両方に同時に割り当てられているのが原因です。

もともとそういう割り当て方には一切何のメリットもありませんし、inpttype.hにあるデフォ割り当てから擬似アナログ(Inc、Dec)の方を排除することによってキレイに解決しました。
AWJ 2011/10/29(Sat)02:23:50 編集
返信
その変更だけでは「全て放す」という行為を封印できないため、
オートセンターが働いてしまいます。
傾きが小さいと中央に戻される力が消えません。
アフターバーナーのロックオンや
ナイトストライカーの誘導弾封印に支障があります。
Autocenter Speed 0を合わせて設定してください。
【2011/10/29 08:31】
無題
Hi, sorry for replying in English this time. I'm somewhat confident in my Japanese, but I don't want to risk making myself misunderstood as this conversation becomes more technical :-)

What you are describing can't happen in u9. Please pay attention to the member variable "analog->lastdigital" in the function frame_update_analog_field().

Autocenter is only applied if "the last input the user entered that affects the current axis" was a digital input. In previous versions of MAME, joysticks were, by default, mapped to each analog axis as both analog and digital at the same time, so analog->lastdigital could become TRUE and the autocenter could activate even when you were using a real analog joystick.

In u9, the defaults have been changed so that joysticks are only read as analog inputs. Therefore analog->lastdigital remains FALSE and prevents the autocenter value from being applied while you are using a joystick.

I've tested After Burner II both in test mode and in-game with all default settings (deleted default.cfg and aburner2.cfg) using an XBox 360 controller, and I'm confident that the analog joystick works properly now without needing any "工夫" by the user. Please test u9 yourself without any patches or .cfg files and confirm.
AWJ 2011/10/29(Sat)10:15:47 編集
返信
失礼しました。
かなり前に研究した時(ナイトストライカー日本版を動かそうとしていた時)の、
正確に覚えているか怪しいほど古い記憶だけを元にして、
Autocenter speed 0 の発言をしました。

>Autocenter is only applied if "the last input the user entered that affects the current axis" was a digital input.
(オートセンターは、前回がデジタルで動いた時だけ有効)

これなら誤動作をするはずがありませんね。
lastdigitalがある事は気付いていましたが誤解していました。
u9のコンパイルは家に帰ったら試してみます。

自分がここを改造していた理由は、
できるかぎり公式の標準設定のままでも正確な動作を再現できるようにしたい
というものからでした。

最初は単純に
if ((analog->previousanalog != rawvalue)

if (1)
に書き換えるだけでアナログジョイスティック専用MAMEを作っていました。

それが、公式の標準設定のほうが変更になったのなら、
もう何も気にする必要はなくなりました。

それでもどうしても続けるなら
ユーザーがどんなイジワルな設定に変えても正確な動作を再現できるように
ですかね。
続けませんが。

あと、日本語が自然すぎて、英語圏の人だと思っていませんでした。
びっくり!

こちらこそ英語の文章の返事が日本語ですみません。
英語にしようとしたら丸一日かかると思ったので日本語で書きました。
【2011/10/29 15:38】
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
この記事へのトラックバック:
リンク
最新トラックバック
RSS
QRコード
プロフィール
HN:
かに凹・_・凹かに
下段メニュー開閉(JAVAスクリプト有効時のみ)
忍者ブログ [PR]