[ Новые сообщения · Участники · Правила форума · Поиск · 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+ некоторые атрибуты и тэги изменены или переименованы, поэтому если вы сидите не на старой версии - потребуется сделать несколько замен текста в коде. Идеи и Пожелания находятся здесь! 艾爾卡特 (Alkarter) - разработчик движка, который на LFF был именован как PDK 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)
Coding in Assembly requires a mix of:
80% of brain, passion, intuition, creativity 10% of programming skills 10% of tan levels in your blood. |
Код .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 Микрострафа, и разбирая адские дебри по справочникам, комментировать каждую строчку кода, чтобы хоть как-то понять что происходит в этом кругу преисподнии. Игра: Угадай по коду, какой фигней страдает Арчи~
Coding in Assembly requires a mix of:
80% of brain, passion, intuition, creativity 10% of programming skills 10% of tan levels in your blood. |
Это правда похоже на вытаскивание ресурсов? ;D
ЗЫ. Я думаю, что следующая версия будет не сразу, но будет более глобальная. Т.к. 0.04 стабильная в работе, торопиться некуда. Пытаюсь сделать CFG-управление длл-кой. То есть конфигурировать игру без ковыряния самой длл. Что из этого получится - увидим. Хотя бы управление размером окна точно надо в этот файл вынести. Это чтобы даже совсем новичок в ЛФ-модинге и полный ноль в АСМе мог пользоваться возможностями DLL, настраивать без использования компиляторов, получать удобный инструментарий. Максимум что потребуется - почитать инструкцию к конфигу. Но это всё в процессе. Я почти весь день убил на изучение WinAPI работы в среде MASM и его функций. До сих пор метаюсь в разных догадках и заморочках~
Coding in Assembly requires a mix of:
80% of brain, passion, intuition, creativity 10% of programming skills 10% of tan levels in your blood. |
Функция записи работает исправно в общем-то.
А вот над считыванием+парсингом голову поломать неплохо приходится. Расписал план работы программы, чтобы не растеряться [ Маленький Фриз говорит: это сообщение было отредактировано!]
Coding in Assembly requires a mix of:
80% of brain, passion, intuition, creativity 10% of programming skills 10% of tan levels in your blood. |
Всем привет, ребята~
Всю тему с тем, что нашел с ассемблерном коде PDK 1.2 я перенес в таблицу. А именно Гугло-таблицу. Теперь все новые находки буду вводить сразу же туда, а старую тему удалил. Если то-то найдете сами - сообщайте, тоже внесу в таблицу. Пока там немного данных, всё будет на 1-й странице. Если накопится чего - раскидаю на несколько. Там сейчас всё на английском, но комментариев не так уж и много. Поэтому если будут проблемы с английским - могу накидать русскоязычные комментарии. Ну и там можно ещё свои комментарии оставлять - правый клик на ячейку - комментировать. Таблица "Листинга и Реверсинга Ассемблера" для LF2~PDK - Клац Google Tables Приятного пользования.
Coding in Assembly requires a mix of:
80% of brain, passion, intuition, creativity 10% of programming skills 10% of tan levels in your blood. |
Прикрепленные файлы:
4245019.jpg
(26.4 Kb)
Coding in Assembly requires a mix of:
80% of brain, passion, intuition, creativity 10% of programming skills 10% of tan levels in your blood. |
В ПДК есть одна хрень, которая порой бесит.
Когда прыгаешь влево/вправо, разворачиваешься в прыжке и после приземления делаешь дэш (при этом жмёшь только клавишу прыжка, без стрелок), то в ПДК дэш делается в ту сторону, куда смотрит персонаж. В оригинале же дэш по дефолту идёт в сторону предыдущего прыжка! То есть в ПДК нельзя просто так взять и сделать деш спиной. Так вот, Archer-Dante, в Неорке эту особенность можно устранить? |
Устранить и поменять можно всё, если знаешь список адресов, где это происходит всё. Рассчеты, вычисления и чтение\запись дампа. Без адресов это пальцем в небо.
Даже файлы дат подгружаются целиком и полностью в дамп. По этой причине оригинальный лф2 сначала все дат файлы, а потом с ними работал, а на эвенте запашка нашли баг с вылетом при трансформации Louis в Louis EX, т.к. загрузка уже не целиком происходит Поэтому нужно искать всё с максимальной точностью. Иначе мы наделаем багов больше, чем сам Алькартер допустил, потому что, например, посчитал какие-то куски кода странными и ненужными, а теперь вот геймеры находят эти изменения как баги (с одной стороны, а с другой это ведь просто изменения механики). И процедура довольно непростая. Скорее всего нужно сохранение изначального направления в дамп, чтобы игра смогла его использовать для дэша потом. Из-за этого нужно адреса искать не только на ПДК, но и оригинал, чтобы найти отличия в методах.
Coding in Assembly requires a mix of:
80% of brain, passion, intuition, creativity 10% of programming skills 10% of tan levels in your blood. |
Мда, искать такое - как иголку в стоге сена.
Хоть и такой дэш непривычен, но есть свой плюс: с таким изменением игра требует более осознанной игры. И новое пожелание:: чтобы после start game курсор не скрывался, а был виден как в оригинале. Вполне можно понять, для чего Алик его стал скрывать, но всё-таки есть в этом некий пользовательский дискомфорт. Надеюсь, это не так закопано, как направление дэша. |
Хардкорное выключение: Alt+F4
p.s. учту эти пожелания, конечно, но искать вряд ли буду, скорее просто обращу особое внимание, если наткнусь на что-то из списка. Но найти специально многие вещи не представляется простым делом. Всё равно часто натыкаешься на что-то интересное, что даже не искал~
Coding in Assembly requires a mix of:
80% of brain, passion, intuition, creativity 10% of programming skills 10% of tan levels in your blood. |
Версия 0.05
- Переписан код для управления регенерациями Здоровья (HP) и Маны (MP) с привязкой к ID. Демонстрационно-увеличенные значения применены к ID 55. - (FIX!) Исправлено отсутствие удвоенной регенерации MP у Julian и Firzen от PDK! Кроме того расширенное окно LF2 по умолчанию выключено. Можно включить это по желанию. Функция регенерации HP сделана Espada_55, добавлен в титры! За указание на баг PDK с регенерацией маны у боссов спасибо daedr Приятного пользования!
Coding in Assembly requires a mix of:
80% of brain, passion, intuition, creativity 10% of programming skills 10% of tan levels in your blood. |
Научно-фантастическая минутка, заметки из моего журнала
Тэг "объекта защиты" в 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)
Coding in Assembly requires a mix of:
80% of brain, passion, intuition, creativity 10% of programming skills 10% of tan levels in your blood. |
Ещё пачка всего
Прикрепленные файлы:
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)
Coding in Assembly requires a mix of:
80% of brain, passion, intuition, creativity 10% of programming skills 10% of tan levels in your blood. |
И ещё
Прикрепленные файлы:
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)
Coding in Assembly requires a mix of:
80% of brain, passion, intuition, creativity 10% of programming skills 10% of tan levels in your blood. |
| |||