竜星群がみえる島

カイリューかわいい、と常に言っている人がきまぐれに作ったものを公開したりするところ。

Poke-Controller Modified ExtensionでNintendo 3DSを操作する

 

はじめに

 Poke-Controller Modified Extension のver.0.0.6にてQingpiに正式対応し、Nintendo 3DSを操作できるようになったので、詳細をまとめておきます。(今書かないと一生書かないので...)

https://x.com/dragonite303/status/1790030422211965435https://x.com/dragonite303/status/1790030422211965435

 

 

Poke-Controller Modified Extension とは?

 Moiさん(https://twitter.com/moi_moi_ghttps://github.com/Moi-poke)が開発されたPoke-Controller Modifiedをベースに筆者が(やりたい放題)機能拡張をした自動化支援ソフトウェアです。マクロはPythonで記述され、Pythonの豊富なライブラリを活用することができます。当初はNintendo Switchを対象としていましたが、筆者のとある目的(カイリュー関連)のためGC/3DSにも対応するようになりました。また、外部コントローラー(現時点ではProConのみ対応)を用いた操作ができます。(あまり知られていませんが)

Poke-Controller Modified Extension ver.0.0.6 UI

github.com

 

Qingpi とは?

 Nintendo 3DSを外部から操作するProjectでメイユールさん(https://twitter.com/U_1F992https://github.com/U-1F992)が開発されています。Qingpi実装済み基板をNintendo 3DSに取り付けることで、シリアル通信を用いてNintendo 3DSを外部から操作することができます。

Qingpi

github.com

 

準備 (Nintendo 3DS)

 Nintendo 3DSに対し、Qingpiおよび偽トロキャプチャを取り付けます。手順は奈都さん(https://twitter.com/Natu5307051)の記事の②、③にまとめられているのでそちらを参照下さい。

dokudenpa.hatenablog.jp

 

準備 (Poke-Controller Modified Extension)

 Poke-Controller Modified Extensionの導入方法については、じゃんきーさん(https://twitter.com/junky_poke_)がまとめられているPoke-Controller Guide +αにまとめられているのでそちらを参照下さい。

pokecontroller.info

 

備考:qingpi-pythonのインストールについて

 前述の奈都さんの記事の④-2にはPython 3.10以降 + qingpi-pythonのインストールが必要と記載されていますが、これはPoke-Controller Modified ExtensionでQingpiに正式対応する前(ver.0.0.5以前)の話になります。ver.0.0.6以降ではqingpi-pythonのインストールは不要であり、Python 3.9以前でも動作します。

 

 

Nintendo 3DSの画面をPoke-Controller Modified Extensionの画面に表示する

 こちらの手順も奈都さん(https://twitter.com/Natu5307051)の記事の④-1、④-3にまとめられているのでそちらを参照下さい。

dokudenpa.hatenablog.jp

 

Poke-Controller Modified ExtensionでNintendo 3DSを操作する(準備)

 Poke-Controller Modified ExtensionからNintendo 3DSの操作ができることを確認します。まず、以下の準備1-準備4を実施します。確認する項目によって必要な準備が異なります。

 

準備1:シリアルデバイスを接続する

 Poke-Controller Modified ExtensionからQingpi実装済み基板にシリアルデータを送るための準備です。

  • Nintendo 3DSに取り付けられたQingpi実装済み基板とPCをケーブルで接続する
  • 「Serial」タブの「Scan Device」をクリックする
  • 「Device Name」でUSBシリアルデバイスを選択し、「Reload Port」をクリックする

シリアルデバイスを接続

 

準備2:マウスによるスティック操作機能を有効化する

 マウスの左ボタンを用いてスティックを操作するための準備です。

  • 「Manual Control」タブの「Use LStick Mouse」にチェックを入れる

マウスによるスティック操作機能の有効化

 

準備3:マウスによるタッチスクリーン操作機能を有効化する

 マウスの右ボタンを用いてタッチスクリーンを操作するための準備です。

  • 「Manual Control」タブの「Use RStick Mouse」にチェックを入れる

マウスによるタッチスクリーン操作機能の有効化(1/3)
  • 「マウスの右ボタン」+「Ctrl」を押しながら画面上でマウスを動かしてタッチスクリーン範囲を指定する
    (注意)タッチスクリーンの動作確認時に押した地点が大きくずれる場合、本工程を再度実施してください。

マウスによるタッチスクリーン操作機能の有効化(2/3)
  • 「Serial」タブの「Data Format」を「Qingpi」にする

マウスによるタッチスクリーン操作機能の有効化(3/3)

 

準備:[Option]外部コントローラーによる操作機能を有効化する

 Pro Controllerを用いてNintendo 3DSを操作するための準備です。

  • 「Manual Control」タブの「Use Pro Controller」にチェックを入れる
    (必ずPro ControllerをPCにつないだ状態でチェックを入れてください。)

外部コントローラーによる操作機能の有効化

 

 

Poke-Controller Modified ExtensionでNintendo 3DSを操作する(動作確認)

 Nintendo 3DSの操作の動作確認はボタン類、スティック、タッチスクリーンの3つに分けて実施します。

 

動作確認1:ボタン類の動作確認

 Software-Controllerを使用することで、ボタン類の操作を行うことができます。準備1の実施が必要です。ボタンをクリックして想定通りに動けば問題なく動作していることが確認できます。

Software-Controller

 

動作確認2:スティックの動作確認

 画面上でマウスの左ボタンを押下しながらカーソルを動かすとスティックを操作できます。準備1と準備2の実施が必要です。こちらも想定通りに動けば問題なく動作していることが確認できます。

スティックを左に倒している様子

 

動作確認3:タッチスクリーンの動作確認

 タッチスクリーンの操作は基本的にマウスの右ボタンで行います。準備1、準備3の実施が必要です。タッチスクリーンが表示されている箇所を右クリックして、想定通りに動けば問題なく動作していることが確認できます。

ゲームメモをクリックしている様子

 

動作確認4:[Option]外部コントローラーによる操作の動作確認

 準備1と準備4を実施しておけば、タッチスクリーンを除き外部コントローラーで操作できます。

 

 

Poke-Controller Modified ExtensionでNintendo 3DSを操作する(マクロ)

 Poke-Controller Modified Extensionでは、準備1と準備3を実施しておけば、自動化のマクロスクリプトを動作させることができます。

 従来から存在した、Button、Hat、Direction、Stickに加え、新たにTouchscreenを準備しました。Touchscreen(x,y)でタッチスクリーンの(x,y)の地点に対する処理を行うことができます。使用する場合は、以下の通りCommands.KeysからTouchscreenをimportしてください。

from Commands.Keys import Touchscreen

 

例1:タッチスクリーンの(x,y)地点を一度押したい場合

self.press(Touchscreen(x,y))

 

例2:タッチスクリーンの(x,y)地点をN回押したい場合

self.pressRep(Touchscreen(x,y), N)

 

例3:タッチスクリーンの(x,y)地点を押し続けたい場合

self.hold(Touchscreen(x,y))

 

例4:タッチスクリーンから離したい場合

self.holdEnd(Touchscreen(x,y))

 

例5:タッチスクリーンに円を描くサンプルプログラム

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from Commands.PythonCommandBase import PythonCommand

from Commands.Keys import Touchscreen
import numpy as np


class Qingpi_Touchscreen_sample(PythonCommand):
    NAME = 'Qingpi_Touchscreen_sample'

    def __init__(self):
        super().__init__()

    def do(self):

        center_x = 160
        center_y = 120
        r = 50
        for i in range(0, 360, 3):
            w = (2.0 * np.pi / 360.0) * i
            x = int(r * np.cos(w) + center_x)
            y = int(r * np.sin(w) + center_y)
            self.hold(Touchscreen(x, y), wait=0.1)

        self.holdEnd(Touchscreen(0, 0))
        self.finish()
 
 

動画

 本自動化はNintendo 3DS本体の改造(データ改変は含まず)の要素が含まれ拒否反応を示す方がおられることから、Xの投稿はセンシティブ設定にしています。動画を見たい方は下記のリンクからご確認ください。

https://x.com/dragonite303/status/1790039409066127613

 

 

おわりに

 本記事では、Poke-Controller Modified Extension のver.0.0.6におけるQingpiを用いたNintendo 3DSの操作方法および自動化マクロで使用可能な関数を紹介しました。この記事が皆様の自動化ライフの一助になれば幸いです。

 

 

謝辞

 Qingpi Projectの開発者であられるメイユールさん(https://twitter.com/U_1F992)、引用先の記事の筆者である奈都さん(https://twitter.com/Natu5307051)、じゃんきーさん(https://twitter.com/junky_poke_)にこの場をお借りしてお礼申し上げます。

 

 

その他

 筆者はカイリューグッズを集めています。メルカリなどでなかなか見かけないような珍しいグッズなど見かけましたらDMなどでご連絡いただければ幸いです。