Code ported from Delphi 7 version to modern Delphi (Delphi XE, 10, 11 & 12)
Contains ERA and VFS projects as well as B2 library.
Original commits containing code are from ethernidee repositories:
ERA: 3d401e8
VFS: f18d56d
B2: 31f0076
Table of Contents
Project code has been ported from Delphi 7 version to the newest Delphi version. Minimal changes to code are introduced. Main purpose of this project is to continue its legacy and provide updated functionalities. Original goals and functionalities have been preserved. The porting process has been carefully executed to ensure that the project retains its original essence while leveraging the latest features of the new Delphi version. Original code has beed developed by ethernidee.
Project goals:
- Compile code using modern version of Delphi.
- Maintain compatibility with ASCII strings.
- Make minimal changes to the code.
- Ensure that code line numbers align with the original code lines for easier comparison.
- Avoid adding any additional features or improvements.
- Keep the project active until this code becomes the foundation for future ERA releases.
If you prefering to use compiled releases, please follow the steps outlined below:
- Download the latest self extracting Release package,
- Before proceeding make sure to backup (Era.dll, Vfs.dll, Era.dbgmap and Vfs.dbgmap) files in your game folder,
- Unpack the Release package to game folder and override existing files,
- Play game.
Please note that it is always recommended to create a backup of files before making any changes on them. This ensures that you can easily revert back to the previous version without any data loss or damage to your game in case of problems during installation process.
The latest version of Delphi can be obtained from the official website. It is recommended to download and install it
for optimal performance. If you meet the eligibility criteria, you may choose to use the
Delphi Community Edition.
This will allow you to access the features and tools necessary to build this project.
In order to run the project, it is necessary to have Heroes 3 installed on your system. If you do not have it installed already, you can obtain it through the Hero 3 Launcher. The launcher provides further information about the installation process and any necessary updates. Once the game is installed, you will be able to test and run your project as desired. Don't forget to keep your Hero 3 Launcher updated. More information about Hero 3 Launcher can be found on Discord chaneel.
Clone repository to local machine using Git. If you do not plan to use versioning, code can be unpacked from zip file to local project folder. If you plan to use debugger set project output folder to Heroes 3 installation root folder. Follow next steps to setup project:
-
Obtain local copy of repository from GitHub
1.1. If you will not use version control then download zip file from GitHub and unpack it to local folder
1.2. If you will use version control then clone the repository to local folder
git clone https://github.com/VuceticBranislav/era-modern.git
-
Open project group file in Delphi
ProjectGroup.groupproj
-
Set host application in Era and Vfs projects to Heroes 3 executable
Era.dll project > Options... > Debugger > Target > All configurations - Windows 32-bit platform > Host application Vfs.dll project > Options... > Debugger > Target > All configurations - Windows 32-bit platform > Host application
-
(Optional) Set output folder for compiled dlls to root of Heroes 3 installation directory
Era.dll project > Options... > Building > Delphi compiler > Target > All configurations - All platforms > Output directory Vfs.dll project > Options... > Building > Delphi compiler > Target > All configurations - All platforms > Output directory
If optional setup step in not taken, the project's files are created in a local folder, then files must be manually copied to the game root folder. It is always good idea to backup old files. File can be backed up by moving to another location or renaming (e.g. Era.dll.off or Era.dbgmap.off ...).
BuildTools is set of tools used to build Era or Vfs project. BuildTools is used to generate version information resource files in pre-build process. It is also used to generate .dbgmap files in post-build process. That is reason why it must be build first, then Era and Vfs projects can be build.
Dll files must be manually copied to game directory. Also copy .dbgmap to game "DebugMaps" folder. In order to do that replace original files with newly built files. You will not be able to use debugger if you pick this option. Follow next steps run game with new dll files:
- (Optional) Backup old Era.dll and Vfs.dll from Heroes 3 installation folder,
- (Optional) Backup old Era.dbgmap and Vfs.dbgmap from Heroes 3 "DebugMaps" folder,
- Build All project, (Right click on ProjectGroup in project explorer and select "Build All"),
- Copy new Era.dll and Vfs.dll from corresponding "Compiled" folders to Heroes 3 installation folder,
- Copy new Era.dbgmap and Vfs.dbgmap from corresponding "Compiled" to Heroes 3 "DebugMaps" folder,
- Run Heroes 3 executable.
Compiled files will be automatically moved to game folder. If you need old dlls backup it before project build. Debug maps will be automatically generated and moved to game "DebugMaps" folder. Follow next steps:
- (Optional) Backup old Era.dll and Vfs.dll from Heroes 3 installation folder,
- (Optional) Backup old Era.dbgmap and Vfs.dbgmap from Heroes 3 "DebugMaps" folder,
- Build All project, (Right click on ProjectGroup in project explorer and select "Build All"),
- Select Era.dll as active project by double click on it,
- Run Era project in debug mode from Delphi,
Project structure show important content location and default location of compiled dll files if output directory is not set.
. │ ├─ BuildTools # Tools needed to generate .dbgmap files and update dll version info │ ├─ Compiled │ │ ├─ Debug │ │ ├─ Release │ │ └─ ... # Comiled BuildTools.exe used in build process │ └─ ... │ ├─ Era # Era project │ ├─ Compiled │ │ ├─ Debug │ │ │ ├─ DebugMaps # Debug version Era.dbgmap │ │ │ └─ ... # Debug version Era.dll and other debug files │ │ └─ Release │ │ ├─ DebugMaps # Release version Era.dbgmap │ │ └─ ... # Release version Era.dll and Era.dbgmap file │ ├─ Lua │ └─ ... # Source code and versioning files │ ├─ Lib # Additional libraries needed for projects │ └─ ... │ ├─ Vfs # Virtual file system project │ ├─ Compiled │ │ ├─ Debug │ │ │ ├─ DebugMaps # Debug version Vfs.dbgmap │ │ │ └─ ... # Debug version Vfs.dll and other debug files │ │ └─ Release │ │ ├─ DebugMaps # Release version Vfs.dbgmap │ │ └─ ... # Release version Vfs.dll file │ ├─ Tests │ └─ ... # Source code and versioning files │ └─ ... # Clean.bat
In regards to the original code, there have been a few changes implemented:
- "Legacy.pas" has been added. It contains all the necessary code to ensure that the port works seamlessly,
- Introduced proxy type for string and char types to allows for more efficient and streamlined handling of these types,
- Automatic application versioning information is embended. Version number should be changed in "VersionInfo.inc",
- "Clean.bat" added to remove all unnecessary files from project folder.
Versioning info are automatically embended to compiled files trough post build actions. Post build action execut BuildTools.exe that create VersionInfo.rc files and compiles it to VersionInfo.res files using Bcc32.exe. During building process VersionInfo.res file is used to bind versioning info. To change versioning info of compiled files and ERA_VERSION_STR and ERA_VERSION_INT project variable update VersionInfo.inc file.
The following is a summary of the project's current roadmap, outlining the key features and improvements that are currently in progress or planned for the near future:
- Use modern Delphi versions to compile Era code,
- Use modern Delphi versions to compile Vfs code,
- Evaluate the behavior of the newly compiled code in comparison to the original code,
Any contributions you make are greatly appreciated. If you have a suggestion, please fork the repo and create a pull request. You can also simply open an issue.
To contribute using fork follow next steps:
- Fork the Project,
- Create your Feature Branch (
git checkout -b feature/MyFeature
), - Commit your Changes (
git commit -m 'Add my feature'
), - Push to the Branch (
git push origin feature/MyFeature
), - Open a Pull Request.
See LICENSE.txt
for more information.
Aditional helpful resources