Rime: June Progress Report

3 Months Later, much progress has been made. Here is another dump of the git repository change-log. I won’t be able to continue development on Rime until after July due to myself switching apartments again (I move every year =[ ). With that being said, I have set up a Continuous Integration server for Rime so current alpha testers can get bleeding edge builds if needed. There’s only one problem, deploying the builds 😛 I will be writing an open source deployment tool that I will upload on my github when it is completed.

With that being said, I have a software recommendation, If you haven’t heard PVS-Studio is a hell of a tool catching many programmer errors and mistakes. Rime didn’t suffer from many errors, only 1 high level issue, ~40 medium (mostly serialization issues), and 200 low priority ones (caused by floating point arithmetic) Read more to see full change-log.


  • Added proper [Flags] to various classes that had flags (ShaderManager, MeshLayout).
  • Added null checks to EbxTree.InternalSplit.
  • Added new shader based 3d renderer (wip, still fixing bugs and implementing all Mesh types)
  • Added fb::OccluderMesh, fb::CompositeMeshAsset, fb::StaticModelAsset, fb::RigidMeshAsset support to the 3d editor.
  • Added a GameContext to house entire level assets, resources, and configurations. This will also give Rime closer alignment to a real engine/editor.
  • Added PatchData class to being to handle custom patch formats.
  • Added auto-detection for Battlefield Hardline, Star Wars Battlefront, Mirrors Edge Catalyst Beta, and Dragon Age Inquisition.
  • Added resource tracking to the Venice bundle backend.


  • Implemented IDisposable on multiple classes (App, Watchdog, RimePlugin, MessageListener, etc)
  • Level editor implemented in a primitive form.
  • Implemented project files (only hold game path, and engine type. Everything is dynamically loaded)
  • Implemented Fb3ContentManager to handle Frostbite 3 formats. (will add other loaders as we come across different variations of FB)
  • Implemented parsing of Matrix4x4 to DbObjectElement parser.
  • Implemented a better ToString function for Guid in order to better represent it for debugging reasons.
  • Implemented BundleBackend.FileExists.


  • Removed dependency on RimeBindingsPlugin for Venice and generalized the entire GameContext class.
  • Removed checking on killing the child process in the EditorPlugin because PVS-Studio said it always eval’s to true.
  • Removed duplicated allocation of a CookieContainer in UpdateWindow.
  • Removed outdated documentation.
  • Removed outdated OpenGL rendering libraries for OpenTK
  • Removed outdated RenderCommands class.
  • Removal of Server Strip Plugin (will re-implement at a later date when more removals are ready)
  • Removal of a ton of dead/non-referenced/commented out code.
  • Removed Rime.Core.UI namespace and everything in it.
  • Removed all messages pertaining to Projects, will use MEF’s [Import] to get the project manager.
  • Removed UIManager as we now use ATF.

Bug Fixes:

  • Fixed warnings for MEF Imports.
  • Fixed bug in WebLink, will probably re-do this class over again to make it a bit cleaner.
  • Fixed duplicated code in CasBackend, SuperbundleBackend.
  • Fixed major bugs in Vec2, Vec3, and Vec4 classes (XYXW, XYX instead of XYZW XYZ).
  • Fixed floating point issues when comparing 2 floats (Abs(x1 -x2) < eps.
  • Fixed serialization issues in fb::Guid and fb::Sha1.
  • Fixed bug in the Ebx Warsaw reader.
  • Fixed numerous errors due to human error in various FileSystem backends.
  • Fixed a critical race condition between ATF and the messaging system by adding bool IsSystem property to all MessageListeners to send messages to those listeners first before others. (Mounting, Content reading etc all go through this before UI/ATF does)
  • Fixed bug in Venice’s Ebx reader where CtrRef’s were not being parsed correctly.
  • Fixed crash in RimeSettings when a registry key was not found.
  • Fixed all documentation issues in RimeCommon
  • Fixed bug on plugin close that would not remove the control from the host service properly.


  • Changed event firing in LoggedEventArgs in the logger to automatically check for null before firing (prevented a crash).
  • Changed Serialize() in Venice/Bundle to a regular function because it is not hiding anything.
  • Changed all Venice specific code from the 3d renderer, and made it generic to all frostbite engines (hint, hint, wink, wink).
  • Changed ambiguous Superbundle mounting messages. (There is now SuperbundleMountedMessage for when the sb gets added to the SuperbundleBackend, and SuperbundleBundlesMounted message now for when the bundles within a superbundle are mounted. Before the SuperbundleMountedMessage would get fired twice)
  • Changed WriteLog prototype to only include 1 string due to C# 6.0’s string interpolation.
  • Corrected ATF’s build in order to prevent runtime loading errors (Was getting built as AnyCPU, now being built strictly as x64)
  • Changed ContentManager to VeniceContentManager
  • Changed Bundle, Superbundle, Layout managers to be abstracted away so we can re-use the functionality for various frostbite engine versions. (There is now BaseLayoutManager, BaseMountingManager, BaseSuperbundleManager, BaseBundleManager available to implement for any frostbite version, also has been moved to RimeCommon.Mounting)
  • Changed Output plugin to now uses native ATF instead of a custom plugin UI.
  • Ebx editor now refreshes on ebx load.

Leave a Reply