The Overwatch Farmer
Project

About


The Overwatch Workshop Farmer is a program created by Aud from Insights.gg designed to parse logs from Aud's Overwatch Workshop Farmer custom lobby code. This program was written as a prototype / experiment for what could be done with the Insights.gg Pro platform in the future regarding Overwatch; therefore it may be incredibly buggy / crash often. If it does you can bug Aud on discord (Aud#9488) or at aud@insights.gg. If you'd like to learn more about Insights and the tools they provide to esports professionals either click their logo on the left, the link I supplied earlier, or if you're lazy (god knows I am) click here. What this also means is that the program may never be finished, or changed entirely on a whim, a side effect of this project being an prototype / experiment.
That being said this program collects stats such as
  • Kills
  • Deaths
  • Ults casted
  • Key abilities casted
  • Damage done
  • Healing done done
from the Overwatch Custom Game Lobby system, by using a internal function called Log To Inspector. This function allows us to log anything within the game, to a console, and therefore a file- From there we take these files and parse them into data that we can perform analyses on. On this platform we allow you to upload those logs provided by the Overwatch Custom Game Lobby, parse them and aggregate them into a fight based system, where in which a fight is a period of time where in which two teams have committed resources trying to either defend or attack an objective.
Through this fight based system, beginner analysts can begin to make conclusions on the success rate of comps being ran, players being played, etc- Hence the time invested in providing the fight based system to users. Higher level analysts will simply take the logs provided by the console and make their conclusions about the data, without the use of this web platform, which is greatly encouraged.

Getting started


The process for using the platform is relatively simple: You'll first need to play a game of Overwatch using our custom lobby code (which can be found on the right), and upload those logs generated by the custom lobby to this site for parsation. You can see a video of this process (with an older version) here.

Getting the logs

  • First open up the Overwatch Client (duh lmao)
  • If this is your first time using the platform go to [your settings -> game play -> Enable Workshop Inspector] and turn on the workshop inspector feature AND INSPECTOR LOG FILE. This is what allows you to see the data logged out, and have it auto saved to a file Turning on the inspector
  • Then create a custom lobby using the lobby code provided above
  • Then run your scrims like usual... That's it!! OH! DO NOT, I REPEAT DO NOT OPEN THE INSPECTOR WHILE THE GAME IS IN PROGRESS UNLESS YOU WANT TO CRASH. (Blame magzie hehe)

Parsing the logs

  • By default all of your logs are saved in C:\Users\YOUR_USERNAME_GOES_HERE\Documents\Overwatch\Workshop, where YOUR_USERNAME_GOES_HERE is your windows username. For example mine is Aud, so my file location looks like C:\Users\Aud\Documents\Overwatch\Workshop
  • When you open that folder you should see a list of files like this (given you've played a game in the custom lobby, if not the files won't be there lol) NOTE I highly suggest ordering by Date Modified so you can tell which logs are which!!List of files
  • Navigate to the "Convert" section of the webapp in another tab of your browser, and upload them by clicking the upload button and selecting the files you wish to upload. You can also drag and drop your files into the Workshop Input card. Uploading files
  • Once you have selected your files, you can hit that big green upload button and get to uploading your data for analysis :D. Upload
  • Once your files have been uploaded and processed, you can analyze the file by clicking on the analysis button. This will take you to the analysis configuration page wherein which you'll select your players and other various settings for the analysis Click analyzeSetting up the analysis
  • After clicking the through the final menu, you'll be able to begin the analysis!! After some time it should finish, and you'll be able to download the files!! Don't worry, better systems of getting the data are coming but due to constraints with my health and work life I didn't have time to get those features out- They'll be out in the future though :) the final upload

So uh... now what?

Well uh... idk, the data is all yours! What you choose to do with it is up to you :) You can copy / download the CSVs exported and push them into Google Sheets or Microsoft Excel and start calculating numbers like some weird desk jockey if you'd really like :D. If you're a "software engineer" or "programmer" or "basement dweller who makes computers do neat things" go check out my API documentation!!! If you'd like to automate the process of uploading your logs to the OWF platform for analysis you can easily do that by making simple http post requests to my end points!

How it works


The introduction of Log to Inspector

On November the 17th of 2020, the Overwatch client got an update to its workshop system, that introduced a new feature called "Log To Inspector". Marketed as a way to debug custom games, it allows a custom game to log any value to an internal log collecter, and copy those logs to the clipboard so that they may be pasted to a file and reviewed.

TL;DR

In short, we use this function to log out internal values in a concept we call "events". We then take those events and parse / aggregate them on this site, to derive fight base statistics.

A long explanation

In long, when something occurs within an Overwatch game (a kill, ultimate cast, ability cast), we log that occurrence to the console in a format that is both understood by the user, and understood by a computer. But just raw events overtime doesn't tell us a whole lot about the game- I suppose you could go through and count all the times that Direwolf inted his brains out but that doesn't tell you a whole lot beyond the fact that he's bad, and it's data without context- Data existing for the sake of existing.
See a more useful stat would be, how often Direwolf ints when he's on Lucio on Kings Row. But you can't easily get that from a simple list of events, because events are just moments in time, with no real relation to each other. So we need to build those relationships, and we do so by creating a list of every fight that has occurred within a given round of Overwatch, and sort the events into those fights. Through those now sorted events we can now infer what map is being played, who's playing and what hero they're on. Then we can start to count the number of times that a player on [X] hero has died on [X] map by looking at the death events tied to a specific map.
Which not only allows us to answer the question before, but allows us to dig further into the context of these deaths and begin to create hypotheses as to Direwolf's inting. We could look at who else is dying in the fights, and at what point in time they're dying compared to Direwolf, and find out that he's the last person to die consistently when he's on Lucio on Kings, which may let us know that hey maybe Direwolf isn't actually inting at all.
Which is something you could never conclude sheerly based on the number of death events that the poor sod had on Lucio. So in order to allow you to achieve such understandings, we've created this website, which not only can convert these Event Logs exported from Custom Games to CSV (Allowing you poor spreadsheet jockies to begin analyzing data), but also converts these logs into a fight based context.

But more specifically how do we define fights?

In our case, a fight is defined as a period of time where in which two teams invest resources (cool downs is the easiest example) to achieve progress at either defending space, or taking space. But in order to sort our data into a fight based context for better understanding, we have to find out when those fights are occuring... so how do we go about that?
Well we use a DBSCAN Clustering algorithm to determine periods where in which events are clustered together, those periods of time are then marked as fights. At high levels of play, teammates group up and perform solid pushes as a unit, creating space of time where in which large conflicts are occuring, and periods of time where in which no conflict is occuring. This makes this algorithm the most optimal method of finding fights, however as Jack always yells at me about, there are better methods of finding fights, that involve looking at the derivative of global healing done and damage done, but in the Workshop's current state such algorithms are impossible to implement- However changes are on the horizon, and both Leguminote (the author of the fight detection algorithim) and I will pursue those methods of fight detection when we have the capacity to do so (probably 1 - 2 months after Beta release c:)

Credits


First off thank you to everyone who's contributed thus this far!!! Whether it be through discussions we've had, ideas you've sent or just straight up algorithms. I in no way, shape or form, could have gotten this far without your help- Hence why I rely on your feedback and thoughts heavily. I'm just one man I cannot do it all alone!!
But specifically thank you to
  • Mizzou's Direwolf, who showed me the patch notes teasing the release of the Log To Inspector tool, and our constant discussions on the subject as well discussions about other things.
  • Former HSL's Jack, who helped write the early alpha lobby code and provided constant feedback for the direction of the project and its founding principles
  • tOSU's Leguminote, who originally wrote the fight detection algorithm and has been helping me build the core ideas of this project ever since the closed alpha release
  • GZ Charge's Seabo, who's given me some insight to what analytics look like in OWL, as well as critical feature / design requests that help make this project greater than it was
  • HSL's Tschoschi, who not only started me on the path of OW analytics, and my career at Insights, but for providing wisdom and thoughtful feedback on core ideas for the project
  • Siege.gg's Jebb, for help with design concepts because I am not a very good designer (this webapp is proof pepelauf)
  • UCLA's Nav, for keeping me company during my late night work sessions and helping me ensure the webapp doesn't crash constantly
and all of the members of the Aud Inc server during the closed alpha's runtime who brought AMAZING ideas to the table, and shedded light on how they're looking to use the data in the future, (yeah I'm looking at you Proven the meme man with never ending ideas, Event who can't seem to understand the concept of sending one message at a time c; , Obasill who occasionally chimed in both in discord and twitch chat to give another view point on matters, providing us extra wisdom and information when we needed it most, and Shyam for a detailed look into his thought process on the platform and project as a whole )
And of course to the 20 teams from T2, T3 and collegiate who sat through my piss poor alpha stage, thank you so so so so much for not only sitting by while I hot fixed hundreds of bugs, but for even being willing to let me test my work with you.
Annnnnnnnnnnnnnnnnnnnnnnnnd finally the Insights.gg team- Without them, not only would this project be possible, but I wouldn't be here today. Steve, Stephen, Kevin and Jim have helped me grow so much in the last year with them, and I cannot thank them enough in the slightest for the wisdom they've bestowed upon me. I was gonna say something nice about Phillip but he keeps inting our Apex games so he doesn't get any D:<
Table of contents

About
How to use the platform
How the platform works
Credits
Lobby Codes

[LIVE] Converted Seita Lobby
KVKR7
[LIVE] Official Games Version
T1PHB
[PTR] Converted Seita Lobby
Z6XEJ
[PTR] Official Games Version
A7Y9N
[OPR] Converted Seita Lobby
--
[OPR] Official Games Version
--