мини гайд по читингу для gateway
жмём селект, потом прежде чем выбрать игру жмёшь стрелку вверх, там можешь выбрать язык игры, еще что-то, и какими кнопками активировать ингейм меню для читинга.
потом в игре жмём эти кнопки и открывается меню
1)cheat finder - поиск читов потипу как в артмани
2)configure cheats - выбор читов которые у тебя сохранены на карточке в гейтвее в папке в корне cheats с применем 000400000012DE00.txt (это будет fire emblem fates, если захочешь потом сам чит сделать то нужное название
3)cheatlist editor - добавление читов нагорячую либо корректировка пункта 2
4)файла сразу в этой менюшке справа сверху посмотришь)
5)ram dumper - сделать дамб памяти и закатать на флешку
6)hex editor - покопаться в памяти игры
7)exit menu - выход из менюшки
полезная инфа:
=================
The GATEWAY 3DS cheatcode format is based on the old ActionReplay DS
code format, the one you all know and love! We added some code types
for your convenience as well!
The following code types are supported:
NOTE: default value of offset and data registers is zero.
Memory Writes:
0XXXXXXX YYYYYYYY - 32bit write to [XXXXXXX + offset]
1XXXXXXX 0000YYYY - 16bit write to [XXXXXXX + offset]
2XXXXXXX 000000YY - 8bit write to [XXXXXXX + offset]
Conditional 32bit codes:
3XXXXXXX YYYYYYYY - Greater Than (YYYYYYYY > [XXXXXXX + offset])
4XXXXXXX YYYYYYYY - Less Than (YYYYYYYY < [XXXXXXX + offset])
5XXXXXXX YYYYYYYY - Equal To (YYYYYYYY == [XXXXXXX + offset])
6XXXXXXX YYYYYYYY - Not Equal To (YYYYYYYY != [XXXXXXX + offset])
Conditional 16bit deref + write codes:
7XXXXXXX ZZZZYYYY - Greater Than
8XXXXXXX ZZZZYYYY - Less Than
9XXXXXXX ZZZZYYYY - Equal To
AXXXXXXX ZZZZYYYY - Not Equal To
Offset Codes:
BXXXXXXX 00000000 - offset = *(xxx)
D3000000 XXXXXXXX - set offset to immediate value
DC000000 XXXXXXXX - Adds an value to the current offset
Loop Code:
C0000000 YYYYYYYY - Sets the repeat value to 'YYYYYYYY'
D1000000 00000000 - Loop execute
D0000000 00000000 - Terminator code
Data Register Codes:
D4000000 XXXXXXXX - Adds XXXXXXXX to the data register
D5000000 XXXXXXXX - Sets the data register to XXXXXXXX
D6000000 XXXXXXXX - (32bit) [XXXXXXXX+offset] = data ; offset += 4
D7000000 XXXXXXXX - (16bit) [XXXXXXXX+offset] = data & 0xffff ; offset += 2
D8000000 XXXXXXXX - (8bit) [XXXXXXXX+offset] = data & 0xff ; offset++
D9000000 XXXXXXXX - (32bit) sets data to [XXXXXXXX+offset]
DA000000 XXXXXXXX - (16bit) sets data to [XXXXXXXX+offset] & 0xffff
DB000000 XXXXXXXX - (8bit) sets data to [XXXXXXXX+offset] & 0xff
Special Codes:
DD000000 XXXXXXXX - if KEYPAD has value XXXXXXXX execute next block
SPECIAL KEYPAD CODE
===================
As for the Special KEYPAD cheat code, the keypad value can be any combination of the following:
0x1 A
0x2 B
0x4 Select
0x8 Start
0x10 Right
0x20 Left
0x40 Up
0x80 Down
0x100 R
0x200 L
0x400 X
0x800 Y
1)тыкаем первый пункт. на данынй момент нас интересуют только первые 3 строки - 8 бит, 16 бит и 32 бита(это всё длинна числа, 256, 65536, 4294967295) . искать будем бабки. бабки это такой параметр который обычно имеет 4 байта, если не знаем что нам надо то прикинем - наш параметр насколько может быть длинным... и в данном случае это либо 16 бит либо 32 бита. про signed и unsigned читам
http://citforum.ru/programming/cpp_march/cpp_017.shtml короче тыкаем на третюю строчку (new 32 bit exact search) и вбиваем там количество наших бабок. в моём случае это 986499 и стартуем поиск. поскольку у меня число большое - вероятность выше что оно уникально, а это влияет на количество лишнего хлама который нам не нужен (левые адреса). закончился поиск далее надо отсеивать лишние адреса. выходим обратно в игру и покупаем что нить. я купил катану за 1к и потом залажу обратно в менюшку и там уже будет 3 пункта:
next search (искать дальше адрес)
view hits (просмотр адресов)
reset search (сбросить поиск и начать его сначала)
мы тыкаем в первый пункт. далее вылазит большой список слов обозначающий правила поиска.
1) точное значение
2) больше чем
3) больше чем или равное
4) меньше чем
5) меньше чем или равное
6) равное предыдущему значению из поиска
7) различие на значение (в теории если к примеру было число 1000, и мы укажем 20, то будет искать 980 и 1020)
8) увеличенное на еденицу
9) уменьшенное на еденицу
нам надо пункт 1. там вбиваем новое значение 985499 и нам сообщает что мы теперь можем смотреть адреса. возвращаемся до пункта view hits и тыкаем на него. у нас там будет 2 адреса. чтобы узнать нужный то мы тыкаем эти адреса и в редакторе памяти акуратно меняем значения. в редакторе памяти адреса идут справа налево, тоесть если у нас есть 000F099B (войдите в калькулятор и в виде выберите режим вид программиста, и и потом воткните точку в режим HEX и напишите там это хексовое число без первый трёх нулей F099B и потом поставьте точку в dec, и вы увидите наше значение - 985499. и с помощью калькулятора мы будем переводить нужные нам значения. так вот, входим в первый адрес 15F013D0 и мы там видим 000F099B но только наоборот 9B090F00 (память она такая)) и вот нам надо вбить тестовые значения. я буду брать числа 20 и 30 (поскольку всего осталось только 2 адреса). вбиваем 20 и 30 в калькулятор и получаем 14 и 1E в шеснадцатеричном формате (полный вид будет 00000014 и 0000001Е). далее в первом адресе затираем значение 9B090F00 и у нашего 14 допиливаем с самого начала 6 нулей 00000014 и потом меняем местами и получится 14000000. и это вписываем вместо 9B090F00. и во втором тожесамое только юзаем 1Е. и выходим в игру. и видим что бабок у нас стало 20. значит первый адрес был верным, а второй бесполезным. так что чешим обратно к этому адресу и делаем там бабок столько, сколько захотим, ну и запишем адрес 15F01ED0 куданить в блокнот. я вобью пожалуй число 0000FFFF что соответствует 65536 и пока оставлю так (вбиваю FFFF0000, нумерация идёт с нуля так что бабок мы увидим 65535)
далее попробуем ломануть камешки pearl. сразу скажу что вы найдёте в 32 битном значении его, но оно меняться не будет. 16 бит я не пробовал, но поидее там будет тожесамое. нам надо 8 бит, так как в игре только 100 штук максимально может быть (да и поле там узкое, да и узается не по 5к как бабки за шмотку, а по паре штук при заточке). короче в итоге у меня нашло 6 адресов. и подошол первый - 16977AFE. и собственно его записали на бумажку куданить, также там в столбик еще идут вниз 5 значений - красные, синие, фиолетовые, зелёные и жолтые камни. если мы их тоже ходим начитерить то имеет смысл войти в просмотр памяти и дойти до адреса 16977AFE и посмотреть в ближайшем диапазоне значения этих камней. ибо такие значения часто идут цепочкой. так что чешим в hex editor , смотрим на адрес 16977AFE и он соответствует диапазону 14000000 - 1B3BF000 и лезим в него. потом зажимаем правый шифт и долго долго листаем до нужного адреса. у меня этих предметов 71, 4, 15, 11, 11, 11. и вот я пришёл на адрес 16977AFE и там записано 47 (что в переводе 71), и смотрим дальше, и у нас сразу же 04, 0F, 0B, 0B, 0B что посути и является нашими значениями. можем попробовать их поменять чтобы точно удостовериться что это они.
короче мы имеем на выходе адреса 15F01ED0 - бабки, 16977AFE - перлы, ну и сдвиг адреса на 1 вперёт - остальные 5 камней. теперь давайте напишем файлик с читом чтобы каждый раз не искать заного, а бабки себе делать при нажании кнопки селект, а камешки - чтобы постоянно были замороженны на какомнить значении
посмотрим на инфу из споилеров вверху. нам надо код клавиши селект, запись в адрес значения, также сдвиг текущего указателя, ну и адрес для активации кода по кнопке:
0x4 Select
0XXXXXXX YYYYYYYY - 32bit write to [XXXXXXX + offset]
1XXXXXXX 0000YYYY - 16bit write to [XXXXXXX + offset]
2XXXXXXX 000000YY - 8bit write to [XXXXXXX + offset]
D3000000 XXXXXXXX - set offset to immediate value
DD000000 XXXXXXXX - if KEYPAD has value XXXXXXXX execute next block
D0000000 00000000 - Terminator code
содаём файлик с имененем 000400000012DE00.txt (код игры)
и накидываем его таким тектом
[set bablo 65535 (select)] --название чита
DD000000 00000004 -- тут мы говорим коду что если будет нажат селект то выполнить следующие условия
D3000000 15F01ED0 -- тут мы делаем переход на адрес 15F01ED0 чтобы потом в него записать нужное значение
00000000 0000FFFF -- тут мы пишем в 32-х битый адрес значение 65535
D0000000 00000000 -- очистка настроек по кнопке селект, чтобы следующий код не активировался по ней
[100 gems]
D3000000 16977AFE -- тут мы переходим по адресу 16977AFE
20000000 00000064 -- и тут мы записываем в 8 битный адрес значение 100
20000001 00000064 -- и далее наращиваем адрес на 1 сдвиг и записываем количество камешков следующему камню
20000002 00000064
20000003 00000064
20000004 00000064
20000005 00000064
в текстовик пихаем весь этот текст но только без "--" и дальнейшего комментария
впринцепе можно обращаться и напрямую без сдвига по D3000000, но тут надо смотреть на сам адрес. если у него первая цифра будет 0, то можно без сдвига, если не 0, то обязательно через сдвиг D3000000. даже если мы получим 32 битный адрес вида 2DF00CC1 то его всёравно надо делать со сдвигом так как если пустить напрямую то мы запишем по адресу 0DF00CC1 8 битное значение, и игра либо подвиснет, либо вылетит, либо хз что еще будет, может правда и ничего не будет)) но работать такое точно не будет. правильный вариант:
D3000000 2DF00CC1
00000000 FFFFFFFF
короче файлик сохраняем, скидываем на флешку карика в папку cheats и чешим в игру. тыкаем configure cheats и там выделяем наши 2 кода. кактолько активируем и возвращаемся в игру то видим что сразу все камни стали по 100 (и при этом они заморозились и не меняются), и если нажать на селект то получим прописанное количество денег, и аждый раз тыкая на селект бабло будет восполнятся.
ну этого вроде как должно хватить для базового читинга, а про остальные возможности я хз... сам только только понял как это всё делается. а реализовывать тут еще можно циклы, сохранение значений в регистры, условия обработки (про условия конечно интересно - мб подскажет кто-то как тут с ним воевать. а то как записать условие то понятно, но как перейти на исполнение кода по then\else... или истинное условие влияет только на следующую строчку кода, и если оно ложно то след строка пропускается... короче может кто подскажет как оно пашет то).