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

チラ裏雑記帳

ポケモン過去作の解析とか乱数調整とかそこら辺。不定期更新。

このブログについて

ポケモン第三世代を中心に真偽不明の情報や、作成したツールを纏めたりするブログです。
殆どがROMデータ解析系の記事なのでそれなりの知識がある方向けです。
こちらのコメントはほぼ見てないので、何か聞きたいことがあればTwitterの方に連絡して頂けると内容次第で反応します。

当ブログはリンクフリーです。

 

ポケモン第三世代
 ■ROMハック関連
  ◆CartRAM取扱メモ
  ◆流れ解説

 ■バグ関連
  ◆【Em】任意コード実行
  ◆【LG】任意コード実行
  ◆【Em】バイナリエディタの導入
  ◆【Em】システムハック
  ◆【Em】セーブデータコピー
  ◆【Em】ふしぎなカード捏造【Part1】【Part2】
  ◆【Em】任意コード実行によるROM吸出し

 ■乱数調整
  ◆【Em】ID調整

ポケモン第五世代
 ■乱数調整
  ◆ 【BW/BW2】全28バージョンパラメータ纏め

ポケモン第六世代
 ■乱数調整
  ◆【XY】ID調整
  ◆【ORAS】ID調整

ポケモン第八世代
 ■乱数調整
  ◆レイド柱のSeed特定ツール

◯他ゲー
 ■モンハンライズ
  ◆護石リセマラ自動化ツール

◯ハード関連
 ■GBA
  ◆【HARD-MOD】EzFlash+SDカードリーダー内蔵

 ■Nintendo Switch
  ◆画像認識マクロ作成ツール

◯外部リンク
 ■Twitter
  ◆@_3z8

 ■Mail
  ◆yu_gen_00@yahoo.co.jp

 ■GoogleDrive
  ◆作ったツール纏め

【Nintendo Switch】CH552-SERIALを使用した自動化環境の構築

私の製作したマイコンボードCH552-SERIALを使用して、NX Macro ControllerやPoke-Controllerの実行環境を構築する為のガイドです。
ハード側の環境構築のみになりますので、各種ソフトのインストール等はそのソフトのガイドを参照してください。
前置きがかなり長くなってしまったのでめんどくさかったら飛ばしてください...。

前置き



ポケモン剣盾の発売を皮切りにNintendo Switch(以下Switch)の自動化が流行し、Arduino等のマイコンボードの需要が高くなっています。
しかし、昨今の半導体不足によりArduinoに搭載されているマイコンチップの供給が不安定になり、剣盾発売当時と比較して2-3倍程度価格が高騰している状態です。
Switchの自動化だけでなく、マイコンを使用した電子工作全般に影響が出ているので正直困りますね。
マイコンを使用した製品を作ろうにも原価が跳ね上がりすぎて初期費用で怖じ気づいてしまいます...。

この状況をどうにかすべく、似たような感じの機能で安く買えるマイコンがあればいいなと思って色々と調査してみました。

有名所だとRaspberry Pi Picoで使用されているRP2040が価格の割にとても高性能で魅力的なのですが、外部にフラッシュメモリ水晶振動子が必要な点や、ICのパッケージの都合上手作業でのリフロー時にブリッジが発生しやすいことから手軽に使えるものではないなと思いました。
但し、従来のマイコンチップでは難しい高速処理が行える為、用途によっては充分に選択肢になり得ますね。

また、ESP32というマイコンも人気が高くなってきています。
こちらも価格の割に高性能なマイコンで、無線通信にも対応していて結構面白そうなのですが、Bluetoothを搭載しているという都合上製品での利用は少しハードルが高いなという印象です。

さて、ここ最近の話ですが、半導体不足による様々なICチップの品薄が相次ぎ、手に入りづらくなったICチップの代替品として中国メーカーによる互換ICが出回るようになりました。
マイコンも例外ではなく、STMマイコンの互換品などは結構目にするようになりました。

既存マイコンの互換品が作れるのならオリジナルのマイコンも色々作れるのでは?と思い調べた所、STMマイコンの互換品を作っているWCHというメーカーから、CH552というマイコンが販売されていることを知りました。
USBデバイスの作成やシリアル通信も可能とのことで、Switch自動化においてはこれをそのまま使用できそうだなという結論に至りました。
有志が制作したライブラリを使用することでArduino IDEでの開発も可能というおまけ付きです。
スペック上はこれの廉価版であるCH551でも可能そうですが、ROM領域が少し小さいのでCH552の方を使用しています。
更に上のグレードのCH554やCH559といったマイコンも存在しますが、そちらについては今回は触れません。

必要なもの


プログラムの書き込み



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

こちらからWCHISPToolをダウンロードします。
最新版でUIが大幅に変更されましたが、動作が不安定なので旧verのダウンロードリンクを載せています。
https://cdn.discordapp.com/attachments/671698808140464158/1044979116572680262/WCHISPTool_Setup.exe

"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桁が完全に一致しているポケモンを所持していたとしても以下の挙動になる。

f:id:BZL:20211201021650j:plain
f:id:BZL:20211201021659j:plain
f:id:BZL:20211201021705j:plain
おいふざけんな
剣盾のIDくじの仕様調べてみたら仕様通りらしい、謹んでお詫び申し上げます

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

各種要素の未来予測



計算用のツールを作成したのでそちらを適当に触って欲しい。
drive.google.com
IDくじの結果とヒンバスの釣れるマスについては1度のくじ結果確認により予測できるようになる。
大量発生の予測には日替わりseed下位32bitの特定が必要となる。
これはIDくじの結果と6日分の大量発生の内容の記録によって可能。
f:id:BZL:20211202235451p:plain
f:id:BZL:20211202235459p:plain
f:id:BZL:20211202235505p:plain
f:id:BZL:20211202235511p:plain
f:id:BZL:20211202235516p:plain
くじの結果からヒンバスタイルを予測した場合、緑のマスか赤のマスのどちらかが対象のタイルとなる。

また、大湿原の出現ポケモン決定や地下大洞窟の道具交換にも日替わり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となります。
今後のバージョンでの動作保証は出来かねますのでご了承下さい。

drive.google.com
f:id:BZL:20210509164807p:plain

使い方

0:事前設定

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

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

1:映像

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

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

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

3:コントローラー接続

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

4:マクロ

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

各マクロの説明

リセマラ厳選

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

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

テーブル記録用

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

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

所持おまのシート出力

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

f:id:BZL:20210509170829p:plain
f:id:BZL:20210509171040p:plain

最後に

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

関係ないですが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の色違いデオキシスがいます。

結果
デオキシスゲット!

【Nintendo Switch】予算1500円で画像認識マクロ環境を実現する

この記事はPokémon RNG Advent Calendar 2020 13日目の記事です。
本当は色々細かく書きたかったのですが、リアルが色々忙しくなってしまったので簡潔に纏めます。
(ハック関連のアレソレ?知らんな)

概要



記事名の通りです。
本当にそのまんまなので特に話すことはありません。
以上。

つまり...どういうことだってばよ

1500円程度で用意できる機器と自作ツールで画像認識マクロが使えるようになりました。
具体的には、最近話題の1000円キャプボとそこら辺に売ってるBluetoothドングルの2点セットで環境が整います。
Bluetoothドングルは相性問題があるらしいので運が悪いともう少し高くなってしまうかもしれません...
それでも大抵はマイコンを使用するよりも安上がりなはずです。
記事執筆時点ではAmazonの最安値1399円で機器が揃えられるようです。
安物故出品情報がコロコロ変わる為、ここではURL等の紹介は行いません。
まあ適当に調べれば出てくると思います。

BluetoothってUbuntu入れたりするやつ?準備めんどくさいなぁ

WindowsOS単体で動くようになりました。
設定もツール側のボタンポチポチするだけなので(多分)簡単です。
但し、ドライバの置き換えを行うので他にBluetoothバイスを使用している方には少し向かないかも?

そもそも画像認識マクロとは

キャプボ経由でPCにNSの画面を取り込み、画面内の情報からマクロの内容を分岐させる...といった感じです。
分かりやすい例としては自動色厳選辺りが挙げられますね。

よく分からないので取り敢えずツール触らせてくれ

こちらにうpしておきました。
drive.google.com

以降は普通に解説するだけの内容となります。

使い方



大枠は旧版NX Macro Controllerと変わっていませんが、マクロの書式や細かい仕様等にかなりの変更が加えられています。
大まかには以下の通り。(見落としあるかも)

  • マクロの記述方式をテキストタイプに変更
  • 時間管理をより細かく行えるように変更
  • キーボードの他にゲームコントローラーが使用できるように
  • キーボードの割り当てを変更できるように
  • マイコンを使用した制御の他、Bluetoothによる無線通信に対応

また、作ったマクロデータを簡単に他者と共有する為の手段として、マクロ共有サーバーへの接続が行えるようになっています。
(但し完全に個人での管理なので十分なサポートの提供は難しいと考えてください)
知識0から3日程度で作ったので完全にやっつけ実装ですが、マクロのアップロード/ダウンロード、アップロードされたマクロデータの検索、DL数等に応じた検索結果のソート機能等、必要最低限の機能は多分備わっていると思います。
知らんけど

NSとの接続(Bluetooth)

1. - 「ツール」→「無線接続セットアップ」を選択し、ドライバ置き換え用ダイアログを開く
2. - ドライバを置き換えたいBluetoothドングルを選択し、「インストール」ボタンを押す
3. - インストール完了後にPC再起動
4. - NS側の画面をコントローラのペアリング待機画面にする
5. - 「ツール」→「接続」→「Bluetooth無線接続」を選択する
6. - 暫く待つとNS側に仮想コントローラが認識される
7. - PCに接続したキーボード又はコントローラで操作し、NS側が反応すれば成功

NSとの接続(マイコン)

1. - 「マイコン書き込みファイル」内の.hexファイルから手持ちのマイコンに合ったものを選び、書き込む
2. - PCとNSをマイコン経由で有線接続
3. - 「ツール」→「接続」からマイコンのポートを選択
4. - PCに接続したキーボード又はコントローラで操作し、NS側が反応すれば成功

マクロで使用できるコマンド

後々れどめ辺りにも纏めます
Press
ボタン押下
例:
Press(A, 0.1) - Aボタンを0.1秒押す
Press(A, X, 0.5) - AボタンとXボタンを0.5秒同時押し

Wait
全てのキーを離した上でウェイト
例:
Wait(0.8) - 0.8秒待機

ImgCmp, Not
画像認識分岐
例:
ImgCmp(dummy)
{
Press(A, 0.1) - 画像認識成功時
}
Not
{
Press(B, 0.1) - 画像認識失敗時
}

Snipping
静止画の保存
例:
Snipping(80, 50, 1000, 900) - X座標80,Y座標50を位置を始点として横幅1000,縦幅900でキャプチャ

Loop
指定回数ループ
例:
Loop(5) - 5回ループ
{
...
}

Loop() - 無限ループ
{
...
}

Stop
マクロの終了

開発動機


  • BluetoothによるWindowsOS内でのNS本体制御が何か上手くいってしまったのでそれを使ったツールを作りたかった
  • 旧NX Macro Controllerの設計が色々と適当だったので少し見直しを掛けたかった
  • Webアプリ的なものに手を出してみたかった
  • 昔勉強したDB管理周りの知識を実際のツール制作で使ってみたかった

開発において使用したもの