« 2016年2月 | トップページ | 2016年4月 »

2016.03.10

「MOMODORA 月下のレクイエム」をPS4コントローラで遊ぶために、いろいろと調べてみた

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

PS4コントローラは、USB接続なのでPCでも使用できる。
(PS3のもUSB接続できるけど、後述の記事のMotionJoyが必要)

実際、初音ミク冒険記やAstlibraの本編や外伝は、
繋いでドイラバなどがインストールされさえすれば使用できる。

もっとも、この状態だと十字キーが使えず、
アナログスティックの左で代用するのと
バイブレーション機能は効かないのだが・・・。

まぁ、バイブレーション機能は、PS2やPS3の時も
ドライバをインストールしないと使えなかったので
そういうものなのかも?と割り切ることにする。

ちなみにPS3のコントローラでバイブレーション機能を有効にする方法は
下記の記事を見てください。
PS3のDualshock3コントローラで初音ミク冒険記をプレイする

さて、PCのゲームコントローラには大きく分けて以下の2つがあるようです。
・DirectInput方式
・XInput方式

どうやらPS2、PS3、PS4のコントローラは
DirectInput方式にしか対応していないみたい。
(DXライブラリのCheckJoypadXInput関数で確認しました)

このため、XInputにしか対応していないMomodoraでは
PS2、PS3、PS4のコントローラは、反応しないらしい。

XInputに対応しているのは、Xbox 360とかのコントローラですが
かげさんが持っているXbox 360コントローラはワイヤレスなので
xbox ワイヤレス レシーバーが無いと使えません・・・

が、わざわざワイヤレスレシーバーを購入するのもなぁ・・・

ってことでPS4コントローラをPCゲームで使う方法を調べてみた

どうやら、2つあるみたい。
1.DS4Toolを使う
2.x360ceを使う

たぶん、使い方としては、1の方が良さそうなんだけど
DS4Toolは、MotionJoyが入っていると競合するみたいなので
今回はx360ceを使うことにします。

かげさんのマシンは、PS3コントローラを使っている関係で
既にMotionJoyが入っているからアンインストールしないとダメなのよ・・・

なお、DS4Toolを使う方法は、以下のサイトが参考になりそうです。
PS4コントローラでPCゲー? -DS4 Toolの使い方と紹介-

以下、言葉でのみ説明しますが、画像が見たい方は
下記のサイトを見てください。
PCゲームでXbox以外のコントローラーを使う!「x360ce」の使い方

x360ceのダウンロード
https://github.com/x360ce/x360ce
の下の方にDownloadのリンクがあります。
32ビット版と64ビット版がありますが、
Momodoraは32ビットゲームのようなので32ビット版をダウンロードします。

ダウンロードしたファイルを展開したら、展開されたexeファイルを、
起動したい「ゲームのフォルダにコピー」します。
(ここがポイントです)

PS4のコントローラを繋いで
コピーしたexeファイルを起動します。

メッセージボックスが1、2回でますが、全部「YES」を選択します。
「Next」を押すとコントローラが認識されます。
「Finish」を選択します。

コントローラの画面が出たらPS4のコントローラのボタンを押します。
押されたボタンが反応して画面に表示されます。

必要に応じてボタンを設定したら、「Save」して終了します。

起動したいゲーム「MomodoraRUtM.exe」を起動します。
これでPS4コントローラが認識されます。
(バイブレーションは効きません・・・)

Momodoraでパッドは認識されるようにはなったんだけど、
実際には、Momodoraには詳細なパッドコンフィグがないから
ジャンプボタンの位置を変更したくてもできないんだけどね・・・

でも十字キーも効いて、キーボード操作よりは格段に操作しやすいから
プレイはしやすくなると思う。

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2016.03.06

Effekseerのエフェクト描画を一時停止する

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

Effekseerのエフェクト再生中にポーズボタンを押した時に
エフェクト再生が続いて、ポーズ状態のままで
エフェクト再生が終わってしまった。

なので、再生の一時停止について調べてみた。

EffekseerForDXLibに該当する関数は、なかったけど
GetEffekseer2DManagerでEffekseer::Managerを取得したら
SetPausedメソッドで行けそうな感じがした。

かげさんとしては、ループ再生しないエフェクトは
SetPausedメソッドで一時停止して
ループ再生のエフェクトは描画が続く
としたかったのだけど、
これはやってみたんだけど、なぜかうまく行かなかった。

Effekseer::Managerのソースを見てみると
どうやらSetPausedをすることで、エフェクトの更新をする時に
処理対象から外しているみたいだった。

なので初音ミク冒険記側でエフェクトの更新をスキップするようにした。
一時停止したい状況の時だけ
UpdateEffekseer2DやUpdateEffekseer3Dを
呼ばないようにするだけだった。

他の処理は、通常通りにすることで
描画中のエフェクトは、そこから先のコマに進まなくなった。

このやり方は、エフェクトハンドルを指定しないので
全部のエフェクトが止まる方法だ。
ひとまずコレでも良さそうなので、この方法で行くことにした。

これで時を止めるといった演出もできる感じだ。
いい感じじゃないだろうか。

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

2016.03.05

VC++の__debugbreak()が中々便利だ

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

ゲームエンジン・アーキテクチャ 第2版を読んでて
「3.3.3.3 アサート」に書かれている部分が役立ちそうに思った。
(この本は、分厚いので、気になるところからちょこっとずつ読んでいる)

アサート自体は、自動テストをする仕事だと使うんだけど
初音ミク冒険記では全然使っていなかったんだよね。

特に「デバッガへ処理を移すインラインのアセンブリ」が
便利そうなので調べてみた。

どうやらVC++だと以下の命令が該当するみたい。

DebugBreak();
__debugbreak();

この命令をソースの中に書いておくと
デバッガのブレイクポイントを指定していなくても
ブレイクポイントに到達したと判断されるので
Visual Studioから初音ミク冒険記を起動していると
そこでステップ実行のデバッグができるようになる。

Visual Studioを起動していない場合に発生したら
エラーのメッセージボックスが表示されるので
その間にVisual Studioを起動し
メニュー「デバッグ」-「プロセスにアタッチ」で
デバッグ対象のアプリケーションをHatsuneMikuBoukenki.exeにして
アタッチすればデバッグできるようになる。

ちなみに上の2つの命令はどちらも似たような動きだが
__debugbreak();が32ビット、64ビットどちらにも対応しており
ARMにも対応していると明記されているので
かげさんは__debugbreak();を使うことにした。

ということで、
本にある記載を初音ミク冒険記で使うとこんな感じになる。

#if ASSERTIONS_ENABLED
	// 式をチェックしてfalseであれば失敗する
	#define ASSERT(expr) \
		if (expr) { } \
		else \
		{ \
			debugOut(DOUT_Console, DLV_NormalError, DCAT_Etc, "Assertion failed! in SourceFile=[%s] Line=%d\n", __FILE__, __LINE__); \
			__debugbreak(); \
		}
#else
	#define ASSERT(expr)	// 何も起こらない
#endif

これで#define ASSERTIONS_ENABLED 1
と書けば条件のthenブロックが動き、
#define ASSERTIONS_ENABLED 1をコメントアウトすれば
elseブロックが動き、何も起こらないようになる。

debugOutは、以前、かげさんが作ったデバッグ用の関数だ。
これも上述の本の9.1 ロギングとトレースを参考に作っている。

デバッグ出力をもう少し改良しようかな?

__debugbreak()の話ではないけど
debugOutと初音ミク冒険記のログの仕組みについても
書いておこう。

■第1引数:コンソールに出力
 初音ミク冒険記のデバッグでは
 「早速脱線してデバッグ用コンソールを表示してみた
 に書いたコンソールが自動的に起動するようにしている。
 ここに出力する。

■第2引数:通常のエラー
 アサートは、式のチェック結果が、真か偽かチェックするので
 エラーとは限らないのだけど、debugOutではエラー系の情報は、
 第1引数の出力先の他にも
 ログファイルにミラーリングするようになってるから
 後から情報を確認するときにも役に立つ。

■第3引数:ログ出力カテゴリ
 ログファイルは、目的のログを探しやすいようカテゴリ分けしている。
 今回は、カテゴリをその他としている。
 初音ミク冒険記では、下図のようなカテゴリに分けてる。
 
Photo

 ちょっと、多すぎな気もするが、複数カテゴリにまたがる確認の時は
 カテゴリ分けされていると便利なのだ。
 上図だとその他にチェックが付いていないので普段だと出力されないが、
 エラー系の情報は、別のデバッグオプションで
 カテゴリのチェックの有無にかかわらず出力されるようにしてる。

Photo_3

 ログが分割されていると時系列で追いにくくなるが
 そこはカテゴリログの他にサマリーログというのを作っているので
 カテゴリ別のログに書かれたものは
 全体のサマリーログに時系列で書き込まれるって寸法になっている。

■第4引数以降:ログ出力する内容
 ここはprintfとかと同じ書式で設定できる。
 ポイントは__FILE__と__LINE__で
 それぞれ、ソースファイル名と行番号を出力する。
 今回作ったASSERTはマクロ関数なので
 ASSERT(チェックしたい式);と書いたソースと行番号が勝手に入ってくれる。

こんな感じでコンソールやログファイルに情報を出力した上で
デバッガで止まってくれる。

なので、想定していない条件になっていないかチェックしたいところで
ASSERT(チェックしたい式);と書けば
条件に引っかかった時にデバッグができるようになるので便利だ。

早速、マップ描画で時々変になるパターンで
もしかしたらと思いついたチェック式を書いて実行してみたら
該当するパターンでデバッガに切り替えれた。

ブレイクポイントを貼って止めるのも良いんだけど
ブレイクポイントが多くなってくると
鬱陶しくて全部のブレイクポイントを外すことがあるので
ブレイクポイントをつけてなくても気になる判定で
デバッガに移れるというのは、再現性が低いテストをしやすくなるので
とても便利そうに思った。

 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

« 2016年2月 | トップページ | 2016年4月 »