Название 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+некоторые атрибуты и тэги изменены или переименованы, поэтому если вы сидите не на старой версии - потребуется сделать несколько замен текста в коде.
- Добавлен State 3xxyzzz для остановки времени —— xx - вероятность Time Stop —— zzz - время Time Stop —— y - тип тайм-стопа: ————— 0 - останавливает ВСЁ, кроме атакующего ————— 1 - останавливает ВСЁ, кроме персонажей и объектов с командой атакующего ————— 2 - останавливает ВСЕ объекты, кроме персонажей
- Добавлен State 2xxxyyy, где ХХХ - число маны, которое вы собираетесь отнять. Если маны хватает переход происходит согласно "Next:". Если же маны не хватает, происходит переход в YYY.
- Добавлены статусы управлением направления взгляда объекта: ————— Статус 30 - объект разворачивается строго влево ————— Статус 31 - объект разворачивается строго вправо
- Добавлен Статус 9ххх. При срабатывании атакующего ITR на цель, этот атакующий объект совершит переход в кадр ХХХ, где ХХХ может быть от 0 до 799 (значение не больше лимита кадров). Создано для валидации каких-либо действий у персонажа.
Bodies:
- Переработан алгоритм "bdy: 1xxx", теперь заложники берут команду того, кто их освободил! А также функция теперь может быть использована не только с Criminal.dat (ID 300). Кроме того тело теперь позволяет отправлять в кадр 0.
- Добавлена функция "bdy: 2xxx", которая работает точно так же, как и 1xxx. Без Тряски.
- Добавлена функция "bdy: 3xxx", которая работает точно так же, как и 1xxx, но также позволяет использовать даже команде врагов (Team 5), и активировать объект-заложник снарядами.
- Добавлена функция "bdy: 4xxx", которая работает точно так же, как и 3xxx. Без Тряски.
- Добавлено Bdy 50, где персонаж, получающий урон, не перейдет в болевые кадры и его приемы не будут прерваны.
- Добавлен комплексный аналог тела с переходом "bdy: 1xxyyyzzzw", где: ~~~ XX - вероятность срабатывания в %, 0 = 100% ————— YYY - кадр, куда должена будет перейти Цель, (800~999) - перехода не будет ————— ZZZ - кадр, куда должен будет перейти Атакующий, (800~999) - перехода не будет ————— W - дополнительный эффект от срабатывания: —————————— Без тряски: —————————— 0 ~ ничего не происходит —————————— 1 ~ Цель получит команду —————————— 2 ~ Цель получит урон —————————— 3 ~ Цель получит урон и команду Атакующего —————————— С тряской: —————————— 4 ~ ничего не происходит + тряска —————————— 5 ~ Цель получит команду Атакующего + тряска —————————— 6 ~ Цель получит урон Атакующего + тряска —————————— 7 ~ Цель получит урон и команду Атакующего + тряска
- Добавлен Body Kind 1XXYYYZ: ————— XX - % вероятности срабатывания (0 = 100%) ————— YYY - % возвращаемого урона атакующему ————— Z - тип возвращаемого урона (Тип урона, на данной стадии разработки эта переменная просто зарезервирована, поэтому используйте значение "0") (Броня персонажа действует ПЕРЕД данным "bdy", что означает, что пока броня не будет разбита, данное Тело не будет действовать. Действует только с Type-0 целью и атакующим)
- Добавлен "Itr\Kind: 1000" для мгновенных перемещений в координаты X, Y и Z Для перемещения используются атрибуты "x:", "y:" и "z:" внутри ITR. Укажите "Injury:", чтобы объект сменил свой кадр сразу после перехода в указанное место. Все 4 атрибута поддерживают значение "-1", означающее "пропустить параметр". Дополнительно ——— "dvx:" - требуемое число HP для перехода ——— "dvy:" - требуемое число MP для перехода (Здоровье и мана вычитаются только если оба параметра соответствует минимальным требованиям для переноса объекта)
Effects: ——— Effect 50, он не издает звуков, а так же не отправляет в болевые кадры персонажа. ——— Effect 1XXX - где атакующий теряет XXX здоровья, при срабатывании атаки. Может убить ——— Effect 2XXX - где атакующий восстанавливает XXX здоровья, при срабатывании атаки по type-0. Не превышает лимита ХП ——— Effect 3XXX - где атакующий восстанавливает XXX здоровья, при срабатывании атаки по любому type. Не превышает лимита ХП ——— Effect 4XXX - где атакующий теряет XXX маны, при срабатывании атаки ——— Effect 5XXX - где атакующий восстанавливает XXX маны, при срабатывании атаки по type-0 ——— Effect 6XXX - где атакующий восстанавливает XXX маны, при срабатывании атаки по любому type ——— Effect 7XXX, где XXX - количество маны, которое отнимет атака у жертвы ——— Effect 8XXX, где XXX - количество маны, которое отнимет атака у жертвы и отдаёт атакующему ——— Effect 9ХХХ, где ХХХ - кадр, куда будет отправлена жертва с Type-0.
Эффектам можно определить звук эффекта через тэг "sound: N", где N: ——— 0 - обычный звук удара ——— 1 - звук удара по блоку и броне Julian ——— 2 - звук удара сбивающего с ног \ звук сильного удара ——— 3 - удар по камню ——— 4 - удар по бейсбольной бите ——— 5 - звук шага \ приземления персонажа ——— 6 - звук падения тела на землю ——— 7 - звук Дэш прыжка ——— 8 - звук попадания t3 объекта во что-либо ——— 9 - звук разрушающегося камня ——— 10 - звук стрелы Генри попадающей в землю ——— 11 - заглушенный звук пронзания ——— 12 - звонкий звук пронзания ——— 13 - звук отбивания Мячика Битой ——— 14 - звук заморозки Льдом ——— 15 - звук разбивания Льда ——— 16 - звук поджигания ——— 17 - звук удара по броне Louis и Knight
Attributes:
Огромное количество новых атрибутов, которые прописываются между "bmp_begin" и "bmp_end": —— "start_hp:" - базовое значение здоровья на старте сражения
—— "start_hp_max:" - базовое значение максимального здоровье на старте сражения
—— "hp_regen:" - количество регенерируемого здоровья за раз. Можно выставлять отрицательные значения. У всех персонажей обычная регенерация равна 1, поэтому если написать "regen_hp: 3", вы получите 1+3 здоровья в регенерации, а "hp_regen: -1" отключит регенерацию вовсе.
—— "hp_regen_cd:" - время отката в Wait, прежде чем очередная порция "hp_regen" поступит в персонажа. Может быть использовано даже когда "regen_hp" не указан. У атрибута есть встроенный таймер в 11 тактов (от оригинального LF2), поэтому если вы хотите отключить задержку полностью, то введите -11, в сумме получится 0, то есть нулевая задержка. Значения ниже -11 не работают, так как задержка не может быть в сумме отрицательной.
—— "hp_dark_regen:" - количество регенерируемого темного здоровья за раз
—— "hp_dark_regen_cd:" - время отката в Wait, прежде чем очередная порция "hp_dark_regen" поступит в персонажа
—— "hp_limit:" - лимит здоровья, который ни при каких обстоятельствах не может быть превышен (хардкап)
—— "hp_regen_type:" - принцип работы регенерации здоровья. При "0" отрицательная регенерация может убить персонажа. При "1" регенерация не работает при здоровье ниже "hp_regen_min:" и выше "hp_regen_max" При "2" будет всё то же, что и при значении "1", но отрицательная регенерация не сможет убить персонажа.
—— "hp_regen_min:" - значение, ниже которого эффект регенерации перестает действовать
—— "hp_regen_max:" - значение, выше которого эффект регенерации перестает действовать
—— "hp_regen_hurt_cd:" - после получения урона персонаж не будет регенерировать указанное время.
—— "start_mp:" - базовое значение маны на старте сражения
—— "start_mp_max:" - базовое значение максимальной маны на старте сражения
—— "mp_regen:" - количество регенерируемой маны за раз, можно выставлять отрицательные значения. У всех персонажей обычная регенерация равна 1 (до +4 при низком здоровье).
—— "regen_mp_cd:" - время отката в Wait, прежде чем очередная порция "mp_regen" поступит в персонажа. Может быть использовано даже когда "mp_regen" не указан. У атрибута есть встроенный таймер в 2 такта (от оригинального LF2), поэтому если вы хотите отключить задержку полностью, то введите -2, в сумме получится 0, то есть нулевая задержка. Значения ниже -2 не работают, так как задержка не может быть в сумме отрицательной.
—— "mp_limit:" - лимит максимального запаса маны, который невозможно превысить
—— "mp_regen_type:" - принцип работы регенерации здоровья. При "0" мана может регенерироваться быстрее, если персонаж потерял часть здоровья. "mp_regen:" суммируется с обычным рассчетом количества регенерируемой маны от потерянного здоровья. При "1" мана регенерируется всегда фиксированное значение равное "mp_regen:".
—— "mp_regen_cap:" - при достижении указанного значения мана перестает регенерировать сама по себе. (Пример: персонаж способен восстановить сам только часть силы, а оставшуюся часть - только с помощью бутылочек). Тонкости механики: 1. Кап Регенерации так же ограничивает количество маны, которое будет у персонажа после перехода из одной стадии в другую. 2. Кап Регенерации НЕ сбросит ману вниз, если её уже больше, чем указано в ограничении регенерации, например бутылочками молока или пива.
—— "mp_regen_hurt_cd:" - после получения урона персонаж не будет регенерировать ману указанное время.
—— "mp_regen_on_hurt:" - количество MP, которое будет получать персонаж каждый раз, как получает урон ( за исключением падающих с неба ящиков xD )
// Надеюсь, что с новыми атрибутами по ресурсам Вас ничто не остановит сделать каждого персонажа уникальным!
—— "stat_#:" - кучка статов, от "stat_1:" до "stat_10:", которые можно добавлять персонажу. Они могут повысить урон персонажа в % от выбранного стата, то есть с относительным значением.
—— "resist_#:" - кучка статов-сопротивлений объекта тому или иному типу урона. Например, если персонажа атакуют с ITR внутри которого есть "dtype: 5", то против этого урона будет действовать "resist_5:", занижая урон или вовсе защищая от него. Если у персонажа накапливается сопротивление от 100% или больше - он перестает переходить в кадры ТБ.
—— "crit_chance:" - шанс нанести критический урон любой из атак. Значение складывается с "crit_chance:" из шапки персонажа\объекта
—— "crit_power:" - % от урона, который будет нанесен в случае срабатывания критического эффекта. Значение складывается с "crit_power:" из шапки персонажа\объекта.
- Новый атрибут "dtype:" определяющий тип урона, который сейчас наносит персонаж. Возможно значение от 0 до 7.
- Новый атрибут "scale_stat:" определяет источник для дополнительного урона. Можно указать значение от 0 до 7, оно будет считано из "stat_N", где N - указанное здесь число.
- Новый атрибут "scale_value:" - определяет значение в %, от значения статы, указанной в источнике "scale_stat".
Допустим Stat_1 персонажа равен 40. Тогда получим 40 * 200% = 80 урона. "scale_stat: 1" - считывает "Stat_1" из шапки персонажа. 100 + 80 урона = 180 урона будет нанесено. Допустим, что dtype: 0 или его отсутствие - это обычные физические атаки ЛФ2. А dtype: 1 - это огненные атаки. Допустим, что мы сделали атаку против Firen, у которого есть "resist_1: 50", то есть 50% сопротивления. Тогда он получит 180 - 50% = 90 урона в итоге.*)
// Если scale_stat указан не у персонажа, то значение будет браться у того, кто выпустил, создал или отбил этот снаряд, тем самым, проще говоря, наследуя значение у своего хозяина. Поэтому создавая прокачку для персонажа вы автоматически можете создавать эту прокачку и для его снарядов в нужных вам пропорциях!
- Добавлен новый атрибут "ohp:" (opoint health power), в котором можно указать здоровье призываемого персонажа или клона.
Stages: - Теперь рандом призыва можно использовать опционально. Используйте "x: 1xxxxx", где xxxxx - координата призыва. В этом случае призыв будет происходить без рандома. Пример: "x: 100300" призовет объект на координату 300 по Х, без рандомизации, а "x: 300" будет использовать рандом, как в оригинальном движке LF2.
- Теперь "act: zzz" может работать с type 0 \ 1 \ 2 \ 3 \ 4 \ 5 \ 6.
- Переработан атрибут "act:". Добавлен % вероятности перехода объекта в этот номер кадра. Используйте "act: xxxyyyzz", где ZZ - это шанс перехода в этот кадр, YYY - куда перейдет, если шанс сработал, и XXX - куда перейдет, если шанс НЕ сработал. Обычный "act: zzz" так же работает, если вам нужен безусловный переход.
F-keys: - Теперь можно включить работу F6, F7, F8, F9 клавиш для всех режимов или использовать шаблоны или выбрать какие клавиши в каких режимах вы желаете разрешить. Настраивается через DLL. - Теперь F7 снова может воскрешать персонажей после того, как раунд закончился, как было в LF 1.9. Включено по умолчанию. + нажатие теперь так же отменяет приближение появления таблички (бывалый баг в старых версиях LF2, бойцы живы после F7, но табличка уже не даст биться) - Переработан эффект F7 клавиши, теперь нажатие также снимает эффекты Яда, Замедления, Молчания и Конфуза, которые были введены в PDK - Переработан эффект F9 клавиши. Теперь клавиша не уничтожает t0 объекты в режимах отличных от VS Mode. Кроме того добавлены фильтры объектов по ID или Type, Специально для тех, кто использует объекты как ключевые элементы карт или стадий. Настраивается через DLL.
Other: - "hiden:" теперь вводится как "hidden:" - "confus:" теперь вводится как "confuse:" - "manacle:" теперь вводится как "silence:" - "delay:" теперь вводится как "slow:" - "respond:" заменен на "sound:" и используется для выбора звука "effect".
- Последняя версия PDK 1.2 со всеми функциями (ехе от Алькартера) - Изменен статус транформации, теперь он работает как обычный 8ххх, но без +140 кадров. Для ID вроде Бандита и других сделаны исключения, добавляющие им +140. - Вынесены ресурсы-картинки из EXE в папку \sprite\UI\ и в PNG формате. - Включена поддержка прозрачности в картинках меню и элементах интерфейса (RFace.png, *_s.bmp, FRAME.png, e.c.t.) - Добавлена функция перманентной валидации реплеев. Теперь игра любой реплей будет считать валидным, даже если он из устаревшей версии вашего мода! По умолчанию функция включена. - Исправлено отсутствие удвоенной регенерации MP у Julian и Firzen! - В комплекте движка есть правильные dat-файлы с верной бронёй Louis, Knight и Julian, соответствующие оригинальному LF2 - Исправлен баг от PDK с курсором, который пропадал после нажатия Start Game. - Возвращена возможность выбора команды в Стадиях, как было в ранних версиях LF2 :) Включено по умолчанию. - Переработана функция сложности для Battle Mode, теперь режим CRAZY! доступен и для него. Включено по умолчанию. - Изменен алгоритм регена маны, благодаря чему теперь увеличение регенерации маны действительно работает от недостающего количества здоровья. Теперь даже если у объекта 1 000 000 здоровья, он всё равно будет получать увеличение регенерации по достижению определенного % здоровья. В оригинале учет всегда велся относительно 500 здоровья, не учитывая какое было максимальное здоровье персонажа. - Добавлено замедление времени при нанесении добивающего удара по последней цели в матче. Включено по умолчанию. - Теперь можно сменить название окна игры. На странице DLL "lf2.asm" найдите переменную "GameName" и измените название на желаемое. - В углу экрана больше не отображается отладочная информация в виде "u0 d0 l0 r0" и т.д.
Tweaks:
- Переписан код для управления регенерациями Здоровья (HP) и Маны (MP) с привязкой к ID. Демонстрационно-увеличенные значения применены к ID 55.
- Настройка стартовых значений координат: ——— Возможность включить через DLL рандомный спавн команды игроков при игре в стадиях, как если бы это был VS режим. ——— Возможность установить точную точку спавна команды игроков в стадиях по X \ Z.
- Управление стартовыми значениями MP для разных режимов: ——— Возможность установить начальное значение MP для Игроков для разных режимов игры. (По умолчанию в VS режиме 200 mp, в Stage режиме 500 mp). Возможно выставлять значения для отдельных ID персонажей. ——— Возможность установить начальное значение MP для Компов для разных режимов игры. (По умолчанию в VS режиме 200 mp, в Stage режиме 500 mp). Возможно выставлять значения для отдельных ID персонажей.
- Добавлен код сброса координат фоновой картинки в меню выбора персонажа в 0.0, для активации убрать знаки комментариев ";" у процедуры "ResetCoord"
- Добавлена возможность включить "нейтральность" у всех игроков, которые проходят стадию, вместо первой команды. Все могут убить всех, THIS IS HARDCORE!!.
- Добавлена возможность использовать собствнные ХП-бары для персонажей. (Демонстрационную версию можете увидеть, поиграв за Julian)
- Не работают heavy_* атрибуты в шапке персонажей (отсутствие считывания атрибутов) Пост 1 - Порча работы модов софтом Dropbox v.3+ (природа бага неизвестна) - Странные прыжки с разворотом (отсутствие считывания изначального направления) Пост 1 - Невозможно сбросить прием нажатиями стрелок после падения (отсутствие считывания во время лежания) Пост 1 - Измененная регистрация нажатий (возможно не баг?) Пост 1 - Отсутствует AI для Julian (ID 52) и Justin
艾爾卡特 (Alkarter) - разработчик движка, который на LFF был именован как PDK Drakken - Создание DLL-прототипа с патчингом в реальном времени Lord Silva - модификация DLL под нужды LF2 Archer-Dante - адаптация DLL для работы в PDK и добавление новых функций Surik - информационная поддержка по разработке
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>
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.
ЗЫ. Я думаю, что следующая версия будет не сразу, но будет более глобальная. Т.к. 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.
Функция записи работает исправно в общем-то. А вот над считыванием+парсингом голову поломать неплохо приходится. Расписал план работы программы, чтобы не растеряться
Алгоритм парсинга: 1. Цикл - Считываем байт (+смещение согласно счетчику цикла) - Если байт равен "," - уходим в (2) - Если байт равен "." - уходит в (4) - Если байт равен ";" - уходим в (5) - Вычитаем из байта 30h - Делаем смещение байтов в регистре для записи (в EDX, например?) - Записываем байт в выбранный регистр - Уходим в (1)
2. Если встретили ",": - Цикл: - Делим EDX как десятичное число на 16, получаем регультат деления и остаток - Перезаписываем десятичное число результатом деления - Делаем смещение для регистра EAX (например). - Записываем полученный остаток в регистр - Если результат деления (EDX) равен 0, то уходим в (3) - Уходим в (2)
3. - Записываем порядок из остатков в переменную в .data(?), выделенную под это значение - Уходим в (1)
4. Если встретили ".": - выходим из подпрограммы, считаем, что считывание атрибутов из CFG файла закончено
5. Если встретили ";": (возможно) - игнорируем все последующие байты, пока не будет порядка байтов о переводе строки 0D0A0Ah - возвращаемся в считывание байтов со следующей строки
[ Маленький Фриз говорит: это сообщение было отредактировано!]
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.
В ПДК есть одна хрень, которая порой бесит. Когда прыгаешь влево/вправо, разворачиваешься в прыжке и после приземления делаешь дэш (при этом жмёшь только клавишу прыжка, без стрелок), то в ПДК дэш делается в ту сторону, куда смотрит персонаж. В оригинале же дэш по дефолту идёт в сторону предыдущего прыжка! То есть в ПДК нельзя просто так взять и сделать деш спиной. Так вот, 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 курсор не скрывался, а был виден как в оригинале. Вполне можно понять, для чего Алик его стал скрывать, но всё-таки есть в этом некий пользовательский дискомфорт. Надеюсь, это не так закопано, как направление дэша.
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.
- Переписан код для управления регенерациями Здоровья (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