| Разработка и ромхакинг > Ромхакинг и программирование |
| [ALL] CHEATS & MODS |
| << < (175/197) > >> |
| krocki:
Здесь будут выкладываться чит-коды, моды и прочее что сними связано... |
| dedok179:
Все трейнеры для PS1 и в будущем не только, теперь базируются здесь. Там же прямые ссылки на образы игр. |
| Manvel738:
Сделайте пожалуйста Haunting starring Polterguy с бессмертием ! :neznayu: :neznayu: вот читы Master Code by Tony Hedstrom Game Genie RH2B-86T2 Always have all spells, and infinite use of them by Tony Hedstrom Game Genie 9V9A-DCC6 579A-CAC8 B39A-C9MA Have all spells (Only tested on Gens) by Tony Hedstrom Raw FFAF0E:DF Have infinite use of all spells, even if they're greyed out by Tony Hedstrom Game Genie RG2T-A61W Infinite Ecto by Tony Hedstrom Game Genie SD3A-AND6 EM3A-A9NA Infinite Energy by VisitntX Game Genie AM2A-AA9W Infinite Energy Bar/Time by Rune Raw FFAF24:0045 Infinite Plasma by VisitntX Game Genie 9V9A-DCL6 KK9A-CAC8 EV9A-C9MA Infinite Plasma by VisitntX Raw FFAF24:004A Infinite Plasma In One Code by Fanat Game Genie AM1A-AA4J Spells (letters) stay longer before they disappear (5 seconds instead of 2 seconds) by Tony Hedstrom Game Genie BECA-7732 Start a new game with all 5 spells by Tony Hedstrom Game Genie MF6A-AABT |
| tolik5_90:
Привет!На NES Castlevania III - Dracula's Curse при наборе пороля в OPENING набираешь AKAMA открывается второй круг,а вот в Akumajo Densetsu японской версии пороль не работает.Подскажите какой там пороль,или сделайте если сможете чтобы со старта начинать с второго круга. |
| Rafael78:
Взломайте пожалуйста Darkman.nes на неуязвимость |
| Sharpnull:
Rafael78, чем не устраивают эти читы https://gamehacking.org/game/29321? |
| Annatar:
А кто-нибудь ломал Castlevania Lecarde Chronicles? Я попытался в ней артманями хит пойнты поискать и заблокировать, и что-то вообще никак не получилось. |
| Sharpnull:
Annatar, Castlevania: The Lecarde Chronicles (скачать) на движке от Clickteam, судя по DLL и дате выхода игры (2013 год) это версия Multimedia Fusion 2 (MMF2). После запуска игры, основные файлы движка будут распакованы в %temp% (stdrt.exe, mmf2d3d9.dll и т. п.), ресурсы будут грузиться из ctlc data d.exe. Патчить файлы движка, полагаю, будет непросто. С помощью Cheat Engine я нахожу здоровье, которое равно 80 (0x50), там всегда 4 адреса с этим значением, 3 из которых зависимы, но адреса после смены уровня или смерти меняются, так что придётся каждый раз искать. Есть способ автоматизации для одичалых: после запуска игры значения после адреса жизни не меняются. После запуска игры находим адрес здоровья, подставляясь под врага, из 4 найденных адресов меняем каждый, пока не найдём тот, от которого зависят другие. В Memory View после нашего адреса жизни копируем 79 байт. В Memory View открываем Tools > Lua Engine. Вводим скрипт, который сделал на основе первого попавшегося результата: --- Код: ---aobresult = AOBScan("СЮДА 79 БАЙТОВ") if (aobresult ~= nil) then print("Results found: "..aobresult.Count) local addressList = getAddressList() if aobresult.Count>0 then print("First result="..aobresult[0]) local hp1 = addressList.getMemoryRecordByDescription('HP1') if hp1 == nil then hp1 = addressList.createMemoryRecord() hp1.setDescription("HP1") end hp1.setAddress(string.format("%x", tonumber(aobresult[0], 16) - 1)) hp1.Active = true hp1.Value = "80" end if aobresult.Count>1 then print("Second result="..aobresult[1]) local hp2 = addressList.getMemoryRecordByDescription('HP2') if hp2 == nil then hp2 = addressList.createMemoryRecord() hp2.setDescription("HP2") end hp2.setAddress(string.format("%x", tonumber(aobresult[1], 16) - 1)) hp2.Active = true hp2.Value = "80" end if aobresult.Count>2 then print("Third result="..aobresult[2]) local hp3 = addressList.getMemoryRecordByDescription('HP3') if hp3 == nil then hp3 = addressList.createMemoryRecord() hp3.setDescription("HP3") end hp3.setAddress(string.format("%x", tonumber(aobresult[2], 16) - 1)) hp3.Active = true hp3.Value = "80" end aobresult.destroy() aobresult = nil else print("No results found") end --- Конец кода --- Вместо СЮДА 79 БАЙТОВ вставляем байты как видим в хекс-редакторе (00 AB FF ...), если нажали Ctrl+C в Memory View, то всё будет правильно. Теперь после каждой смены уровня, нажимаем Execute в окне Lua Engine, будут находиться от 1 до 3 адресов и добавляться в окно адресов HP1, HP2, HP3. Проблема в том, что после смены уровня CE будет перезаписывать какие-то байты, поэтому нужно улучшить скрипт, чтобы он перед изменением значения, когда оно уменьшается, проверял байты для поиска и искал заново, тогда можно будет находить жизнь только после первого запуска игры. Но я не разбираюсь в CE, так что может кто вам подскажет, как это сделать лучше. -------- Оказалось хуже, через 16 байт от жизни идёт лимит жизни, а ещё через 16 байт текущая мана (зелёная шкала), и после через 16 байт лимит маны. Ману не использовал, поэтому она не изменялась. Поэтому нужно искать без учёта маны, а если лимиты жизни/маны меняются, то и это учитывать. -------- Сразу не догадался, вы можете просто повысить лимит. Находите жизнь, как описывал выше, через 16 байт будет 0x50, меняете на байты FF FF FF (это 16777215 HP), жизнь тоже до FF FF FF. Позже после смерти будет снова FF FF FF. |
| krocki:
--- Цитата: Annatar от 16 Январь 2021, 00:44:09 ---А кто-нибудь ломал Castlevania Lecarde Chronicles? Я попытался в ней артманями хит пойнты поискать и заблокировать, и что-то вообще никак не получилось. --- Конец цитаты --- --- Код: (Скрипт для CheatEngine) ---[ENABLE] alloc(newmem,32) label(returnhere) newmem: cmp byte ptr [eax+18],50 je returnhere mov ecx,[esp+18] mov [eax+08],ecx jmp returnhere stdrt.exe+11AD2: jmp newmem nop 2 returnhere: [DISABLE] dealloc(newmem) stdrt.exe+11AD2: mov ecx,[esp+18] mov [eax+08],ecx --- Конец кода --- |
| Annatar:
--- Цитата: Sharpnull от 16 Январь 2021, 05:09:11 ---Annatar, Castlevania: The Lecarde Chronicles (скачать) на движке от Clickteam, судя по DLL и дате выхода игры (2013 год) это версия Multimedia Fusion 2 (MMF2). После запуска игры, основные файлы движка будут распакованы в %temp% (stdrt.exe, mmf2d3d9.dll и т. п.), ресурсы будут грузиться из ctlc data d.exe. Патчить файлы движка, полагаю, будет непросто. С помощью Cheat Engine я нахожу здоровье, которое равно 80 (0x50), там всегда 4 адреса с этим значением, 3 из которых зависимы, но адреса после смены уровня или смерти меняются, так что придётся каждый раз искать. Есть способ автоматизации для одичалых: после запуска игры значения после адреса жизни не меняются. После запуска игры находим адрес здоровья, подставляясь под врага, из 4 найденных адресов меняем каждый, пока не найдём тот, от которого зависят другие. В Memory View после нашего адреса жизни копируем 79 байт. В Memory View открываем Tools > Lua Engine. Вводим скрипт, который сделал на основе первого попавшегося результата: --- Код: ---aobresult = AOBScan("СЮДА 79 БАЙТОВ") if (aobresult ~= nil) then print("Results found: "..aobresult.Count) local addressList = getAddressList() if aobresult.Count>0 then print("First result="..aobresult[0]) local hp1 = addressList.getMemoryRecordByDescription('HP1') if hp1 == nil then hp1 = addressList.createMemoryRecord() hp1.setDescription("HP1") end hp1.setAddress(string.format("%x", tonumber(aobresult[0], 16) - 1)) hp1.Active = true hp1.Value = "80" end if aobresult.Count>1 then print("Second result="..aobresult[1]) local hp2 = addressList.getMemoryRecordByDescription('HP2') if hp2 == nil then hp2 = addressList.createMemoryRecord() hp2.setDescription("HP2") end hp2.setAddress(string.format("%x", tonumber(aobresult[1], 16) - 1)) hp2.Active = true hp2.Value = "80" end if aobresult.Count>2 then print("Third result="..aobresult[2]) local hp3 = addressList.getMemoryRecordByDescription('HP3') if hp3 == nil then hp3 = addressList.createMemoryRecord() hp3.setDescription("HP3") end hp3.setAddress(string.format("%x", tonumber(aobresult[2], 16) - 1)) hp3.Active = true hp3.Value = "80" end aobresult.destroy() aobresult = nil else print("No results found") end --- Конец кода --- Вместо СЮДА 79 БАЙТОВ вставляем байты как видим в хекс-редакторе (00 AB FF ...), если нажали Ctrl+C в Memory View, то всё будет правильно. Теперь после каждой смены уровня, нажимаем Execute в окне Lua Engine, будут находиться от 1 до 3 адресов и добавляться в окно адресов HP1, HP2, HP3. Проблема в том, что после смены уровня CE будет перезаписывать какие-то байты, поэтому нужно улучшить скрипт, чтобы он перед изменением значения, когда оно уменьшается, проверял байты для поиска и искал заново, тогда можно будет находить жизнь только после первого запуска игры. Но я не разбираюсь в CE, так что может кто вам подскажет, как это сделать лучше. -------- Оказалось хуже, через 16 байт от жизни идёт лимит жизни, а ещё через 16 байт текущая мана (зелёная шкала), и после через 16 байт лимит маны. Ману не использовал, поэтому она не изменялась. Поэтому нужно искать без учёта маны, а если лимиты жизни/маны меняются, то и это учитывать. -------- Сразу не догадался, вы можете просто повысить лимит. Находите жизнь, как описывал выше, через 16 байт будет 0x50, меняете на байты FF FF FF (это 16777215 HP), жизнь тоже до FF FF FF. Позже после смерти будет снова FF FF FF. --- Конец цитаты --- В принципе, работает, больше спасибо, уже намного легче. Ману и очки оружия можно ведь добавить из тех же 79 байтов, или для них нужно делать отдельный скрипт со своим поиском? И хорошо бы ещё жизни тоже найти, что бы после двух падений в пропасть не начинать весь уровень с начала, а уж с чекпойта. Добавлено позже: --- Цитата: krocki от 16 Январь 2021, 20:20:43 --- --- Код: (Скрипт для CheatEngine) ---[ENABLE] alloc(newmem,32) label(returnhere) newmem: cmp byte ptr [eax+18],50 je returnhere mov ecx,[esp+18] mov [eax+08],ecx jmp returnhere stdrt.exe+11AD2: jmp newmem nop 2 returnhere: [DISABLE] dealloc(newmem) stdrt.exe+11AD2: mov ecx,[esp+18] mov [eax+08],ecx --- Конец кода --- --- Конец цитаты --- А вот это, увы не работает. пишет Script Error:[string "[ENABLE]..."]:1: unexpected symbol near '[' |
| Sharpnull:
--- Цитата: Annatar от 18 Январь 2021, 06:33:33 ---Ману и очки оружия можно ведь добавить из тех же 79 байтов, или для них нужно делать отдельный скрипт со своим поиском? --- Конец цитаты --- Вы не поняли, в последнем абзацем вы должны были догадаться, что можно выставить 16 млн HP и после сохранения они останутся, вы не сможете столько потратить за игру скорее всего. Мой Lua-скрипт не нужен. krocki, в cmp byte ptr [eax+18],50 проверяется байт с лимитом HP, который через 0x10 байт от жизни? Если я увеличиваю лимит HP, а он будет увеличен, если взять улучшение, судя по прохождению, то скрипт не работает. |
| krocki:
--- Цитата: Sharpnull от 18 Январь 2021, 18:00:20 ---krocki, в cmp byte ptr [eax+18],50 проверяется байт с лимитом HP, который через 0x10 байт от жизни? Если я увеличиваю лимит HP, а он будет увеличен, если взять улучшение, судя по прохождению, то скрипт не работает. --- Конец цитаты --- это тестовый скрипт на быструю руку, просто другой фильтр использовать нужно где значение всегда статичное... главное что бы он понял как это делается... <_< |
| Annatar:
--- Цитата: krocki от 18 Январь 2021, 13:46:45 ---Annatar, Это обычный АА скрипт, не для LUA...интересно куда ты его питался вставить. :D --- Конец цитаты --- В LUA и пытался) --- Цитата: Sharpnull от 18 Январь 2021, 18:00:20 ---Вы не поняли, в последнем абзацем вы должны были догадаться, что можно выставить 16 млн HP и после сохранения они останутся, вы не сможете столько потратить за игру скорее всего. Мой Lua-скрипт не нужен. --- Конец цитаты --- Я понял, но мне не нужно 16 млн хп, мне нужна именно заморозка нормальных значений, что бы спокойно дойти до боссов и подраться с ними уже без читов. Добавлено позже: --- Цитата: krocki от 18 Январь 2021, 18:04:54 ---это тестовый скрипт на быструю руку, просто другой фильтр использовать нужно где значение всегда статичное... главное что бы он понял как это делается... <_< --- Конец цитаты --- Увы, не понимаю( |
| Annatar:
krocki, Опробовал скрипт - он идеален в смысле того, что после пропуска удара замораживается и период неуязвимости, что позволяет больше не волноваться о чёртовых медузах и летучих мышах, к которым у автора какая-то нездоровая любовь. Всё-таки, что нужно сделать, что бы он продолжал работать после увеличения лимита хп и маны?? |
| Sharpnull:
--- Цитата: Annatar от 20 Январь 2021, 02:28:42 ---Увы, не понимаю( --- Конец цитаты --- Код, который отнимает жизнь, используется не только для HP, поэтому скрипт от krocki блокирует изменение только значений в RAM, у которых через 16 байт вперёд от адреса установлено значение 0x50. Если не повезёт и у другого значения (не HP) через 16 байт тоже будет 0x50, то логика игры нарушится. Поэтому нужно найти статичный относительно HP байт или байты, которые будут на протяжении всей игры не меняться. Это сложно, потому что нужно точно знать за что эти байты отвечают и что не будет конфликта, иначе изменение в конце игры или какой-то настройки испортит работу. --- Цитата: Annatar от 22 Январь 2021, 23:53:50 ---Всё-таки, что нужно сделать, что бы он продолжал работать после увеличения лимита хп и маны?? --- Конец цитаты --- Из простых решений, написать несколько версий скрипта krocki для каждого лимита HP: изменить 50 на нужное 16-ричное значение в cmp byte ptr [eax+18],50. Причём для HP и MP придётся использовать разные версии одновременно (придётся видимо изменить и другой код), если полоски не совпадают, хотя я не проверял работу на MP, предполагаю, что вы проверили. Только опять же, может не повезти с ложным срабатыванием. -------- UPD: Не знаю всех возможностей CE, но можно было бы написать скрипт на Lua по аналогии со скриптом от krocki (на ASM это сложнее), в котором будут проверяться все возможные варианты лимита HP и лимита MP, а также HP и MP в пределах лимита, что сведёт вероятность ложного срабатывания к минимуму и не придётся вручную переключать разные значения (просто вкл. и выкл.). |
| Annatar:
Кажется получилось, когда лимит был 80 - значение было 50 Когда лимит стал 100 - значение 64. И так далее, просто меняю число при получении апгрейда хп. |
| krocki:
Чё ещё не сделали, ладно вот тестируй... ;) --- Код: (Castlevania: Lecarde Chronicles - Script for Cheat Engine...) ---[ENABLE] alloc(script,256) label(backjump) script: cmp byte ptr [ecx+98],01 jne @f mov byte ptr [ecx+68],09 //Вечные жизни (REST=9)... mov ecx,[ecx+08] pop esi mov [edx+08],ecx jmp backjump @@: cmp byte ptr [ecx+88],01 jne @f push ebx mov ebx,[ecx+18] mov [ecx+08],ebx //Вечное здоровье... pop ebx mov ecx,[ecx+08] pop esi mov [edx+08],ecx jmp backjump @@: cmp byte ptr [ecx+68],01 jne @f push ebx mov ebx,[ecx+18] mov [ecx+08],ebx //Вечная мана... pop ebx mov ecx,[ecx+08] pop esi mov [edx+08],ecx jmp backjump @@: mov ecx,[ecx+08] pop esi mov [edx+08],ecx jmp backjump stdrt.exe+1280F: jmp script nop 2 backjump: [DISABLE] dealloc(script) stdrt.exe+1280F: mov ecx,[ecx+08] pop esi mov [edx+08],ecx --- Конец кода --- |
| Sharpnull:
--- Цитата: krocki от 23 Январь 2021, 05:17:12 ---Чё ещё не сделали, ладно вот тестируй... --- Конец цитаты --- :) Я сделал на LUA попроще, с проверкой на лимиты HP/MP. Annatar, проверьте этот Lua скрипт тоже: --- Код: ---function debugger_onBreakpoint() local hmpValues = { [ 80]=true,[100]=true,[120]=true,[140]=true,[160]=true,[180]=true } local hpAddr = EAX + 0x08 local hpLimitAddr = EAX + 0x18 local mpAddr = EAX + 0x28 local mpLimitAddr = EAX + 0x38 local hpValue = readInteger(hpAddr) local hpLimitValue = readInteger(hpLimitAddr) local mpValue = readInteger(mpAddr) local mpLimitValue = readInteger(mpLimitAddr) if hmpValues[hpLimitValue] and hmpValues[mpLimitValue] and hpValue <= hpLimitValue and mpValue <= mpLimitValue then ECX = hpLimitValue -- return 0 -- break -- return 1 -- continue without breaking end return 1 end debug_setBreakpoint(getAddress("stdrt.exe+11AD6")) --- Конец кода --- Только на HP, возможные лимиты в hmpValues, предположил, что увеличение на 20 (десятичное число), если перебор/недобор, то можно убрать/добавить (одно значение это [xx]=true через запятую). -------- Чтобы включить, нужно выполнить скрипт, а чтобы отключить в Memory Viewer перейти на stdrt.exe+11AD6 (Ctrl+G) и нажать Toggle Breakpoint (или отключить breakpoint другим способом). Я не знаю как добавить в таблицу читов. -------- Судя по прохождению (сравнил шкалы здоровья) макс. HP/MP = 180. Поправил скрипт. |
| krocki:
--- Цитата: Sharpnull от 23 Январь 2021, 05:56:47 ---Я сделал на LUA попроще --- Конец цитаты --- Неее это много!!! :D Вот альтернативный вариант проще некуда... ^_^ Вечные HP+MP+REST... --- Код: (Castlevania: Lecarde Chronicles - AA Script for Cheat Engine...) ---[ENABLE] stdrt.exe+1280F: db E9 F1 E9 03 00 90 90 stdrt.exe+51205: db 80 B9 98 00 00 00 01 75 10 C6 41 68 09 FF 71 28 db 8F 41 18 FF 71 48 8F 41 38 8B 49 08 5E 89 4A 08 C3 [DISABLE] stdrt.exe+1280F: db 8B 49 08 5E 89 4A 08 --- Конец кода --- P.S - Кстати все модули и exe упаковали через инструмент написанный на C++ 5.0...спрашивается нафига :neznayu: Снизу добавил готовый трейнер... ;) |
| Annatar:
Все скрипты и трейнер потестил) Всё работает, но безлимитную неуязвимость после удара включает только самый первый скрипт krocki и lua скрипт Sharpnull Так что буду ими пользоваться. Огромное спасибо) |
| Sharpnull:
--- Цитата: Annatar от 23 Январь 2021, 16:17:09 ---Всё работает, но безлимитную неуязвимость после удара включает только самый первый скрипт krocki и lua скрипт Sharpnull --- Конец цитаты --- Нет, у моего скрипта не работает неуязвимость после взятия первого улучшения HP (Hunting ground, почти самое начало где подвал), оно вообще работало по случайности и постоянное мерцание героя мне не нравится. Короткий скрипт krocki не проверял, а до этого у меня после взятия улучшения HP оно сбросилось до 80, трейнер работает нормально, хотя пришлось эмулировать нажатия Numpad. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |