盛大にやらかして記事がいくつか吹き飛びました。復旧作業中なので表示がおかしい部分が多いかもしれません。

[備忘録] 第8世代における乱数調整のメモ

乱数で第6世代に幽閉されていたディアンシーを受け取ってきた時に第8世代の話も目にしました。
コレは何も分からない状態からあらゆる手段を使い真作色証ヤバチャを捕まえるまでの記録・・・

第8世代における乱数調整

親切な方がネット上にいろいろと記録を残しているので躓いてもだいたいは出てきます。
理屈が分かってしまえば後はその応用な感じでトライアンドエラーですね。

今回やったのはランダムシンボルから出てくる真作ヤバチャを狙うこと。
レイド乱数に関してはノータッチです。(´・ω・`)

自動化の類はガンガン使っていきます。
最初の工程以外で出番があるのと思いましたが大いにありました。
何ならほぼ全ての工程で繰り返し作業になるので大活躍でした。

大まかな流れとしてTSVの特定→固定シンボルで試してみる→ランダムシンボルで試行錯誤


・参考になったページ様

【剣盾乱数調整】野生シンボル乱数調整のやり方【色証乱数】 – めらめら (hatenablog.com)

【剣盾乱数】久しぶりに色証乱数やるときの簡易メモ – 技スペが足りない (hateblo.jp)

三つまたドラパではじめる やさしげなOWRNG(剣盾 色証乱数)|じゃんきー (note.com)

自動化環境を作る

マイコンで簡単な操作をやらせておく的なことは今までもやっていたんですよね。
例えばSVにおける大会金策とか。

それをもう少し発展させたものが今はあるようでPCからアレコレ操作できるとのこと。
キャプボで画面を取り込んで画像認識なんて芸当までできるようだ。
その方面は少しかじっていたので俄然興味が湧いてきてやり始めたというのもありますね。

ソフト関連

・Poke-Controller(-Modified)

導入が少々複雑。
Modified版はbatファイル一つで導入できるので楽ちんです。
先人の記録や配布物が多いのも。

・Nx Macro Controller 2

無線接続やシリアルのセットアップも簡単に。
コードも簡素でとっつきやすく共有サーバーが用意されています。

ポケコンのpyとの互換性もある模様。
ただ一部設定ファイルが分かれているようなものが怪しかったのは入れる場所の問題?
動き出すまでにちょっと間があるのも初見だと躓く要素でしょうか。

両方入れてみましたが私の環境だとNx Macro Controller 2のほうが安定していたのでメインに使っています。
キャプボの相性とかがあるんでしょうかね?


【Nintendo Switch 自動化】画像認識マクロツール NX Macro Controllerの使い方 – チラ裏雑記帳 (bzl-web.com)

Poke-Controller Guide (pokecontroller.info)

GitHub – Moi-poke/Poke-Controller-Modified: Pokemon sword & shild controller using LUFA Project (AVR), serial communication and video capture for the Nintendo Switch.

ハード関連

後々知ったのですがBluetoothのドングルをいじって無線でもできるようです。
そちらのほうが配線がゴチャゴチャしなかったかな。
繊細なマクロを回すに当たっての信頼性はどうなんでしょうかね・・・

CH552-SERIAL

調べてみるとマイコンとシリアルとをジャンパーでと意外とハードルが高そうなことが書かれている。
作ることよりいろいろととっ散らかるのが嫌な私はこの地点で少し悩む。

そんな人(?)の為の救世主があるようで一纏めになったものが販売されています。
コレ1つSwitchドックのUSBに刺してしまえば万事解決ってわけ。

ファームウェアの書き込みにはNx Macro Controller 2の”CH552-SERIALセットアップ“より行いました。
基板上のボタンを押しながらUSBに刺すというのがちょっと怖かったですね。
PCのフロントの端子が妙に硬いもので・・・


CH552-SERIAL – ぼんじりちゃんねる公式ショップ – BOOTH
■概要 中国WCH社の8bitマイコンCH552とUSBシリアル変換チップCH340を搭載したマイコンボードです。 基本的にはUSBデバイスの作成を目的とした仕様にしています。 また、プログラムの制作にはArduinoIDEやSDCC等が使用可能です。 ■使い方 基板上のスイッチを押しながらPCに接続することでブートロ…

【Nintendo Switch 自動化】画像認識を使用したマクロ実行環境の構築 – チラ裏雑記帳 (bzl-web.com)

CH552-Serial 導入手順|poketsv (note.com)

キャプチャーボード

amazonで売られているお値段3桁くらいの格安品。

正直大丈夫なのかと思いましたが同じような用途での実績はあるようです。
用途を考えれば映ればいいの精神で。


Amazon.co.jp: speelity HDMI キャプチャーカード キャプチャーボード USB2.0 1080p 30Hz ゲーム実況 配信 web会議 テレワーク UVC規格 : パソコン・周辺機器

TSV特定

“trainer shiny value”略してTSV。
これが厳密に何かということは詳しい人たちのメモを見よう。

俺は雰囲気で乱数調整をやっている・・・(´・ω・`)

使うツールはぼんじり氏の『NX RNG Tool
私がやった範囲内ではとりあえずコレ1つで全て賄えました。



TSVを求める (pokecontroller.info)

色違いのポケモンに遭う

いきなり「まず色違いのポケモンを出します」というハードルの高さよ。
それがやりたくて乱数調整しようとしているのですが・・・(´・ω・`)

色粘り@固定シンボル

自動的にエンカウントさせて色違いが出るまでパソコンに頑張ってもらいます。

Poke-Controller GuideさんのOWRNG1_Repop128Motionを使わせて頂きました。
私の環境だとホームに戻った後の操作間隔を少し調整が必要でした。
内容的にはエンカウント時の光るエフェクトによるズレを検出しているでいいのかな。
特定の画像が出るまでの時間を見ているというか・・・

事前準備はガイドさんに書かれている通りです。
手持ち4体、先頭ニャイキング、お気に入り登録を利用して先頭マスターボール
せっかくの色違いだがレポートを書く気はないのでマスボは安泰。

乱数入門の定番らしい三つまたヶ原ドラパルトくんで試してみます。
沸き位置をよく確認してから接触→逃走。
沸き位置でキャンプを開き時間変更を行いレポート。
うまくいくと足元から生えてきて即座に戦闘になります。

一晩放っておいて翌朝みると1200回以上は戦っていたようですが稼働中・・・・
次の晩も付けて寝たところ200回辺りで色違いに遭遇していたようだ。


OWRNG1_Repop128Motion (pokecontroller.info)

seedを求める

本来は色違いを捕獲したら直ぐにメニューを開きモーションの測定に入ります。
上のマクロはこの工程まで自動でやってくれる優れものなので朝起きたら終わっていました。

ポケモンの強さを見る画面でL3を押すと物理or特殊のモーションを取ります。
物理を「0」特殊を「1」として128回繰り返しその数字の羅列を利用します。
この作業は今後も頻繁に行うのですが手動だとスティックが壊れるわって思うので配置換えなりを・・・

NX RNG Toolの”剣盾TSV特定“に128ケタの数値と捕獲した色違いの個体値も特定して入力。
うまくいくとTSVが出力されてきます。
複数ある場合は両方使ってみて捕獲した個体を探す形で絞り込めるかな。

NX RNG Toolには画面をキャプして用意されたorした画像を元に自動的に記録する機能も。
デフォルトだとモグリューの画像が入っていますね。
トランセルが速いらしいのですが面倒なのでそのままモグリューを使っています・・・(´・ω・`)


個体値カリキュレーター(ポケモンSV対応)|ポケモン徹底攻略 (yakkun.com)

固定シンボル@ドラパルト

ツールにTSVを入力して準備完了。
試しに色違いを狙ってみます。

ここまでの作業で何となくですが流れを理解できてきました。
128回の儀式で現在位置を特定してそこからお目当ての個体の位置を探す。
見つかったらそこまで乱数を消費してドンピシャで沸かせる。

過去作でもそうでしたが実際はズレに悩まされることが多いです。
今作だと他のシンボルやNPC、天候も大きなズレを生むので最初は晴れが推奨のようだ。
そういった要素を限りなく排除できるので三つまたヶ原は入門向けということでしょうか。

立ち位置

固定シンボルは一定の距離に近づくとバフッという煙のエフェクトと共にポップします。
煙を伴わないときは個体が変わっていないそうだ。

エフェクト込みの出現がギリギリになる位置を探してレポート。
再開して歩くなり煙を伴って出現するくらいの位置がベストです。

ここだと定めの遺跡側からやるといいかな。

事前調査

出現するまでにどの程度のズレが生じるのかを確認します。
当然ですが不安定になるものほど難易度が上がっていきますね。(´・ω・`)

ただこの子の場合はまぁまぁ0に落ち着く気がします。

開始state

剣盾seed計算(野生)“のほうを使い128回の儀式を行います。
自動にチェックが入っていると終わるなり自動的に計算されてstate[0][1]が特定されます。
メインフォーム反映のチェックが入っていればそちらも自動的に。


OWRNG2_Start_128Motion (pokecontroller.info)

OWRNG3_128MotionCount (pokecontroller.info)

捕獲

メニューを閉じるなり移動して湧かせます。
リセット前提なのでマスターボールでサクッと捕獲。

ズレ確認

分類を「日替わりシンボル」、種、レベル等のと必要ヵ所を入力。
数値を入れて検索してもいいですしリスト表示で一覧を出して探してもいいと思います。
どの位置の個体かということを確認します。

今回は0だったので楽ができそうですね。
ズレがある場合はその分をオフセットに入れるか計算するか。
ともあれ何度かやってみて安定しているかを見る形になるかと。

目標選定

リセットして本番。
同じように開始したら直ぐに開始stateを求めます。

条件を入れて検索かリストを表示して睨めっこするなりして目標の個体を探します。
色違いだけでいいならそれほど遠い数値は出ないかな。

比較的近い2025~2029の個体を狙うことにします。
広い範囲を持つものを狙ったほうが多少のズレにも対処できて気が楽。
今回はズレなしとみていますが念のため中央の2027を目標にしました。

スポンサーリンク

乱数消費

やり方がいくつかあり方法によっては事前準備がいります。

・手持ち画面・強さ画面でL3

1回に付き1F消費できるので微調整or近い個体狙いに。
手持ちはモーション中でもお構いなしにカウントされるらしくマクロで回数を指定してガン回しも。

・天候

雨と雷雨の時は結構な勢いで消費するようで1秒辺り前者は約100F、後者は約200Fとのこと。
止めることを考えればランクマバグとかチートモードと言われる状態が前提になるかな。
近くの巣穴とかでもできなくはないか・・・

・日付

こちらはもう上記のモード状態が前提ですね。
1日進めて決定する度に一定数消費していきます。
ボックス内の数によって大きく差が出るようで私の場合だと8600Fほどでした。
遠い位置狙いで大きく削りたい時に重宝しますね。
注意点としてはメニュー中では効果がない点でしょうか。

この作業も大概同じ操作の繰り返しなのでマクロが真価を発揮します。
私は自分で適当に組みましたが探せばしっかりしたものを配っている人もいそう。


現在位置確認

剣盾seed計算(野生)“で引き続き測定を行っていくとどのくらい進んでいるかを確認できます。
検索範囲は広いと同じ結果になる場所が出てくる可能性があるので0~目的値までにしておくのが無難かな。

雷雨や日付変更でザックリ削った後には必須ですね。
後はL3で微調整を行っていく形に。

今回はのっけからL3を連打させたので行いませんでした。
物理的にボタンを押しているわけではないとはいえ何等かの支障がないのか不安になる・・・(´・ω・`)

捕獲

シンボルを沸かせていざバトル。
光ってくれれば実験は成功だ!

記念に持ち帰る場合は捕獲要因はしっかりしたものを。
攻撃は結構痛くとっしんによる自傷ダメージもあった気がします。

光らなかった場合は捕獲してどのくらいズレているのかを確認。

ランダムシンボル@真作ヤバチャ

ここからが本番です。
おけおけなるへそ物語くらいのナメめた理解度なのでどうなるか。
ようするに目的のFでポップさせればいいってことですよね。(適当)

  • 連鎖の起点となる真作を探す
  • 倒す→位置確認→連鎖個体を捕獲→ズレを確認
  • 位置確認→目標選定→粗削り→倒す→位置確認→微調整→連鎖をお祈り→捕獲

とりあえずこんな感じの流れでいってみようかと思います

連鎖

真作ヤバチャをある程度安定して出す為に連鎖を利用します。
草むらシンボルは倒されると次に湧くポケモンが半分くらいの確率で同じ種類になるそう。
それはフォルムも同じということなので真作を倒せば真作が湧いてくるってわけ。

よってまずは真作ヤバチャを見つけることに・・・(´・ω・`)デジャブ
ヤバチャを見つける → レポート → 捕獲 → ポットで判定 → リセ
という作業を繰り返すこと2時間くらいで出会えました・・・

絡んでくるその他のシンボルも大人しいのに変えておいたほうがよさそうですね。

事前調査

1匹目を倒してから2匹目が湧くまでの消費数を調べることにしました。
そして極力湧く直前にメニューに入れれば安定するんじゃという素人考え。
比較をしていないので本当に意味があるのかはわからないですね・・・

戦闘終了からメニューを開くまでの時間をマクロで詰めていくことにしました。
最後のAから5.9秒後にメニューに入る。
そこから捕まえてみると凡そ10~15辺りに収まっていました。

本番

目標選定

まずはゲームを開始して即座にメニューを開き128回の儀式を行う。
分類はランダムシンボルで生息地はいにしえの墓地に。
ポケモンはいろいろな種類が表示されますがこの場合は気にしなくていいでしょう。

リストからお目当ての色違い+証でおまけにA0の位置を検索しました。
出来る限り連続したパターンを引けるまで根気よく繰り返します(させます)。

978558~978566という位置を発見。
時間証ですが物は試しに狙ってみることに。
多少前後してもいいように978561辺りに狙いを付けます。

乱数消費

チートモードに入り113日ほどずらしてザックリと削りました。
どの程度削れたかを確認後に戦闘へ。

その後戦闘に入りマクロに設定した時間でメニューを開かせます。
再度の確認を行いそこからはL3連打で数千回を削らせました。

・・・問題はここからで連鎖するかどうかは運次第・・・だよね?
結局最後は後は祈祷力の戦いなのよ。(´・ω・`)

捕獲

やったぜ。

コイツは捕獲にも一手間掛かるんですよね。
ここまで来ておきみやげなんかされた日には・・・

ガルーラちゃんをみがわり1回でHPが1になるようにしておきました。
これでおきみやげで退場されることもなくがむしゃらでHPを1にできます。(`・ω・´)

完走した感想

疲れましたね・・・
3日くらいで駆け抜けたのでもうグッタリですよ。
慣れてしまえばそんなでもない作業なのかもしれません。

一番キツかった工程は真作ヤバチャを探す作業かな。
その程度で辛がるなと言われそうですがその程度すら辛いから自動化してるってわけ。(;´^ω^)

気を良くしてもう1匹狙ってみることにしました。
ある程度の作業は自動化したのでもっと早くなるだろうと思っていたのだが・・・

再走

比較的早くに真作が出てきたのですがそこから大いに沼ることに。
数百万の消費すら自動なら楽ちんさという慢心から400万くらいの位置を狙い始める。

結果は連鎖に負けて色証ニドラン♀、色証ブーバー
今度こそヤバチャきたやんからの経験したことのない範囲で前ズレを起こす。
真作を固定している以上引けに引けず2日目に突入という・・・

・・・とまぁそんな感じでどうあれ時間の掛かる作業なんだなって。
結局最後の最後が運任せなのが辛いところ。
私が知らないだけで連鎖を安定させるような方法もあるのでしょうか。
乱数調整はトライアンドエラーが基本だし多少はねという部分でしょうかね。


付き合ってくれたヤバチャもくたびれとったわ。

供養

完全に自分用なので凄く適当なのですがバックアップも兼ねて。
使った結果どうなっても責任は取れない・・・(´・ω・`)

128回のモーション測定

//つよさ画面で実行
//ImgCmp:"1"特殊の画像 "n"通常時の画像

Var num = 128

Var cnt = 0
Var motion = ""
Loop()
{
    //モーション確認
    Press(CLICK_L, 0.1)
    ImgCmp(1, 2.2) {
        motion += "1"
    }
    Not {
        motion += "0"
    }

    //初期位置確認
    ImgCmp(n, 5) {}

    //出力
    cnt += 1
    Print(cnt + "回目")
    Print(motion)

    #実行回数の判定処理
    Count
    If(cnt == num) {Break}
}

日付送り

//31日まである月且つ1日にしてから

Var num = 54

Func(Time_Leap)
{
    Press(A, 0.1, 0.5)
    Press(LEFT, 0.1, 0.1)
    Press(LEFT, 0.1, 0.1)
    Press(LEFT, 0.1, 0.1)
    Press(UP, 0.1, 0.1)
    Press(RIGHT, 0.1, 0.1)
    Press(RIGHT, 0.1, 0.1)
    Press(RIGHT, 0.1, 0.1)
    Press(A, 0.1, 0.5)
}

Var cnt = 0
Var today = 1
Loop()
{
    Exec(Time_Leap)
    cnt += 1
    Print(cnt + "回目 " + (today) + "日→"  + (today + 1) + "日")
    today += 1

    #実行回数の判定処理
    Count
    If(cnt == num) {Break}

    // 31日戻し処理
    If(today == 31)
    {
        Exec([Time_Leap])
        today = 1
        Print(cnt + "回後戻し 31日→"  + today + "日")
    }
}
タイトルとURLをコピーしました