HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2023
0113
GENKIJoy-Con/Proコン/Dualshock/DualSense をHSP3で使う6解決


GENKI

リンク

2023/1/13(Fri) 01:18:23|NO.97695

Joy-Con/Proコン/Dualshock/DualSense をHSP3で使う事に関する話題のスレッドです。

これらのコントローラーはゲーム機用でありながら、PCとBluetooth接続できます。PCに接続すると普通のゲームコントローラとして使えます。ゲームコントローラとして認識するので、mod_joystick2.asでボタン操作を取得できます。
これまではジャイロ等の独自機能は使えなかったのですが、最近は取得出来るようになりました。しかも振動まで使えるように。

動作報告とか、こんなの作ったとか、ちょっと聞きいてみたいけど新規スレッド立てるのもなとか、…ご活用ください。


以下関連サイト

NintendoSwitch Proコントローラーのボタンが押されたか取得
http://hsp.tv/play/pforum.php?mode=all&num=97223
前スレ。話がそれてきたのでこのスレッドを立てました。

JoyShockLibrary
https://github.com/JibbSmart/JoyShockLibrary
Joy-Con/Proコン/Dualshock 4/DualSense のジャイロなどが取得できるDLL。
DS4/DS5のみ振動対応。

JoyShockLibrary-plus-HDRumble
https://github.com/MIZUSHIKI/JoyShockLibrary-plus-HDRumble
JoyShockLibraryにHD振動を追加したもの。

JoyShockLibrary-For-HSP3
https://github.com/nennneko5787/JoyShockLibrary-For-HSP3
JoyShockLibrary.DLLをHSP3で使うためのモジュール。

JoyShockLibrary for HSP3
https://mclab.uunyan.com/dl/dl58.htm
JoyShockLibrary-For-HSP3をHSP3で本格的に使うために強化したモジュール。

HSP3でジョイコンのHD振動が動いている動画
https://twitter.com/millline/status/1613504415847313409



DualSenseユーザーいないんだろうか。JoyShockLibraryで動いたという報告を見たことがない。



この記事に返信する


GENKI

リンク

2023/1/13(Fri) 01:42:02|NO.97697

JoyShockLibraryってHORI製とか他社メーカー品の加速度とか取れるんでしょうか。
VID/PIDで弾かれそうなイメージある。



nennneko5787

リンク

2023/1/13(Fri) 13:28:48|NO.97699

Nintendo Switch Proコントローラー(USB接続)で動作しました。
振動も動作しています。



GENKI

リンク

2023/1/13(Fri) 22:35:02|NO.97702

>> nennneko5787 さん
ありがとうございます。
ProコンはPCにUSB接続すると普通のゲームコントローラーとして使えないという記事は目にしますが、DLL経由で値は取得出来るんですね。
そういえば、自分の環境を言ってなかった。我が家のDualshock4は、Bluetooth接続で値の取得と振動、全ても題なく動いています。



さてところで、Dualshock4で何かできないかと思い、タッチパッドをマウス代わりにするツール作ってみました。
Dualshock4かDualSenseお持ちの方は、遊んでみてください。

次の操作が可能です。
・スワイプ   :マウスの移動
・タップ    :左クリック
・ダブルタップ :ダブルクリック
・2本指スワイプ :ホイール回転

; ; Dualshock4, Dualsense のタッチパッドをマウス代わりにするサンプル ; ; 簡易実装なので、あまり複雑な操作はできません。 ; ;完全なタッチ操作を行うためには、InjectTouchInput関数を使用するといいようです。 ; #include "user32.as" #include "JoyShockLibrary.hsp" ; JslGetSimple buttonJs = 0 ddim analogJs, 6 ; JslGetTouch dim touchId, 2 dim touchDown, 2 ddim touchX, 2 ddim touchY, 2 dim touchDown0, 2 ; タッチパッドのサイズ x,y dim sizeTouch, 2, numConnectJoystick ; 接続されているコントローラーデバイスを接続して、接続数を取得 numConnectJoystick = JslConnectDevices() ; デバイスの性能を取得 repeat numConnectJoystick deviceId = cnt ; タッチパッドのサイズ if JslGetTouchpadDimension(deviceId, x, y) { sizeTouch(0,deviceId) = x, y } loop cntFrm = 0 touchDown_time = -1 isDblTouch = 0 *main redraw 1 : await 16 : redraw 0 : color 255, 255, 255 : boxf : color : pos 0,0 if numConnectJoystick > 0 { deviceId = 0 ;----------------------------- ; 入力を取得 ;----------------------------- ; ボタン buttonJs0 = buttonJs JslGetSimple deviceId, buttonJs, analogJs ; タッチパッド touchDown0(0) = touchDown(0), touchDown(1) JslGetTouch deviceId, touchId, touchDown, touchX, touchY ; タッチ座標をタッチパッドの解像度に合わせる touchPX0_0 = touchPX0 touchPY0_0 = touchPY0 touchPX0 = touchX(0) * sizeTouch(0,deviceId) touchPY0 = touchY(0) * sizeTouch(1,deviceId) ; 2点押し isDblTouch0 = isDblTouch if touchDown(0) & touchDown(1) = 1 { isDblTouch = 1 } else { isDblTouch = 0 } ; 押してる時間を計測 if (touchDown0(0) = 0) & (touchDown(0) = 1) { touchDown_time = 0 } if touchDown(0) { touchDown_time++ } ;----------------------------- ; マウス操作 ;----------------------------- ; 押下操作 if ((buttonJs0 & JSMASK_CAPTURE) = 0) & ((buttonJs & JSMASK_CAPTURE) ! 0) { if touchX(0) <= 0.5 { ; 左ボタンダウン mouse_event $2, 0, 0, 0, 0 } else { ; 右ボタンダウン mouse_event $8, 0, 0, 0, 0 } } ; アップ操作 if ((buttonJs0 & JSMASK_CAPTURE) ! 0) & ((buttonJs & JSMASK_CAPTURE) = 0) { if touchX(0) <= 0.5 { ; 左ボタンアップ mouse_event $4, 0, 0, 0, 0 } else { ; 右ボタンアップ mouse_event $10, 0, 0, 0, 0 } } ; 左クリック ; 押している時間を使って判定しています。 taptip = 8 if (touchDown0(0) = 1) & (touchDown(0) = 0) { if touchDown_time <= taptip { mouse_event $6, 0, 0, 0, 0 ; 左クリック touchDown_time = -1 } } ; カーソル移動・ホイール回転 if touchDown(0) { ; タッチ中の指の本数で動作を変更しています。 if isDblTouch { ; ホイール回転 if isDblTouch0(0) = 0 { ; 始点 touchPX0_0 = touchPX0 touchPY0_0 = touchPY0 } z = 0.3 ; 移動倍率 h = int((touchPY0 - touchPY0_0) * z) mouse_event $800, 0, 0, h, 0 } else { ; カーソル移動 if touchDown0(0) = 0 { ; 始点 touchPX0_0 = touchPX0 touchPY0_0 = touchPY0 } z = 0.3 ; 移動倍率 x = int((touchPX0 - touchPX0_0) * z) y = int((touchPY0 - touchPY0_0) * z) mouse_event $1, x, y, 0, 0 mes ""+x+ " "+y } } } cntFrm++ goto *main
これだけならDS4Windowsで同じことができます。
しかし自作できるということは、思いつきを形にできます。例えばAC持ちや、ジョイコンのように90回して持つ場合に対応したタッチパッドも実装出来るわけです。
せっかくHSPなのでこういうゲーム用途でも活用されるといいな、などと考えています。



nennneko5787

リンク

2023/1/14(Sat) 10:50:55|NO.97704

HD振動についての文献です。どの値にすればいいのかわかります。
https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering/blob/master/rumble_data_table.md



nennneko5787

リンク

2023/1/14(Sat) 10:55:48|NO.97705

質問ですが、
振動したあと、少し余韻があると思うんですけど、その余韻を消す方法を知りたいです。
コントローラーはProコントローラーです。



nennneko5787

リンク

2023/1/14(Sat) 10:57:12|NO.97706

すみません。Amplitudeを0にしたらできました。



ONION software Copyright 1997-2023(c) All rights reserved.