[ Новые сообщения · Участники · Правила форума · Поиск · RSS ] |
Фан Форум для LF'айтеров » Игрострой » Модострой LF2 » Neora 2.09 - (PDK + DLL) |
Neora 2.09 - (PDK + DLL) |
![]() Alternative english version of topic on LFE Alternative english version of topic on Official LF2 Forums Название Neora было дано из Neo (новый) и Ra (от rarara.dll), это по сути проект состоящий из DLL-аддона для движка PDK, который нынче куда популярнее чистого старого dll на оригинал из-за своих крайне продвинутых фич типа поддержки png, загрузки перед боем и т.д.. Но чего-то от dll нам всё-таки не хватает. А я недавно сел заниматься модами. И мне приспичило. Такая история :) Neora - Гибрид Alkarter's Exe и Silva's and folks DLL Эта основа для мода совместима с уже существующими модами на PDK 1.2+, однако начиная с Neora 2.00+ некоторые атрибуты и тэги изменены или переименованы, поэтому если вы сидите не на старой версии - потребуется сделать несколько замен текста в коде. Идеи и Пожелания находятся здесь! ![]() ![]() ![]() ![]() Drakken - Создание DLL-прототипа с патчингом в реальном времени Lord Silva - модификация DLL под нужды LF2 Archer-Dante - адаптация DLL для работы в PDK и добавление новых функций Surik - информационная поддержка по разработке Neora 2.09 ✔ | Скачать | Download Прикрепленные файлы: 8845048.png(39.5 Kb) · 7262652.png(25.2 Kb) · 3681975.png(28.1 Kb) · 1940849.png(30.1 Kb) · 6812581.png(27.8 Kb)
|
Код .386 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib include \masm32\include\user32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\Shlwapi.lib .data MsgBoxCaption db "blabla",0 MsgBoxText db "Файл конфигурации сброшен",0 TweakName db "tweak.cfg",0 Overlap OVERLAPPED <NULL,NULL,0,NULL,NULL> .data? hFile dd ? hMemory dd ? pMemory dd ? SizeOfFile DWORD ? .code Main: Invoke CreateFile, ADDR TweakName,\ ;создание файла с именем из TweakName GENERIC_READ or GENERIC_WRITE ,\ ;разрешаем запись и считывание FILE_SHARE_READ or FILE_SHARE_WRITE,\ ;разрешаем доступ к файлу процессам NULL,OPEN_ALWAYS,\ ;создает файл, если такого ещё нету или открывает существующий FILE_FLAG_OVERLAPPED,\ ;разрешение на асинхронную работу с файлом NULL mov hFile, eax ;записывает начальную область памяти в hFile, обычно это 64h (100) cmp eax, INVALID_HANDLE_VALUE ;но если там что-то вроде FFFFFFF (равно -1), то файл уже есть je exit ;тогда пропускаем запись в файл invoke GlobalAlloc,\ ; выделение памяти GMEM_MOVEABLE or GMEM_ZEROINIT,\ ;возвращает адрес где находится выделенная память 100 ;выделение 100 (64h) памяти. mov hMemory,eax ; помещаем возвращаемое значение в hMemory invoke GlobalLock,hMemory ;создает указатель на hMemory область памяти mov pMemory,eax ;помещает этот указатель в pMemory Invoke MessageBoxA,\ ;Сообщение об успешном создании файла NULL, ADDR MsgBoxText,\ ;Текст сообщения ADDR MsgBoxCaption, MB_OK ;Заголовок окна сообщения invoke ReadFile,hFile,\ ;считывает файл pMemory,\ ;вставляем указатель, куда будет считываться 10,\ ; максимальное чисто байтов для считывания ADDR SizeOfFile,\ ; указатель на переменную, которая будет использована для синхронных операций addr Overlap ;Указатель на конструкцию OVERLAPPED, для асинхронных операций. cmp dword ptr ds:[SizeOfFile],0 ;проверяем, что файл не пустой jnz exit ; Если там уже что-то есть - пропускаем запись туда чего-либо lea edx, dword ptr ds: [pMemory]; Извлекаем из указателя pMemory настоящий адрес - hMemory, пихаем его в EDX mov edx,dword ptr ds: [edx]; Берем значение из адреса [edx]и помещаем в регистр edx уже само значение~ mov dword ptr ds:[edx],10 ; записываем в адрес [edx]значение 10 (0Ah) (ЗАЧЕМ?!) invoke WriteFile,hFile,\ ;над каким файлом паримся pMemory,\ ;указатель на область, где лежит инфа, которую пишем в файл 10,\ ; количество байт, которое будет записано ADDR SizeOfFile,\ ; указатель на переменную, которая будет использована для синхронных операций addr Overlap ;Указатель на конструкцию OVERLAPPED, для асинхронных операций. jmp exit exit: Invoke ExitProcess, NULL end Main Вашу ж дивизию. Чтобы хоть какой-то сдвиг в своем ступоре и понимании WinAPI сделать, пришлось достать старый код Сильвы от Read-Write, рыться в MSDN Микрострафа, и разбирая адские дебри по справочникам, комментировать каждую строчку кода, чтобы хоть как-то понять что происходит в этом кругу преисподнии. Игра: Угадай по коду, какой фигней страдает Арчи~ |
Это правда похоже на вытаскивание ресурсов? ;D
ЗЫ. Я думаю, что следующая версия будет не сразу, но будет более глобальная. Т.к. 0.04 стабильная в работе, торопиться некуда. Пытаюсь сделать CFG-управление длл-кой. То есть конфигурировать игру без ковыряния самой длл. Что из этого получится - увидим. Хотя бы управление размером окна точно надо в этот файл вынести. Это чтобы даже совсем новичок в ЛФ-модинге и полный ноль в АСМе мог пользоваться возможностями DLL, настраивать без использования компиляторов, получать удобный инструментарий. Максимум что потребуется - почитать инструкцию к конфигу. Но это всё в процессе. Я почти весь день убил на изучение WinAPI работы в среде MASM и его функций. До сих пор метаюсь в разных догадках и заморочках~ |
Всем привет, ребята~
Всю тему с тем, что нашел с ассемблерном коде PDK 1.2 я перенес в таблицу. А именно Гугло-таблицу. Теперь все новые находки буду вводить сразу же туда, а старую тему удалил. Если то-то найдете сами - сообщайте, тоже внесу в таблицу. Пока там немного данных, всё будет на 1-й странице. Если накопится чего - раскидаю на несколько. Там сейчас всё на английском, но комментариев не так уж и много. Поэтому если будут проблемы с английским - могу накидать русскоязычные комментарии. Ну и там можно ещё свои комментарии оставлять - правый клик на ячейку - комментировать. Таблица "Листинга и Реверсинга Ассемблера" для LF2~PDK - Клац Google Tables Приятного пользования. ![]() |
В ПДК есть одна хрень, которая порой бесит.
Когда прыгаешь влево/вправо, разворачиваешься в прыжке и после приземления делаешь дэш (при этом жмёшь только клавишу прыжка, без стрелок), то в ПДК дэш делается в ту сторону, куда смотрит персонаж. В оригинале же дэш по дефолту идёт в сторону предыдущего прыжка! То есть в ПДК нельзя просто так взять и сделать деш спиной. Так вот, Archer-Dante, в Неорке эту особенность можно устранить? |
Устранить и поменять можно всё, если знаешь список адресов, где это происходит всё. Рассчеты, вычисления и чтение\запись дампа. Без адресов это пальцем в небо.
Даже файлы дат подгружаются целиком и полностью в дамп. По этой причине оригинальный лф2 сначала все дат файлы, а потом с ними работал, а на эвенте запашка нашли баг с вылетом при трансформации Louis в Louis EX, т.к. загрузка уже не целиком происходит Поэтому нужно искать всё с максимальной точностью. Иначе мы наделаем багов больше, чем сам Алькартер допустил, потому что, например, посчитал какие-то куски кода странными и ненужными, а теперь вот геймеры находят эти изменения как баги (с одной стороны, а с другой это ведь просто изменения механики). И процедура довольно непростая. Скорее всего нужно сохранение изначального направления в дамп, чтобы игра смогла его использовать для дэша потом. Из-за этого нужно адреса искать не только на ПДК, но и оригинал, чтобы найти отличия в методах. |
Мда, искать такое - как иголку в стоге сена.
Хоть и такой дэш непривычен, но есть свой плюс: с таким изменением игра требует более осознанной игры. И новое пожелание:: чтобы после start game курсор не скрывался, а был виден как в оригинале. Вполне можно понять, для чего Алик его стал скрывать, но всё-таки есть в этом некий пользовательский дискомфорт. Надеюсь, это не так закопано, как направление дэша. |
Хардкорное выключение: Alt+F4
p.s. учту эти пожелания, конечно, но искать вряд ли буду, скорее просто обращу особое внимание, если наткнусь на что-то из списка. Но найти специально многие вещи не представляется простым делом. Всё равно часто натыкаешься на что-то интересное, что даже не искал~ |
Версия 0.05
- Переписан код для управления регенерациями Здоровья (HP) и Маны (MP) с привязкой к ID. Демонстрационно-увеличенные значения применены к ID 55. - (FIX!) Исправлено отсутствие удвоенной регенерации MP у Julian и Firzen от PDK! Кроме того расширенное окно LF2 по умолчанию выключено. Можно включить это по желанию. Функция регенерации HP сделана Espada_55, добавлен в титры! За указание на баг PDK с регенерацией маны у боссов спасибо daedr Приятного пользования! |
Научно-фантастическая минутка, заметки из моего журнала
![]() Тэг "объекта защиты" в PDK. Если объект умирает - стадия проигрывается. Он был объявлен Алькартером. ![]() Тэг "прозрачности". Кажется, именно про него была речь, когда Алькартер рассказывал про возможность сделать прозрачный спрайты на уровне движка, если используется PNG. А теперь горяченькое! ![]() Тэг "Join_reserve:". Нигде не упоминался, но догадаться для чего он не трудно. ![]() ![]() ![]() 3 тэга, о которых нигде ничего не сказано, но они есть. "movie" , "riddle" и "choose" Интересно, для чего они, и работают ли в действительности? PDK таит в себе много возможностей, о которых нигде не говорилось, эти тайны зарыты очень глубоко, что даже черный властелин позавидует этой глубине! >:3 Но одну маленькую тайну я всё же могу поведать: эти 3 тэга являются частью для Stage.dat файлов :3 И на сладенькое: ![]() Атрибуты Poison, Weak, Manacle Прикрепленные файлы: 6750788.png(12.0 Kb) · 7733644.png(11.3 Kb) · 7405516.png(21.5 Kb) · 8361220.png(14.0 Kb) · 8438369.png(15.5 Kb)
|
Ещё пачка всего
Прикрепленные файлы: 0516711.png(16.9 Kb) · 5078733.png(14.0 Kb) · 4998061.png(11.4 Kb) · 0627122.png(19.8 Kb) · 5616709.png(26.4 Kb) · 6194968.png(25.4 Kb) · 2439186.png(25.4 Kb) · 6338905.png(32.0 Kb) · 8267003.png(37.3 Kb) · 0232323.png(24.8 Kb)
|
И ещё
Прикрепленные файлы: 1257620.png(12.5 Kb) · 3880397.png(10.4 Kb) · 7800173.png(11.4 Kb) · 1254316.png(27.5 Kb) · 3499603.png(7.2 Kb)
|
| |||