なるほどえたきちのブログじゃねーの

なるほどえたきちのブログじゃねーの

なるほどえたきちのブログじゃねーよ

FireBirdコントローラーの取説みたいなやつ

概要

結構前に作ったコントローラー基板「FireBird For Pro-Controller」について機能説明を殆どしていなかったのでざっくりと纏めます。
この記事に記載している機能は現時点での最新基板(v2.4)・ファームウェア(v2.12)のものです。

対応ハード

一通り動作確認済みです。
ここに記載していない海外版ハード、互換ハードなどでも動作する可能性があります。

DirectInput、XInputが使用できるほぼ全ての環境(PCやコンバータ類など)
ファミコン(拡張端子使用)
ニューファミコン
スーパーファミコン
ニンテンドウ64
ゲームキューブ
Wii(GCコンとして接続可能)
GCコントローラ接続タップ
PlayStation 4
PlayStation 5(PS4用タイトルのみ)
Nintendo Switch
Nintendo Switch 2

組み立て手順

こちらの記事に纏めてあります。
blog.bzl-web.com

初期設定

普通のコントローラーとして使う分には以下の設定だけ押さえておけば基本的には大丈夫です。
細かい所が気になったら他の部分も調整しましょう。

キャリブレーション

初期状態ではスティックのキャリブレーションが一切行われていない為、使用できるようにするにはコンフィグツールでこの設定を行う必要があります。
ツールはこちらからダウンロードしてください。
ツール上の『キャリブレーションを開始』を選択してキャリブレーションを開始します。

後はツール上の手順に従ってスティックの操作を行います。

入力角度の誤差補正

八角ゲートのシェルを使用している場合は『入力角度の誤差補正』も使用した方がいいかもしれません。
ゲートに合わせて入力していても入力値が↓の画像のようにズレてしまう際に補正を行う機能です。

こちらもツール上の手順に従ってスティックを操作すると補正が完了します。

跳ね戻りフィルター

スティックの跳ね戻りを抑制する機能です。
左右のスティックを弾くと弾いた瞬間の入力値がビューアに表示されます。
スライダーを右に動かすとフィルターの強度を上げることができます。
基本的には3くらいで十分だと思います。

振動モーター

組み立て時に振動モーターを接続した場合はこの部分を設定する必要があります。
初期設定ではモーターの種類が『振動なし』に設定されているため、実際に接続したモーターに合わせて変更してください。

コンフィグツール

Windows OS用の専用アプリケーションを使用し、GUI上でコントローラーの各設定を変更することができます。
変更した設定はコントローラー本体に記録されます。

基本キャリブレーション

コントローラーとして使用する上で必須となるスティックのキャリブレーションを行う項目です。
キャリブレーションを開始』ボタンを押下した後、画面上の指示に従ってスティックを操作してください。
複雑な操作は必要なく、概ね10秒程度で完了します。

また、デッドゾーンの調整もこちらで行います。
この値は0~2047の間で設定可能です。

・内側デッドゾーン
スティックがニュートラル付近にある場合に、どの範囲まで入力を無効にするかを設定します。
値を大きくするとスティックのジッターや軸の緩みによる入力が無視され、意図しない動きを防ぎやすくなります。ただし、繊細な操作がやや難しくなります。
逆に値を小さくすると繊細な操作に敏感に反応しますが、スティックの劣化やノイズによって意図しない動きが起こりやすくなる場合があります。

・外側デッドゾーン
スティックを最大まで倒した際に、どの範囲から最大入力として認識するかを設定します。
この設定値は外周からの距離を基準にしています。
値を大きくすると、スティックを完全に倒し切らなくても最大入力が得られます。
逆に値を小さくすると、スティックを完全に倒し切るまで最大入力になりません。正確な最大入力を必要とする場合に有効ですが、操作がやや鈍く感じることがあります。

角度補正

入力角度の誤差を補正する機能です。
8方向の入力角度を基準に、ツール上で補正値を設定して意図した入力値に近付くようにします。
また、ツール上で自動設定することも可能です。『入力角度の誤差補正』ボタンを押した後、ツール上の指示に従って操作すると自動で適切な値が設定されます。

応答特性

ゲームコントローラーの特性を深く理解している人向けの機能となります。
基本的にデフォルト設定でも問題なく使用可能ですが、細かい部分で操作時の感覚を調整したい場合はこの設定を使用します。

・感度カーブ
物理的なスティック入力に対して、ゲーム上に反映する入力がどのように変化するかの反応曲線を調整する機能です。
デフォルトの設定はリニアで、入力値をそのままゲーム上に反映させるようにしています。

・スケーリング形状
デフォルトは真円形状に設定されていますが、主にFPSなどのゲームでは斜め方向の入力が弱く感じる場合があります。
この値を調整することで、四角形のスケーリングに近付けるような調整が可能となります。PS系コントローラーなどでは縦横25くらいの形状となる場合が多いです。

・RCフィルター
ホールセンサースティックにはジッターを抑えるために抵抗、コンデンサといった電子部品を使用したRCフィルターという回路が内蔵されています。
これは電気的なノイズを入力に反映させないために必要なものですが、機敏なスティック入力を必要とするゲームではこの影響で入力が鈍っているように感じる場合があります。
その場合、このフィルターの値をマイナス方向に設定することで、既に設定されているRCフィルターを打ち消すような効果が得られます。
逆に、スティックのジッターが大きく感じる場合はこの値をプラス方向に大きくすることで、RCフィルターの効果を増幅させることができます。

・マイナスデッドゾーン
デッドゾーンの調整ができない、もしくは0に設定できないようなゲームでもデッドゾーン0時のような入力感覚にしたい場合に使用する設定です。
この値を大きくすると、スティックを倒した際にゲーム内で反映される最低入力値が大きくなるため、ゲーム側のデッドゾーンに合わせて設定することで繊細な入力が反映されるようになります。

ジャイロセンサー

コントローラーに内蔵されているジャイロセンサーの設定を行う機能です。
スティック入力への変換設定もこの項目で行います。

初期状態ではキャリブレーションが行われていないため、ドリフトのような現象が発生する場合があります。
コントローラーを平らな場所に置いた状態で『キャリブレーション』ボタンを押すとLEDが黄色に点灯するので、それが消えるか元の色に変わるまで待機してください。

スティックエミュレート
ジャイロ入力に対応していないゲームでジャイロによる操作を行いたい場合に使用する設定です。
また、XInputといったジャイロ機能が存在しない設定にしている場合にも使用できます。

・使用するスティック
左右どちらのスティックにジャイロ操作を割り当てるかを指定します。

・使用方法
特定キーでのトグル操作か、特定キーを押している最中に使用できる仕様にするかを指定します。

・感度
共通設定の感度とは別に設定可能です。
スティック入力に変換する都合上、実際のジャイロ操作とは入力感度が大きく変わる場合があるため、この設定を使用して意図した入力に近付けることができます。

デッドゾーン
応答特性のマイナスデッドゾーンに近い機能です。
ゲーム側で設定されているデッドゾーンに合わせて設定することでジャイロ操作時のみ繊細な入力を反映させることができます。

キーコンフィグ

対応しているハード別にキーコンフィグを5つまで設定することができます。
また、キー入力に関係する各種機能の設定もこちらで行います。

・トーナメントモード
主に大会向けの機能となります。
この機能が有効になっている際はプレイヤーランプが点滅し、十字キー/ホーム/キャプチャ/+/-といった一部のキーが無効化されます。
「ホームボタン長押しでトーナメントモード切替」を有効にすることでコントローラー単体でこの機能をON/OFFを切り替えることができます。

・XInput使用時にA/B、X/Yを反転する
Xboxコントローラーと任天堂のコントローラーではこのキーの位置が反転しているため、ゲーム内の表記と実際のボタンの見た目を統一させたい場合に使用する機能です。

・デバウンスタイム
ボタンにマウススイッチやタクトスイッチなどを使用している場合、スイッチの劣化によりチャタリングという現象が発生する場合があります。
数値を大きくすることで、ボタンが押されてからゲーム内で離されるまでの猶予時間を設定することができます。

跳ね戻りフィルター

左右のスティックに対して跳ね戻りフィルターの強度を設定することができます。0に設定した場合フィルターは完全に無効化されます。
また、この画面上でスティックを弾くと入力値が波形で表示されます。この波形を実際に確認しながらフィルターの値を設定することができます。

LEDカラーマップ

LED関連の設定を行う項目です。
ライティングパターンや色、光量などの設定が可能です。

振動モーター

使用している振動モーターの種類、振幅といった振動関連の設定を行う項目です。

バイス設定

USBデバイス、Switchの認識カラー変更といった設定を行う項目です。

・USBデバイスモード
どのUSBデバイスをエミュレートするかを指定できます。
実際に指定できるのは以下のデバイスとなります。
・Switch Proコントローラー
・XInputコントローラー
DirectInputコントローラー
GCコントローラ接続タップ
PS4コントローラー
GCコントローラー接続タップに設定した状態ではコンフィグツール上での認識が行えません。また、XInput時は独自のプロトコルでツールとの通信を行うため、ツール側の動作が不安定になる場合があります。

・認識カラー設定
Switch接続時に認識されるカラーを設定できます。

・キーコマンド
コントローラー単体でのキー入力操作で設定変更を行うことができます。
実験的な機能となるため、詳細な説明は省きます。
・L+R+B+Y 追加ボタンへのリマッピング
・L+R+左スティック押し込み+右スティック押し込み スティックキャリブレーション
・L+R+[+]+[-] ジャイロキャリブレーション

実装している機能・特徴の一覧

FireBirdコントローラーに実装している機能です。

ホールセンサースティック搭載

理論上ドリフトが発生しない、磁気で入力値を読み取るホールセンサースティックという部品を使用しています。
ホールセンサースティックにも種類は色々ありますが、検証を行った上で軸の耐久性において最も優れていたメーカーのものを使用しています。

跳ね戻りフィルター搭載

スティックを弾くような操作を行った際、反対側にも入力が入ってしまう「跳ね戻り」という現象を抑制する機能です。
スティックの加速度等を監視して弾き入力を検知し、反対側の入力に対してフィルタリングを行います。
純正コントローラーを改造する跳ね戻りフィルターとは異なり、跳ね戻りと関係のない入力はそのまま操作に反映されるため、弾き入力の出やすさといった操作感の差異はそれらと比べて小さくなります。

スティックキャリブレーション

デフォルト設定でキャリブレーションのみ行った状態では、スティックを回す操作を行った際に綺麗な真円が描けるようになっています。

また、それに加えてデッドゾーン、入力角度の誤差補正、感度カーブ調整、スケーリング形状の調整など、スティック操作の感覚に影響する要素を調整することが可能です。


純正プロコンと同じ精度のジャイロセンサーを搭載

純正プロコンでも使用されているものと同じジャイロセンサーを搭載しています。
制御方法も純正プロコンと同じ方式なので、有線であることを除けばほぼ変わらない操作感で遊べます。
デフォルト設定では純正プロコンとほぼ同感度に設定されていますが、コンフィグツールで縦横の感度を変更することができます。
また、ジャイロ入力を左右どちらかのスティック操作に変換してジャイロ非対応のゲームでもジャイロでのエイムなどが行えるようになる、「スティックエミュレート」という機能を実装しています。
こちらはゲーム側のスティック入力の感度によって操作感が変わってくるので、ジャイロ単体時の感度設定とは別の感度設定を追加しています。

HD振動対応

プロコン型の互換基板で恐らく初めてHD振動に対応しました。
Switchで使用可能なコントローラーとして見ても、純正プロコンと同じモーターを使用してHD振動を再現したものはこれが初だと思います。
ジョイコン/プロコンで使用されているアルプス製のハプティックリアクタが使用可能です。
また、ジョイコン用のモーターであればハンダ付け要らずでコネクタ接続が可能です。

USBデバイスモードを選択可能

XInput/DirectInput/SwitchプロコンといったUSBデバイスとしてPCやSwitchに接続することができます。
PCとSwitchで別々のデバイスモードを割り当てることができるため、PC接続時はDirectInputでSwitch接続時はプロコンといった使い方も可能です。
XInput/DirectInputでPC接続した際はポーリングレート1000Hzで動作するため、Switchプロコンの形状に違和感がなければPC用ゲームパッドとしての性能も悪くないかと思います(参考程度に、Switchプロコンは125Hz、PS系の純正コントローラーは250Hzで動作しています)。

Switch、Switch2接続時はSwitch側のフレーム更新に同期してポーリングを行う機能を実装しています。
これによってフレーム単位の入力が正確に反映されるため、格闘ゲームなどでの操作精度がやや向上しています。
ProGCCのFrame Perfectと同等の機能になります。

RETRO-Cケーブル対応・FC/SFC/N64/GCの自動識別が可能

RetroSix、HandHeldLegendによって開発されているRETRO-Cケーブルに完全対応しています。
また、ハードウェアの自動識別機能も実装しているため、文字通り挿すだけで動きます。
ハードウェア毎に最大5種類のキーコンフィグを設定可能です。

ボタン・スティックLED搭載

各ボタンをフルカラーLEDで光らせることができます。
他の互換基板に搭載されているLEDと比べて薄いものを使用しているため、ラバーにLEDが干渉して操作感が変わるといった問題の対応も行っています。
単色だけでなく、ゲーミングデバイスによくありそうな様々なエフェクトで光らせることが可能です。

十字ボタンの誤反応対策

ゲームボーイ等のレトロハードで使用されているボタン接点の形状を参考にしてパッドの形状を見直し、純正プロコン等でも発生していた「単純な上下左右の操作が意図していない斜め入力に化ける」といった症状が起きづらくなっています。
Switchでゲームを遊ぶ際はそこまで気にならないかもしれませんが、RETRO-Cケーブル等でスティックが存在しない時代のゲームを遊ぶと斜め入力の誤反応は大きなストレスに繋がります。
但し、誤反応の起きやすさはラバーやボタンによって変わる部分なので、全く起きないことを保証することはできません。
純正のボタンとラバーを使用する分にはまず問題ないと思います。

純正ボタン基板との互換

使用する方は殆どいないかと思いますが、純正プロコンのボタン基板をそのまま使用したりFireBirdのボタン基板を純正プロコンで使用したりすることも可能です。
LED周りは動かないのでその点はご了承ください。
その為、eXtremeRateのLEDキットや背面パドルをFireBirdで使用することも可能です。
背面パドルとFireBirdのボタンLED制御を同時に使用することは基本的にできませんが、ここに関しては将来的に対応を検討しています。

ABXYボタンのマウスクリック化対応

ボタン基板にマウスクリック用のパッドを配置しているため、GCコン改造でよくある(?)ABXYボタンマウスクリック化を行うことが可能です。
ボタンの加工は少し大変だと思います。

ハードワイヤリング対応

コネクタに負荷を掛けたり激しい動きを続けたりした際にコネクタの接点部分が劣化し、接続切れという症状が発生する場合があります。
こちらはアルコール洗浄で一時的に改善することが殆どですが、同じような使い方を続けていれば再度発生してしまうため、根本的な解決は困難です。
この場合、基板とUSBケーブルを直接接続する「ハードワイヤリング」という改造を施すことでこの問題を解決することができます。

トーナメントモード

+/-/ホーム/キャプチャ/十字キーの無効化を行う機能です。
ホームボタン長押しでトーナメントモードのON/OFFが切り替え可能です。



ファームウェア書き込み

既にファームウェアが書き込まれている場合、ツール側で最新ファームウェアへの自動更新が可能です。
そのため、下記手順は主に旧ファームウェアを使用したい方向けの説明となります。

左スティックを押し込みながらPCに接続すると『RPI-RP2』というドライブが認識されます。
ここに『FireBird vX.XX.uf2』(X.XXの部分はバージョンによって異なります)という名前のファイルをドラッグ&ドロップ等で書き込むとコントローラーとして再接続されます。

ドライブ認識時は基本的に新しいウィンドウが立ち上がりますが、ウィンドウが出てこない場合はエクスプローラーのドライブ一覧から直接開いて書き込んでください。


よくある質問

スティックの遊びが大きい、ジャリジャリする

Gulikitスティックを使用した古い基板の場合、使用による劣化でそのような症状が発生することが多いです。
こちらはスティックボックスを変更することで解決が見込めます。

スリープの解除、本体の起動ができません。

これらの機能は純正プロコンに使用されている無線ICの固有機能なのでFireBirdでは機能しません。

ABXY、十字キーが硬いです。

完成品を購入した場合に使用されているラバーパッドが純正品でないと感触が変わる場合があります。
殆どは純正品より硬く、よりクリック感の強い押し感になるので違和感を感じた際は購入元のショップ等に相談した方が良いかもしれません。
自分で分解ができる場合は純正品に交換してしまうのも選択肢に入ります。

スティックが正常に動作しません。(動かない、ドリフトする、操作が反転するなど)

スティックのキャリブレーションがされていない初期状態では正常に動作しないため、組み立て後にPCツールを使用してキャリブレーションを行って下さい。

使用中、接続が切れてしまうことがあります。

USBポートの劣化・汚れが原因です。
接点洗浄剤を吹き付けるか、それでも改善しない場合はハードワイヤリングを検討してください。
ポートの劣化は使用環境や操作方法等に強く依存するため、基板買い換えで解決を図るのは推奨しません。(恐らくすぐに再発してしまうかと思われます)

こちらは現状報告がないため断定はできませんが、ハードワイヤリングをしていても問題が起こる場合はドックのUSBポート側が原因である可能性が高いです。
もし異常な頻度で接続が切れる(1分も接続が維持できない、など)場合は他の原因も考えられるため、ハードワイヤリングを施工したショップ等に一度見て頂いた方がよろしいかもしれません。

USB接続で遅延は発生しませんか?

発生しません。

純正有線プロコンに遅延が入ることから、USB接続=遅延があると考えている方が一定数いますが、これは厳密には異なります。
遅延の原因はコントローラー内部でキー入力情報を取得してから送信するまでの処理にあり、純正プロコンの場合はここで1Fの遅延が生じています。
純正プロコンはキー入力情報の取得を含むほぼ全ての処理を無線チップで行っており、有線接続時のみUSB通信処理を別のチップで行う仕様となっています。

そのため、無線チップからUSB通信用のチップにキー入力情報などを送信する必要があり、ここで1Fの遅延が生じているという訳です。
USB通信処理を含む全ての処理を1つのチップで行っているFireBirdでは上記問題は発生しません。

+/-/ホーム/キャプチャ/十字キーが反応しません。

トーナメントモードに切り替わっている可能性があります。
ホームボタンを3秒間長押しすることでこの機能のON/OFFを切り替えることが可能です。

また、トーナメントモードが有効になっているかどうかはプレイヤーランプが点滅しているかどうかを確認すると分かります。(有効時は点滅します)

ファームウェアの書き込みができません。

何もボタンを押さずにPCやSwitchに接続してコントローラーが認識されるのであれば、ファームウェアの書き込みは成功しています。
ブートローダーのストレージに書き込んだファイルが再接続時に見えないのは仕様です。

FC/SFCに繋げた際にフリーズすることがあります。

一部のゲームではコントローラー抜き差し時に挙動が不安定になることがあります。(SFCでは再現できていませんが、画面に一瞬ノイズが入ることがありました)
ゲーム中にコントローラーの抜き差しは行わないようにしてください。

N64に繋げた際に認識しないことがあります。

ゲームによっては起動時にコントローラーを認識しないケースがあることを確認しています。
その場合は本体のリセットボタンを押してください。

GCコン接続タップで繋げるのとUSB接続はどちらが良いですか?

通常のUSB接続の方が良いです。
GC用のRETRO-CケーブルはGC/Wiiなどでの使用を想定しています。
Switchでも使用は可能ですが、理論上は直接のUSB接続の方が遅延が少なくなります。(体感できるほどの差ではないと思います)

有線接続ができません。

バイスモードが「Proコントローラー」になっている場合、Switch本体設定から「Proコントローラーの有線通信」をONにする必要があります。

もし大会などで不特定多数の本体に繋げて使用する場合は、デバイスモードを「DirectInput」として接続し、振動を使用する場合のみSwitch本体の設定を切り替えてから再度Proコントローラーとして接続することを推奨します。

特定のデバイスモードでの接続は以下の操作で行えます。

DirectInput
Bボタンを押しながらUSB接続

Proコントローラー
Aボタンを押しながらUSB接続

また、上記操作時にHOMEボタンを同時押しすることで根本的なデバイスモード設定を切り替えることが可能です。
設定切り替え後は何も押さずに接続した場合であっても設定したデバイスモードで接続されます。

無線接続ができません。

有線接続のみに対応したコントローラーとなるため、無線接続はできません。
また、今後無線接続に対応する予定もありません。
ProGCCの無線接続対応版が出ていることから気になっている方も多いかと思いますが、現状では充電が2-3時間ほどで切れてしまう、技適違反の無線チップが採用されているといった問題点があります。
後者に関しては工事設計認証を取ることで解決できますが、消費電力が純正プロコンの容量に見合わない問題は残るため、費用に見合う機能と言えるかは怪しい所です。

PS5用タイトルでも使いたいです。

現段階でPS5用の通信プロトコルを実装する予定はありません。
実装しても更新で使い物にならなくなる可能性があるため、対応優先度はかなり低めになると思います。
どうしても使用したい場合はコンバータ類の導入を推奨します。

おまけ

LRボタンのマウスクリック化に関しての質問が最近増えてきたので、私が製作する際に使用していたデータを置いておきます。
プリントしたプラグをLRボタン裏の穴に差し込んで使用します。
使用するプリンターやフィラメント等の相性によっては上手くいかない可能性もありますが、その辺は上手く調整して使ってください。
https://bzl-web.com/file/3d/firebird_d2ls_lr.stl

ABXYボタンのマウスクリック化に関してはボタンの高さをどうするか、遊びをなくすかどうかによって手順が結構変わってきます。
ボタン側の大幅な削り加工が必要になるケースもあるので、こちらに関しては気合でなんとかしましょう。

【Nintendo Switch】格安マイコンCH552でポケモンの自動化をしてみたい話

この記事は、Pokémon Past Generation Advent Calendar 2022 12月25日の記事です。
ポケモンの自動化と言っていますが、ポケモンの話は殆どしていません...。
adventar.org

概要



先月発売されたポケットモンスタースカーレット/バイオレット(以下SV)において、一部の海外勢によって早速解析が行われたものの、とある理由により乱数調整が基本的にほぼ不可能であることが確認されました。
www.reddit.com

まあ正直こうなることはある程度予想できたので、SVでは自動化による作業効率化が流行るのかな~と発売前から考えていました。
PCからSwitchを自動化するのが一番楽だと考えていますが、機材を整えるのが結構面倒です。
Bluetoothドングルを使用して自動化することも可能ですが、環境によって遅延やペアリング不可等の症状が発生する場合があったり、最近出回っているドングルの多くはそもそも対応していなかったりと少し問題が多かったので、今回は有線の環境にも目を向けることにしました。
その為、自分でマイコン+シリアル変換モジュールを実装した有線通信用の基板を作ってみようかと思い付きました。

採用するマイコンについて調べる



Amazonでなんとなくマイコンの価格を調べた所、昔1000円くらいで買えたはずの互換ボードが3倍以上に値上がりしていることが判明。

400円程度で買えたProMicro互換ボードも約1400円という有様でした。

調べた所、そもそも使用されているチップの供給が安定しておらず、チップ自体の価格が高騰しているような状態でした。
ATmega系のマイコンは殆どが供給が安定しておらず、元々原価ギリギリで売っていたような互換ボードはチップの高騰に合わせて値段を上げざるを得なくなったようです。
発売から結構な年月が経っているのもあって、そもそも価格や供給が今後安定するのかどうかもよく分かりません。
実際、製品に使用するマイコンチップをATmega系マイコンから他のものに乗り換えたという話も聞く中で、新たに作るものにこれを採用するのはちょっと無いなという感じです。
某中華通販サイトでチップ単体購入すると偽物ばかり届くという情報もあった為、できることなら代替品となり得るマイコンを見つけておきたいと考えました。
その中で候補となったのは以下の2つです。

Raspberry Pi Pico (RP2040)

最近電子工作界隈でよく見掛けるマイコンボードです。
ProMicro互換品以下の価格でチップ自体の供給もかなり安定している為、用途によってはこちらに乗り換えていくことも可能そうです。
おまけに価格の割にチップの性能が異様に高いです。
等速で動作するGBエミュレータ等も作れるくらいには高性能なマイコンです。
Switch自動化程度であればそこまでチップの性能は必要としないので、少々オーバースペックなのは否めません。
Raspberry Pi Pico — スイッチサイエンス

CH552

Raspberry Pi Picoと同時期くらいに中国で発売された怪しいマイコンです。
新しめの中華製品等を分解すると時々見掛けます。
現在購入できるUSBマイコンの中ではぶっちぎりでチップの価格が安いです。
供給されている数も他のマイコンより圧倒的に多いようなのですが、国内ではこちらを使用しているボードを販売している所が殆どありません。
私がこのマイコンを調べ始めた時点ではスイッチサイエンスで個人の受託販売品が扱われているのみでした。
ProMicroCH552 — スイッチサイエンス

開発ボードが少ないという点でCH552は少し敷居が高いように感じましたが、元々自分で基板を作る予定だったのでプログラムさえ一度出来上がってしまえばあまり関係がありません。
PCからマイコン経由で操作する場合、マイコンは中継器でしかないので一度決められたプログラムを書き込んでしまえばそれ以降は何も弄る必要がないのです。
国内で買う場合でもそこまで高くはなかったので、ダメ元で上記のProMicroCH552を購入しました。

商品の到着後、早速プログラムを書いてみた所...


ものの1時間程度で実際に動くものができてしまいました。
チップの価格がちょっとあり得ないので正直あまり期待はしていなかったのですが、シリアル通信等色々検証してみても今まで使ってきたマイコンと同等の役割は果たせそうだった為、設計する基板にはこちらのチップを採用することに決めました。

シリアル変換ICを選定する



次はシリアル通信を行うチップの選定についてです。
現在出回っているシリアル変換ICは大体以下の3つです。

FT232RL

FTDI製のシリアル変換ICです。
発売されたのが15年くらい前だったりするので実は滅茶苦茶古いICです。
チップの供給がどうなっているのかは不明ですが、単価は発売当時よりかなり上がっているようです。(多分10倍くらい)
偽物が大量に出回っているので、現在これを採用するメリットは皆無です。
FTDI製に拘る場合はもう少し新しい製品を採用した方が絶対良いですね。
また、Amazonで販売されているシリアル変換モジュールでこれが採用されているものはほぼ偽物が使用されていると考えた方が良いです。
明らかに高価なものに関しては本物が使用されているかもしれませんが、購入する際は自己責任でお願いします。

CP2102N

シリアル変換モジュールで調べるとこちらが使用されている製品も多いです。
こちらに関しては偽物はほぼ見掛けませんね。
Amazonでシリアル変換モジュールを探す場合の安定択だと勝手に考えています。

CH340

CH552と同じメーカーから発売されているシリアル変換ICです。
安物のArduino Uno互換品(自動化には使用不可)で使われているので少しマイナスイメージがありそうですが、性能自体には問題ありません。
こちらが採用されたシリアル変換モジュールもAmazonや某中華通販サイト等で結構見掛けます。
モジュールでの価格はCP2102Nと同じくらいですが、チップ自体の価格はこっちの方が安いです。
価格が安く、外付け部品も殆どいらない上にマイコンとメーカーを揃えるのが少し面白そうなのでこちらを採用することにしました。

基板を設計してみる



実際に動作するプログラムさえできてしまえば後は適当に回路を書いて基板と部品を発注するだけです。
所詮はデジタル回路なのでノイズだとかそこら辺はそこまで考えずに組んでしまっても普通に動作するはずです。

そんな感じで発注したものが届いたら組み立てて動作確認を行います。
あっさりと書いていますが基板や部品が到着するまでに結構な時間が掛かってます...。

調子に乗って3Dプリンタでケースも作ってみました。
3Dモデリングは1度も触ったことがありませんでしたが、意外と簡単に作れて良かったです。(小並感)

公開したプログラム・基板


NX Macro Controller / Poke-Controller用ファームウェア

名前の通りです。
CH552-SERIALとかそこら辺に書き込んで使います。
github.com

CH552用Nintendo Switch自動化ライブラリ

NintendoSwitchControllみたいな記法でマクロを書けるライブラリです。(完全な互換性はありません...。)
github.com

CH552-SERIAL

CH552とシリアル変換モジュールを合体させた基板です。
これとダイソーとかに売ってるType-Cケーブルがあれば簡単に自動化ができます。
bzl.booth.pm

CH552-MCU

CH552単体の基板です。
CH552搭載基板はタクトスイッチを押しながらUSB接続を要求するものが多いですが、何度もやってると指が痛くなるのでスライドスイッチに変更したものを作りました。
USBデバイスエミュレートのプログラム開発時のデバッグ用基板として意外と使えました。
booth.pm

あとがき



ここまで読んでくださってありがとうございました。
SVでは乱数調整が難しそうなので、自動化の方面に力を入れて何かできたらなと考えています。
取り敢えずは昔公開したNX Macro Controllerの機能拡張とかそこら辺をメインに頑張っていきたいですね。
Poke-Controller用に書かれたPythonプログラムの実行、変数・IF文等の追加やC#スクリプトの実行機能等、考えていることは結構ありますが時間の確保が中々難しいです。
年末年始で一気に作業を進めて更新ができたら嬉しいですね。

また、CH552でプロコン+キーボードのエミュレートが可能ということも確認できている為、諸々検証を進めて問題がなさそうであればそちらも更新したいです。
振動検知等は現状無線でしかできなかった為、有線でもそれができるようになるかもしれません。(後はコントローラーの色の変更)

以上で今年のAdvent Calendarは終了です!
皆様、良いお年をお過ごしください。

【Nintendo Switch 自動化】画像認識を使用したマクロ実行環境の構築

私の製作したマイコンボードCH552-SERIALを使用して、NX Macro ControllerやPoke-Controllerの実行環境を構築する為のガイドです。
従来のマイコンとシリアル変換モジュールを配線する方法より多分安価で簡単です。
ハード側の環境構築のみになりますので、各種ソフトのインストール等はそのソフトのガイドを参照してください。

必要なもの


プログラムの書き込み



こちらから「CH55xSwitchSerialControl.ino.hex」をダウンロードします。
github.com

こちらからWCHISPToolをダウンロードします。
最新版でUIが大幅に変更されましたが、動作が不安定なので旧verのダウンロードリンクを載せています。
Download

「WCHISPTool_Setup.exe」を起動し、WCHISPToolをインストールして起動します。
また、起動後は画像の通りに設定を変更します。
「User File」は先程ダウンロードした「CH55xSwitchSerialControl.ino.hex」を参照するようにしてください。

CH552-SERIAL基板上のスイッチを押しながらType-Aオス端子側をPCに接続します。

WCHISPTool側に「MCU mode:CH552」といった表示がされたら、その下のDownloadボタンを押します。
特にエラーが出なければ書き込みは成功です。

以上の手順でNX Macro ControllerやPoke-ControllerでのSwitch自動化に使用できるマイコンが作成できます。
CH552-SERIALのType-Cメス端子とPCを接続し、Type-A端子をSwitchに接続すれば配線は完了です。

使用する自動化ツールのガイドに合わせてPC側の設定を行い、Switch側での動作が確認できれば導入は成功です。

【ポケモンBDSP】LCG in 2021【日替わり乱数】

この記事はPokémon Past Generation Advent Calender 2021 3日目の記事です。
adventar.org

あと固定乱数とは全く関係のない内容になっていますので悪しからず。

概要



先月発売されたポケットモンスターブリリアントダイヤモンド/シャイニングパール(以下BDSP)にて、発売前の解析によりグローバルPRNGにXorshift128(Unity標準関数)、ローカルPRNGにXoroshiro128+が使用されていることが分かっていたが、その後の解析により日替わりseedの遷移に64bitのLCGが使用されていることが判明した。
この日替わりseedは原作のDPと同様にIDくじ、大量発生の種族、ヒンバスの釣れるマス等に使用されているため、何らかの手段で逆算ができればそれらのランダム要素の予測が可能となる。

また、この調査はBDSPver1.0.0のROMデータ解析により行っている。
私が最後に確認したver1.1.1の時点では計算内容の再現が取れたが、先日のアップデート(ver1.1.2)で何かしらの修正が入っている可能性がある。

追記(2021/12/23)
ver1.1.3にて当該処理の修正が行われた。
seedの更新処理等は変更されていないが、IDの決定処理のみ以下のように修正されている。
これにより、1つのIDから未来のIDを予測することはできなくなったが、32bitの日替わりseedの予測が容易となった。
以前のバージョンまでは6日分の大量発生の情報が必要だったが、この修正により2日分のIDくじの結果で絞り込めるようになっている。
また、この計算処理の仕様上IDの下位5桁が00000-48575の場合は他のIDより1.1倍程くじに当選しやすい。

// くじ当たり番号の決定
void FieldLotteryWork__UpdateNumber(int64_t days)
{
	// 前後省略
	uint seed = RandomGroupWork__GetDefaultRandom();
	seed = seed * 0x41c64e6d + 0x3039;
	
	// くじ当たり番号の決定
	int WinningNumber = (seed >> 0xC) % 100000;
}

LCGのよくない実装



この予測についてだが、IDくじとヒンバスの釣れるマスについてはIDくじの結果を1度確認するだけで可能となってしまう。
これを可能とする原因箇所は以下の通りである。

// 日替わりseed更新
void RandomGroupWork__Update(int64_t days)
{
	// 前後省略
	ulong seed = PlayerWork__get_RandomGroup();
	for (int i = days; i > 0; i--)
	{
		seed = seed * 0x6c078965 + 1;
	}
}

// くじ当たり番号の決定
void FieldLotteryWork__UpdateNumber(int64_t days)
{
	// 前後省略
	uint seed = RandomGroupWork__GetDefaultRandom();
	seed = seed * 0x41c64e6d + 0x3039;
	
	// くじ当たり番号の決定
	int WinningNumber = seed & 0xFFFF;
}

勘のいい方は気付いたかもしれないが、DPPtとほぼ同じである。
ヒンバスタイルの決定処理は長くなりそうなので省くが、こちらもDPPtとほぼ同じ決定処理だった。
但し、IDくじ当たり番号の決定処理については原作と少し異なっている。
原作では32bitのseed値上位16bitを使用していたのに対し、今作は下位16bitを使用してしまっている。カルドセプトサーガ
これによりどのような問題が発生するかと言うと、IDくじに限り実質的に16bitのLCGとなる上にその内部状態が1つの結果を確認した時点で完全にリークしてしまうことになる。
また、この使い方ではLCGの性質上取られる値に規則性が生まれてしまう為、そもそも乱数として成り立っていない。(1日毎にIDの偶奇が変わる、等)
1度のくじ結果確認で未来予測が可能となる理由については以上の通りである。

Xoroshiro128の初項(64bit)に32bitの値入れてたりする辺りILCAが自前で実装した乱数生成器は大概何かしらの問題を抱えてる気がする

IDくじのバグ



また、そもそものIDくじの挙動にも問題がある。
BDSPではトレーナーIDが6桁(000000-999999)の値となる為、5桁でIDを取得するにしても00000-99999の範囲が得られなければならない。
しかし、BDSPの実装では0x0000-0xFFFF(00000-65535)までの値しか取得できない仕様となる為、34464通りのIDが完全に無視されることとなる。
更に、IDの比較処理にもバグがあり、6桁IDの内下位5桁しかチェックされていない。
その為、上位5桁が完全に一致しているポケモンを所持していたとしても以下の挙動になる。




おいふざけんな
剣盾のIDくじの仕様調べてみたら仕様通りらしい、謹んでお詫び申し上げます

つまり、6桁ID下位5桁が65536以上の人は一生掛かってもくじに当選しないこととなる。(修正アプデが入らなければ)

各種要素の未来予測



計算用のツールを作成したのでそちらを適当に触って欲しい。
ファイル置き場 - チラ裏雑記帳
IDくじの結果とヒンバスの釣れるマスについては1度のくじ結果確認により予測できるようになる。
大量発生の予測には日替わりseed下位32bitの特定が必要となる。
これはIDくじの結果と6日分の大量発生の内容の記録によって可能。





くじの結果からヒンバスタイルを予測した場合、緑のマスか赤のマスのどちらかが対象のタイルとなる。

また、大湿原の出現ポケモン決定や地下大洞窟の道具交換にも日替わりseedが使用されている。
但しこちらは乱数値の32bitキャストを行わずに計算している為、今回は対応しなかった。

終わりに



ここまで読んでくださってありがとうございました。
まさか最新作でこんな内容の乱数調整(?)ができるとは思っていませんでした。
今回の日替わり乱数とは別にBDSP固定乱数、SWSH野生シンボル乱数も本体改造無しで出来ることが分かったのでそちらのツール制作/調査も進めたいなと思います。

4日目は剣心氏による4gen捕獲チュートリアルです。

【カスタムGBA】電子工作初心者がGBAを組んでみた話【名取さなEdition】

はじめに

強いGBA、欲しいですよね。
マイコン内蔵のGBAは過去に組んだのですが、ボタンの押し感が悪かったり加工が雑だったりとお世辞にもクオリティの高いモノとは言えませんでした。
機能面だけ見たらこれに相当するものは中々無いはずですが個人的にはまあ微妙でした。


マイコンなんかよりマジコンの方が普段から使いまくるのでそっちを内蔵してしまう方がいいのでは?と考えた訳です。
しかし、どう考えても配線がヤバいことになる気しかしないので二の足を踏んでいました。
電子工作は全くの専門外なので中々手こずりそうです。

後はカラーリングが全く思い付かなかったのもあります。
というかそっちの方が圧倒的に大きいです。

何だかんだカラーの候補が絞れてきて、グレー統一にするかかクリア統一にするかで迷っていた所、机の上にあるフィギュアが目に留まりました。
f:id:BZL:20210803003943j:plain
………これや!
そんな訳で名取さなEditionなるGBAを組むこととなりました。(なんで?)
機能としては先に紹介したGBAのものに加えてEzFlashΩを内蔵する感じになります。
また、FunnyPlaying(IPS液晶出してるメーカー)が新しい液晶キットの取り扱いを始めたのでそちらの検証も兼ねてます。
制作過程の写真は殆どないので悪しからず。
普通に組み込んだパーツ類は個別紹介しておきます。

液晶

f:id:BZL:20210803004011j:plain
FunnyPlayingの『ITA NEW AGB TFT BACKLIGHT KIT』を使用しました。
DSiの下画面をGBAに移植するキットみたいです。
私が買った時はセールか何かで2500円くらいで買えちゃいました。
おまけに送料無料です。

国内で買ってる人あまり見ないので簡易レビュー的なものも書いておきます。

液晶の質について

発色はIPSキットと比較してもかなり綺麗でした。
スケーリング無しで表示されるので映り方はDSLiteとかAGS101みたいな感じです。
また、画面サイズもAGS101と同じなのでIPS用のガラスレンズは合わないです。
映り方も画面サイズも全然違うのでIPSキットの進化系ではなく新たな選択肢として見るのが適切ですね。
人によってはIPSキットの方がいいやと感じるかもしれません。
個人的にはITAキットの方が好みです。

DSiの下画面液晶が使えるということで、使える液晶の種類は思ったより多いです。(互換品にも色々種類があるらしい)
ただ、モノによっては相性問題で上手く映らなかったりするみたいです。
綺麗な状態の純正液晶が手元にあったので接続してみましたが、発色は付属の互換液晶の方が普通に綺麗です。
その為、液晶が基板に貼り付けられて送られてきたら基本弄らない方がいいです。
因みに私は基板に貼り付いた液晶剥がそうとしてフレキ基板にキズ入れました。

消費電力

公式サイトでは消費電力0.15Wとか書いてありますが実際の所そんなに低くないです。
IPSよりちょっと低いくらいなので省電力化を目的に組み込むことは推奨しません。
液晶変えてもほぼ変わらなかったので恐らくは基板側で電力食ってそうな気がします。

2021/08/22 追記
追加でITAキットを購入した所、基板に変更が加えられていました。
回路自体の変更に加え、輝度調節用のパッドに印字されている文字が若干見やすくなっていたりします。
また、消費電力がIPSキットの半分程度にまで下がっていました。

輝度調節

1chip液晶モジュールでお馴染み(?)のタッチ式輝度調節が使われてます。
個人的には好きじゃないので無効化しました。
画像の緑丸で囲った部分をGBA側のGNDと繋げればOKです。
f:id:BZL:20210802211251p:plain
一応IPSキットと同じ方式での輝度調節も可能です。

他Modとの相性とか

クロックアップとの相性は良くないです。
画面がかなり荒ぶるので推奨はしません。
手持ちの互換品/純正品全て試しましたが同じような挙動になりました。
f:id:BZL:20210803021654j:plain
また、全体的にデカいので今回のような機能盛りGBAには向きません。
サイズ的にはIPSキットが何だかんだ一番扱いやすいのかな...と思います。

シェル

こちらもFunnyPlayingのものを使用しました。
前面はライトピンク、背面はベージュを使っています。

IPS液晶は無加工で入りますが、ITAキットの場合はそこそこの範囲をカットする必要があります。
ITA対応の金型が出来ているらしいのでこの作業はその内不要になりそうです。
f:id:BZL:20210803004204j:plain

RetroSixシェルにITAキットを導入する場合は画像の赤枠部分をカットします。
ちゃんと検証してる訳ではないので位置が合うかどうかは知りません。
f:id:BZL:20210803205646j:plain

ボタン

今回は白とピンクの組み合わせにしました。
色がそれっぽければ何でも良かったので昔買った中華ボタンを適当に使いました。

ラバー

昔RetroModdingで組んで貰ったGBAのボタンの感度が良かったのでこっちはまあまあ拘りました。
Start/SelectはRetroModding、AB/十字はCloudGameStoreのものを使っています。
AB/十字に関しては純正品もかなり良いです。
残念ながら私の手元にある純正ラバーは全部劣化してました。

ラバーを取り付ける前に裏面の接点部分を洗浄すると若干感度が良くなります。
リレークリーナーを吹き付けてから綿棒で適当に擦る感じです。
新品であっても結構汚れ(?)が付着しているみたいです。
f:id:BZL:20210803004232j:plain

サウンドモジュール

アンプ

RetroModdingで購入したものを使用しました。
注意点として、公式サイトで紹介されている配線方法では電源ラインの取り方に問題があります。
公式サイトの通りに導入した場合、電池の電圧降下によりアンプの最低駆動電圧を満たさなくなってしまうケースが発生します。
その為、電池残量が少なくなると音声にノイズが乗ったり音が出なくなったりします。
今回は以下の画像の通りに配線しました。
f:id:BZL:20210802220405p:plain

スピーカー

丁度東京の方に用事があったので秋葉原に寄るついでに23mmスピーカーを買ってみました。
付属スピーカーより高域の発音が若干綺麗に聞こえます。
また、サランネットが付いていたりと質感も結構良い感じでした。
f:id:BZL:20210803004310j:plain
f:id:BZL:20210803004317j:plain

組み立て

地獄の作業の始まりです。

仕様策定

まずはどんな仕様のGBAにするか予め決めておきます。
今回組むものは以下の通りとします。

  1. ITA液晶キット実装
  2. 輝度調節は外付けしたボタンで行うようにする
  3. 電源ランプのカラー変更
  4. サウンドモジュール実装
  5. ワイヤレスアダプタを内蔵、外部スイッチでON/OFFの切り替え
  6. クロックアップ実装、外部スイッチで等速/倍速の切り替え
  7. 外部接続端子は1ポートのUSB TypeC
  8. MicroSDカードスロットをUSB端子の隣に配置
  9. 充電式バッテリーを使用、充電はUSBで行う
  10. マイコン(ProMicro)を内蔵、PC経由での操作を可能とする
  11. SDカードを挿した上でUSB接続することによりSDカードリーダーとしても機能する
  12. カートリッジが何も挿入されていない時に内蔵EzFlashが起動するようにする
  13. 内蔵EzFlashはMicroSDカードスロットに繋げる
  14. 干渉防止の為、GBA起動時はSDカードリーダーの機能を停止する


………本当に組めるのこれ?

シェル加工

どう考えても普通に閉まる配線ができる訳ないので先に中をスカスカにしておきます。
電池Boxなんかは跡形も残さず切り落とします。
f:id:BZL:20210803004609j:plain

また、お馴染みUSB-Cポートの穴開けに加えてSDカードスロットの穴も開けておきます。
f:id:BZL:20210803004617j:plain

クロックアップ/ワイヤレスアダプタ用のスイッチも取り付けます。
f:id:BZL:20210803004624j:plain

取り敢えず大掛かりな所は以上となります。
後は配線が干渉した時にチマチマニッパーで切り落とせばいいと思います。

ボタン加工

ボタン加工ってなんだよって思われるかもしれませんがそのまんまの意味です。
輝度調節ボタンを外付けする為、バンパーに穴を開けます。
今回はゲームボーイミクロに合わせて右側のバンパーを加工しました。
f:id:BZL:20210803004633j:plain
既に色々付いちゃってますがこんな感じです。
因みに追加したボタンと基板は白のDSiから移植したものです。
音量調節ボタンがかなり丁度良さそうだったので使ってみたら結構ピッタリでした。

f:id:BZL:20210803004640j:plain
裏面はこんな感じで残してあります。
全部くり抜いてしまうと基板を押さえるものが無くなってしまうので逆に面倒な感じになります。
どちらにせよ結構大変なのでもうやりたくないですね...

電源ランプ変更

f:id:BZL:20210803004650j:plain
緑ランプを白に変更してみました。
ただ変えるだけだと光量が強すぎて目が痛くなりそうなのでLEDに挟む抵抗値を変更します。

f:id:BZL:20210803004708p:plain
画像で示したR10の抵抗を変更します。
白のLEDだと20KΩくらいが丁度良かった気がします。

ワイヤレスアダプタ内蔵

お馴染みのやつですね。
gaito0826.hatenablog.com
がいと氏の記事に大体書いてあるのでそちらを参考にどうぞ。

可変クロックアップ

これもお馴染みのやつです。

f:id:BZL:20210803004736j:plain
元々あったパッドを流用し、パターンカットを利用して基板上に実装する形にしてみました。
水晶の隣にICが置いてあるタイプの基板では難しいやり方かもしれません...

マイコン内蔵

これは多分お馴染みじゃないやつですね。
今回はトランジスタアレイを使用し、マイコンの出力信号に合わせてTP-GND間を導通させるようにしました。
これにより、PCからGBAを操作できるようになります。
自動操作以外にも色々できることがあると思うのでそこら辺は自分で色々試してみてください。
フルカラーLEDの制御とか結構面白いと思いますよ。

輝度調節ボタン

今回使用した液晶モジュールはITAキットですが、こちらもIPSキットと同様にSEL/L/Rポイントの3つが存在します。
この3つの内、SELポイントをGNDに直結し、L/Rポイントを先程加工したバンパーへ接続します。
液晶モジュール側では常にSELECTが押されている扱いとなる為、残るL/R入力信号が入ってきた時点で輝度が変更されます。
ボタンのどこにハンダ付けするかは使用するボタンによって変わるので色々試してみてください。

USB機器周りの配線準備

使ったもの
USB-Cコネクタ
MicroSDカードスロット
マイコン(ProMicro)
TP4056モジュール
1300mAhバッテリー:
1000mAhバッテリー(今回は未使用)
SDカードリーダー
USBハブ
EzFlashΩ
マイクロスイッチ

SDカードリーダーとUSBハブはダイソーに小型のものがあるらしいです。
私は見つけられなかったのでAmazonでそれっぽいのものを買いました...
カードリーダーとUSBハブは当然既製品なのでまず分解します。
f:id:BZL:20210803004751j:plain
f:id:BZL:20210803004757j:plain
SDカードリーダーは期待通りのサイズでした。
分解は容易で、基板も薄くて非常に扱いやすそうです。

f:id:BZL:20210803004805j:plain
f:id:BZL:20210803004811j:plain
USBハブの方の分解はかなり大変でした。
基板がグルーで完全にコーティングされていたのでまずはそれを全て剥がす必要があります。
ハンダごてを当てて無理矢理溶かしたので部屋が身体に悪そうな臭いで充満しました。
また、2分岐の割に基板がまあまあ大きいのであまり嬉しくないです。
そもそもこの基板自体4分岐用に見えます。
コンデンサ追加すれば更にポート拡張できそう?
どちらにせよ同じようなことがやりたい方はもう少し小さい2分岐ハブ探した方がいいかもしれません。

USB機器の接続

f:id:BZL:20210803004822j:plain
f:id:BZL:20210803004828j:plain
f:id:BZL:20210803222158j:plain
完全にすっ飛ばしました。
反省はしていません。
途中経過の画像なので未配線だったり上手く動いてない箇所が結構あります。
参考にはしないでください。

f:id:BZL:20210803004836p:plain
超雑ですが配線図はこんなんです。
コレ見て何をどこに繋げるのか微塵も分からないって人は多分真似しない方がいいと思います。
GBAマイコン間の接続はやりたいことに合わせて各自適当に変えてみてください。
マイコンいらないよって人はそもそもUSBハブもいらないのでカードリーダーに直結してしまって問題ないです。
注意点として、SDカードへの電源ラインを普通に繋げると上手く動かないので別の所から適当に引っ張ってきてください。
EzFlashへの電源ラインを通すマイクロスイッチはカートリッジが挿入された時にONになるように配置します。
これがちゃんと閉まれば本体側は完成となります。


動かすとこんな感じです。

f:id:BZL:20210803004848j:plain
f:id:BZL:20210803004854j:plain
SDカードリーダーもしっかり機能しています。

外観を整える

中身が完成したので後はガワを整えていきます。
公式素材使えばそこまで手間は掛からんやろ...と思ってましたが公式ガイドラインに以下の記述が。

・当方に帰属する素材(動画や写真、イラスト、音声等)を引用の範囲を超えて利用することを禁止します。

・「名取さなの公式写真や公式イラストを○○に使いたいので許可をください。」
公式のものと誤解される可能性がある為お断りしています。
素材はご自身で用意してください。

規約についてのお問い合わせについては基本的にお答えしかねます。
確認しないとわからないものはだめだと思ってください

………まあ多分使っちゃダメなんだろうなと思います。
久々のお絵描き作業が確定しました。

レンズ

早速デザインを決めます。
f:id:BZL:20210803011002p:plain

作りました。
これを適当に印刷してガラスレンズに貼り付けます。
接着にはゴリラグルークリアを使いました。
一回貼り付いたらデザインナイフで力一杯削らないと取れません。
Retro○ixのUVレンズより強度高くなる気がします。

f:id:BZL:20210803010352j:plain
画像はロゴがズレた失敗作ですが割と綺麗に作れます。
かなり大変ですが...

ぶっちゃけBluish Squirrel辺りに頼む方がいいです。

ステッカー

こっちは普通にイラスト使いたいのでお絵描きします。


普段絵描かない割にはそこそこちゃんと描けた気がします。
これを上手いこと使ってステッカーもデザインします。
f:id:BZL:20210803011405p:plain
できました。
これを適当に印刷してカッティングマシンでそれっぽい形にカットします。

f:id:BZL:20210803011637j:plain
貼りました。(印刷したシートの写真は撮ってませんでした)

こっちもレンズと同様Bluish Squirrelでオーダー可能ですが、プリントが剥がれ落ちるという話も聞くので安定択かどうかは分かりません。
カッティングマシンと良いプリンターを持ってる方は多分自作する方がいいですね。

おわりに


f:id:BZL:20210803012419j:plain
f:id:BZL:20210803012529j:plain
f:id:BZL:20210803012734j:plain
というわけで完成です!
恐らく初めて真面目に組もうと思って組んだGBAですが、中々良い感じの出来になったのではないでしょうか。(自画自賛)
少なくともEzFlash内蔵は他にやっている人を見たことがないので、機能面に関しては十分な水準かと思います。
何だかんだでまともに使えるGBAは昔RetroModdingで組んで貰った個体だけだったりするので実質2台目ですね。

かなり大変だったのでもう二度と組みたくないです。
基板上に生やした配線の数は約100本、ハンダ付けポイントは約220箇所となります。

馬鹿じゃねぇの(嘲笑)
f:id:BZL:20210803013532j:plain

モンスターハンターライズ 護石リセマラ自動化ツール

護石スナイプしてやろうと思ったけどダンプしたコード読むのがめんどくさくなったので代わりに自動化ツール作りました。
取り敢えず当記事ではツールの使い方だけ纏めておこうと思います。
最初の2行書いた時点でかなりめんどくさくなってるのでかなり大雑把な纏めとなりますが悪しからず。

先に言っておきますが自動化ツールである都合上多少の相性問題っぽいのはあるかもしれないです。(操作のラグとかドライバ周りとか)
此方で再現できない問題については基本的に対応見送るので、上手くいったらラッキーくらいに思っておいてください。

注意:
当ツールの動作確認に使用したMHRiseのバージョンは2.0となります。
今後のバージョンでの動作保証は出来かねますのでご了承下さい。

https://drive.google.com/drive/folders/1iMORqLJzt35WOH1e5-2FpvnDm5JzgY-a?usp=sharingdrive.google.com

使い方

0:事前設定

必要なもの:
キャプチャーボード
CSR製チップ内蔵のBluetoothドングル
64bitのWindowsOS

Switch/モンハン側の設定:
[Switch]本体設定->テレビ出力->テレビの解像度 - 1080p
[Switch]本体設定->テレビ出力->RGBレンジ - フル
[Switch]本体設定->テレビ出力->画面の大きさ - 100%
[モンハン]オプション->DISPLAY->明るさ - 50%
[モンハン]オプション->SAVE DATA->オートセーブの設定 - オートセーブしない

1:映像

適当に繋げてるキャプボ選んで接続ボタン押すだけです。

2:無線接続セットアップ

Bluetoothドングルを使用する場合はドライバの置換が必要となります。
接続したBluetoothドングルを選択し、インストールボタンを押すとドライバの置換が完了します。
注意点として、ここでドライバ置換を行ったドングルは他のBluetooth機器との接続には使用できなくなります。
元のドライバに戻す場合はデバイスマネージャーから手動で操作してください。

3:コントローラー接続

Bluetoothドングルを使用する場合はそのままでおk。
マイコンを使用する場合は適切なCOMポートを選択してください。
書き込むhexファイルはNX2用のアレです。
モンハン起動中であればそのまま待っているだけで接続画面に移行するはずです。
接続画面に自動移行しない場合は[ホーム]→[コントローラー]→[持ちかた/順番を変える]の待機画面でも接続可能です。
接続後はPCに接続しているゲームパッドからSwitchの操作が行えます。多分。


4:マクロ

実行したいマクロを選びます。以上。

各マクロの説明

リセマラ厳選

村の中であればどこからでも開始可能です。
錬金に使用する素材は1ページ目から無差別に放り込んでいく感じなので素材に余裕のある方向けです。
検索条件の設定は勘でなんとかしてください。

マクロの内容
 マカ錬金(幽玄)を50個分セット
  ↓
 闘技ラー10周
  ↓
 護石確認
  ↓
 検索条件に設定した護石があればセーブして最初に戻る、無ければセーブせずリセット
  ↓
 護石を1個分セット
  ↓
 闘技ラー1周
  ↓
 護石確認後セーブしてリセット、最初に戻る

テーブル記録用

ほぼ自分用、普通に遊ぶ分には必要ないかも?
ひたすら錬金して出現したおまもりをcsvに記録していくだけのマクロです。
村の中であればどこからでも開始可能です。

マクロの内容
 マカ錬金(幽玄)を50個分セット
  ↓
 闘技ラー10周
  ↓
 護石確認、シートに記録して最初に戻る

所持おまのシート出力

装備Boxを開き、護石のみでフィルタリングしてから1ページ目の左上にカーソルを合わせてからスタートです。
装備Box内の護石を全て読み込んでcsv出力します。
また、ここで出力されたcsvは泣きシミュの護石インポートにそのまま使用可能です。(2021/05/09時点)



最後に

生成と乱数列の遷移が分かれば多分ツール作るので良い感じの情報があったら起こしてください。

関係ないですがNX2の更新と鯖の再起動しておきました。
NX2で作れるレベルのマクロはこっちに追加する気ないので作った人は適当に共有してあげると喜ぶ人がいると思います。

色違いデオキシスゲット!

簡単で
す!
因みにこれを実行するとセーブデータが消えるので注意
まず初めに 以下の記事の通りにバグポケモン0x085Fをゲットする。
bzl.hatenablog.com
以下の通りにボックス名を変更する。
赤字の「ヘ」「ベ」はカタカナです!

ボックス ボックス名
ボックス1 『 みオむけいオぅ』
ボックス2 『アれめつい l』
ボックス3 『9ぇつい9ぇせも』
ボックス4 『アひか…や l』
ボックス5 『コエエシエねミ』
ボックス6 『アねあぃ l』
ボックス7 『ッやコエエシエ』
ボックス8 『アねミァゆ l』
ボックス9 いクスあぃコエ』
ボックス10 『アエシエ l』
ボックス11 『クオ k』

ボックス名を変えた後にバグポケモン0x085Fの様子を見るとソフトが自動でリセットされる。

再開すると警告文が出ますが無視してください。
ボックスを確認するとレベル1の色違いデオキシスがいます。

結果
デオキシスゲット!