https://c.radikal.ru/c02/1908/13/8cfd67d9d539.jpg

3-ье поколение, наконец-то, твой черед настал.)

Долго я думала над тем, с какой стороны подойти к шайни хантингу в третьем поколении, так, чтобы это не было ни слишком запутанно, ни слишком скучно. И вот, отбирая информацию на эту тему, я наткнулась на одно очень любопытное видео, которое в дальнейшем поможет нам собственными глазами увидеть то, как зарождаются покемоны альтернативных расцветок в этой игре. А также, несмотря на всю сложность процесса (точность нам нужна будет абсолютная, до 0,1 миллисекунды), мы все же встретим шайни, который окончательно прояснит работу генератора случайных чисел. Именно генератор случайных чисел решает буквально все. Какой характер будет у покемона, какие IVы, пол, шайни/не шайни, в какую сторону повернется NPC и многое, многое другое.

Так почему же все сложно? Все дело в том же RNG. Если очень кратко донести главную идею, звучать она будет так – в Emerald сломан генератор случайных чисел. И неважно, рабочая там батарейка, либо же нет. Это единственная игра серии, в которой seed (сид) всегда стартует с нуля. Это, так называемое, зерно (seed) является точкой отсчета для всех значений, которые в дальнейшем выдаст игра. При нормальных условиях сид зависит от даты и времени, вплоть до миллисекунд. Для Ruby/Sapphire дело обстоит немного иначе, там сид генерируется так, как надо, но, если при запуске игры вы видите сообщение The internal battery has run dry, the game can be played. - это означает, что участь Эмеральда уже постигла и R/S
Истинного генератора случайных чисел в R/S/E и близко нет, игры скорее ближе к PRNG (Pseudo Random Number Generator) - генератору псевдослучайных чисел. Этот генератор создает бесконечную последовательность, опираясь на некий инициализирующий набор бит, называемый seed (сид). Что означает одну простую вещь: мы можем высчитать эту закономерность, и, пускай это не совсем легко, такая возможность у нас все же есть.

Скажу сразу, во избежание возмущенных вопросов на эту тему, для меня шайни, добытые методом просчетов и использования дыр, довольно скучны, хотя и все еще милы. Но, так как нет главного фактора – внезапности, эмоции отличаются от тех, которые обычно сопровождают встречу с шайни при нормальных условиях. Резко негативно к этому методу я относится тоже не могу. Так как… ну давайте будем честны, многие игроки используют PokeHex, Poke Edit и прочие программы для модификации покемонов, кто-то играет на специальных флэш-картриджах с уже загруженными играми. Несмотря на свое отношение ко всем этим методам, не могу не признать того, что все же интересно взглянуть на закулисье игры. По ту сторону красочных пикселей, где находится мир сухих цифр, которые и выдают нам практически все в этой игре, располагается довольно любопытное зрелище. Посему, предлагаю присоединится к моему увлекательному приключению и посмотреть на то, что из этого получится.

Что такое seed мы уже обсудили. Есть еще и такое понятие как frame, и с фреймами мы будем работать ну очень основательно. Фрейм это «кадр» алгоритма. За один фрейм использование алгоритмов происходит 1 раз. Фрейм можно лишь увеличить, но никак не уменьшить. Для лучшего понимания вставлю сюда скриншот со списком фреймов: https://c.radikal.ru/c29/1908/15/9b146b028bb9.png- Вот они, наши кадры с уже предетерминированной информацией.
Как видите, это просто набор кадров, в которых «сидят» разные значения. Для того, чтобы попасть в определенный кадр, нужно быть предельно точным: опоздаете на 0,1 секунды - и вы уже перескочите на другой фрейм.

Почему мы так привязаны к фреймам? Потому что шайни намертво закреплены за определенными кадрами. К примеру, если шайни на вашем сэйв-файле затесался на фрейме 10 737 – так будет всегда, и этого никак не изменить, разве что записать новый сэйв и надеяться на чудо. От чего зависит принадлежность шайни к определенному фрейму? Главным образом от вашего TID (Trainer ID) и SID (Secret ID) (не путать с seed). TID мы всегда можем увидеть на карточке тренера, в моем случае он был таким: https://c.radikal.ru/c42/1908/51/d8924b51ee46.png – Симпатичный TID, правда? О, это одна из моих здртских традиций, начинать игру с шайни стартером и TIDом, который мне по душе.

А с SID сложнее. Игра так просто его вам не выдаст, его можно только при помощи специальных махинаций определить. Спросите, как высчитать? Поймать рандомного шайни и высчитать его IV :D Но сегодня мы не будем надеяться на удачу (в этой игре она почти не работает).
Логично предположить такую вещь: если TID и SID влияют на генерацию фреймов, нам нужно повлиять на процесс создания этих самых TID и SID для того, чтобы в дальнейшем мы могли просчитать вероятный SID, опираясь на временной промежуток, в который мы нажали кнопку А, и также на полученный TID.

В этом процессе нам понадобится:

* EonTimer.
* RNG Reporter.
* Калькулятор, который может конвертировать числа из десятеричной в шестнадцатиричную систему. Например этот или любой другой на ваше усмотрение.
* Консоль, которая бодро реагирует на софт ресеты, то есть без опозданий и задержек. Комбинация, которую мы будем использовать для софт ресетов, это: Start + Select + X + Y + A + B. Зажимается одновременно. Для этого я использовала свою допотопную Nintendo DS.
* Терпение, граничащее с безумием.

Для старта нам понадобится чистая игра Emerald либо Ruby/Sapphire (Если ruby/sapphire, то обязательно с мертвой батареей!!!) нужно создать новый сэйв. Для начала запускаем игру, вбиваем свое имя и переходим на кнопку ОК, но пока еще не нажимаем ее. Мы должны быть на экране выбора имени, выглядеть это должно вот таким образом:
https://d.radikal.ru/d11/1908/a8/72f3c3a6d5c9.png.

Теперь открываем EonTimer и переходим в закладку под номером 3, находим Target Frame и прописываем значение 950 (на самом деле, можете прописать от 850 и больше, но 900 – 950 вполне сгодится).

Для примера показываю скриншот:
https://d.radikal.ru/d24/1908/da/4d9a067803fe.png

По истечении первых 5-ти секунд на Eon Таймере нажимаем ОК. Проматываем текст до фразы: Well, I’l be expecting you later. Come see me in my POKEMON LAB. И ждем, когда наш таймер добежит до 0, в этот момент быстро нажимаем А. Этот шаг исключительно важен: чем точнее вы были на этом этапе, тем проще вам будет в дальнейшем. Поэтому, если вы не уверены в том, что были максимально точны, советую повторить процесс пару раз, так сказать, набить руку. По желанию, можете покопаться в настройках самого Eon Таймера. Выставить себе визуальное сопровождение, поменять звук, сопровождающий истечение времени - главное, чтобы вам было максимально удобно.

У меня стояли вот такие настройки:
https://d.radikal.ru/d31/1908/2c/1a47c0cbf62d.png

После успешного завершения этого этапа, смотрим на свою карточку тренера (постараюсь не острить на тему того, что ГГ перевозят в грузовом отеделе) и конвертируем наш Trainer ID в шестнадцатеричную систему счисления (спокойно, просто идем сюда и вбиваем свой TID). Можете еще воспользоваться windows калькулятором, главное переключиться на режим «программирование». Итак, мой айди 09119, при конвертации я получаю 239F.

Теперь открываем RNG Reporter, переходим в закладку Researcher. В поле Max Results вбиваем то значение, которое мы использовали в Eon Таймере, в нашем случае это было число 950, но с небольшой поправкой: обязательно добавляем к изначальному числу 100. В итоге мы вбиваем 1050.
В поле Seed (Hex) вбиваем наш покалеченный конвертером Trainer ID - 239F.
Справа, находим Custom 1 и выставляем 16bit High, также проставляем единицу, как показано на скрине:
https://b.radikal.ru/b40/1908/3c/e602ee387622.png

Нажимаем Generate, полученные значения сохраняем в блокноте. Правой кнопкой мыши нажимаем на текст, выбираем Output Results to TXT. Сохраняем результат на рабочем столе или где вам угодно.

Открываем файл и находим свой предположительный Secret ID. Если вы помните, при создании игры мы метили на фрейм 950, к этому числу мы сейчас добавим 50, так как при нажатии А игра насчитывает нам дополнительных 50 фреймов. Итак, на 1000-ой позиции должен быть наш SID… в том случае, если вы обладаете точностью робота, но, как вы понимаете, такое вряд ли возможно.) Поэтому, выделяем часть текста от числа 995 до 1005: скорее всего, где-то среди этих значений затаился ваш SID. Теперь дело за малым, остается только проверять.

В моем случае блокнот с SID имел такой вид:
https://a.radikal.ru/a29/1908/c2/d7b31c48cf2b.png

Мы все еще вначале игры, нашей главной локацией будет то место, где свирепый зигзагун терзает профессора. Учитывая то, сколько раз мы будем перезапускать игру и выжидать нужный фрейм, профессора ждут времена непростые. Мало того, что исследуем дыру в игре, так еще и помогаем зигзагуну делать дополнительные дыры в профессоре. Стыдно? :rolleyes: https://b.radikal.ru/b11/1908/fe/44ca5ffe5ef8.png

Сохраняем игру возле сумки с покеболлами, в которых отдыхают стартеры, сохраняемся ДО выбора стартера. Теперь переходим в RNG Reporter, вбиваем свой TID, в моем случае 09119, и начинаем примерять SID из нашего списка в блокноте. Я начинала с тех СИДов, которые давали шайни на достаточно раннем фрейме, от 1000 и до 4000. Всякие шайни на 40 000 фрейме - это плохой старт для нашего путешествия. Толком не натренируем точность, да и, вероятнее всего, быстро перегорим идеей. И еще одна деталь: по моим наблюдениям, фреймы, начиная от 7000, требуют дополнительного пересчета времени, мне приходилось накидывать от 30 до 40 фреймов к итоговому фрейму, чтобы попасть на нужный мне фрейм. Например, если РНГ репортер утверждал, что я встречу шайни на фрейме 7640, приходилось выставлять в Eon Таймере фрейм от 7670 до 7680, так что имейте это ввиду.

Слишком ранние фреймы нам тоже не подходят, например: 12,30,100. Мы попросту не успеем запустить игру к тому моменту, как прожужит таймер.
В свой слишком точный тайминг я не верю, поэтому начну с SID: 55578. Фрейм там ранний, то, что нужно для тренировки. Как видно по скрину, нам нужно попасть на фрейм 1152, который обозначен тройным знаком восклицания (!!!) - это и есть наш шайни (в том случае, если мы выбрали правильный SID):
https://a.radikal.ru/a33/1908/c9/f8e6210a6f18.png

Начнем, настраиваем наш Eon Таймер на нужный фрейм, все в той же третьей вкладке указываем фрейм 1152. Проверяем нашего первого мадкипа/трико/торчика (у меня это будет мадкип). Скорее всего, он будет не шайни. Теперь по старой схеме, запускаем таймер, и, когда первые 5 секунд истекают, делаем софт ресет (одновременное нажатие Start + Select + X + Y + A + B). Теперь как можно быстрее загружаем игру, до вот этого момента:
https://c.radikal.ru/c15/1908/5d/88a5058a2311.png

Когда таймер закончит свой отсчет, нажимаем А. Смотрим на результат того, что получилось. Если в бою не шайни, возможны два варианта:

1. Вы не попали в нужный фрейм.
2. Вы попали в нужный фрейм, но выбранный SID неверен.

Будем проверять то, в какой фрейм мы попали, но как это сделать?
В первую очередь проверяем характер нашего покемона, совпадает ли он с тем, что указывает нам фрейм?

https://a.radikal.ru/a07/1908/f4/fcf952423043.png

Смотрим на пол покемона, это колонка со значением 12.5% F. Если эти показатели идентичны, можем проверять IVы. В RNG Reporter есть специальный встроенный калькулятор, который поможет нам в вычислениях (Pokedex-IV Checker, предельно прост в использовании). Если все совпадает, можно заключить, что в нужный фрейм мы попали, но SID у нас другой. При первой попытке вы вряд ли попадете в нужный фрейм. Если ничего не сходится с нужным фреймом - не расстраивайтесь. В таких случаях я поступала так - проверяла характер своего мадкипа, просчитывала его IVы и после по таблице определяла, куда я угодила и на сколько фреймов опоздала/поспешила. Если получалось так, что я попадаю в один и тот же ненужный мне фрейм на постоянной основе, прибегала к помощи Eon Timer, там есть параметр Frame Hit, где можно прописать фрейм, в который вы постоянно угождаете, после чего нажать Update - и таймер подстроится под вас!

https://c.radikal.ru/c39/1908/ee/2cfb3d0fc1d8.png

Автор оригинального видео советует также проверять пол зигзагуна, так как зигзагун у нас генерируется после стартера, на 142 фрейма выше. Если, к примеру, стартер у нас на 1152 фрейме, зигзагун в таком случае будет на 1294 фрейме. Но лично я не советую этого делать, в моем случае пол зигзагуна часто не совпадал, хотя я была на 100% уверена в том, что попала на нужный фрейм.

Еще один вопрос, который уже мог возникнуть в вашей голове. Неужели таблица с фреймами всегда одинакова? И да, и нет. Давайте сравним.
Вот у нас таблица в пределе тех же значений от фрейма 1147 по 1169, при TID 09119 и SID 55578 и таблица при TID 09119 и SID 45751.

https://a.radikal.ru/a10/1908/ce/f8ef1f2e85b5.png
https://b.radikal.ru/b04/1908/a8/50c26ced0ab5.png

Разницу видите? Да, ее практически нет. Единственное отличие - в шайни (знак !!!). Поэтому мы так зациклились на SID и поэтому сейчас проверяем каждую возможную комбинацию. И вот так планомерно мы отбираем каждый SID, примеряем его к нашему TID, определяем, на каком фрейме должен быть шайни, и пытаемся попасть в нужный фрейм. Попали в нужный, но в результате не шайни? Не беда, идем дальше по списку, проделываем все то же самое до момента появления шайни.

К концу эксперимента мой блокнот выглядел вот так:
https://b.radikal.ru/b05/1908/f8/2629ef152bbb.png

Вы уже должно быть догадались, что я так и нашла его, свой SID. Каково же было мое удивление, когда я узнала, что он находится на 1002 фрейме: это всего лишь на 2 выше от предполагаемого в идеале. Сейчас буду делиться своей радостью и еще более наглядно продемонстрирую то, как нам проверить фрейм.

Мой вожделенный фрейм с шайни оказался 10 737 -_- И тут сразу же возникла проблема, о которой я говорила ранее. Пришлось накинуть дополнительно 33 фрейма, иначе пролет и непонятно, где мы находимся. Благо, что во время ресетов я наткнулась на мадкипа женского пола, который значительно облегчал обнаружение того фрейма, на котором я сейчас нахожусь, так как стартеры девочки - это явление редкое. Дальше, внеся поправки, я выставила цель на 10 770, пару десятков попыток, и все получилось:

https://c.radikal.ru/c02/1908/8a/f1b3c41d3185t.jpg
https://c.radikal.ru/c37/1908/40/d5483af1780ft.jpg
https://d.radikal.ru/d18/1908/d7/063e15f28415t.jpg

Давайте из интереса сверим параметры полученного шайни с тем, что указан в RNG Reporter:

https://a.radikal.ru/a14/1908/33/f03a889ebbe2.png
https://c.radikal.ru/c24/1908/05/3a9ae8f26736.png

Все совпадает, характер, пол, значения IV. Точные IV вам калькулятор, конечно же, не покажет, ведь 5 уровень - это слишком мало для того, чтобы доподлинно высчитать значения.

Цель достигнута.) Теперь я могу спокойно проходить Emerald со своим шайни мадкипом и трико (трико честно наресеченный в японском Ruby), больше меня не будет терзать любопытство. Да, Эмеральд действительно сломан, и да, можно получить шайни на старте, изначально не зная своего SID. Вот только рука у меня не поднимется эволюционировать мадкипа, я не смогу, он слишком няша.
https://c.radikal.ru/c33/1908/a6/9c1331f02487.png

Теперь можете попробовать так же потерзать свою психику либо остановиться на прочитанном и запомнить главную мысль: "ресетать райквазу в Эмеральде около 300 000 раз - это очень плохая идея". Помолимся за души тех, кто, ничего не ведая, все-таки решил ресетать и после отметки в 100500 ресетов сдался, так и не поняв в чем подвох.

И напоследок. Если вы не хотите марать свои руки об RNG Reporter, можете попробовать метод 50 софт- ресетов. Создали сэйв, ресетнули стартера 50 раз: если нет шайни, создаем очередной сэйв, и все по новой. Но если вы не хотите себе лишь бы какой TID, всегда можно наресетать шайни в R/S с исправной батареей и передать его в Эмеральд.

Надеюсь, у вас не слишком разболелась голова, и вы смогли почерпнуть что-то новое.