IPB

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику Berserker. Спасибо сказали: 898
Дата поста: В теме: За сообщение: Спасибо сказали:
18 Aug 2019, 01:06 Era II [ENG]
New concept in modding
Version 2.8.8
------------------------
Код
[+] Added command for changing monster names/specialty text as !!UN:G1 zvar-free replacement.
    SN:H^monname^/monster ID/(0 - singular, 1 - plural, 2 - description)/text.
    Note: get syntax works with all SN:H commands, allowing to obtain actual hint/text.

    Example:
    !?FU(OnOpenHeroScreen);
    !!SN:H^monname^/0/0/^Bug^; rename pikeman to Bug
    !!SN:H^monname^/0/1/^Bugs^; pikemen to Bugs
    !!SN:H^monname^/0/2/^Screws the game process^; change pikeman special abilities description
    !!SN:H^monname^/13/2/?z2; get archangel special abilities text
    !!IF:M^Don't hire bugs. Better higher archangel. Pros: %Z2^; display archangel advertisement

[+] Added plugin event 'OnAfterStructRelocations', occured after 'OnAfterWoG'. All game/WoG/Era structure relocations
    must be performed before it with calling corresponding RedirectMemoryBlock (OldAddr: pointer; BlockSize: integer; NewAddr: pointer)
    function. At 'OnAfterStructRelocations' event final addresses of game structures must be obtained via GetRealAddr.
    UN:C command always uses GetRealAddr and is thus safe to use default WoG/SoD addresses.

    Era uses GetRealAddr to get hero specialties, secondary skills, monster names and descriptions from now and
    will support more relocated structures in the future.

[-] Fixed MR:N bug: if dead stacks were present in position of alive stack, dead stack number could be returned.
[-] Fixed Era bug with invalid address of secondary skills descriptions table, leading to wrong SN:H behavior. Credits: gamemaster.
hippocamus, Etoprostoya, Richter
08 Aug 2019, 20:04 Era II Рус
Доступные сервисы:

ERM Scripts Extractor
Позволяет извлекать из h3m карт ЕРМ-скрипты в Эра формате, а скриптовые события в карте автоматически отключать.

ERM Enhancer
Переводит староформатные ЕРМ скрипты в формат Эры (именованные функции и метки, ограниченная автоправка !!MP:S команд). Поддерживает обработку множества скриптов за раз,а также переиспользование именованных функций из других скриптов.

Пример:
Обновлённый скрипт Атлантиды (600 КБ!)
Etoprostoya, Sandris
08 Aug 2019, 19:55 Era II [ENG]
New concept in modding
Пользователям сборок рекомендуется обновить game bug fixes.dll на тот, в котором нет исправления номеров раундов в бою.

С этой версии многопоток включён по умолчанию.

Version 2.8.7
------------------------
Код
[+] Added new function and event name 'OnRemoteEvent', generating !?FU(OnRemoteEvent) on remote sides with x1..x16 arguments.
    x1 is event type, values 0..9999 are reserved by Era. ERM users may use !!FU(any func):D instead with the same functionality.

[+] Added new event 'OnEveryDay', same as !?TM[xx], but occuring every day for every player/AI without any settings and before
    all other !?TM triggers.
    Example: !?FU(OnEveryDay)&-1000; every day for any AI

[+] Added new ERM command SN:R^old resource name^/^new resource name^, redirecting lod/pac/mp3 resources to other names.
    The command is a thin wrapper over RedirectFile exported function. Pass empty name as new resource name to remove
    redirection. All applied redirections are local, stored in saved game and reverted on map exit.
    '*.mp3' redirection works on all mp3 files at once.
    
    Example:
    !#SN:R^crgrif.def^/^croc.def^; let Royal Griffins look like Rocs (portraits are not changed)

    Game unloads not used resources, thus many resources can be dynamically redirected during playing.
    If resource is used in Hero Screen, perform redirection before Hero Screen is shown (and resource is cached).

    Custom interface skins may also be implemented, allowing user to switch themes right in the game (saved game
    loading may be necessary for visual update).

[+] MP trigger and receivers were fully remade. Old documentation is not applicable now. New implementation is fully
    thread-safe. From now heroes3.ini setting "UseOnlyOneCpuCore" is 0 by default, allowing running HD mod in CPU-heavy modes.

    Documentation:

    !?MP; Trigger occurs whenever game or ERM/Lua calls ChangeMp3Theme function.
   ; Here function parameters may be changed via !!MP:S, function default reaction enabled/disabled via !!MP:R

    !!MP:C?z[xx]; Get name of current theme without mp3 extension in lower case.
   ; Receiver may be called any time. Example result: 'dirt'.

    !!MP:P[theme name]/[Don't track position = 0/1]/[Loop = 0/1]; Calls ChangedMp3Theme function and generates !?MP event.
   ; Theme name is mp3 file name without extension.
   ; If 'Don't track position' is true (1), track playing is begun from start after resuming from pause.
   ; Otherwise position is remembered and restored on resume.
   ; 'Loop' controls automatical theme replay after end. 'Don't track position' must be set to 0 in order for looping to work.
   ; ---------------------
   ; Please, note, that final parameters are fully ignored if theme with the same name is being played currently.
   ; You may need to pause current theme before starting another one to force playing from start or without loops.
    Example: !!MP:P^cstletown^/0/1; start playing looped Castle theme

    !!MP:P0/[0 - pause, 1 - resume]; Pauses or resumes current theme
    Example:
    !!MP:P0/0; Silence, please, important event will occur now

    !!MP:S[theme name]/[Don't track position = 0/1]/[Loop = 0/1]; Get/change parameters for !?MP trigger.
    Examples:
    !?MP;
    !!MP:S?z2/d/0; Make all themes non-looped

    !?MP;
    !!MP:S^mainmenu^/0/1; Play SoD main menu theme during the whole gameplay process

    !!MP:R[get/set: Enable default reaction = 0/1]; Command allows to disable theme changing at all
   ; Can be used to disallow music changing for some time
    Example:
    !?MP;
    !!MP:R0; Don't switch current theme at all

[+] Added 4 new battle events as solution to !?BR and v997 mess with full backward compatibility:
    Event: 'OnBeforeBattlefieldVisible'.
    Occurs when battlefield and stacks are ready, but not visible. Right before !?BR&v997=-1.
    WoG applies spells to stacks in this phase and inits shoot/melee/attack-n-return settings.

    Event: 'OnAfterTacticsPhase'.
    Occurs right after tactics phase or after 'OnBeforeBattlefieldVisible' event if no tactics phase takes place.
    WoG summons Santa's guardians in this phase (because now stacks are in their final positions).

    Event: 'OnBattlefieldVisible'.
    Occurs when battlefield becomes visible. Game changes theme to combat right after this phase.
    
    Event: 'OnCombatRound'. A drop-in replacement for !?BR aka 'OnBattleRound'. Occurs only for visible real rounds.
    v997 is round number. For tactics phase it starts from -1000000000. For normal phase, counting starts from 0.
    Each round v997 is increased by one, thus it can serve as always increasing unique round ID.
    Note: v997 value in other triggers may be different!

    Example:
    !?FU(OnCombatRound)&v997=0; on first non-tactics visible real round
   ; apply spells, play music, change creature attributes, etc.

[-] Fixed bug: pressing Enter/Esc in ERM error dialog showed error dialog twice.
Richter
24 Jul 2019, 15:42 Феникс-Мод 3.6
Свежие билды
Первый раз вижу, не должны. Патч Heroes 3\Mods\WoG\EraPlugins\AfterWoG\fix towers damage.bin на месте?
Richter
23 Jul 2019, 20:39 А где тема "вопрос-ответ"?
С документацией только проблема. Возможность была ещё с версии 2.2:

Код
Version 2.2  May, 29.
---------------------
...

[+] Added support for packages of map objects. Instead of releasing the whole zeobjts.txt, create new txt with
only new items and place it under unique name in Mods\YourMod\Data\Objects folder.
  Example:
    Mods\YourMod\Data\Objects\new objects pack.txt
Richter
23 Jul 2019, 13:32 А где тема "вопрос-ответ"?
Попробуй создать папку Data\Objects. Внутри файл ritcher.txt. Туда из zeobjts.txt оставь только свои объекты и первой строкой их кол-во:

7
GKH2GR01.def 111111111111111111111111111111111111111111111111 000000000000000000000000000000000000000000000000 111111111 000000001 40 0 0 1
GKH2GR02.def 111111111111111111111111111111111111111111111111 000000000000000000000000000000000000000000000000 111111111 000000001 40 0 0 1
GKH2GR03.def 111111111111111111111111111111111111111111111111 000000000000000000000000000000000000000000000000 111111111 000000001 40 0 0 1
GKH2GR04.def 111111111111111111111111111111111111111111111111 000000000000000000000000000000000000000000000000 111111111 000000010 40 0 0 1
GKH2GR05.def 111111111111111111111111111111111111111111111111 000000000000000000000000000000000000000000000000 111111111 000000010 40 0 0 1
GKH2GR06.def 111111111111111111111111111111111111111111111111 000000000000000000000000000000000000000000000000 111111111 000000010 40 0 0 1
GKH2GR07.def 111111111111111111111111111111111111111111111111 000000000000000000000000000000000000000000000000 111111111 000000100 40 0 0 1

При загрузке редактора все текстовики из этой папкой сливаются по-хитрому с zeobjts.txt, не мешая друг другу.
Iv, hippocamus, Etoprostoya, Richter
14 Jul 2019, 22:01 Инженерный анализ
Reverse Engineering
Формат файлов кампаний:

Код
Heroes 3 Campaign (h3c) format after unpacking (gz).
=================================
byte    = 1 byte (0..255)
word    = 2 bytes (0..65535)
integer = 4 bytes (-2147483648..2147483647)
boolean = 1 byte (0 = false, 1 = true)
---------------------------------
const
  (* Hardcoded in camptext.txt, differs for each campaign index. Number of zones in current campaign *)
  NUM_ZONES = ?;

var
  Header: THeader;
  Zones:  array NUM_ZONES of TZone;
  Maps:   array NUM_ZONES of TMap | None;

type
  TString = record
    Length: integer;
    Value:  array Length of char;
  end;

  THeader = record
    GameVersion:             integer = 5 (Armageddon Blade) | 6 (WoG);
    CampaignInd:             byte; // Index of campaign (from 0), see camptext.txt
    CampaignName:            TString;
    CampaignDesc:            TString; // Description
    UserCanSelectDifficulty: boolean;
    MusicTheme:              byte;
  end; // THeader

  TZonePrologue = record
    HasPrologue: boolean;

    if HasPrologue then
      VideoId: byte;
      MusicId: byte;
      Text:    TString;
    end;
  end;

  TZoneEpilogue = record
    HasEpilogue: boolean;

    if HasEpilogue then
      VideoId: byte;
      MusicId: byte;
      Text:    TString;
    end;
  end;

  TStartingOpts = record
    OptsType: byte; // StartingBonus = 1, CrossoverHero = 2, InitialHero = 3

    if OptsType = 1 then
      PlayerColor: byte;
      NumBonuses:  byte;
      Bonuses:     array NumBonuses of record
        BonusType: byte;

        if Bonuses = 0 (spell) then
          Hero:  word; 65023 for most powerful hero
          Spell: byte;
        end;

        if Bonuses = 1 (creature) then
          Creature: word;
          Number:   word;
        end;

        if Bonuses = 3 (artifact) then
          Hero: word;
          Art:  word;
        end;

        if Bonuses = 4 (spell scroll) then
          Hero:  word;
          Spell: byte;
        end

        if Bonuses = 5 (primary skills) then
          Hero:       word;
          PrimSkills: array 4] of byte;
        end;

        if Bonuses = 6 (secondary skill) then
          Hero:     word;
          SecSkill: byte;
          Level:    byte;
        end;

        if Bonuses = 7 (resource) then
          Resource: byte;
          Quantity: integer;
        end;
      end; // Bonuses
    end; // if

    if OptsType = 2 then
      PlayerColor: byte;
      ZoneIndex:   byte;
    end;
  end; // .TStartingOpts

  TZone = record
    FileName:           TString;
    FileSize:           integer;
    RequiredZones:      byte; // Zone prerequisites; bitmask: 1 bit for each zone
    ZoneColor:          byte;
    DifficultyLevel:    byte;
    RegionRmbText:      TString; // Right mouse button hint
    Prologue:           TZonePrologue;
    Epilogue:           TZoneEpilogue;
    HeroesRetain:       byte; // Bitmask of Experience (bit 0), Primary Skills (bit 1), Secondary Skills (bit 2), Spells (bit 3), Artifacts (bit 4)
    CrossoverCreatures: array of 19 bytes; // 1 bit for every creature. Creature ID: 0..159
    CrossoverArts:      array of 18 bytes; // 1 bit for every artifact. Artifact ID: 0..143
    StartingOpts:       TStartingOpts;
  end;

  TMap = unpacked h3m (gz) map
Etoprostoya
14 Jul 2019, 00:31 Обсуждение инженерного анализа
https://stackoverflow.com/questions/1546141...ddress-op-codes
push/ret will unbalance the return-address predictor stack. mov eax,addr / jmp eax is only 1 byte longer and doesn't have that problem. See also Call an absolute pointer in x86 machine code.

Предсказание переходов работает с чётными парами call..ret. Непарные ret его нарушают, что определённо влияет на производительность в худшую сторону. Но с учётом всего навороченного в игре и требований это может быть абсолютно незаметно.
MasterOfPuppets
12 Jul 2019, 22:04 Обсуждение инженерного анализа
А почему на этом месте не освоить Erm Hooker 2.0?
Richter
07 Jul 2019, 16:37 Era II [ENG]
New concept in modding
Version 2.8.4
------------------------
Код
[+] Greatly improved WoG code performance by removing functions prolog and epilog code, that was added by ZVS in debug purposes.

[+] Improved ERM errors reporting: valid file name, line and positions are displayed, as long as appropriate context. Errors reporting now
    works correctly during ERM compilation. No more double/tripple error messages. The whole receiver is skipped in case of error.

[+] Rewritten scripts loading/saving/exporting engine. Removed restriction on 100 unique ERM scripts. Previously Era used to join 99+ scripts
    into single one. A few bugs of not unloading previous map scripts were fixed. Loading saved game with the same scripts set as current one
    is now really fast and does not require ERM recompilation. It means that loading game is much faster now.

[+] ERM memory limit is extended to 128 MB. Memory is now allocated gradually as needed, saving system resources.

[+] All maps are always treated as WoG format.

[+] Scripts from map global events are now managed by Era: they are preprocessed (named functions and labels support) and can be extracted via F11
    and reapllied on F12. They are loaded before scripts from map separate directory.

[+] Each map can have its own directory in Maps. For "Arrogance.h3m" it's Maps/Arrogance. For campaign Zc2.h3c (the first map) it's Maps\Zc2_1.
    The last number is map zone index in campaign. 1 for Zone A, 2 for Zone B, etc. Custom map scripts can be put inside map directory under Data/s subpath.
    Script names can have any names, they are loaded first and do not depend on global script names. If Maps/[MapName]/Data/s/load only these scripts.txt is present,
    only those global scripts, which are written there (one name per line), will be loaded from global Data/s directory. Anyway, all map scripts will
    be loaded in the first place. Map scripts are stored in saved game, can be reloaded, extracted, can use named functions and labels.

[+] All language Lang/*.json files are loaded from map directory (ex. Maps/Arrogance/Lang/arrogance.json), stored in saved games are applied. Thus
    maps can be supplied with translatable language data.

[+] WoG Option 5 (Wogify) meaning was changed for both map start or scripts reloading via F12:
    - 0: don't load any global ERM scripts (previously - load global ERM scripts for maps with 'RANDOM MAP' like name);
    - 1, 2: always load global ERM scripts, unless map forces other value;
    - 3: load global ERM scripts, but if map has its own scripts and does not force fixed set of global scripts,
      ask user, whether to skip global scripts loading or not.

    If there exists "Maps/[MapName]/Data/s/load only these scripts.txt" file, then global scripts specified in the file are loaded without confirmation
    and WoG Option 5 is set to "2".
    If user choses to skip or load global scripts in confirmation dialog, WoG Option 5 is changed to either 0 or 2.

    Summary:
    - Backward compatibility with existing maps/scripted campaigns is preserved. They usually set !!UN:P905/0 (disable wogification), which
      disables global ERM scripts loading.
    - Because all maps are now treated as WoG Format, option 1 is the same as option 2.
    - Scripts reloading via F12 always honor the option.

[+] Scripts from WoG Campaigns were fixed and extracted to separate directories. Bug fixes applied.
New service for scripts extraction was published: https://tools.bsoft.parkingby.icu/scripts-extractor/

[+] UN:J3 command was improved. Specify ':clear:' option instead of file name to turn off all WoG Options and set Map Rules to "use selected below".

[+] Added UN:J13 command. It resets commanders, according to current WoG Options 3 and 6.

[+] Added missing descriptions for old Era events:
  !?FU77012 = !?FU(OnStackToStackDamage). Occurs when damage dealt by one stack to another stack is calculated.
  SN:X parameters:

  ATTACKER            = 0; (attacker stack)
  DEFENDER            = 1; (defender stack)
  FINAL_DAMAGE_CONST  = 2; Do not change
  FINAL_DAMAGE        = 3;
  BASIC_DAMAGE        = 4; Normal basic damage
  DAMAGE_BONUS        = 5; Damage bonus (caused by attack-defense difference, cavalry bonus or any custom bonus)
  IS_DISTANT          = 6; (0 for melee, 1 for distant)
  DISTANCE_ARG        = 7;
  IS_THEORETICAL      = 8; (0 for real damage, 1 for estimated damage)

  !?FU77013 = !?FU(OnAICalcStackAttackEffect). Occured when AI calculates the effect of attacking stack
  SN:X parameters:

  ATTACKER            = 0; (attacker stack)
  DEFENDER            = 1; (defender stack)
  EFFECT_VALUE        = 2; (final effect)
  EFFECT_VALUE_CONST  = 3; Do not change

[+] Added "fix wog exp screen.bin" memory patch by igrik. It fixes column headers display in creature experience screen.
[+] Splice and HookCode API was improved. Added support for custom extra argument and multiple calling conventions.
[*] Savegames format was changed and is not compatible with previous Era versions.
[-] Disabled "Failed to create Debug\Era\log.txt" message if several game instances are running.
[-] Fixed UN:P3 command. Enabling/disabling commanders now enables/disables commander chests too.
[-] Mapname.erm and Mapname.cmd are not loaded anymore.
hippocamus, tolich, AKuHAK, Etoprostoya, igrik, Richter
29 Jun 2019, 13:21 Era II Рус
Делюсь новостями:

-) Перенёс, доработал и адаптировал много правок из ветки 2.55. ЕРМ скрипты из событий карт больше не грузятся, mapname.erm, mapname.cmd тоже. Баги, связанные с тем, что в памяти оставались прежние скрипты при начале новой игры или переходе между миссиями, соответственно, исчезли.

-) Движок загрузки/сохранения/экспорта скриптов свой. Больше нет ограничения на 100 скриптов (ранее те, что больше 99, сливались в один на лету).

-) Загрузка игры с тем же набором скриптов происходит почти мгновенно, ЕРМ не интерпретируется повторно.

-) Память ЕРМ увеличена до 128 МБ в пике.

-) Сильно улучшена и исправлена от багов система отчётов об ошибках как на этапе анализа ЕРМ, так и на этапе исполнения. Точные имя файла, строка и позиция, аккуратный контекст ошибки, отсутствие надоедливых двойных и тройных сообщений об ошибках, пропуск всего ресивера при ошибке в его подкоманде.

-) Производительность кода ВоГ значительно подросла. Этого удалось добиться за счёт умного зануления в исполняемом файле прологов и эпилогов функций ВоГ, в которых сохранялся отладочный мусор (потому как он Эрой не используется вообще). В результате многие простые и часто вызываемые функции сильно разгрузились.

-) Каждая карта может иметь свою папку по имени файла карты, например, Maps\Arrogance. Там может быть папка Data\s с произвольным набором ЕРМ скриптов. Эти скрипты всегда грузятся первыми, могут иметь любые имена, тоже сохраняются в файлах сохранений и даже экпортируются по F11 и перезагружаются по F12.

-) Помимо своих скриптов карта может иметь свои Lang\*.json файлы, которые так же сохраняются в файле сохранений, применяются, экспортируются, перезагружаются. Таким образом, можно распространить свою карту со скриптовыми особенностями в локализуемом формате и с поддержкой отладки.

-) Если карта — часть кампании, её имя берётся из имени файла кампании + "_" + индекс карты, начиная с нуля. Для Доброго Самаритянина это Maps\Zc2_0, Maps\Zc2_1 и т.д.
Поэтому скриптовые кампании тоже распространяются в паре h3c + папка.

-) Предупреждение о проблемах с log.txt больше не будет беспокоить Феанора.

-) Новые API Splice и HookCode доработаны, поддерживают передачу пользовательских параметров и разные соглашения о вызовах.

-) Старые сохранения загрузить не удастся, потому как ранее Воговский код по-своему сохранял и загружал скрипты. Это вынужденная мера.
hippocamus, Etoprostoya, SerAlexandr, samec, Orzie, Sandris
13 Jun 2019, 22:51 Era II Рус
Уважаемое Сообщество!

Мы рады сообщить вам о выходе новой версии платформы Эра — 2.8.3.
Долгое время не обновляемый мод русификации был доработан и тоже доступен для скачивания.

Основными задачами ветки 2.8х являлись и являются:
-) Кроссплатформенность. Новая реализация виртуальной файловой системы (ВФС) дала возможность запускать Эру без режимов совместимости на Windows XP SP 3, Windows 7, Windows 10, Wine.
-) Интернационализация. Виртуальная файловая система работает теперь с кодировкой Юникод, что позволяет правильно функционировать любым скриптам и плагинам, взаимодействующим с файлами, а также ограниченно использовать локализованные имена файлов и папок. Добавилась поддержка файлов переводов в формате json (UTF-8). Функции перевода доступны как в ЕРМ, так и плагинам.
-) Производительность. Новая ВФС кэширует всю папку модов в памяти, работает очень быстро, что ярко проявилось в плавности интерфейса и исчезновении тормозов. Обновлённый патч на нагрузку процессора позволяет практически не грузить ядра ЦПУ, при этом не влияя на отзывчивость игры и скорость анимации.
-) Потокобезопасность. Все мы не любим вылеты. Поэтому код Эры использует только потокобезопасные перехватчики, а новая реализация виртуальной файловой системы проверяется в многопоточном режиме. На текущий момент основным источником вылетов без опции привязки игры только к одному ядру процессора являются события переключения музыкальных композиций и ЕРМ команды, работающие со звуком. Уже намечены шаги по изменению событий и команд для устранения или значительного смягчения данной проблемы.
-) Подготовка к переходу на Lua-скрипты. Lua - язык программирования, на котором писать и читать скрипты гораздо продуктивнее, проще и приятнее. Задача Эры — устранить устаревшее API (программный интерфейс приложения), ввести необходимые средства для организации на Lua как плагинов, так и просто пользовательских сценариев.
-) Стабильность. Попутно исправляются влияющие на стабильность баги, обновляются идущие в инсталляторе моды.
-) Прогрессивность. Благодаря великолепной работе igrik-а большинство воговских диалогов было полностью переписано с использованием родным для игры элементов управления. Новые диалоги
работают быстро, используют ресурсы из игровых архивов и масштабируются вместе с игровым разрешением в HD Mod.
-) Обратная совместимость. Мы сохранили практически полную совместимость с уже написанными ранее плагинами, устранили возможные источники вылетов, объявили устаревшими часть ранее опубликованных интерфейсов.
-) Открытость. Мы опубликовали на площадке github исходные коды основных программных компонентов: библиотеки era.dll, библиотеки редактора карт, виртуальной файловой системы, инсталлятора Эры, генератора отладочных карт и др. Любой проект может добавить на файловом уровне поддержку модов двумя вызовами функций, используя библиотеку vfs.dll, распространяемую по лицензии AGPL v3.
-) И прочее. Множество мелких технических правок и обновлений, незаметных для глаза, но необходимых для развития.

Мы надеемся, что платформа подарит вам ещё много часов увлекательной игры, экспериментов или даст возможность раскрыть свой творческий потенциал. Огромную благодарность выражаем всем, кто оказывал любую помощь в тестировании, создании сборок и модов, распространении информации, ответов на вопросы, администрировании группы и множестве других моментов, без которых не было бы того, что мы имеем сейчас smile2.gif
Bes, Iv, hippocamus, Spartak, lion-killer, Adept, Etoprostoya, Orzie, KypaToP_HM, Richter, Sandris
13 Jun 2019, 20:49 Era II [ENG]
New concept in modding
Era 2.8.3
Era 2.8.3 Русификация

Version 2.8.3
------------------------
Код
[+] Added "LoadImageAsPcx16" to era.dll export and SDK. Function allows to load png/jpg/bmp image with
    optional scaling as pcx16 game resource, suitable for replacing native resources or displaying in dialogs.
    All HD Mod modes are supported.
[+] Improved syntax of language json files (Mod\Lang\*.json, UTF-8 encoding). Nested objects are supported.
    {
      "wogrev": {
        "no_gold_message": "The is no more gold, @name@!",
        "no_mercy":        "There will be no mercy!"
      }
    }

    The above mentioned document is treated the same as:
    {
      "wogrev.no_gold_message": "The is no more gold, @name@!",
      "wogrev.no_mercy":        "There will be no mercy!"
    }

    but allows to skip duplicating "messages." prefix.

    ERM example: !!SN:T^wogrev.no_gold_message^/?z2/^name^/^Geralt^; !!IF:M^%Z2^;
[+] Hints from Mod\Data\Buttons\*.btn files are now automatically translated. No need to include *.btn files in localizations.
[+] Added translation support for plugins. SDK function "tr", accepting complex key and vector of named parameters.
    Example: ShowMessage(tr('mymod.greetings', { "hero_name", "Orrin", "age", IntToStr(70) }).c_str());
[+] Added state-less re-enterable thread-safe functions for splicing and hooking: "Splice" and "HookCode".
[+] Added function NotifyError, that shows Windows dialog with error, but does not terminate
    application, unless AbortOnError ini option is set to 1.
[+] Added "no high level prisons on random maps.bin.off" patch. It disables generation of prisons with 2+ level heroes on random maps. Credits: igrik.
[+] Updated "WoG Native Dialogs" integrated mod. Commander screen visual improvements applied. Credits: igrik.
[*] Updated "Quick Savings" mod. Language json file now uses improved syntax.
[*] Updated "Secondary Skills Scrolling" mod. Moved button hints to language json file.
[*] Updated era.h, removed garbage and not supported signatures.
[*] *.ert/*.txt translations are DEPRECATED. New Lua/ERM scripts should not use it, unless there is a substantional necessity.
    Use SN:T for ERM, Era::tr for C++ Plugins instead.
[*] Updated vfs.dll to v1.0.4.
[*] *.era and *.dll plugins loading mechanism was improved. *.dll and *.era plugins are treated the
    same way, except that "*.dll"s are loaded right before "OnAfterWoG" event. and "*.era"s are loaded right
    before "OnBeforeWoG" event. Zero size files are skipped. In both cases v1 variable is set to era.dll
    handle for compatibility reasons only (this behavior is DEPRECATED). If plugin with the same name,
    but different extension is present (say, 'x.dll' and 'x.era'), an error is reported.
[*] Fixed crash in buttons.dll by MoP. Invalid counter initialization caused crash if only single button was registered.
    Added .dbgmap file for updated dll. Updated code to install hooks in OnAfterWoG event and renamed plugin to buttons.era
[-] Unsafe SN:C and SN:R commands were removed and are not supported anymore.
[-] Removed outdated or unsafe functions from angel.dll exports.
[-] The following Mods are not installed automatically and may be removed from main package any time: Yona, Fast Battle Animation, Quick Savings, Secondary Skills Scrolling.
[-] Era does not apply *.bin patches from EraPlugins directory anymore. Patches from EraPlugins/BeforeWoG and EraPlugins/AfterWoG directories are still applied.
[-] Fixed bug, introduced in v2.8.2: dll plugins with double extensions were ignored.
igrik, KypaToP_HM, Richter
02 Jun 2019, 15:18 Era II [ENG]
New concept in modding
Version 2.8.2
------------------------
[+] Updated WoG Native Dialogs. Commander dialog was fully rewritten. Less bugs, performance boost. Credits: igrik.
[+] Added updated Tools\ExeMapCompiler php utility to convert *.map files into Era's *.dbgmap format.
Decompilation is supported. Supports maps, generated by Delphi, Virtual Pascal and Visual Studio.
[+] Added Tools\VfsTest utility to run tests for virtual file system compatibility with current OS.
[*] Added extra check in angel.dll to not load plugins with double extension like *.dll.off.
[*] Loaded *.dll plugins by angel.dll now receive v1 = hEra during DLL_PROCESS_ATTACH event and thus
do not crash if *.dll plugin is renamed *.era plugin.
[*] DEPRECATION. New versions of plugins MUST use updated era.h and not rely on v1 = hEra in DllMain. Updated era.h accordingly.
[*] Included WoG Native Dialogs sources in main package.
[-] Fixed bug: Virtual File System worked unreliably on Win 10 v1709+, because NtQueryDirectoryFileEx was not handled.
[-] Fixed bug: reports for addresses from debug maps were sometimes invalid.
[-] Removed garbage files from the previous release.
hippocamus, Etoprostoya, Axolotl, igrik, Richter
29 May 2019, 23:23 Era II [ENG]
New concept in modding
Hello, friends! Sorry for long delay.
For those, who downloaded 2.8..2.8.1: please, redownload 2.8.1 and install over clean game (not even previous Era version).

In short:
2.8.1+ is:

- Rewritten Virtual File System. Mods\list.txt in UTF8 encoding, no compatibility settings on XP, Win 7, Win 10, Wine, no Lua errors, support for Unicode on system level. Performance boost, fluent GUI interface, full support for map editor.

- Fixed many stability related bugs.

- Integrated WoG Native Dialogs (native dialogs, stretchable for HD).

Version 2.8.1
------------------------
[+] Option CPUPatch was replaced by CpuTargetLevel (value 0..100), defining desired level of CPU load. Real CPU loading decrease is usually
greater than option value. 0 (almost not CPU loading in idle mode, but with possibly a bit not responsive interface or jerky mouse movement).
100% — regular game mode (waste of CPU time and battery).
[+] Integrated latest WoG Native Dialogs mod by igrik.
[+] Tools\installmod.exe utility was updated to support new UTF-8 format of Mods\list.txt file.
[+] Added char* GetEraVersion exported function.
[+] Added event 'OnReportVersion' for important plugins and Era. Added void ReportPluginVersion(char* VersionLine) API to era.dll.
It's now possible to view Era and important plugin versions via right mouse button on Credits button in main menu.
[+] Added option 'Debug.DumpVirtualFileSystem'. If true, all virtual file system mappings are written in log.txt on game start.
[+] Added full set of English texts and gui resources to enforce language of core WoG mod.
[*] Added support for 'modlist' command line argument to map editor.
[*] Restored obligatory mod list report in log.
[*] Updated 'numeric creature stats.era' plugin by igrik. No more dependency on VC++ Redistributable anymore.
[*] Updated patcher_x86.dll by Baratorch to 4.5.4.
[-] Fixed bug: not all virtual files and directories were correctly mapped. Updated vfs.dll to 1.0.2.3 version.
[-] Fixed bug: some Era exported API used non-stdcall conversion and pointer to internal routines, rather then special wrappers.
This would cause immediate crashes in any plugin, that would try to use them.
Etoprostoya, igrik, Richter
27 May 2019, 01:38 Era II [ENG]
New concept in modding
Version 2.8.0
------------------------
[+] Fully redesigned and rewritten Virtual File System code, the core of Mods system. Added full concurrency and Unicode support.
Developed with Windows XP, 7, 10 and Wine in mind. Lua's 'script not found' problem is solved.
[*] (Internal code) Wrote patch/assembling module, implementing 70-80% of core patcher_x86 features, but with thread-safety. Fixes real crashes in parallel mod in game and map editor.
[*] (Internal code) Improved Era's logger implementation: added better concurrency support and recursion protection. Reduces potentional crashes.
[*] (For plugin makers) DisableThreadLibraryCalls is no more called for plugins.
[*] Era is now compiled in optimized mode.
[-] Fixed bug: Named functions (FU(XXX)) dictionary was not cleaned on new map start, but function automatical ID used to be reset. Thus any further scripts reloading via F12 used to create function ID collisions if scripts contained new function names.
[-] Fixed bug: Era's memory manager worked in single-thread mode (IsMultiThread = false), which could cause unpredictable crashes in all previous Era versions.
[-] Fixed crash if Debug\Era directory was not created or could not be created.
hippocamus, AKuHAK, Etoprostoya, Axolotl, igrik, Richter
10 Sep 2018, 21:14 Баг-репорты
Вог вылетает, если используются несколько ядер одновременно. Из-за событий таймера и/или музыки. ЕРМ сам однопоточен, его код не рассчитан на параллельное выполнение. В итоге в Эру добавлена настройка UseOnlyOneCpuCore=1 в heroes3.ini. Можно убрать (=0), но тогда отчёты о вылетах не принимаются, они неизбежны.
wessonsm
06 Jan 2018, 00:01 ERM: Вопросы и ответы
Вопросы и ответы
Для Эры сохранить данные в ini-файле можно было бы.

Код
!!SN:L^era.dll^/?y1 Ay1/^WriteStrToIni^/?y2 Ey2/0/^key^/^value^/^section^/^Data\myfile.ini^;
!!SN:Ay1/^SaveIni^/?y2 Ey2/0/^Data\myfile.ini^;
hippocamus, shrooman
04 Jan 2018, 20:42 Если нужен скрипт
Пишите если нужен скрипт
IceZver, мод устанавливать нужно через менеджер модов или, если это exe, указав папку с игрой.
Патч на кампанейских героев, вроде бы имеется, только нужно убрать .off у расширения.
IceZver
04 Jan 2018, 13:56 Если нужен скрипт
Пишите если нужен скрипт
http://wakeofgods.org/mods/
Там смотрите моды. Fast AI - ИИ, быстро развивающийся, то есть с нарастающей мощью и ростом сложности игры.
IceZver
13 Dec 2017, 12:46 Баг-репорты
Для русского мне ещё весь список изменений нужно перевести. Обязательно будет. Но orzie же больше с иностранной аудиторией работает.
Orzie
24 Nov 2017, 23:36 patсher_x86
Бара, зацени: http://rgho.st/7pBPttP9k

Код
instances(44): 'D:\Heroes 3\era.dll', 'MonDescription', 'HD.Plugin.QuicksandMines', 'D:\Heroes 3\Mods\WoG\EraPlugins\erm_hooker.era', 'WoG Patcherizer', 'WoG', 'remove exe protection.bin', 'New_NPC_Dlg', 'adventure menu button.bin', 'always summon ship.bin', 'disable dracolich block.bin', 'dismiss last stack.bin', 'display primary skills over 99.bin', 'dl buttons fix.bin', 'hero screen button.bin', 'inferno gates teleports to any town.bin', 'magic button fix.bin', 'no gifts from allies.bin', 'no load game confirmation.bin', 'no real time trigger.bin', 'no retreat request.bin', 'no secondary skills limit.bin', 'phoenix buttons.bin', 'skin.bin', 'transfer last stack.bin', 'spellbook.bin', 'acredit.bin', 'ai sod radius.bin', 'enable next hero button.bin', 'enable town info.bin', 'fix erm ca b2 command.bin', 'fix erm check syntax.bin', 'fix erm ss a command.bin', 'fix erm tr r roads.bin', 'fix towers damage.bin', 'mp3 44khz patch.bin', 'no erm he f redraw.bin', 'no erm ow r redraw.bin', 'no erm scripts turning off.bin', 'no memory and hdd checks.bin', 'no multiplayer notes.bin', 'remove black screens.bin', 'skeleton transformer fix.bin', 'zvslib.bin',

  places count: 1433

  patches count: 1460


Все патчи создаются через патчер. Бинарные патчи применяются с созданием уникального экземпляра патчера для каждого файла. По F11 или вылету в папку Debug\Era попадает и список патчей.
hippocamus
13 Nov 2017, 16:08 patсher_x86
Ben, если речь идёт о системе плагинов, то используйте AngelRun (или любой другой загрузчик dll в чужой процесс), а в самой dll выполните FindFirstFile/FindNextFile/FindClose в определённой папке, загружая все файлы с нужным расширением через LoadLibrary.
Ben
12 Nov 2017, 14:40 patсher_x86
У Вас должна быть возможность подгружать свои библиотеки/плагины для изменяемой игры. Поэтому первое, что пишется — это загрузчик. Он либо внедряется в начало исполняемого кода оригинального файла, как Эра:
https://yadi.sk/i/gk4G7ak83PcxrM
(в коде инициализации библиотеки нужно выполнить затёртые команды и вернуться)

Либо загрузчик — внешний исполняемый файл, который вживляет библиотеку в адресное пространство запускаемого процесса оригинальной игры и ждёт, пока библиотека не закончит инициализацию и не вернёт управление, после чего возобновляет основной поток игры. Пример загрузчика:



Вот сам загрузчик, принимающий путь к исполняемому файлу и внедряемой библиотеке через командную строку. Антивирусы на этот файл смотрят с нескрываемым диагнозом «вирус», поскольку можно запустить любой процесс, внедрив в него любую библиотеку, что чревато.
https://yadi.sk/d/zBeSI8uk3Pcy8Q

Далее Ваш плагин, используя patcher_x86 или другое средство для установки заплаток устанавливает множество перехватчиков по коду, которые будут генерировать события — вести на Ваши обработчики. Событие: «щелчок мышью», событие «оценка ИИ стоимости объекта» и т.д. Для этого предназначены прежде всего WriteHiHook (вы перехватываете начало функции, можете вызвать оригинальную, можете весь функционал заменить) и WriteLoHook (установить перехватчик в любом месте кода с возможность вызова затёртого кода перед возвратом). Примеры плагинов можете попросить у feanor, Sav, SyDr. Небольшие их модули точно используют патчер.

Вот и всё. Загрузчик — своя библиотека — установка перехватчиков — обработка событий.

Цитата
я не понимаю зачем давать пользователю LoHook'a возможность обращаться к адресу затертого кода в мосте

Редкие случаи. До перевода части кода на патчер это был функционал SPLICE. Если перехватчик установлен на первые команды функции, то можно вызывать как оригинальную функцию, так и перехваченную.
Если перехвачено место, куда идёт несколько прыжков, то адрес в одном из прыжков можно заменить на адрес выполнения затёртого кода, а в другом оставить адрес перехваченного кода. Будут две разные ветви исполнения. Я реально использовал только SPLICE-подобную механику и то, до перехода на патчер.

Тем не менее, в АПИ Эры функция возвращает указатель на выполнение затёртого кода. Как этот указатель будет использоваться — решает пользователь.

Цитата
проблем c уcтановкой ЛоуХука на команды изменяющие esp - нет.

Значит у тебя более продвинутая реализация, это хорошо.
Ben
09 Jun 2015, 12:57 Добавление новых существ
amethyst.dll. Бета-тест за ваши деньги.
От МОРа для покупки всех боевых машин в кузнице. Устарела. Заменена барой.
hippocamus

20 страниц V   1 2 3 > » 
Текстовая версия Сейчас: 14 October 2019 - 14:54
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика