For making file to exe patches I recommend using Era\Tools\BinMagic.exe.
Call diff.bat to generate bin/txt patch with difference between two files.
Call text.bat or bin.bat to convert txt/bin patches to each other.
Bin file format is simple:
NumPatches: int32
Patches: array NumPatches of Patch
Patch is:
Address: int32
Length: int32
Bytes: array Length of byte
I have documented all my old hex edits so adding them to dll will be simple.
Unleashed was originally based on the standalone maped by BlackPhantom to be used, being able to run the editor with around 16MB of data only. It became useful to add LOD support at some point and that is when I decided to make all of Unleashed text be loaded through txt file in LOD.
Now I can perform simple check to see if Unleashed.dll is being loaded via ERA or H3Unleashed and disable some hooks, but I still need to be able to load Unleashed.lod from custom path. Simplest would be to get h3wmapedpatch's function and call that with path to Unleashed.lod which is why I wondered whether you could export that function... if not I can always get it from memory or even read data from the LOD myself; I just try to seek the option with least amount of work))
If you prefer to add Unleashed as a 'mod' and provide path to Unleashed.lod that way, that works too I suppose.
I can just disable LOD support when loaded by ERA and let it handle that part of the work.
RoseKavalier, right, I could include editor in WoG mod with dll in EraEditor and the contents of unleashed.lod in unleashed.pac or even hmm35wog.pac, does not matter if you load resources via native functions like LoadTxtFromLod or LoadDefFromLod without specifying concrete lod. All you need would be to check via GetModuleHandle if era is loaded and disable a few patches/hooks, that may have conflicts.
In fact, you can take any Era package even now, create a mod and put .pac file in mod data and dll in EraEditor.
Вот обещал же, что ничего в ветке 2.х из улучшений ЕРМ более не будет…
(13.02.2020 12:04)daemon_n Wrote: [ -> ]XEPOMAHT, насколько я знаю, он не был переведен.
Кстаааааати. Нашёл, что называется, себе работу.
Переводить там только Sod_sp опции надо. Остальное взял из WoG Rus\Data\MapEdPatch
Добавлю, что скрипт " сопротивление" вызывает ошибки в поиске номера слота - пытаюсь сообразить сам, но не выходит. Сейчас скину вам
UPD: не осилил
Нужен всеголишь скрипт "Сопротивление 2"
Скачать и помочь
- в архиве сразу карта, сейв и дебаг, хотя он лишний, как по-мне - обновится ведь.
Суть в том, что номер слота становится 24
(12.02.2020 20:46)Berserker Wrote: [ -> ]Gross master, этим занимался Сергей Роженко. Отличный программист, автор множества утилит, расширений, альфы 3.59 и т.д. Я лишь слегка адаптировал его работу под Эру.
Может есть ссылка на 3.59 альфа?) Хочется проверить, что там нового
Mahno,
https://github.com/GrayFace/wog/releases...pha8.0.rar
daemon_n, вижу сразу спагетти-код с ошибками и запутанной логикой, только злость берёт копаться в нём. Переписывать нужно. Сделать нормальный хэлп, довыпустить обновление Эры и пилить свои опции на замену костыльным оригинальным. Лучше вопрос помести в соответствующие темы по скриптам, иначе захламляется всё.
Bes, наткнулся в скрите ФМ на такое...
тут нет ни какой ошибки?



Сейчас придёт Валера и снова скажет, что я нарушаю обратную совместимость. Конечно нарушаю!
Видите пробел перед +21? Ранее ЕРМ анализировал этот код так: пробел — это команда-пустышка, +21 тут же съедается наперёд парсером через GetNumAuto. Затем ;. Итог: никакая команда не выполнялась.
Что с Эрой? Пробелы, как положено, пропускаются, "+" срабатывает как команда сложения с аргументом 21. То есть код начинает выполняться.
Поэтому Игрик прав. Команду удаляем Выше в функции в коде "!!VRv902:Sx2 *20 R6; " *20 заменяем на *21. А
!!VRv912:Sv902 %7; [get an actual slot number]
на
!!VRv912:Sv902 %21; [get an actual slot number]
(15.02.2020 20:37)Bes Wrote: [ -> ]Bes, наткнулся в скрите ФМ на такое...
тут нет ни какой ошибки?
Bes, в коде всё верно. 4-й параметр = 0, значит массив не сохраняется/загружается,только его размер запоминается. Для временных данных так и нужно.
Berserker, ничего не понял, разве что только то, что скрипт починили.
daemon_n, всё просто:
1) BA:M работает со стороной боя (0..1) и номер слота (0..6). Это ещё не номер слота в бою, просто бой можно инициировать с макс 7 отрядов на 7.
2) В скрипте была команда
Из-за пробела перед +21 ранее она не выполнялась. Потому значение переменной оставалось равным 0..6.
3) После исправления движка команда выполняется.
4) В функции выше есть умножение стороны боя (0..1) на 20 (должно быть число ID боевых отрядов на каждую сторону). Но отрядов может быть по 21 (0..20) (21..41). Поэтому ошибку исправляем.
5)
Здесь операция обратная. Преобразования номера боевого отряда (0..41) в номер слота 0..6 атакующего/защитника в предположении, что переменная v902 имеет значения 0..6 или 21..27. Остаток от деления нужно получать на 21.
Berserker, проще говоря, раньше 21 прибавлялось не к v912, а к v902, с которой уже нужно было проводить дальнейшие операции?
Нет, команда +21 не выполнялась вообще, так как перед ней был пробел.
Обновление 2.9.11 обещает быть довольно радикальным. Возвращение к истокам в плане скина/музыки/кампаний + ЕРМ 2.0 (прекомпиляция для локальных именованных переменных и, при возможности, ограниченная поддержка глобальных именованных в командах и условиях).