ポ雑記

ポケムーバー通過時のニックネームが「そのポケモンが持つ国籍の種族名」の場合、「そのポケモンの言語の種族名」に変更されるという仕様があるっぽい。
これを利用することで、BWでタマゴから入手できるポケモンに混合ニックネームをつけることができる。



f:id:mahodoriproject:20211022210039p:plain
混合NN7文字色タブンネ おだやか 31-00-31-31-31-31



以上。




当初は「センシティブワードを利用した混合ニックネーム」として卑猥な記事を公開する予定でしたが、ポケムーバーの仕様が予想と異なっていたため没になりました。
それはそれで利用できる機会があるかも知れません。



では。

チェックサムのメモ書き

※調べただけで1回も実践してない。

・IDのずれから2種類の色違いを同時に狙える設定

ID:
37019-12597(3249F)→9359
23226-02298(3251F)→353D

主人公名:AAAAAAA
性別:男
時計:XX時XX分
御三家:キモリ
プレイ時間:7分17秒12F
TEXT SPEED:FAST
BATTLE SCENE:ON
BATTLE STYLE:SHIFT
SOUND:MONO
BATTLE MODE:LR
FRAME:TYPE13




ID:
01358-05818(4478F)→7236
01922-17023(4480F)→A030

主人公名:AAA
性別:男
時計:XX時XX分
御三家:キモリ
プレイ時間:7分13秒41F
TEXT SPEED:FAST
BATTLE SCENE:ON
BATTLE STYLE:SHIFT
SOUND:MONO
BATTLE MODE:LR
FRAME:TYPE13




・IDのずれから高個体と色違いを同時に狙える設定

ID:
50274-30467(3603F)→D517
16924-50274(3604F)→A030

主人公名:22222
性別:男
ID:16924-50274(3604F)
時計:XX時00分
御三家:キモリ
プレイ時間:7分1秒55F
TEXT SPEED:FAST
BATTLE SCENE:ON
BATTLE STYLE:SHIFT
SOUND:MONO
BATTLE MODE:LR
FRAME:TYPE13





=====ここまで実用的=====



・IDのずれと時計の設定から2種類の色違いを同時に狙える設定

IDと時計:
41455-48471(4731F) XX時00分→F500
65166-41455(4732F) XX時XX分→7236

主人公名:......
性別:男
御三家:キモリ
プレイ時間:6分59秒34F
TEXT SPEED:FAST
BATTLE SCENE:ON
BATTLE STYLE:SHIFT
SOUND:MONO
BATTLE MODE:LR
FRAME:TYPE13




IDと時計:
63660-34932(4924F) XX時XX分→353D
33846-63660(4925F) XX時00分→F500

主人公名:2222222
性別:男
御三家:キモリ
プレイ時間:6分59秒
TEXT SPEED:FAST
BATTLE SCENE:ON
BATTLE STYLE:SHIFT
SOUND:MONO
BATTLE MODE:L=A
FRAME:TYPE13




IDと時計:
02592-25760(4454F) XX時XX分→CF37
17609-02592(4455F) XX時00分→7360

主人公名:mmmm
性別:男
御三家:キモリ
プレイ時間:7分15秒37F
TEXT SPEED:FAST
BATTLE SCENE:ON
BATTLE STYLE:SHIFT
SOUND:MONO
BATTLE MODE:LR
FRAME:TYPE13



IDと時計:
08886-51086(3836F) XX時XX分→353D
62667-52082(3838F) XX時00分→CF37

主人公名:???
性別:男
御三家:キモリ
プレイ時間:7分17秒17F
TEXT SPEED:FAST
BATTLE SCENE:ON
BATTLE STYLE:SHIFT
SOUND:MONO
BATTLE MODE:LR
FRAME:TYPE13




IDと時計:
51837-07294(4159F) XX時XX分→A030
33082-63119(4161F) XX時00分→F500

主人公名:5555555
性別:男
御三家:キモリ
プレイ時間:6分56秒13F
TEXT SPEED:FAST
BATTLE SCENE:ON
BATTLE STYLE:SHIFT
SOUND:MONO
BATTLE MODE:LR
FRAME:TYPE13




IDと時計:
64290-10764(4445F) XX時00分→9359
47583-3927(4447F) XX時XX分→7360

主人公名:0000000
性別:男
御三家:キモリ
プレイ時間:6分56秒22F
TEXT SPEED:FAST
BATTLE SCENE:ON
BATTLE STYLE:SHIFT
SOUND:MONO
BATTLE MODE:LR
FRAME:TYPE13




IDと時計:
52797-33534(4452F) XX時00分→9359
02592-25760(4454F) XX時XX分→ECDD

主人公名:0000000
性別:男
御三家:キモリ
プレイ時間:7分12秒8F
TEXT SPEED:FAST
BATTLE SCENE:ON
BATTLE STYLE:SHIFT
SOUND:MONO
BATTLE MODE:LR
FRAME:TYPE13




・IDのずれと時計と設定から高個体と色違いを同時に狙える設定

IDと時計:
60860-57249(3808F) XX時XX分→D517
49894-58559(3810F) XX時00分→7360

主人公名:55555
性別:男
御三家:キモリ
プレイ時間:6分45秒56F
TEXT SPEED:FAST
BATTLE SCENE:ON
BATTLE STYLE:SHIFT
SOUND:MONO
BATTLE MODE:LR
FRAME:TYPE13





また何か調べたら追記するかもしれない。

ダイパ御三家同時色乱数

f:id:mahodoriproject:20210301152136j:plain

2019年の8月にやったらしい。

御三家の後にムックルが計算される。

一例として開始時seed:0x051403A4を挙げると、

性格値 性格 個体値
9EACB779 むじゃき 24-26-24-29-0-11
CA35E3E4 ずぶとい 11-30-4-9-0-23

こちらの2匹が出現し、ID調整していれば両方光る。

ムックルを捕まえることができない為、無駄な乱数調整に分類されるのではないだろうか。


では。

RNG_Game攻略ツールを作ろう

この記事はPokémon RNG Advent Calendar 2020の7日目の記事です。
adventar.org


Pokémon RNG Advent Calendar 2017の2日目の記事でろいしん氏が公開したRNG_Gameですが、さき氏とoupo氏を除いてこのゲームで遊んだという話を耳にしません。
blastoise-x.hatenablog.com


私はこのゲームがとても好きなのですが、プレイ人口が少ないのは寂しいものです。
そこで、少しでも多くの人が楽しめるようRNG_Gameを攻略する為の情報を公開しようと思います。


注意事項
C#を使用していますが、指摘されそうな点が多々あります。目を瞑ってください。
※あえてツール未完成の状態で記事を公開しています。本記事が参考になるかはわかりませんが、ご自身で完成させてください。
(2日目の記事も合わせて、各自で良いツールを作りましょう。)
scrapbox.io


さき氏及びoupo氏の記事を参考にツールを作成し、クリアを目指したいと思います。予めそちらをお読みください。
xxsakixx.com
oupo.hatenadiary.com




早速ツールを作っていきましょう。


まず、seedを特定する必要があります。

seedを特定する為の手段として、以下の3つが候補に挙がります。
・捕まえたポケモンの情報
ペラップの音程
・ゲームの起動時刻


ゲームの起動時刻から特定するのが手っ取り早いですが、面白くないので今回は捕まえたポケモンの情報からseedを特定することにします。

一例として、さき氏の記事にある

オニドリル Lv.27
性格:がんばりや
個体値:17-4-5-30-25-0
この情報から、H個体値の生成seedである0x8EF97E97を計算してみたいと思います。

//個体値のみで適当に総当たり
static void SeedSearch()
{
    uint[] IVs = { 17, 4, 5, 30, 25, 0 };
    uint Seed, StartSeed = 0;
    long i;
    int j;
    for (i = 0; i <= 0xFFFFFFFF; i++)
    {
        Seed = StartSeed;
        //個体値の判定を行う
        for (j = 0; j < 6; j++)
        {
            if (((Seed >> 16) * 32 / 0x10000) == IVs[j])
            {
                if (j == 5)
                {
                    //個体値が全て一致したら出力
                    Console.WriteLine(StartSeed.ToString("X8"));
                }
                else
                {
                    Seed = SeedAdvance(Seed);
                }
            }
            else
            {
                break;
            }
        }
        StartSeed++;
     }
}
static uint SeedAdvance(uint Seed)
{
    return Seed * 0x41c64e6d + 0x6073;
}

これを実行すると、このような結果が出ます。

8848D488
8E09E649
8EF97E97
8F881D10
ちゃんと0x8EF97E97も含まれています。

ここから候補を1つに絞り込む為に、ポケモンの種族(出現スロット)や性格を考慮したり、連続してもう1匹捕まえて近い位置にいるかを判定したりといったことが考えられます。



さて、捕まえたポケモンの情報からH個体値の生成seedはわかりましたが、このままでは現在のseedがわからないので特定する必要があります。
特定のために、個体値決定後の消費について調べるか、ペラップをしばいて音程を調査するという手段が考えられます。

今回は調査が面倒だったのでさき氏と同じようにペラップの音程から現在のseedを特定してみます。

static void FrequencyList()
{
    uint Seed = 0x8EF97E97;
    uint Frequency;
    for (int i = 0; i < 100; i++)
    {
        Frequency = (((Seed >> 16) * 8192) >> 16) * 110 / 8192 + 440;
        //消費数、seed、音程の順で出力
        Console.WriteLine("{0} {1} {2} {3}", i, Seed.ToString("X8"), Frequency, Interval(Frequency));
        Seed = SeedAdvance(Seed);
    }
}
//わかりやすいように音程を3段階に分けてみる
static string Interval(uint Frequency)
{
    if (Frequency < 476)
        return "低";
    else if (Frequency < 512)
        return "中";
    return "高";
}

これを実行すると以下のような結果になります。

0 8EF97E97 501 中
1 249748BE 455 低



70 508A190D 474 低
71 0B7D00FC 444 低
72 B96E93BF 519 高
73 69D37AC6 485 中
74 B997FAC1 519 高
75 4662F2A0 470 低
76 65CE6E93 483 中
77 17483F0A 450 低
78 38B443B5 464 低
79 64605A84 483 中


ペラップの音程とリストを照らし合わせることで現在のseedが特定できます。



現在のseedを特定したら、2通り存在するクリアの条件を目指します。
何消費すれば目的のものが得られるかを予め計算すれば良いので、適当に出力します。

static void List()
{
    uint StartSeed = 0xAB8A3A9A, Seed;
    int i, j;
    string VendingMachine, Item;
    for (i = 0; i < 100; i++)
    {
        Seed = StartSeed;
        //自販機判定
        VendingMachine = (Seed >> 16) * 32 / 0x10000 == 0 ? "あたり" : "はずれ";
        //種族、個体値などの分を消費
        for (j = 0; j < 9; j++)
        {
            Seed = SeedAdvance(Seed);
        }
        //持ち物判定
        Item = (Seed >> 16) * 100 / 0x10000 < 5 ? "きんのたま" : "なし";
        //消費数、seed、自販機当たり判定、持ち物判定の順で出力
        Console.WriteLine("{0} {1} {2} {3}", i, StartSeed.ToString("X8"), VendingMachine, Item);
        StartSeed = SeedAdvance(StartSeed);
    }
}

0 AB8A3A9A はずれ きんのたま
1 94D24005 はずれ なし
2 35E52894 はずれ なし
3 BB67BF77 はずれ なし
4 B48D281E はずれ なし
5 87879939 はずれ なし
6 0081FBB8 あたり なし


あとはこれに従ってペラップをしばき、目的の行動をすればクリアすることができるはずです。



はずです・・・・



・・・・・・・・・・・


f:id:mahodoriproject:20201206194017p:plain
きんのたま」ではなく「するどいくちばし」を持っていました。どうやらオニドリルは「きんのたま」を持っていないようです。



是非より良いツールを作成し、クリアを目指してください。



では。





余談
何年か前に高個体値ベトベターを捕獲しましたが、クリアすることができませんでした。
f:id:mahodoriproject:20201109123356j:plain
(当時のメモによると初期seed 0x5B13463Dから狙ったらしい。)

XDサイドン/ファイヤー乱数調整のメモ

※あくまでもメモ。より良い方法があるかもしれない。むしろあって欲しい。

・連続で生成される6匹から情報を集めることで、強制消費数を特定することができる。

サイドン  偶奇 性別 特性 HP個体値
ナッシー  偶奇 性別
ケンタロス 偶奇 素早さ
ファイヤー 偶奇 素早さ HP個体値
フリーザー 偶奇 HP個体値
サンダー  偶奇 素早さ HP個体値

偶奇
HPの偶数/奇数をダークエレブーのダークハーフで判定(サイドン/ナッシーはダークエンドでも可)

特性
サンダースの電気技で避雷針か石頭か判定(トレースラルトスなどでも可)
2週目では特性が変わる可能性があるので初戦で判定する必要がある

HP個体値
リングマlv82の地球投げでサイドンは20以上か、三鳥は30以上かを判定
※HP個体値29以上のサイドンを狙う場合はアメを2個用意するといいかも
(lv84の投げで、29以上か否か絞ることができる。)

素早さ
S118のダークエレブーと比較



・手持ち1匹でルギア戦をマスボ:およそ16800~17200



・a値によって、強制消費2に影響がある。
・カメラの動きからa値を絞り込めるかもしれない。
・ステータス画面で消費の無いポケモンを使用すれば、より安定するかもしれない。

VIRTUALSEX

f:id:mahodoriproject:20201013232803p:plain
NN限界突破全角10文字XDジュペッタ

三世代のNN変更におけるトレーナー名判定は、あくまでも文字コードが一致かを判定しているだけ。

ニックネームの半角/全角はそのポケモンの言語に依存する為、海外版の三世代で日本語ポケモンに6文字以上入力することで、全角5文字を超えるニックネームを付けることができる。
(正し、日本版三世代で表示される文字数は半角/全角問わず5文字のみ)


タマゴをうまいことやれば親名も限界突破できるかもしれない。
→孵化したROMの言語に依存するようなので無理そう。


全角5文字を超えるニックネームをつけたい人はやってみてください。




さて、本記事のタイトルですが、NN限界突破カイリキーにつけようと思ってたニックネームです。
どう頑張ってもラブラブボールに入れることができない為、没になってしまいました。

別のボールでも妥協できる方がいましたら、是非このニックネームをつけてあげてください。


では。