About

This is a blog about Dota 2 matches, built from the actual data of the games rather than memory or vibes.

Every post here starts the same way: a replay file, run through a custom parser (manta) that reads the match’s full combat log and entity snapshots and rebuilds what happened tick by tick — who killed whom and when, when towers and Roshan fell, who claimed first blood, and most of what the in-client scoreboard shows. Nothing here is typed from memory after the fact. If a stat appears in a post, it was pulled from the replay itself.

Most posts are about my own games, played as shebelongstoheaven, written in the first person because I was there and have opinions about what went wrong (usually a lot). Some posts are about matches I wasn’t in at all — just a replay worth writing up because the game itself told an interesting story. Either way, the numbers are real. The narration is not always flattering.

What each post actually contains

The recap chart at the top of a match post is a timeline built from the raw combat log: every kill and death plotted against match time, first blood marked separately from the rest, Roshan fights and structure kills called out where they mattered to the result. Below that, a scoreboard reconstructed the same way — kills, deaths, assists, level, last hits and denies, hero damage dealt and taken, tower damage, healing, and teamfight participation, all summed directly from combat log entries rather than read off a summary screen.

Not every number survives that process. Some replays have gaps — a stretch where a hero’s damage reads suspiciously low, or an economy stat (gold and experience per minute, net worth) that the parser just can’t recover cleanly from this particular game’s log. When that happens, the post says so, or leaves the column out, rather than guessing or padding it with a number from somewhere else. A parsed replay that’s honest about its limits is more useful than a scoreboard that looks complete and isn’t.

Why bother

Because “I played badly” and “I went 3/16/18 as Pudge while my team’s Anti-Mage quietly took every building on the map” are different sentences, and only one of them is actually interesting. The scoreboard at the end of a Dota game compresses fifty minutes of decisions into a handful of numbers; pulling those numbers back out of the replay — properly, from the source, not from what I remember feeling like at the time — is usually the only way to find out what the game actually was.


Built with a custom WordPress theme, a Go-based replay parser, and more SQL than any of this really warranted.