Current time: 24.10.2017, 09:05 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
ERA II
» WoG Era 2: Русская и Английская версии
Author Message
Berserker Offline
Administrators

Posts: 10164
Post: #46

Создал текстовый файл заплатки на разницу между heroes3hd и h3te, тестируя программу BinMagic. Бараторч умеет защищать вещи (200 кб):
10.07.2011 20:02
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 485
Post: #47

А можно разделить папки дллок и патчей?
12.07.2011 16:47
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10164
Post: #48

Были разделены в 2.0, но это бы нарушило совместимость с 1.8х. Поэтому остались в одной. Старые заплатки. Новые ищутся в EraPlugins\BeforeWoG и EraPlugins\AfterWoG, то есть разделение по времени применения.
12.07.2011 17:37
Find all posts by this user Quote this message in a reply
MOP Offline

Posts: 1239
Post: #49

(03.07.2011 18:55)Berserker Wrote:     Ну и по ходу пишу утилиту для работы с бинарными патчами. Перегон туда-обратно, оптимизация (после того, как увидел бинарники мора Sm ) и редактирование тегов.
Для бинарников для памяти - не знаю, сколь важно, для exe - почти без разницы. У меня самый большой бинарник экзешника весит 113 Кб и включает 9764 патча. И ничего - с помощью батника BinGen.exe сначала генерит патчи, потом ExeBuilder.exe патчит экзешник, и всё это вкупе с остальными 114-ю немаленькими бинарниками... за секунду.
А сразу к BinGen.exe прилепить оптимизатор не выйдет? Исходники того тоже потеряны?


Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery

Сайт
Группа vk
12.07.2011 20:33
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10164
Post: #50

Исходники есть в твоей поставке эры. BinGen.pas.

Для исполняемого файла, конечно, не важно, а вот для памяти значение имеют:
-) Последовательность применения заплаток. Чтобы процессору не приходилось каждый раз обновлять кэш, пока мы скачем то по верхним, то по нижним адресам.
-) Множество отдельных вызовов функции WriteAtCode для пары байт не так эффективно, как вызов единожды для всего смежного блока. Поэтому оптимизатор объединяет смежные блоки.

Quote:А сразу к BinGen.exe прилепить оптимизатор не выйдет? Исходники того тоже потеряны?
Я уже третий день добиваю BinMagic. Функционал шире, тоже консольная. Зацени, например:
Code:
BinMagic.exe
    Cmd=ConvertPatch
    SourcePatch="C:\Patches\*.bin"
    ResultPatch="D:\JoinedPatch.txt"
    PatchFor=File
    AddrConverter=WoG.dll
    Optimize
"Возьми-ка двоичные заплатки из папки, объедини, преобразуй адреса для применения к файлу (часть заплаток может быть для памяти), оптимизируй и сохрани в виде форматированного исходника."
12.07.2011 20:44
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10164
Post: #51

Узнать, что именно бараторч меняет в исполняемом файле жёстко:
Code:
BinMagic.exe ^
    Cmd=MakePatch ^
    OrigFile="c:\Phoenix\Phoenix III.5.exe" ^
    ModifiedFile="c:\Phoenix\Phoenix III.5.exe_HD.exe" ^
    ResultPatchType=Text ^
    ResultPatch="c:\Phoenix\Bara.doc" ^
    PatchFor=Memory ^
    AddrConverter=WoG ^
    Optimize ^
pause

Результат:

Code:
; Applies to = Memory
; Generator  = BinMagic
00495590 C20400609C68AD55490090FF15FCA163009D6168FCF96700E9262B0600486952657A2E646C6C00
004F80CE E9C0D4F9FF
13.07.2011 04:21
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10164
Post: #52

Помощь:
Code:
>> Command line syntax: Key1 Arg1Name=Arg1Value "Arg 2 Name"="Arg 2 Value" Key2
>> Keys differ from arguments in that they don't have values

TYPES
  TPatchType  = (Text, Binary, Autodetect); DEFAULT "Autodetect";
  >> Autodetect bases on file extension (txt - for Text, other - for Binary)


ARGUMENTS
  Cmd             = (ConvertPatch, MakePatch, ApplyPatch); COMMAND;
  SourcePatch     = [Path to source patch. If mask is specified then all found patches are joined into single one];
  >> Example: "C:\Program Files\Patches\r*.txt"
  SourcePatchType = TPatchType;
  ResultPatch     = [Path to result patch file];
  >> Example: "D:\Res.bin"
  ResultPatchType = TPatchType;
  OrigFile        = [Path to the original file];
  ModifiedFile    = [Path to the modified version of original file];
  Patch           = [Path to the single patch];
  ApplyTo         = [Path to file to which the patch will be apply to];
  ToleranceDist   =
  [
    If the distance between two closest patches is less or equal to this value,
    the whole range of bytes will be treated as changed part.
    Example: abxc => 12x3. [12]x[3] => [12x3]
  ]; DEFAULT "7";


OPTIONS
  PatchFor      = (Memory, File); REQUIRES AddrConverter;
  AddrConverter =
  [
    Path to dynamic library which implements the following interface.
    <<
    SetPatchDomain (Domain: INTEGER(0 - File, 1 - Memory)); STDCALL;
    ConvertAddr (OrigAddr: INTEGER): INTEGER; STDCALL;
    >>
  ]; DEFAULT "DefaultAddrConverter.dll";


COMMANDS
  ConvertPatch  (SourcePatch, SourcePatchType, ResultPatch, ResultPatchType);
  MakePatch     (OrigFile, NewFile, ResultPatch, ResultPatchType, ToleranceDist);
  ApplyPatch    (Patch, PatchType, ApplyTo);


KEYS
  Optimize  = [Performs sorting patch blocks by addresses in ascending order and joins sequential blocks];
  StripTags = [Removes all tags from text patch];


EXAMPLES
  BinMagic.exe
    Cmd=MakePatch
    OrigFile="C:\First.exe"
    NewFile="C:\Second.exe"
    ResultPatch="C:\FirstToSecond.txt"
    ResultPatchType=Text
    PatchFor=Memory

  BinMagic.exe
    Cmd=ConvertPatch
    SourcePatch="C:\Patches\*.bin"
    ResultPatch="D:\JoinedPatch.txt"
    PatchFor=File
    AddrConverter=WoG.dll
    Optimize

Версия для тестирования:
ptth://wogarchive.ru/BinMagic%20v1.0%20Private.%20Prerelease.%20wforum.heroes35.net.rar
13.07.2011 04:57
Find all posts by this user Quote this message in a reply
NoldI-LoRdEs Offline

Posts: 13
Post: #53

Ошибка в ссылке есть,вы 4 букву с 1-ой перепутали.
//Это для защиты от поисковиков
13.07.2011 09:18
Find all posts by this user Quote this message in a reply
gamecreator Offline
Administrators

Posts: 7122
Post: #54

что-то я не понял что такое ToleranceDist


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
13.07.2011 10:43
Find all posts by this user Quote this message in a reply
MOP Offline

Posts: 1239
Post: #55

(12.07.2011 20:44)Berserker Wrote:  Исходники есть в твоей поставке эры. BinGen.pas.
Нет, нету. Только исходники Angel.dll
(12.07.2011 20:44)Berserker Wrote:  Для исполняемого файла, конечно, не важно, а вот для памяти значение имеют:
-) Последовательность применения заплаток. Чтобы процессору не приходилось каждый раз обновлять кэш, пока мы скачем то по верхним, то по нижним адресам.
-) Множество отдельных вызовов функции WriteAtCode для пары байт не так эффективно, как вызов единожды для всего смежного блока. Поэтому оптимизатор объединяет смежные блоки.
Так и думал.

(12.07.2011 20:44)Berserker Wrote:  Зацени, например:
Code:
BinMagic.exe
    Cmd=ConvertPatch
    SourcePatch="C:\Patches\*.bin"
    ResultPatch="D:\JoinedPatch.txt"
    PatchFor=File
    AddrConverter=WoG.dll
    Optimize
"Возьми-ка двоичные заплатки из папки, объедини, преобразуй адреса для применения к файлу (часть заплаток может быть для памяти), оптимизируй и сохрани в виде форматированного исходника."
Ага, киллэмолльно. 109

Вроде новая ЭРА пишется на Паскале, как и прежняя? Если да, и исходники будут иметь ту же форму - более или менее ОК. А иначе... Просто мне 1.8-то пришлось попилить в нескольких местах:
1. сменить место паре хуков (регенерация Троллей и вопрос о загрузке игры),
2. ввести поддержку фаст- и w-переменных,
3. убрать триггер на встречу героев (не работает при встрече через Врата Подземного Мира и наверняка в Монолитах) и сделать свой,
4. изменить путь к плагинам и самой Angel.dll,
5. ...было что-то.


Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery

Сайт
Группа vk
13.07.2011 13:02
Find all posts by this user Quote this message in a reply
hippocamus Offline

Posts: 461
Post: #56

Эх, МОР, зачем ты это делаешь?
Не модифицируя Эру нельзя было это заплатками исправить?
Это ведь выльется в несовместимость твоего мода с большинством остальных.


-= подпись Гиппокамуса =-
13.07.2011 13:55
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10164
Post: #57

BinGen

Quote:Ага, киллэмолльно.
Аки Маяковски )

Quote:Вроде новая ЭРА пишется на Паскале, как и прежняя? Если да, и исходники будут иметь ту же форму - более или менее ОК. А иначе...
Вот тут-то и нет. Я ближе к лету закончил первую версию своей полторагодней работы, в ходе которой я уже давно перешёл на Delphi и наработал свою систему модулей с довольно богатыми возможностями. Именно поэтому я так налево и направо использую списки, ассоциативные массивы, генерацию строк по шаблонам...Код гораздо более высокого уровня (да и стиль у меня ужесточился с момента релиза 1.5).

Однако при попытке сделать среднее из 1.8 и 2.0 с целью сохранить совместимость, я пришёл ко многим трудностям переноса кода из Virtual Pascal, поэтому отдельно поправил Эру 1.8, а новую библиотеку включил полностью вторым файлом.

Если хочешь, пока ещё есть время до релиза, можем объединить усилия по наведению совместимости:
1) Если у тебя есть лучший вариант, напиши, я исправлю.
2) Добавлю.
3) Нужен этот свой триггер.
4) Тут папка старая, ибо совместимость, а Angel.dll и Era.dll должны находиться в корне.
5) Вспоминай.

Касаемо исполняемого файла, то нужен 1 жёстко прошитый патч (загрузка Era.dll), а всё остальное через динамические заплатки или как там тебе удобнее.

Естественно, перенос имеет ещё несколько тонкостей. Например, новые события должны вызывать SaveEventParams ... RestoreEventParams вокруг генерации ЕРМ триггера, чтобы тот имел свою копию параметров !!SN:X (все события Angel.dll - Era.dll так и поступают теперь). Это значит, что вызов триггера из триггера безопасен.

Что ещё я вчера наметил, после очередного бага, связанного с событием от клавиатуры, так это сохранение y-переменных для всех событий вога, а не только для функций, вызванных через FU:P/DO:P. Потому что предполагается, что y-переменные другие события испортить не могут, а они уверенно их портят.

Quote:что-то я не понял что такое ToleranceDist
Расстояние терпимости:
abxd => 12x4.
По идее, "x" не поменялась, а значит не должна быть включена в патч:
[12]x[4], но скорее всего она просто случайно совпала с оригиналом или ты не хочешь плодить кучу мини-патчей с большим размером из-за накладных данных, поэтому ты говоришь, что расстояние в 1 символ между двумя изменениями терпимо и его тоже нужно записать в изменения. В итоге патч будет включать весь блок: [12x4]. Значение по умолчанию - 7 - наиболее эффективно с точки зрения экономии места в файле. Ведь каждый мини-патч съедает ещё 8 байт на адрес и размер.
13.07.2011 15:33
Find all posts by this user Quote this message in a reply
gamecreator Offline
Administrators

Posts: 7122
Post: #58

(13.07.2011 15:33)Berserker Wrote:  По идее, "x" не поменялась, а значит не должна быть включена в патч
все, понял. это при генерации файла различий между двумя ехе


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
13.07.2011 16:10
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 485
Post: #59

Quote:Это ведь выльется в несовместимость твоего мода с большинством остальных.
Дак, каг бе, таковой и так не будет. Вот в одной папке МоР и что-то-там еще уживаться вроде смогут
13.07.2011 17:12
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 10164
Post: #60

Просто, учитывая возможности Эры 1.9 в плане, наконец, развязанных рук у плагинов, не хотелось бы видеть МОР в будущем на старой версии, хотя мастер, имхо, зря пошёл дорогой необратимости. Проще было раньше согласовать.
13.07.2011 19:12
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2017 MyBB Group