Skip to main content
  1. Writing/

Tracking My Own Halo Infinite Stats With OpenSpartan Workshop

·1628 words
This blog post is part of a series on exploring the Halo game API.

OK, look - I am not the one to tell you that you absolutely have to track your stats for a damn video game, but I am the kind of person that finds a certain fun in that, just like I find the fun in reverse-engineering the entire Halo Infinite API. There is a certain beauty in looking at your own numbers, even if they are for some meaningless, entirely made-up progression system.

Enter OpenSpartan Workshop - the companion app for Halo Infinite that I wanted to have.

🚀 Download it on GitHub

You can also watch the video where I give an overview of the tool:

The origins of this project, just like the origins of many other side projects that I’ve ever tackled are rooted in annoyance with the limitations of existing tools. Halo Waypoint is OK and gets you 60% of the way where you want to go when it comes to game stats, but then it stops. And the rest is… Well the rest is what I built for myself, and decided to share with others who might want to keep track of the stats in Halo Infinite the same way I do. I’ve been working on this project for some time now, and it even saw a few releases - it just happens that I am finally getting to blogging about it.

OpenSpartan Workshop is an app for Windows, that does a few things that I will cover below. It’s in its early form, so I fully expect more changes to roll-in, but I am proud of the small win nonetheless.

Comprehensive career overview #

One thing that I really wanted was to look at my in-game career at a glance. And not just my current rank but also at the level of experience that I am at, and what is required still percentage-wise to get to the end-game Hero level.

Screenshot of OpenSpartan Workshop main window

This is all encapsulated in the main window that renders the moment OpenSpartan Workshop starts - you get everything at a glance, without trying to do mental math yourself.

Every match, stored locally #

When you go to the Matches view, you get to see every single match you played in a dense, but informative table.

Match table in OpenSpartan Workshop

The density is intentional here - I want to see everything quickly and at a glance, just like I want to see my expenses in an Excel spreadsheet. There is zero nonsense and all substance. I can see:

  1. End time. Helps easily tell when it ended and orient myself if I want to find a specific match.
  2. Match ID. I often want to track down specific matches in the database (on that in a second) and a unique match GUID is the best way to do that.
  3. Clear, colorful outcome. I borrowed this idea from BadDub who is building Halo Data Hive (and they’ve done a marvelous job with the match outcome color-coding), but seeing the outcome as a color makes a huge difference.
  4. Team MMR. I want to know what is the multiplayer rank of my team because that gives me an idea of why a match went the way it went. You know those times when you absolutely destroy the enemy team only to realize that their team MMR was 800, and yours was 800-ish while you’re usually in 1100-1200 ranges? Yeah, this will give you a clue.
  5. Duration. Easy to see how long the match lasted.
  6. Kills and deaths. Somewhat self-explanatory, but it also includes the expected performance and a clear visual marker that tells you whether you went above or below the threshold that the game set for you for that particular match.
  7. Rank. Out of all the players in the match, where were you on the leaderboard?
  8. Ranked tier and the associated CSR. Gives you a clear idea of the progression in the ranked playlists.
  9. Map and playlist information. Allows you to see the game category (e.g., Slayer, Fiesta), map (e.g., Aquarius, Disciple, Urban Raid), and playlist (e.g., Ranked Tactical, Quick Play, Husky Raid) for each match.

But wait, there’s more! When you click on a match, you can see some very interesting details, especially for ranked matches.

Match table in OpenSpartan Workshop, showing details when clicked on a match row

All match details and player performance, along with:

  1. Ranked progression. Similar to how you can see it in the game, you get to see the progress of your rank and the delta between the previous state and the state after the match.
  2. Tier counterfactuals. This tells you how the game expected someone at a given tier to perform. This allows you to estimate your own performance and how it stacks up against, say, what an Onyx player would’ve performed like.
  3. Medals. No extra comment needed here, but if you also click on a medal, you can see its details and browse other matches where that medal was earned.

I alluded to it earlier - all match data is stored locally after it’s been pulled from the Halo Infinite API. There is a SQLite database that contains all the player information and matches, where you can extract the details for any of the matches you want - it captures all the data available in the API, helping you avoid extra calls and dealing with authentication when you already have the details.

This also allows match data to be loaded quickly without waiting for any extra details to flow in. Every time the game starts, the match list is updated to make sure that all metadata is captured for any new matches that the player has been a part of since the last launch of OpenSpartan Workshop. In the latest release I even added another option for loose match searches, that ensures that I can load updates even quicker and just for the latest matches that were player (previously the search logic would try to validate integrity of all matches ever played by the logged in user).

Medals #

To see all the medals you’ve earned in your service record lifetime, you can click into the Medals view, where every single medal will be shown in all its HD glory.

Medals, as seen in OpenSpartan Workshop, earned through the player lifetime

When you click on a medal, you get all the information you need about it, including the unique name ID that is also queryable in the database I mentioned above and the ability to load all the matches where that medal was ever earned.

Clicking on medal details in OpenSpartan Workshop

That way, you can easily tell what matches you earned a Ninja in, and because it’s all pulled from the local database, it’s very quick.

Operations #

Halo Infinite is the first game in the Halo series to introduce the now-known concept of battle passes. When you go to Operations in OpenSpartan Workshop, you can see how far along you are in any given battle pass or past event. The distinction is really not important for most players, but modern operations are effectively the replacement for battle pass seasons and events were temporary reward activities with their own bonuses attached. In OpenSpartan Workshop, I track both, albeit in separate sections.

Operations in OpenSpartan Workshop

When you click on an item, you, of course, get the item metadata that tells you some baseline information about it. I am aware that it’s pretty barebones now - I aim to improve that in the future.

Exchange #

I am just tired at looking at stretched PNGs in game and wanted an easy way to see what’s on deck for the Exchange. The data can be accessed by going to the Exchange view.

The Halo Infinite Exchange integrated in OpenSpartan Workshop

Description for each item available is there when you click on it. I am looking at ways in which I can integrate purchasing of items from the Exchange with Spartan Points directly from OpenSpartan Workshop, but that’s a more long-term project.

Season Calendar #

This is a visualization of the seasons, operations, events, and everything else timed in the Halo Infinite calendar. Instead of trying to recall when Banished Honor happened you can just scroll through the calendar in the Season Calendar view.

Season Calendar in OpenSpartan Workshop

There are two lines for each day - the player season (that is, your typical operations) and the CSR season, telling you when the CSR rank resets. We’re currently in CSR season 7-1, with the next reset coming on July 30th (according to the current data).

Ranked Progression #

Last but not least, if you go to Ranked Progression you will see your ranked placement and progress across the currently supported ranked playlists.

Ranked Progression rendered in OpenSpartan Workshop

This view captures the permanent and rotational playlists, the current rank and progress against the required CSR (I need to fix the boundary for the CSR values here), along with maximum rank attained this season and in the player’s lifetime. If you hover over any of the playlists, you will see the exact CSR values.

What others have to say about it #

Well, the project has only been out for a limited time, but a few comments that caught my eye:

Comment saying "I don’t play HI anymore. But this looks better than any 343 system I’ve ever seen."

Comment saying "This is absolutely phenomenal."

Comment saying "This is amazing. +1 for a MacOS version."

Comment on OpenSpartan Workshop from a user who wanted re-assurance that the code is safe, with another user vouching for its quality

Comment saying "This is so sick! Any chance for a Mac version?"

Once the Windows version stabilizes, I will look into building a macOS release as well, time permitting!

Conclusion #

It’s been a fun project where I could finally use my wrapper over the Halo Infinite API (it’s not public at this time). I have more in store for OpenSpartan Workshop, that you can see if you go to the issue tracker on GitHub. And of course, if you have any ideas about what should be added or improved, feel free to open an issue. In the meantime, I will be documenting the project and all related APIs on the OpenSpartan website, so make sure you bookmark it and check it regularly for updates.

And if you’re on Reddit, feel free to tag me - I am /u/OpenSpartan (I only use Reddit for Halo-related conversations).