All posts by kiwidog

Rime: May Progress Report

Sup,

Just a few updates. As read in my previous post, security is something I take very seriously as a developer, and I was going to allow plugins to run unrestricted until the beta. Luckily with enough debugging and trial and error, I finally got proper locked down sandboxed plugins that can be loaded from any directory! With that being said as well, I have resolved issues with the internal messaging structure for Rime as well as changed the way that plugins function. I also will be updating the example plugin git repository.

Fixes:

  • Overhauled and fixed internal communication of all parts of Rime
  • Fixed loading of plugins
  • Implemented plugin security sandbox
  • Cleanup of old code, refactored entire plugin system

Removals:

  • Removal of SharpDX and all DirectX 11 related mesh rendering
  • Removal of IPlugin interface.

Implementations:

  • Moved all plugin logic and abstract classes to a common module (RimeCommon)
  • Moved most message logic and listeners to a common module.
  • Setup an OpenGL based renderer to replace SharpDX. Proof of concept finished.

Also I’m moving, so there may not be any work done until I find a place to live. Peace.

Rime: April Progress Report

Hey,

There have been a few things that have been going on in the last few months. I just wanted to give everyone an update on the current status of Rime and the Venice Unleashed interop. First things first, plugin’s are hard, if you have checked the previous post on plugins and open source, I am making use of a plugin system for all external and internal plugins. That way you, the hobby modder can look at what we have to offer, and the functionality of it and be able to write your own code to interact with the Frostbite engine. That’s all fine and dandy, but I am a security-oriented coder. I have been working on for the last week a system to overlay the plugin interface’s to allow the code to be sandboxed, only allowing read/write access to the folder where the plugin resides. This will lessen the chance of someone writing a malicious plugin to steal sensitive information, or execute code that could potentially be harmful.

The way that I was going to get around these issues, is force the sandbox to run as lower-level privileges than Rime itself. (Even though Rime does not require to be ran as administrator, some people will anyway). That a malicious plugin writer won’t be able to gain privileges via Rime. And all of this is where the problem comes in, I have been debugging and researching the best approach to this in C#, and there just isn’t one (publicly at least). So I am making the decision to scrap the secure plugin system for the closed/open alpha of Rime until we get a functional system for the beta. With that being said, I highly recommend that any plugin creator open source their plugins so people can compile it from scratch. If you download a pre-built executable, use caution and only download from trustworthy people.

Fixes:

  • Fixed incorrect TextureHeader structure
  • Fixed DXT1-3 native C# processing.
  • Fixed EBX reading code
  • Entire application structure refactoring for prep for release (removing unused/old code etc, that’s why we have source control ain’t it?)
  • Abstracted multiple classes to prepare for multi-game Frostbite support.

Broke:

  • Internal communication of all parts of Rime. (Yeah… I fudged up bad)
  • Plugins in their entirety (which means all the built-in editors for Rime have been disabled as well, Rime’s internals uses the same plugin system)
  • DirectX 11 Mesh Renderer (Instead of using laggy WPF for everything)

Additions:

  • Battlefield 4 Resource Types
  • Proper loading of all game files and resources. (Just like how it gets done in-engine, no longer needs to decompile the entire map/game to mod resources)
  • Retrieving encryption information, and real time modding via Venice Unleashed.

Rime: Let’s go Open Source

Hello all,

Just an update to give some progress on Rime, what’s determined to be the worlds greatest Frostbite tool other than DICE’s internal FrostEd. (endrant.)

Rime's Project Explorer

There has been some confusion on when, or where Rime will be released. Currently the answers are both, “Soon”. But as a step forward to speed up development certain parts of Rime will be Open Source. This is the first open source project that I will be hosting and hopefully people will be contributing. Now back to that word “certain”… As it stands now, Rime itself will NOT be open sourced, that way there can be tight control over builds, coding style, and management. What is currently open source as of a few minutes ago is the Plugin System, and eventually the RimeLib will be open sourced.

The plugin system will allow anyone to write plugins to interact with new content, or just write better editors than the built in ones if you are so inclined. But the plugins will be called upon each time a certain style of content is requested to be opened. All of Rime’s internal editors, content loaders are all just built-in plugins, so the system has been tested so far as working. With the exception of IPlugin (which is included in the repository) you will not need ANY other source from Rime to get started writing awesome plugins. You have full reign over C# at this moment with plugins so you can load external files etc, just as you would any other C# application.

Now, what is this RimeLib? Well RimeLib is currently the native C# library that was designed to handle all of Frostbite’s various classes and formats. Pretty much RimeLib does all of the hard work for you, so you don’t have to worry about alignment, hex editors, or any of that. For example, loading a mesh into a nice C# class with formatting is only 1 line of code with RimeLib. The library is still in early development phases and has not undergone a huge re-write since it’s first inception in IceEditor Alpha, this will all need to change along with proper documentation for all of the classes and a separation between release and debug builds (release will only have FINALIZED and 100% confirmed structures, methods, classes; while debug has everything including experimental code). You will be able to find RimeLib’s source code sooner than later (Hopefully a few releases into Rime’s Closed Alpha testing).

What are you waiting for? Go check out the awesomeness of Open Source!

Rime: Why not make things easy?

Well, its 5:09AM when writing this, I haven’t slept in forever and I’m probably about to go to bed. I noticed when developers are using FrostEd they seem (at least from Frostbite’s Main Page) like the UI is fluid and very easy to use. The primary drawback of modding in Bad Company 2, is there are barely any good editors for the map format. Yes, we have our beloved rukqoa’s Bad Company 2 editor with 2d map placement. But I feel its time to move forward above the old python scripts and manually doing everything yourself. Rime has been planned to be as much as an all in one tool for as much as possible. If there is something Rime can’t do, it will try it’s best with assisting you with data viewers and raw hex dumps of what its using. Pretty much so far, I will just list off a few things that Rime will make very easy to all of its users, SO FAR.

  •  Easy to use wizards for de-compiling and re-compiling a map, and any assets that Rime will need
  • Form integration
  • Easy to use UI (will be changed based on user feedback (yes you!) )
  • In-app model/mesh viewer
  • In-app texture viewer/converter

There is probably more, but its super late and I can’t remember. I have been working hard on this project since the new Star Wars game is coming out and I would love to have space troopoer models on a very less blue Strike at Karkand. Anywho, let me stop my useless ramblings and show off some screenshots.

 

User no longer has to work hard to prepare to mod a Frostbite engine based game.

Continue reading Rime: Why not make things easy?

Rime: Mesh Viewer Preview

This project hasn’t been touched in quite awhile. I last left off with figuring out mesh data and with help from dani we got it all done.

This is a very rough preview, that we can load models and load them into a model viewer all using engine files.

Whats to come is proper lighting, faces, texturing etc automatically from the new backend that Rime has been coded on. Instead of forcing data into a million different formats, why not live edit?

tl;dr; This video was showing Frostbite 2 model data being loaded natively and being displayed using WPF.

Battlefield 3 File Signature Checker

Due to the developments of Rime and Venice Unleashed, I have decided to release this after a few days of work. It does nothing but validate the signature with the DICE public key (not provided). It will spit out the output if the signature is valid or not. Source code included but not recommended to use. Just use it for educational purposes. This may seem useless to the 99.9% of you guys who are waiting for Venice Unleashed and Rime, which is true but it helps people reversing the file format and Frostbite(tm) engine.

VeniceCryptTest ScreenshotVenice Crypt Testing Project with Source

30GB Of What?

Well after a 2 second question with Sir. NoFaTe, I started adding a very interesting part to Rime. This is mainly in-case due to the announcement of Venice Unleashed’s Client-as-Server methods. As most server admins know, moving around 30GB of data for a server install is just too painful. This is due to the engine ignoring a TON of file formats when it is running as a dedicated server. Therefore one thing leads to another and there will be a standalone version of Rime just for re-building all of the maps in a minimal state. aka we go in, throw out all of the garbage that 1. Gets Ignored, or 2. Not used anymore and then run the game again. I haven’t started any testing but it should reduce the file sizes drastically.

Ignored File Types: (Thanks NoFaTe)

  • SwfMovie
  • MeshSet
  • MovieTexture
  • RenderTexture
  • ITexture
  • DxTexture
  • SwfTexture
  • RenderTexture (again?)
  • OccluderMesh
  • EnlightenDatabase
  • EnlightenShaderDatabase
  • EnlightenSystem
  • EnlightenProbeSet
  • StaticEnlightenDatabase
  • VisualTerrian
  • TerrainDecals
  • ImpulseResource
  • (Certain) Sound Files

Carl On Duty: Ghostbusters and x64 Calling Conventions

Well its that time, Carl on Duty: Ghostbusters has released! Long story short, still looks like poop, what they showed in the trailers is “meh” by any means. Not to say that Battlefield 4 was any better (the campaign was horrible, but who gets the Fish or Battlefield for SP?). I got a copy of the game to take a look at the security inside, well its the same lax-bro security that they have used in every other game that can be easily bypassed. But whats this? x64 (or 64-bit) processor is required with DirectX 11? First off, I noticed this during Blops 2. Why in the hell does the IW engine need any of that? It still runs like crap and rant, rant, rant. Moving on from that, I have taken closer look at x64 calling conventions for IceEditor (Battlefield 4 x64) and a possible new version of kiwicon for Ghostbusters singleplayer.

Continue reading Carl On Duty: Ghostbusters and x64 Calling Conventions

The state of Warsaw

Well with Battlefield 4 by one of my most favorite studio’s Digital Illusions CE (better known as DICE) releasing within 24 hours has released.. I think I should share some information here, just to be nice to everyone involved.

Before we begin, I’d like to say that this will sound very similar to Halo’s format (Blam Engine) way of explaining things. From content like images and sounds being called raw, metadata being called meta, and Ebx, and other “describing” formats being called tags. From my observations they have seemed to take a more centralized approach to storing all of their information. They have moved all of the raw data, and certain central ebx files into the cascat format. The cascat format had been used in Battlefield 3 base, but it seems like it was neglected after release. Cas stands for Content Addressable Storage and how it pretty much looks is, you have a catalog file which contains offsets, file sizes, and a SHA1 hash of all of the data inside. (And by all of the data, I mean each file that is within a cas file has a SHA1) The way that I have reversed it, it appears that you contact for certain things a CAS handler class which will then look up the file, raw, whatever that is in it based on SHA1. In Battlefield 3, these SHA’s were not in any kind of order and that caused the game to take forever to load on original maps even if you had an SSD because it was re-computing SHA1’s or looking them up in a unorganized manner. This problem most likely still exists in Battlefield4, unless the cas building tool sorted the hashes before hand. I have not actually looked into if hashes have been sorted.

In the BF4 Alpha Trial, Frankelstner noticed there was a different ebx header for the ebx data. Ebx data is Binary XML in a nutshell. I took a look into the matter and a quick IDA review showed that some of the information in the header had changed sizes, by that I mean it went from a 32bit integer, to a 16bit integer in certain locations. Quick modification to previous source code got us pass that. Even better yet, upon analyzing the dumped Alpha Trial executable, I noticed that certain things that I could rely on for finding the ebx process function had changed, the most notable is the string “Bad EBX Partition Header” or something similar to that. So that got me a bit interested. After a few hours up comparing functions to the previous ebx reading code I was able to find and update most of the functions. DICE still uses a giant switch statement (Thanks Hex-Rays 🙂 ) as a partition reader, which whoever wrote that should be spanked (not really, but its frustrating to reverse). But there was something different about it all.

In Venice (Battlefield 3) and Medal of Honor Warfighter and previous Frostbite 2 based games, the ebx reading code (binary xml) is called StreamingPartition blank, where blank would be Reader, Array, etc. In Warsaw (Battlefield 4) its just called EbxPartition blank, where blank means the same as before. There are minor changes throughout but it caused me to separate some of the code into 2 different sections within “IceEditor”. There is a reason I put IceEditor in quotes for now. Along with ebx code changing certain things in the header, having a 64-bit alignment also became an issue. Its not a major issue because well screw alignment.

tl;dr; IceEditor is now called Project Rime and will probably be a open source project near its completion. Since once all of the base framework is finished it won’t be that hard to properly add support for new games using the Frostbite engine. There will also be backward compatible support eventually if someone wants to step up for the project. (BC2, BC1 support) There has been many many hours lost in reformatting without backing up the project, source control servers deciding to go poop and losing all data. lada lada.