{"id":20798147,"url":"https://github.com/samcfuchs/rocket-league","last_synced_at":"2025-09-14T14:58:43.785Z","repository":{"id":93775382,"uuid":"439676014","full_name":"Samcfuchs/Rocket-League","owner":"Samcfuchs","description":null,"archived":false,"fork":false,"pushed_at":"2021-12-19T03:51:46.000Z","size":113033,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-18T11:44:36.305Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Samcfuchs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-12-18T17:31:41.000Z","updated_at":"2021-12-19T03:51:49.000Z","dependencies_parsed_at":"2023-03-01T13:00:18.624Z","dependency_job_id":null,"html_url":"https://github.com/Samcfuchs/Rocket-League","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Samcfuchs%2FRocket-League","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Samcfuchs%2FRocket-League/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Samcfuchs%2FRocket-League/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Samcfuchs%2FRocket-League/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Samcfuchs","download_url":"https://codeload.github.com/Samcfuchs/Rocket-League/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243141240,"owners_count":20242819,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-17T16:36:45.955Z","updated_at":"2025-03-12T02:17:08.809Z","avatar_url":"https://github.com/Samcfuchs.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rocket League Replay Analytics\n\n## Get replay files\nReplay files are hosted on octane.gg, which links from ballchasing.com. \nThese should be loaded into ./replays (or a subfolder in there).\n\n## Parse replay files\nI use rrrocket. That seems to generate slightly more usable files. I can parse\nreplays with this command:\n\n    ./rrrocket -nm ./replays\n    mv **/*.json data\n\n## Parse rrrocket files to motion data\nI can do this with ./replayparser.py to get the data for any single rrrocket output\nfile. I'm working on pipelining this to gather multiple replays at once. I now\nhave megaparser.py which parses all of the json files in the toplevel of a\ndirectory and compiles them into a single output json file.\n\n## Understanding motion data\n\nIt seems like the positional data is stored on either of two scales: X can max\nout at either 109 or 11,909. This makes it...impossible to compare replays\nreliably? I think this might be a versioning thing--maybe new replays are on a\ndifferent scale from old ones.\n\nIt turns out all the replays from June are simply botched. So I'll have to throw\nthose out for analysis, probably. I could probably scale them to match, but the\nbigger question is whether it's really worth pushing forward with this\nparticular set of 45 replays. They're not that good, and I don't have a ton of\nfaith that a model could make sense of them. Importantly, they're in a lot of\ndifferent game modes, which probably makes this even more confusing. Ultimately,\nI should probably move over to analyzing RLCS replays instead.\n\nThere's still some unsolved data issues. First, I know for a fact that I'm not\nhandling overtimes correctly. The play up to 0 seconds is classified with\nwhoever wins the overtime, even though that point ends with a no-decision and\nthe overtime starts in a different play.\n\nSecond, there are a bunch of points that end with the ball just in the middle\nof the field. There are two cases where this makes sense (end of regular time, forfeit).\nThis is possible since the way we define `pts`, those plays are part of a new\npoint that just doesn't end with a winner, and we assign them the class 0.5. But\nwe also see some of these points which are assigned a winning team. That seems\nvery wrong. If the ball doesn't end in the goal, how can a team have scored?\n\nI think I've gotten to the point where I just need a better dataset. These are\nreplays from many different modes, versions of the game, etc. so the projectp\nwill probably develop better on a better dataset, i.e. pro replays.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamcfuchs%2Frocket-league","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsamcfuchs%2Frocket-league","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamcfuchs%2Frocket-league/lists"}