Binary

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.

Get in touch