Название 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 - информационная поддержка по разработке
EdL, как ты и просил - пишу предложение здесь. В общем, считаю нужным наличие возможности удаления/редактирования копирайтов, тех самых, которые в правом нижнем углу (Marti Wong, Starsky Wong, 1999-2008 all rights reserved, http://LittleFighter.com)
Незнаю, будут ли апдейты неоры, но выскажусь. Механика привязанная к статусу 9ххх очень не удобна, потому что она привязана к статусу блин, и сильно режет потенциал фрейма, что порождает множество гемора, если говорить о хард трай модинге, канеш
Было бы круто заменить State: 9ххх, на Effect: 8ххх, или типо того. [ Маленький Фриз говорит: это сообщение было отредактировано!]
Незнаю, будут ли апдейты неоры, но выскажусь.Механика привязанная к статусу 9ххх очень не удобна, потому что она привязана к статусу блин, и сильно режет потенциал фрейма, что порождает множество гемора, если говорить о хард трай модинге, канеш
Было бы круто заменить State: 9ххх, на Effect: 8ххх, или типо того.
Да, не отрицаю что такая проблема есть. И она разрастается ещё больше, когда кто-то начинает делать надстройки на Неоре, ещё больше всего вешая на стейты. Печальная картина выходит, когда всё в одном "слоте", и речь не только про 9ххх Лучше привязать на вообще отдельные штуки будет.
Спасибо что высказался
Coding in Assembly requires a mix of: 80% of brain, passion, intuition, creativity 10% of programming skills 10% of tan levels in your blood.
Работаю с Неорой удивление было, что процедура заполнения объектов, вызывается НЕ ВСЕГДА видимо когда я это кодил много лет назад, думал с точностью наоборот
звучит как корень всех бед ибо логика моих обновлений с 2.05+ строилась на том, что я обнаружил место где идёт загрузка всего и вся, и с этим и работал дальше.
если точнее: функция инициализации вызывается в первые 1-2 раза для загрузки данных а потом этим занимается уже какая-то другая функция. при этом данная функция (та что выше) продолжает работать уже ПОСЛЕ загрузки, и уже не для целей загрузки, а чего-то ещё (она проходит по всем тем же процедурам что и на загрузке, но по факту уже ничего не делает...)
Coding in Assembly requires a mix of: 80% of brain, passion, intuition, creativity 10% of programming skills 10% of tan levels in your blood.