Manager for dynamic modifications of SWBF2.
### What's different about CMods?
As opposed to static EBX modding, CMods add additional code to the game, extending and giving you the ability to accomplish nearly anything. Mods are in the form of DLL's, and are loaded at runtime automatically without the need for injection thanks to a proxied DLL.
### Frosty _vs_ CMods
There's no competition here. Each framework is meant for completely different types of projects. This modding framework excels in areas where lots of dynamic reading/writing/interpreting is necessary. Other static mods, such as manipulating bundles/textures/levels are in the domain of frosty.
You can check out the [Frosty Tool Suite](https://frostytoolsuitedev.gitlab.io/) here.
### Installing a Mod
It's simple. First, make sure your game'd directory is set. You'll be greeted with a checkmark next to the game's directory bar if this is correct. Then, simply click on the mod you wish to install, then click the install button.
Once a mod is installed, you can start the game as normal. A launch button is thrown there for continence, but isn't necessary. You may go and apply frosty mods if you wish, these are not likely to interfere.
### Viewing a Mod's Details
Upon either double-clicking or pressing the [Mod Details] button, an async download is made to get the description of the modification you're browsing. Some light formatting is done, but not all markdown syntax is parsed. You can view the same file in the web browser
### Advanced Features
Upon ticking the [show advanced] checkbox, you get the availability of a few new resources.
First, is the debugging console. All output sent through `Console.WriteLine` is piped through this textbox.
Second, is a settings screen. You can change the theme to either dark or light, however light isn't fully supported at this time. You can also toggle between the default purple theme, and your windows theme.
By selecting the "windows" theme, your selected windows 10 Color is used. (Change this by going to windows settings->Personalization->Colors). Note that many colors won't work well.
### Live Loading/Unloading
Given the nature of these mods, you can actually load and unload them at any time. (Note, ejecting at version 2.0 isn't a thing yet). You can specify a DLL mod you wish to load, for example, the CinematicTools dll. Click [BROWSE] to find the dll, then click [Inject Module] to load it into the already running game.
Note that ejection only works for supported modules. The listview will show most modules that are not normally recognized by the game.
|Version | Date | Info | Desc |
| ----- | ----- | ----- | ----- |
| 2.5 | 07/29/18 | [2.5](#25) | Proxy Updates |
| 2.4 | 07/24/18 | [2.4](#24) | Live Ejection |
| 2.3 | 07/22/18 | [2.3](#23) | Launch Bug Fix |
| 2.2 | 07/17/18 | [2.2](#22) | Launch Verification |
| 2.1 | 07/17/18 | [2.1](#21) | Post-update Manager Crash |
| 2.0 | 07/04/18 | [2.0](#20) | Program Overhaul |
| 1.0 | 06/27/18 | [1.0](#10) | Initial Release |
Removed the ejection IPC listeners as each module hosting the named pipe created a ton of issues. Now all the entire unloading sequence exist in the dllmain of each module. Upon loading from LoadLibrary by the proxied dll, the handle to the module is stored in a vector. The proxied dll is now the only module listening for incoming information for unloading modules, and it just calls FreeLibrary when it gets a request and the dll path matches. Also removed the console allocation/freeing from most mods, that is optionally done from a different mod altogether now.
**Edit:** It's still broken (the auto-updating for the proxied dll).
Added support for live ejection. The Discord-rpc mod, as well as the FFDetect mod utilize this. It operates on [this](https://www.unknowncheats.me/forum/general-programming-and-reversing/291558-dll-ejection.html#post2185761) system. The FFDetect mod got an update so it logs fairfight activity to a file in your bf2 folder, along with timestamps of each message. This will be much more helpful for post-ban analysis, since you could accidentally exit the game (and thus the console with it) without checking the logs. Also instead of reading .dat files for every module, my server now hashes each file for me. This means I can update mods by just dropping them into through ftp, no hash manual verification required.
Fixed a bug introduced by version 2.2, where certain machines the update verifier would fail for various possible reasons.
Added a bunch of checks to verify that the launcher was executed from the updater. This is primarily to avoid running the manager when it's outdated.
Fixed a large issue where the the presence of the backed up DLL would automatically assume the modded dll was installed. This caused an issue after the game updated, and the backed up file remained in addition to the real original DLL. Now the backup is deleted if it's MD5 doesn't match what the stock DLL should be.
Fixed an issue where some colors became unreadable when switched to the white mode.
Biggest update. Every UI element was moved to `TableLayoutPanel`s, so resizing program now worked properly. Added multiple tabs, an implementation of my `Gracias` project, a tab with the mod description, featuring basic markdown parsing, and an imagelist. The console was moved to a richtextbox control, and a DLL injector was added for loading custom modules. A settings page was added, giving you options for switching between light and dark theme. The 'System' theme was added, which gives you the ability to use your current windows 8/10 color settings as the color scheme for the mod manager.
_woah, crazy idea_
### Future Design, Ideas, and Possibilities
I'm going to list down a bunch of things I'd like to add/change to the mod manager, as well as some bugs that need fixing (and that'll hopefully happen in the near future)
##### Manager Ideas
**In no specific order,**
* Fix issues with the Proxied DLL updating before the game updates
* Rebuild the entire thing in either WPF or CEF, just to make things better
* Fix the DLL Ejection system
* Actually write the FB-SDK and use signature scanning for it
##### Mod Ideas
* Create a stat tracker
* Re-write a RAZER Chroma (the led's on RAZER keyboard) integration system
* Write a mod to integrate Philip's HUE into the game ;)
* Write a hacker-detector mod