忍者ブログ
ホムペもみてね。 かにかにクラブ http://kani.no.coocan.jp/
上段メニュー開閉(JAVAスクリプト有効時のみ)
カレンダー
03 2024/04 05
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
最新記事
最新コメント
タイトル横の画像は管理人から返信ありマークです
無題  [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]
アーカイブ
[1] [2] [3] [4] [5] [6] [7] [8] [9]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

一個だけタイトーが混ざってるけどな。

http://kani.blog.shinobi.jp/Entry/234/
(ソースはこちらの11月2日の記事で更新しました)

改造したファイル
src\mame\video\baraduke.c
src\mame\video\digdug.c
src\mame\video\galaga.c
src\mame\video\gaplus.c
src\mame\video\mappy.c
src\mame\video\pacland.c
src\mame\video\retofinv.c
src\mame\video\skykid.c
src\mame\video\toypop.c

0.143u7 の toypop.c で改造したのとそっくりな構造をしたスプライト描画ルーチンを同じように改造した。

0.143u7の説明で書いたこと
--------ここから
描画ルーチン内のforループのカウンタのメモリ確保を効率化。
「C++」コンパイラになってからできるようになった
for (int i=0; i<max; i++)
という書き方を利用する。

ブーリアン型(0か1にしかならない)としてしか使っていない変数 sizex,sizey,flipx,flipy を使って
(sizex * flipx)
(sizey * flipy)
という掛け算をしている箇所を、ビット積算に変更した。
計算結果は同一。
一般的に機械語レベルでの掛け算割り算はビット演算に比べて遅い。
--------ここまで
(ビット積算・ビット演算の部分は、間違えて論理積算・論理演算て書いてた)

mappy.c の中の phozon もそっくりだけど、
それは sizex,sizey が 0,1,2,3 の値になるので
真似して同じ改造をしてはいけません。

●●●●●●●●●●●●●●●●●●●●
動作確認したところ、ほとんどのゲームの反転表示がおかしくなっていました。
でも
baraduke, pacland, skykid
は大丈夫そうに見えましたが、少ししか触ってないので完全に大丈夫かはわかりません。

自分の改造が失敗したのかと思ってあせったけど、どうやら以前からあったバグみたい。
toypop は 0.125までは正常 0.126からおかしい
mappy は 0.113は正常 途中はまだ調べてない 0.124はおかしい

そのうちなんとかしたいね。

http://kani.blog.shinobi.jp/Entry/234/
(こちらの11月2日の記事でトイポップとリブルラブルだけ修正しました)
PR
http://kani.blog.shinobi.jp/Entry/250/
(ソースはこちらの12月26日の記事で更新しました)

http://kani.blog.shinobi.jp/Entry/228/
こちらの日記で公開したものに対して、マクロを削ったほうがいいよ
みたいな助言をもらえたので、やってみました。

あと、バトルガレッガの海外版は、普通はプレイできないセッティングがあるのですが、
特殊テストモードならプレイ可能になることに気づいたので、全部有効にしました。
リージョンの名前の後ろに「Never End ROM RAM Check」て書いてあるのが該当します。

それから、イースターエッグ追加。
(1)
バトルガレッガで、魔法キャラコマンドとHARDやSPECIALを併用する方法。
A B C を押す時に放さないで押しっぱなしにして、
STARTを押すところで不要なボタンを放す。
(2)
バトライダーとバトルバクレイドも、バトルガレッガと同様の
特殊テストモードからゲームを始めると「SPECIAL VERSION」になる。
特殊テストモード中にレバー左右でリージョンの変更ができる。
前の日記のコメントを読んだ人ならわかるとおり、
アナログジョイスティックの件は、
標準の入力装置の割り当てに問題があるのでそれを直せばいい、
ということになって巻き戻ったそうです。

改造した自分としても処理が複雑化するのは嫌いなので、
今回とられた、問題のほうを取り除くやりかたは嬉しかったりします。
あと、まだ気づかなかったバグを結構生んでたみたいでごめんなさい。

アナログデバイスを別のもので代用する処理を単純にカットすれば
(件の一行を「if(1)」に書き換える)理想的な動きになることに気づいてから、
これをどうやって、代用品をカットしないでも同じ動作にできるかを
色々と考えたわけですが、公式のほうで代用品の割り当てを変える
という対応で全て解決できてしまって、結果的に無駄な努力になりましたww


そんなわけで、これまでこの件で色々協力してくれた人たちに、
ありがとうございました。
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の時の状態に戻されています。
ループレバーのほうの処理は入ったまま続行のようです。

間違いに気づいて修正の記事を書いたのにそっちが採用されていないのは
おそらく、もっと念入りに検査せえや、てことだと思います。
http://blog.cnobi.jp/v1/blog/user/17efd160d8c7775430967cb4b2b26db4/1319644113
改造ソース
(diff形式のzipでなく、ソースのままのzipです)
(前回入れた、東亜プランやビートマニアの改造も入っています)

MAMEのドライバーで「ペダル」として定義してある入力が
キーボードで操作できないバグを作ってしまっていた。
申し訳ないです。
修正しました。

src\emu\ioport.c
2715行目修正

(誤)
if ((analog->previousanalog != rawvalue) || (analog->absolute && analog->autocenter && analog->centerdelta != 0 && rawvalue != 0))

(正)
if ((analog->previousanalog != rawvalue) || (analog->absolute && analog->autocenter && analog->centerdelta != 0 && rawvalue != analog->center))

前回の記事に付いたコメントへの返信でこれからやりますと書いたものはまだ入っていません。
grindstmの"different"が云々というのだけ対処してあります。
http://blog.cnobi.jp/v1/blog/user/17efd160d8c7775430967cb4b2b26db4/1319644113
改造ソースはこちらからダウンロードしてください。

公式版が、ver0.143u8 になりました。
これまでここで発表していたものの大部分が取り入れられています。

すみません。
取り入れられた部分にさっそく自分のミスを発見しました。
それを修正します。
src/emu/ioport.h の 248行目
(誤)
#define __ipt_gambling_start IPT_GAMBLE_HIGH
(正)
#define __ipt_gambling_start IPT_GAMBLE_KEYIN
今のところ、これだけです。
これより下記の改造に興味が無いなら、
改造ソースをダウンロードするほうが手間なので、
自分で修正をタイプしちゃってください。

修正しないと、コマンドラインで
 mame -lx
と打ったときのゲームリストの中の
ギャンブルゲームの使用するスイッチに漏れが生じます。


取り入れられなかった部分は
 toaplan1.c
 toaplan2.c
 twincobr.c
 wardner.c
 djmain.c
で、今回の改造ソースはこの部分が入っているだけです。
内容は特に進展なし。

公式のソースに取り入れられたことに関して、
自分が発表してから取り入れられるまでの時間がわりと短いと思うので、
 ここの部分は公式の理念に反するからやっぱり撤回!
なんてこともじゅうぶん考えられるので、
自分が勝手に追加した系の改造を応用した次の改造は
もうちょっと様子(次のバージョン)を見てから取り掛かります。
(例:コイン設定の「1coin / 10credits」などの定型文字列の利用など)
http://blog.cnobi.jp/v1/blog/user/17efd160d8c7775430967cb4b2b26db4/1319016838
今年変更したものが全部入ってます。

diffファイルで変更箇所を提出することを覚えたゼ!
公式バージョン0.143u7に使ってください。

●トイポップ・リブルラブル

描画ルーチン内のforループのカウンタのメモリ確保を効率化。
「C++」コンパイラになってからできるようになった
for (int i=0; i<max; i++)
という書き方を利用する。

ブーリアン型(0か1にしかならない)としてしか使っていない変数 sizex,sizey,flipx,flipy を使って
(sizex * flipx)
(sizey * flipy)
という掛け算をしている箇所を、論理積算に変更した。
計算結果は同一。
一般的に機械語レベルでの掛け算割り算は論理演算に比べて遅い。

(たぶん描画のための計算が軽くなった)

●ビートマニアシリーズ・ポップンミュージック2

入力ポート(主にディップスイッチ)を作成する部分を
ポート定義用のマクロ PORT_INCLUDE と PORT_MODIFY を多用して
書き直した。

ディップスイッチの記述で何度も出てくる文字列を、
ファイルの最初のほうで宣言して、それを参照するようにした。

(exeファイルにして20kバイト近く減った)

●ポップンステージ

ディップスイッチの画像の定義でパッケージ2を1と書いていた部分を修正した。
表題のとおり、公式版が新しくなったので、
それに対して前回まで公開したのと同じ改造を施しました。

http://kani.blog.shinobi.jp/Entry/227/
(改造ソースは上記の記事で更新したのでそちらで拾ってください)

---------------------

ところで、公式MAMEではギャンブルマシンも組み込む作業が急激に進んでますが
(今回のマイナーバージョンアップだけで+2500らしい)
これってどこまで本気なのかね。
止めたほうがいいと思うんだけど。
ギャンブルマシンはカジノごとにカスタマイズは当たり前の業界だから、
Double Diamondsとかロングセラーになると同タイトルのバージョン違いが何千あるかわからんよ。
自分が仕事でやったあまり有名でない某マシンでも50は超えたし。
http://kani.blog.shinobi.jp/Entry/226/
(改造ソースは上記の記事で更新したのでそちらで拾ってください)

● アナログジョイスティックなどの入力ルーチンを改善
 (ナイストとかスペハリとか自機の動きがまともになった。)
● ループレバーなどの入力ルーチンを修正
 (怒とかミッドナイトレジスタンスとか一瞬ありえない入力が発生していた。)
● DIPLOCATIONの題名を「INVISIBLE」にするとスイッチの画像を表示しない機能を追加
 (今後のディップスイッチメニューの表示に関する改善。)
● MAME動作用オプション「joystick_contradictory」を勝手に増設
 (エグゼドエグゼスでレバー左右同時ONの珍現象とか再現可能。)
● MAME動作用オプション「coin_impulse」を勝手に増設
 (コインスイッチを使用するコマンドが入力可能になったりなど。)
● コインロック有効状態でコインを受け付けた時のメッセージを追加
 (単にコインが入らない状態でも、MAMEがコインを遮断してるのか、
 MAMEは伝えたがゲームが無視したのか、違いが重要なこともある。)
● もとからあるコマンドライン「MAME -lx」で出力されるゲーム詳細情報を拡張
 (マージャンコンパネとか対応。)
● I/O関連のメニューに使う定型項目を扱う処理を高速化
 (遅いより速いほうがいいことが多い。)
● ディップスイッチ設定「Coinage」に使う定型項目を増やす準備
 (今後のEXEファイル肥大化の抑制に。)
(10/4更新:ロータリースイッチの動作が怪しいことを追記)
(10/7更新:上記の誤動作を修正できたので追記を削除とソース更新。
       ただし、この部分は別ファイルで更新します)
(10/11更新:公式がバージョンアップしたのでソースを新規の記事に移行)

http://kani.blog.shinobi.jp/Entry/226/
(改造ソースは上記の記事で更新したのでそちらで拾ってください)

今回の改造に関係のあるドライバーのソースファイル
 segac2.c segae.c segag80r.c segag80v.c segahang.c
 segald.c segaorun.c segas16a.c segas16b.c segas18.c
 segas24.c segaxbd.c segaybd.c
ファイル名がsegaで始まるものでシステム32以外を全部改造した。

以下、長々と変更点のリストアップが続くが、見るべき所を先に集めておくと
【オパオパ】エクステンド点数がDIPSWでわかるようにした
【エースアタッカー】ある程度マトモにプレイ可能になった(16Aだけ可能。16Bは不可。)
【スケバン雀士竜子】料金以外の設定もDIPSWでわかるようにした
【タイムスキャナー】SPECIALクリアボーナスがとんでもない数字だったのを修正した
こんな感じかね。

では、根気のある人は、下の詳細も読んでちょーだい。

----------------------------------------

●(共通)

コイン関連のディップスイッチの設定を、セガの共通のマクロを作って書き直した。

コイン関連のディップスイッチの設定を、金額が高い順に並べなおした。

ディップスイッチの画像に対応した。

使っていないディップスイッチの項目名を Unknown から Unused に変更した。

ディップスイッチのパッケージの名称をマニュアルに書いてあるのと同じに変更した。
 1,2と書いてあるなら1,2
 A,Bと書いてあるならA,B
これに関連して、「タイムスキャナー」の拡張スイッチ EXT.SW が
DIPSW「SWE」として登録してあるのが気になったがそれはそのままにしておいた。

----------------------------------------

●コラムスII

難易度表記 Medium を Normal に変更した。

----------------------------------------

●オパオパ

残機エクステンドの点数が不明になっていたのをきちんと記載した。
ON OFF 25k, 45k and 70k
OFF OFF 40k, 60k and 90k
OFF ON 50k and 90k
ON ON なし

----------------------------------------

●エースアタッカー (システム16A版)

アタック/サーブのジョイスティックが
プッシュスイッチ11個の組み合わせで2進数を作って操作する構造になっていたのを
アナログデバイスで操作できるように改造した。

----------------------------------------

●エースアタッカー (システム16B版)

専用のI/O基板を使うポートの読み取りルーチンを書いた。

----------------------------------------

●スケバン雀士竜子 (システム16A,16B共通)

ディップスイッチの設定が全く書かれていなかったので書いた。

----------------------------------------

●タイムスキャナー (システム16A,16B共通)

4面「SPECIAL」クリアボーナスが
誤 3クレジット / 7クレジット / 1クレジット / 200万点
正 2クレジット / 3クレジット / 1クレジット / 200万点
だったのを修正した。

----------------------------------------

●ダンクショット

ディップスイッチの画像の 2-3 と 2-4 が抜けていたのを修正した。

----------------------------------------

●DDクルー

ロムセット名の 2 player, 3 player, 4 player の player の部分を players に変更した。

コメントに、4人目のプレイヤーに使うI/Oボードのことを追記した。

----------------------------------------

●マイケルジャクソンムーンウォーカー (US版)

ディップスイッチの画像の 2-5 と 2-6 が抜けていたのを修正した。

----------------------------------------

●ジャンボ尾崎スーパーマスターズ

ディップスイッチの画像の 2-2 と 2-3 が入れ違っていたのを修正した。

----------------------------------------

●アフターバーナー

コメントに
マニュアルによると DIP B-3 は 残機 3 / 4 の切替と書いてあるが働かない
と書いてあるところに
日本版マニュアルでは 不使用 になっている
ということを追記した。

リンク
最新トラックバック
RSS
QRコード
プロフィール
HN:
かに凹・_・凹かに
下段メニュー開閉(JAVAスクリプト有効時のみ)
忍者ブログ [PR]