Optimizing Mod Discovery & Implementation

The concept of a platform to share user-generated content sounds relatively simple on the surface - a modder uploads their creation, the player downloads it - but in reality, there are significant technical and logistical challenges that go into making a platform like mod.io work, in a way both developers and players come to expect.

Posted by on (updated ago)


The concept of a platform to share user-generated content sounds relatively simple on the surface - a modder uploads their creation, the player downloads it - but in reality, there are significant technical and logistical challenges that go into making a platform like that effective and rewarding, in a way both developers and players have come to expect.

Discovery

A classic example of this is the organization and categorizing of mods and user-generated content. Having a vast amount of content available to players is great, but just how discoverable is that content, especially when it is user created and varies wildly in terms of quality and complexity? Developing a system that allows users to browse, sort dynamically, and organize big data presents a significant challenge - especially when you want to surface the best content. Key considerations you should factor into your designs are:

  • Ability to set tags and categories for modders to pick
  • Track key metrics like subscribers, downloads, and ratings
  • Organize content by date submitted so players can see what’s new
  • Highlight content you have previously visited, are subscribed to, or created
  • Most importantly is sorting and filtering with sensible defaults to surface what’s good and trending - giving players the power to control this themselves

For example, SnowRunner a vehicle sim on mod.io, uses extremely detailed tagging, enabling players to find exactly what they want when combined with custom sorting and keyword search. Your players should be able to perform queries like: “give me the highest rated trucks which were submitted in the last 24 hours”.

snowrunner browse


Using our years of experience in modding, we’ve overcome these hurdles by providing a simple, ready-to-run API and user-experience that has this functionality built-in, so all you need to do is set up the tags once. You can then build custom filters and sorting as needed. Our API easily integrates with any game, independent of engine or platform - however, as with any plug-and-play solution, one understandable concern at the forefront of developers minds is that the needs of your game might differ significantly compared to the needs of another (i.e. RPG vs. FPS). It's a concern we fully understand, which is why we're building mod.io to be a flexible, scalable, and long-term solution for developers - that gives you the control needed to enable and disable the features that make sense.

Implementation

Optimizing mod discovery is only half the challenge, the next step is getting it all running well in-game. Our goal here is to build tools that provide sensible, easy-to-use, optimized defaults, to eliminate as much implementation effort for your developers as possible. There are a number of important factors to consider when adding a feature to an application or game, especially one that requires network calls to a backend server that can be unpredictable at times depending on the users connection:

  • Performance Impact
  • Implementation & Maintenance Costs
  • Properly Handling Responses, no matter when or what comes back

At mod.io we aim to minimize the performance impact, handle the infrastructure and maintenance and make implementation and responses easy to follow and action. One example of this, is our approach to managing tasks within our C/C++ SDK. Traditionally, whenever a task or function is performed in C/C++, the entire task is completed in one go, pausing the requesting function, or in a worst-case scenario, negatively affecting the game’s frame-rate.

While it may only take 5 seconds to update a mod list, for example, this is an excruciatingly long period of time for a function to run in video game terms. On a basic level, our solution is to break down these comparatively long tasks into tiny pieces, ensuring that we don't block or slow-down the host game.

sdk diagram invert


Going back to our example of updating a list of available mods, instead of waiting for the entire task to complete in one go, we'll send our initial request to the API, then stop our task, allowing the game to continue unimpeded, and occasionally poll the operating system waiting for the reply/acknowledgment. Once the OS has received that, we'll then decide if we want to continue with the next piece of the task or allow the game to continue.

By breaking up these tasks into tiny slices, we ensure that mod.io has minimal to no performance impact on the games that integrate with it. This is one of many decisions we consider and factor into the design of our SDK and plugins, because the less you and your players notice mod.io doing it’s thing fetching mods and content, the better that means we are doing our job. You can read more about our API, SDK, and game-engine plugins on our documentation pages.

Comments

Join the community or sign in with your gaming account to join the conversation: