Description
Binary is a tool that allows one to edit external (primarily binary) files of six Need for Speed games.
Features
- Frontend and backend are written in C# using WinForms and WPF.
- Ships a C++ .dll library that removes multiple hardcodes from supported games.
- Has its own scripting system that enables installation of any number of mods at once.
- Allows export, import, and editing of wide range of assets, including textures and language data.
- More than 200,000 downloads across the internet.
- Earned more than 100 stars on GitHub.
Motivation
The goal of the project is to provide an ability to easily modify external files of several
Need for Speed games. Such tool provides easy-to-use interface that targets any end-user.
Main functionality of such tool ranges from modifying existing file parameters (such as
modifying existing cars, car parts, texture settings, presets, etc.) to adding and importing
entirely new ones (such as importing new textures, collision data, etc.). Finally, perhaps
the main motivation, is improving in both C# and C++ languages, as well as frontend and
backend desktop application development.
Problems
The main problems when making the tool were reversing the external file data, understanding how
to read and write it. Another problem was creating a user interface for casual users who install
mods and modders who use the tool to create those mods. For that, the application is split
in two modes: User and Modder. The last major problem after making the software was the numeral hardcodes
in game executables. To fix that, a dynamic-link library was written in C++ code that is loaded
on every game startup.
Results
The result desktop application is shown below. For more information and visuals
on how it looks like, check out the YouTube link on top of the page.
The main window of the application. It contains most of the available
functionality that the tool has. It contains 3 main subwindows: the tree view where the contents
of each loaded/created file are visible, the property view, where contents of each individual
structure/collection of data is visible, and the script text view, where custom scripting commands
can be executed.
The texture editor window of the application. Application contains multiple
additional windows for large collections of data, such as textures, language data, car part data, etc.
The following window allows one to edit all supported by game texture properties, as well as export
existing textures and import entirely new ones.
The language editor window of the application. The editor allows one to edit
existing language string data, as well as remove existing data and add entirely new one.
Conclusion
The project expanded my general knowledge in C# and C++, as well as introduced me to
desktop development. Since the project dates back two-three years, there is definitely tons
of room for improvement, such as moving from WinForms/WPF to cross-platform Avalonia UI,
making internal libraries more object-oriented, etc.