Original Post — Direct link

In an effort to quickly mature Valorant's eSport community I believe that additional access to player's performance needs to be addressed in beta so that once the game is published an API is already part of the game. The goal of the API would be to enable coaches to get data directly from each client in a object that facilitates trend analysis.

Ideally, it would require minimal upkeep in the future on Riot's behalf and give insight into the game that was recently played without causing an unnecessary strain on Riot's servers. All of this needs to be done in a secure manner so that players do not gain knowledge of the enemy team until after the match is over.

In order to keep filesize small I propose every .5 seconds or 1 second record the following:

  1. The map coordinate system is simplified each player's coordinates are saved in x,y,z as 2 bytes each. That's 6 bytes total. This allows the current x,y,z to be

  2. Player's inventory is tracked / money and saved along with their coordinates 14 bits for money, each class has an enum for inventory data. I'm gonna use Jet as an example:

    3 cloudburst

    2 updraft

    1 tailwind

    1 ult

    7 bits

    So the player inventory, disregarding armor and weapons, is going to be tracked with ~20 bits. Call it 24 bits for future expansion.

  3. We need to track health and 7 bits for hp, 6 bits for armor = 13 bits total here.

  4. We'll need to track what the players weapons are, and ammo. 9 bits for ammo for the primary. 7 bits for secondary and 5 bits for each slot "which weapon" 26 bits total.

That's 111 bits. Lets make it nice and round and go with 128 bits per player per second. This gives us room for future expansion stuff. 10 players = 1280 bits for statusing per second. Assuming a 40 minute game: 3072000 bits or 384kb for status for the GAME.

What else is there?:

  1. Where are the smokes / walls? I believe those also can be saved in a small format that show up as events. Should be relatively small as well.

    To accomplish this, we tag each non-bullet projectile with "what it is", and "where is it", "is it active" going through all the cases will take some time, but it only needs to be done once. Then you define that format.

  2. We also need to track the spike. location, and if its held or activated or dropped, countdown, exploded.

  3. Who hit who? Where were they hit? I think this can be saved relatively easily as well as an event. Most kills take no more than 7 shots. Even if you tracked hit location with 4 bits

How to avoid cheating:

If all of this information is given to the players at the end of each round, that's not good. People will parse the information by round and then gain insight into the other team in slightly delayed time. Therefore the server is going to need to have to save this data per match and then only send the information to the players that request it. Because most players won't care about this, you can throw it into the bottom of the settings menu and only send that information to the players that want it. I believe that this level of detail allows players to use quantitative data to improve while also not giving other people enough information to DIRECTLY mimic a pro player. Therefore some strategies will remain secret. By storing it in binary format Riot is able to save space on the server and in bandwidth. It encourages the creation of third party tools and websites while making it easy for Riot to maintain. All they would need to do is publish the "This is the bit format we use to save the data."

Xyf#1337 on discord if you have questions, concerns, complaints. I will update this post.

External link →
about 4 years ago - /u/ZealousApathy - Direct link

Thanks for putting so much thought into this! We're definitely going to allow third parties to access data such as this, though we haven't decided on exactly how it will look. You've pointed out some pretty relevant concerns, and we'll also have to think about retention policies, etc. Stay tuned!

about 4 years ago - /u/ZealousApathy - Direct link

Originally posted by warchamp7

Gonna piggyback off this post and ask for Riot to take a look at CS:GO's GameState Integration

https://developer.valvesoftware.com/wiki/Counter-Strike:_Global_Offensive_Game_State_Integration

This is present in both CSGO and Dota and is super useful for a large number of broadcast production use cases

Oh that's cool! I was thinking about something similar to drive esports broadcasts, Twitch overlays, etc. Good to have a reference point from CSGO.