Version 2.7.5
------------------------
[-] Fixed lua scripts search path settings.
Version 2.7.4
------------------------
[-] Small fixes in installer and game engine.
Version 2.7.3
------------------------
[-] Temporarily disabled WoG Native Dialogs mod until further testing and stability improvements.
[-] Temporarily turned off Unicode support for VFS due to crash reports and performance degradation in Map Editor.
Version 2.7.2
------------------------
[+] Added more Unicode API support for virtual file system.
[*] Updated patcher_x86 to the latest version from HD mod.
[*] Added heroes3.ini support for map editor.
Version 2.7.1
------------------------
[-] Fixed 2.7.0 nightly build bugs. It's recommended to delete manually Big Spellbook mod and install the updated one from wakeofgods.org/mods/ if Era is installed over previous 2.6.X version.
Version 2.7.0
------------------------
[+] (***) Added early support for Lua scripts (luajit engine). The API is [EXPERIMENTAL] and is subject to be changed. (***)
ERM will be fully supported, but is considered DEPRECATED from now. No new ERM commands (except integrating existing plugins)
are planned. Further development is binded to Lua. Single language can be used to write ordinary and plugins-like scripts.
[+] Added early support for loading any image as ingame pcx.
[+] Added support for kernel32.OpenFile function in virtual file system module. Fixed bug with black battlefield backgrounds.
[+] Added 'OnAfterCreateWindow' event for plugins.
[+] Added 'dfault24.pcx' to hmm35wog.pac, default image for missing pcx16 resources.
[-] Updated WoG Native Dialogs plugin. Fixed cursor disappearing in IF:G dialogs. Author: igrik.
[-] Big Spellbook mod by MoP is updated and extracted from main package.
[-] Fixed broken un44.def.
Version 2.6.6
------------------------
[*] Updated WoG Native Dialogs mod by igrik: removed VC++ dependencies, fixed a few bugs, added WoG-like radio/checkbox-buttons for IF:G.
[*] Removed VC++ dependencies from Game Bug Fixes plugin. Plugin renamed to *.dll version to prevent crashes at game start.
[-] Fixed bug with crashes during sound playing in WoG dialogs. patcher_x86 thread-unsafe hook replaced with native Era hook.
[-] Assertion messages were not displayed, only files and lines used to be reported.
Version 2.6.5
------------------------
[+] Integrated igrik's plugin, displaying numeric value of moral/luck bonuses and spells duration in view creature dialog.
[+] Improved "wog native dialogs" plugin by igrik. IF:G radio/checkbox dialog is now implemented via native ingame dialogs system.
[+] Added "fast upgrade stacks in town.dll" plugin by igrik in the off state. Plugins allows to use A+LMB combination to instantly upgrade single stack or all stacks (click on hero portrait) in town without any confirmations.
[-] Fixed bug in Mod Manager, not allowing to run executables with space in name like "h3era HD.exe".
[-] Fixed bug with crash in commander's dialog on skill selection during level-up.
Version 2.6.4
------------------------
[+] Updated igrik's "Native WoG Dialog" mod, fixed bugs in creature info display in battles, optimized defs.
[+] Refactored Map Editor, fixed crashes on exit.
[+] Added Visual C++ Redistributable libraries msvcr[90..120].dll to allow plugins to be executed on all systems.
Version 2.6.3
------------------------
[+] Integrated "Microsoft Visual Basic 6.0 Common Controls" in order to solve problems of people, running editor without required libraries installed.
[+] Integrated igrik's WoG Native Dialogs mod, replacing commander and creature experience dialogs with native dialogs (fast, no blinking, HD mod support, ALT+F4 support, resources in pac, etc.).
New lines were added to "zcrexp.txt" and "znpc00.txt". They need to be translated and added to localization mods, such as WoG Polish or WoG Rus.
[+] Updated "Quick Savings" mod: exposed named functions and events to outer world. Mods over the mod can be made now.
[+] Added visible errors notification, like invalid json files.
[*] Replaced Era Start Menu icon.
[-] Removed all graphical elements, ported from Hota.
Version 2.6.2
------------------------
[+] Added localization support for ERM scripts. All Lang\*.json files are loaded and merged into single dictionary of key => value pairs with language data.
Json files must be saved in UTF-8 encoding with preferably Unix line endings (#10 = 0x0A). The format is the following:
{
"unique global key": "translation",
"another key": "another translation"
}
During file loading text is converted from UTF-8 (Unicode, i.e Russian, Polish, Chinese and any other language is supported) into ANSI-encoding, used by player's operational system, ex. Windows-1251.
Thus you may ship the translation, other people may open and edit it without loss and characters, not representable on particular PC, will be replaced with "?".
Real example:
{
"eqs.this_day_savegame_name": "@day@_@player@",
"eqs.end_turn_autosave_name": "@day@_@player@_End",
"eqs.quicksave_name": "@day@_@player@_Quick",
"eqs.saved_msg": "Saved!",
"eqs.quicksaved_msg": "Quicksaved!"
}
It's recommended to prefix each key with string, unique for mod or author, like "pm." for "Phoenix Mod".
Translations may have parameters in the form of "@parameter name@". Those parameters are replaced with actual values during translation.
New ERM command !!SN:T is used to translate strings by key.
!!SN:T(key)/?(z-variable to place result to)/(parameter name 1)/(parameter value 1)/(parameter name 2)/(parameter value 2)...;
Example:
!!OW:R-1/6/?y1; y1 - player's gold amount
!!SN:T^test.gold_amount_report^/?z2/^gold^/y1;
!!IF:M^%Z2^; prints "You have 12850 gold left. Not bad!"
my test.json:
{
"test.gold_amount_report": "You have @gold@ gold left. Not bad!"
}
[+] Added possibility to set secondary skills texts without z-variables dependence. SN:H^secskill^/skill 0..27/0 (name) or skill level/new hint.
[+] Added GET-syntax for all SN:H commands, allowing to get previously set hint for objects or current skill/specialty texts for heroes.
[+] v1-v10 and z1 will be restored after (OnKeyPress) event to the value, they had before event.
[+] Added fixes by Algor for 30 wog - enhanced secondary skills.erm, 75 wog - secondary skills boost.erm and 78 wog - wogify.erm. No more hardcoded numbers, !!SS is used instead.
[+] "Quick Saving" script is converted into default standalone mod, using named functions, unique SN:W variables and Era 2.6.2 localization means. Mod is now compatible with almost any other mod.
[+] Added msvcr90.dll (Microsoft Visual C++ Redistributable 2009) to support plugins, written with this dependency.
[+] Added meaningful messages to many asserts in code, making assertion crashes easier to understand.
[*] Each *.bin patch obtains unique name prefix, no more conflicts with 'no hota maps.bin', shipped with HD mod.
[*] Yona creature abilities are now off by default and need to be manually switched on via mod ini file.
[-] Fixed bug: SN:H^object^/x/y/z/hint didn't update hint.
[-] Removed Jim Vogan's scripts from WoG mod.
Version 2.6.1
------------------------
[+] Added latest Mod Manager by SyDr, updated default mods.
[+] Added no hota maps.bin patch, fixing crash when Hota is installed in the same Heroes 3 directory.
[+] Added "game bug fixes.era" plugin by RoseCavalier:
- AI can't cast Town Portal on Cursed Ground;
- AI can't cast Fly if they don't have it;
- Show Subterranean Gates / Monoliths icons on 'View World' and 'View Air';
- 65535 objects patch by AlexSpl;
- AI split divide by 0 fix;
- Repair Arena Cancel button;
- Show Forcefield Shadow;
- AI Resurrection-freeze bug;
- > 32767 creatures patch.
[+] Integrated Big Spellbook mod by MoP.
Version 2.6
------------------------
[+] Added default values for most of heroes3.ini parameters. No crashes anymore on missing values or even missing heroes3.ini.
[+] Added 'default era settings.ini', which values are used if corresponding parameters are missing in heroes3.ini.
[+] Backported saved game sections debugging capabilities with "Debug.DumpSavegameSections" ini option.
[+] New directory "Debug\Era" must exist in order for debug functions to work (is automatically created and game start).
[+] Backported dump event list, dump patches, dump erm memory and dump PE modules capabilities from 2.5x branch (F11 key).
On calling Era.GenerateDebugInfo (no parameters), pressing F11 or game crash Debug\Era folder is filled with various files,
containing full necessary debug information. Report generation can be carried out on demand:
!!SN:L^era.dll^?y1 Ay1/^GenerateDebugInfo^/?y2 Ey2/0/0; generate debug information, including ERM tracking info
[+] Functions can now have names. Any time you use "(something)"" inside commands, a new function number from 95000+ range is associated with text inside brackets and brackets with name are replaced by that number. If the name already has associated function number, existing number is used instead. Use SN:W to get number of named function by name. Unnamed functions are deprecated, but still working.
Example: !!FU(OnHenchmanHire); call function which maybe does not exist, but script users will be able to handle the event.
Example: !?FU(Phoenix.FindFreeSlot);
Please, don't forget that names are global. Prefix function names with mod abbreviation: (BattleLib.RessurectStack).
Function names are replaced with numbers during map initialization stage, so this feature has no impact on performance.
[+] Added labels support. Label is command ordinal number inside current trigger starting from 0. [:LabelName] defines local label. [LabelName] means replace label with command number. Labels are used with SN:G command to implement loops and conditions.
Example of simple loop:
!!VRy1:S0; initialize counter
[:loop]; loop is label name inside current trigger (!?XX until next !?XX of the same file)
!!IF:L^Echoed %Y1 times^; echo message
!!VRy1:+1; increase counter
!!SN&y1<7:G[loop]; jump to loop label if not echoed 7 times
Example 2:
!?CM2; archangel in every slot
!!VRy1:S0;
[:loop]
!!HE-1:C0/y1/13/1;
!!VRy1:+1;
!!SN&y1<=6:G[loop];
[+] Added elseif syntax to !!el command. If !!el has condition and condition evaluates to false, the engine proceeds to the next !!el command until finds the right one or meets !!en.
[+] Added !!SN:O command. Get object entrance. SN:O?$/?$/?$
Initialize any three variables with object square coordinates. Pass them to command to update coordinates with right object entrance square. Thanks to gamecreator.
!?CM0;
!!CM:R0 P?y1/?y2/?y3;
!!VRv2:Cy1/y2/y3;
!!SN:O?y1/?y2/?y3;
!!IF:M^%V2 %V3 %V4 => %Y1 %Y2 %Y3^;
[+] Added function names for default ERM events without parameters and new Era triggers. Ex.: !?FU(OnBattleRegeneratePhase)
!?FU77001 = !?FU(OnSavegameWrite)
!?FU77002 = !?FU(OnSavegameRead)
!?FU77003 = !?FU(OnKeyPressed)
!?FU77004 = !?FU(OnOpenHeroScreen)
!?FU77005 = !?FU(OnCloseHeroScreen)
!?FU77006 = !?FU(OnBattleStackObtainsTurn)
!?FU77007 = !?FU(OnBattleRegeneratePhase)
!?FU77008 = !?FU(OnAfterSaveGame)
!?FU77010 = !?FU(OnBeforeHeroInteraction)
!?FU77011 = !?FU(OnAfterHeroInteraction)
!?FU77012 = !?FU(OnStackToStackDamage)
!?FU77013 = !?FU(OnAICalcStackAttackEffect)
!?FU77014 = !?FU(OnChat)
!?FU77015 = !?FU(OnGameEnter)
!?FU77016 = !?FU(OnGameLeave)
[+] Added SN:H command for setting hints, descriptions, names without z-vars. Currently only the following variants are supported:
SN:H^object^/x/y/z/hint;
SN:H^object^/obj_type or -1/obj_subtype or -1/hint;
[+] Fixed !!FU:P?x[n] bug. Now this syntax works ok.
[+] Added SN:H subcommand "spec" for applying custom hero specialty names.
SN:H^spec^/hero/short name (0), full name (1) or description (2)/hint
[+] Added ability to delete hints set up by SN:H. Just add "-" prefix to the first argument.
SN:H^-object^/...
[+] Better support for modern HD mod and x86_patcher:
- included x86 patcher v4.3 with debug map file;
- 95% of Era's patches use x86_patcher, each *.bin file creates its own patcher instance;
- x86_patcher patches are dumped to "Debug\Era\x86 patches.txt" during debug info generation.
[+] Implemented support for multiple UnhandledException handlers, now both HD and Era handlers do their job.
[+] Implemented fully featured ERM tracking support: track all executed triggers and commands in order to defeat bugs and learn game mechanics.
See Debug.ErmTracking.* options in "Heroes 3\default era settings.ini".
All ERM triggers and commands are recorded during execution (tracked) and are dumped to single "Debug\Era\erm tracking.erm" file in the order of execution.
Comments after each trigger show flags and v-variables state on trigger start/end.
Comments after each receiver show exact file, line and position of command.
Tracking report file is generated on F11 press or on game crash.
[+] Improvated named functions support. Added programmatical ability to get function name by ID.
[+] Improved multiplayer support:
- The whole packed saved game is sent on end of turn, difference file is not generated.
- Added object creation immediate synchronization between servers and clients.
- "SavedGameExtraBlockSize" ini setting is dropped.
As a result, playing game with script, that support multiplayer, can be performed without crashes.
WoGification and quick saving scripts work.
[+] Released ERM Hooker v2.0 plugin with support of multiple handlers at the same address. It support Era 2.46,
but is DEPRECATED in advance, because the same functionality without memory leaks will be ported to Era in
future versions.
[+] F11/crash dumps loaded mods to "Era\Debug\modlist.txt".
[+] Added support for compiled debug maps for dll/exe files and basic set of compiled maps. Map files are used to find corresponding name of function/variable/class by address in executable code. This feature allows to display human readable crash report in terms of source code items, not meaningless addresses.
Use Tools\ExeMapsCompiler\compile.phc to convert Borland map files to *.dbgmap binary files, used by Era.
The tool requires PHP interpreter v7.1+ to run. C++ maps support is planned to be added soon.
Place *.dbgmap file with the same name, as executable/dll but with capital first letter to Heroes 3\DebugMaps directory.
Debug maps are loaded automatically during debug information generation.
[+] Implemented generation of detailed crash report on game crash, including data analysis.
[+] Updated Yona mod: added "Hammer Crush" ability for dwarfs.
[*] Ported igrik's code to fix SN:D in heroes meeting screen.
[*] Removed deprecated triggers from Era as long as deprecated RecallAPI function.
[-] Fixed bug with combined artifact (# > 143) dismounting in heroes meeting screen.
[-] UN:J3 patch rollbacked for backwards compatibility reasons.
[-] Fixed ERM MR:N bug. !?MR1/2 return valid stack number or -1.
[-] Fixed bug with dispell in enemy spellbook and 1-turn spell durations of friendly hero.
[R] (Removed) UN:J3 command does not reset commanders anymore. If value ":clear:" is passed as file name, all WoG options are dropped to zero and option #101 (Map Rules) is set to 2 ("use selected below").
...and more...
Version 2.47.0 May, 08 (2015)
------------------------
[*] Improved !!PO command stability, fixed bugs.
[*] ExecErmCmd can process multiple commands, separated by ';'. Semicolon in the end of passed string is optional now.
[+] Changing final physical damage, received by battle stack, via MF:F is now correctly displayed in battle log (including damage from towers, moat, fire shield, etc).
[+] Added possibility for global and local MP3 tracks redirection. Simply specify file name with mp3 extension as resource or *.mp3 mask to redirect all tracks.
[+] Added possibility to redirect resources globally via JSON files.
Data\Redirections\*.json
Format:
{
"old resource name": "new resource name",
"old resource name": "new resource name"...
}
Folder "Data\Redirections\Missing\*.json" works in similar way, but redirections are only applied to missing resources.
For instance, we can now delete z*-pictures from WoG and redirect them to original names without prefixes. You can also supply safe alternative to third-party resources, if your mod depends on any graphical mod.
[+] Added OnGameEnter (77015) and OnGameLeave (77016) events. The first one occures when game is started or loaded and user gains control over mouse cursor. The second one occurs, when user exits to main menu or desktop.
This pair of trigger is handy to set/unset UN:C hacks, which are specific for map or mod.
====== The development was split into 2.4X and 2.5X series ======
Version 2.55 October, 13 (2013)
------------------------
[+] Routine producing ERM error report was completely rewritten. New dialog uses colored text and displays full error command, ERM file name and line in file. Default choice is skipping the error, not making ERM memory dump. There are no more duplicate or senseless error popups.
[+] Routine making ERM memory dump was completely rewritten for better error diagnostics and supports apart from all associative variables (SN:W) and dynamical arrays (SN:M).
[*] Error in any Era command (SN
does not lead to leaving trigger anymore.
[*] Era commands now obey error suppression rules (UN:P904) and do not change z1 variable on error.
[+] ExecErmCmd can now execute several commands at once.
[+] Added event "OnBeforeClearErmScripts". It occurs right before scripts are unloaded.
[+] WoG built-in code tracing mechanisms were removed because of being slow and useless.
[+] e- and y- are considered deprecated and are subject to remove in the future.
[*] "r" color name now stands for light red, suitable for default dialog backgrounds. "g" color name now stands for game native gold color.
[*] Internal code refactoring.
[+] Added comprehensive exception handling with various contexts dumping.
[-] Fixed ERM MR:N bug. !?MR1/2 return valid stack number or -1.
[-] Fixed Era 2.5 bug. Event "OnBeforeErmInstructions" didn't occur.
Version 2.5 October, 2 (2013)
------------------------
[*] No more "wogification" notion on code level. Every map is WoG map. Scripts are loaded the same way for any map/campaign. WoG option #5 is free. Wogification settings (option #5) are ignored.
[*] Map/campaign built-in scripts are not interpreted.
[-] Bug with garbage triggers from previously run map with built-in scripts is gone.
[*] Maps\[map name].erm is not loaded.
[-] Bug with memory corruption when both [map name].erm and built-in scripts presented is gone.
[-] Bug of Maps\[previously run map].erm script loading on campaign start is gone.
[*] UN:J3 command does not reset commanders anymore. If value ":clear:" is passed as file name, all WoG options are dropped to zero and option #101 (Map Rules) is set to 2 ("use selected below").
[+] WoG default storage for ERM scripts is not used anymore. No restriction on 100 script names remains. Scripts are loaded and interpreted after all WoG data is loaded but before "OnSavegameRead" event occurs. As a result, Era 2.5 cannot handle saved games of previous versions.
[+] Each script is stored in saved game with additional information: file name, file size and CRC32 checksum. No scripts interpretation occurs on game loading if the same script subset is already in memory. It means that game loading speed was significantly increased.
[+] Files "Data\s\*.erm", "Data\s\*.ert" and "Data\s\load only these scripts.txt" in Maps\[map name] or Maps\[campaign name]_[campaign map index] folder override the appropriate files in "Data\s" and "Mods\[any mod]\Data\s" only when this particular map/campaign is started. It means that every map, including maps in campaigns, can have unlimited number of own scripts and can flexibly control the script and language file subset which will be used.
[*] The order of file names in "load only these scripts.txt" does not matter. If file names contain priority prefixes, they are taken into account.
[+] "*.sys.erm" scripts are called System scripts and loaded always regardless "load only these scripts.txt" settings. System scripts usually provide support for critically important game aspects and should not contain any code which can be used optionally depending on custom map demands or player's preferences.
[*] Maps\[map name].cmd is not loaded.
[*] WoG.ini option "Alternative Scripts Location" is not used.
[+] Scripts preprocessing is not used. Invalid ERM receivers in form of "!!XX" remain. New option "IgnoreInvalidReceivers" was added to heroes3.ini. If it's on, invalid receivers are silently ignored. Otherwise new diagnostics message appears with the following information: invalid receiver, file name, linear offset in file, error context.
[+] Added new triggers OnGameEnter (77015) and OnGameLeave (77016). The first one occurs when map is loaded and player gets mouse control. The latter occurs when player leaves current game. This event can be use to revert special changes in game memory (like UN:C hacks).
[+] Implemented redirection support for *.mp3 files using functions "RedirectFile" and "GlobalRedirectFile". This mechanism should be used instead of deprecated !!MP commands. Calling redirection functions with first argument "*.mp3" forces playing only one mp3 track in all game dialogs.